⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 walkmenu_set.c

📁 操作系统SunOS 4.1.3版本的源码
💻 C
📖 第 1 页 / 共 2 页
字号:
	    break;		  default:	    if (ATTR_PKG_MENU == ATTR_PKG(attrs[0]))		(void) fprintf(stderr,			"menu_set:  Menu attribute not allowed.\n%s\n",			attr_sprint((caddr_t)NULL, (u_int)attrs[0]));		break;	    	}}Pkg_private voidmenu_item_sets(mi, attrs)	register struct menu_item *mi; 	register Menu_attribute *attrs;{       for (; *attrs; attrs = menu_attr_next(attrs))	switch (attrs[0]) {	  case MENU_ACTION: /* & case MENU_NOTIFY_PROC: */	    mi->notify_proc = (caddr_t (*)())attrs[1];	    break;	  case MENU_ACTION_ITEM:	    (void) image_set(mi->image, IMAGE_STRING, attrs[1], 0);	    mi->notify_proc = (caddr_t (*)())attrs[2];	    break;	  case MENU_STRING_ITEM:	    (void) image_set(mi->image, IMAGE_STRING, attrs[1], 0);	    mi->value = (caddr_t)attrs[2];	    break;	  case MENU_ACTION_IMAGE:	    if (IMAGE_P(attrs[1])) { /* Fixme:  Image pkg should do this? */		image_destroy(mi->image); /* Fixme:  If attrs[] == NULL ?? */		mi->image = (struct image *)attrs[1];	    } else if (mi->image) {		(void) image_set(mi->image, IMAGE_PIXRECT, attrs[1], 0);	    }	    mi->notify_proc = (caddr_t (*)())attrs[2];	    break;	  case MENU_IMAGE_ITEM:	    (void) image_set(mi->image, IMAGE_PIXRECT, attrs[1], 0);	    mi->value = (caddr_t)attrs[2];	    break;	  case MENU_BOXED:	    (void) image_set(mi->image, IMAGE_BOXED, attrs[1], 0);	    break;	  case MENU_CENTER:	    (void) image_set(mi->image, IMAGE_CENTER, attrs[1], 0);	    break;	    	  case MENU_CLIENT_DATA:	    mi->client_data = (caddr_t)attrs[1];	    break;	    	  case HELP_DATA:	    mi->help_data = (caddr_t)attrs[1];	    break;	    	  case MENU_FEEDBACK:	    mi->no_feedback = !(int)attrs[1];	    break;	    	  case MENU_FONT:	    (void) image_set(mi->image, IMAGE_FONT, attrs[1], 0);	    break;	  case MENU_GEN_PROC:	    mi->gen_proc = (struct menu_item *(*)())attrs[1];	    break;	  case MENU_GEN_PROC_IMAGE:	    if (IMAGE_P(attrs[1])) { /* Fixme:  Image pkg should do this? */		image_destroy(mi->image);		mi->image = (struct image *)attrs[1];	    } else {		(void) image_set(mi->image, IMAGE_PIXRECT, attrs[1], 0);		(void) image_set(mi->image, IMAGE_RIGHT_PIXRECT,				 &menu_arrow_pr, 0);	    }	    mi->gen_proc = (struct menu_item *(*)())attrs[2];	    break;	  case MENU_GEN_PROC_ITEM:	    (void) image_set(mi->image, IMAGE_STRING, attrs[1], 0);	    (void) image_set(mi->image, IMAGE_RIGHT_PIXRECT, &menu_arrow_pr, 0);	    mi->gen_proc = (struct menu_item *(*)())attrs[2];	    break;	    	  case MENU_GEN_PULLRIGHT:	    mi->gen_pullright = (struct menu *(*)())attrs[1];	    mi->pullright = mi->gen_pullright != NULL;	    (void) image_set(mi->image, IMAGE_RIGHT_PIXRECT,		      mi->pullright ? &menu_arrow_pr : NULL, 		      0);	    break;	  case MENU_GEN_PULLRIGHT_IMAGE:	    if (IMAGE_P(attrs[1])) { /* Fixme:  Image pkg should do this? */		image_destroy(mi->image);		mi->image = (struct image *)attrs[1];	    } else {		(void) image_set(mi->image, IMAGE_PIXRECT, attrs[1], 0);		(void) image_set(mi->image, IMAGE_RIGHT_PIXRECT,				 &menu_arrow_pr, 0);	    }	    mi->gen_pullright = (struct menu *(*)())attrs[2];	    mi->pullright = mi->gen_pullright != NULL;	    mi->value = 0;	    break;	  case MENU_GEN_PULLRIGHT_ITEM:	    (void) image_set(mi->image, IMAGE_STRING, attrs[1], 0);	    (void) image_set(mi->image, IMAGE_RIGHT_PIXRECT, &menu_arrow_pr, 0);	    mi->gen_pullright = (struct menu *(*)())attrs[2];	    mi->pullright = mi->gen_pullright != NULL;	    mi->value = 0;	    break;	    	  case MENU_IMAGE:	    if (IMAGE_P(attrs[1])) { /* Fixme:  Image pkg should do this? */		image_destroy(mi->image);		mi->image = (struct image *)attrs[1];	    } else {		(void) image_set(mi->image, IMAGE_PIXRECT, attrs[1], 0);	    }	    break;	  case MENU_INACTIVE:	    mi->inactive = (int)attrs[1];	    break;	  case MENU_INVERT:	    (void) image_set(mi->image, IMAGE_INVERT, attrs[1], 0);	    break;	    	  case MENU_LEFT_MARGIN:	    (void) image_set(mi->image, IMAGE_LEFT_MARGIN, attrs[1], 0);	    break;	    	  case MENU_MARGIN:	    (void) image_set(mi->image, IMAGE_MARGIN, attrs[1], 0);	    break;	    	  case MENU_PULLRIGHT:	    mi->value = (caddr_t)attrs[1];	    mi->pullright = mi->value != NULL;	    (void) image_set(mi->image, IMAGE_RIGHT_PIXRECT,		      mi->pullright ? &menu_arrow_pr : NULL,		      0);	    break;	  case MENU_PULLRIGHT_IMAGE:	    if (IMAGE_P(attrs[1])) { /* Fixme:  Image pkg should do this? */		image_destroy(mi->image);		mi->image = (struct image *)attrs[1];	    } else if (mi->image) {		(void) image_set(mi->image, IMAGE_PIXRECT, attrs[1], 0);		(void) image_set(mi->image, IMAGE_RIGHT_PIXRECT,				 &menu_arrow_pr, 0);	    }	    mi->value = (caddr_t)attrs[2];	    mi->pullright = mi->value != NULL;	    break;	  case MENU_PULLRIGHT_ITEM:	    (void) image_set(mi->image, IMAGE_STRING, attrs[1], 0);	    (void) image_set(mi->image, IMAGE_RIGHT_PIXRECT, &menu_arrow_pr, 0);	    mi->value = (caddr_t)attrs[2];	    mi->pullright = mi->value != NULL;	    break;	  case MENU_RELEASE:	    mi->free_item = TRUE;	    break;	    	  case MENU_RELEASE_IMAGE:	    if (mi->image) {		/* FIXME: Someday this should separate the 2 cases. */		mi->image->free_string = TRUE;		mi->image->free_pr = TRUE;	    }	    break;	    	  case MENU_RIGHT_MARGIN:	    (void) image_set(mi->image, IMAGE_RIGHT_MARGIN, attrs[1], 0);	    break;	    	  case MENU_SELECTED:	    mi->selected = (int)attrs[1];	    break;	    	  case MENU_STRING:	    (void) image_set(mi->image, IMAGE_STRING, attrs[1], 0);	    break;	    	  case MENU_VALUE:	    mi->value = (caddr_t)attrs[1];	    mi->pullright = FALSE;	    (void) image_set(mi->image, IMAGE_RIGHT_PIXRECT, NULL, 0);	    break;	  case MENU_LINE_AFTER_ITEM:	    switch ((int)attrs[1])  {	       case MENU_HORIZONTAL_LINE: 	           mi->h_line = 1;		   break;	       case MENU_VERTICAL_LINE:	           mi->v_line = 1;		   break;	       default:	           (void) fprintf(stderr,		   	"Invalid argument for attribute MENU_LINE_AFTER_ITEM: %d\n",(int)attrs[1]);	    }	    break;		   	    	  case MENU_NOP:	    break;		  default:	    if (ATTR_PKG_MENU == ATTR_PKG(attrs[0]))		(void) fprintf(stderr,			"menu_set(item):  Menu attribute not allowed.\n%s\n",			attr_sprint((caddr_t)NULL, (u_int)attrs[0]));		break;	}}Pkg_private voidmenu_destroys(m, destroy_proc)	register struct menu *m;	void (*destroy_proc)();{       register struct menu_item *mi;        if (!m) return;    for (; m->nitems-- > 0;) {	mi = m->item_list[m->nitems];	if (mi->pullright && !mi->gen_pullright && mi->value)	    menu_destroys((struct menu *)LINT_CAST(mi->value), destroy_proc);	menu_item_destroys(mi, destroy_proc);    }    free((caddr_t)m->item_list);    if (destroy_proc) destroy_proc(m, MENU_MENU);    free((caddr_t)m);}Pkg_private voidmenu_item_destroys(mi, destroy_proc)	register struct menu_item *mi;	void (*destroy_proc)();{    if (!mi || !mi->free_item) return;    image_destroy(mi->image);    if (destroy_proc) destroy_proc(mi, MENU_ITEM);    free((caddr_t)mi);}Private intextend_item_list(m)	register struct menu *m;{    extern caddr_t realloc();    m->max_nitems =  m->max_nitems + MENU_FILLER;    m->item_list = (struct menu_item **)LINT_CAST(realloc(      (caddr_t)m->item_list,      (u_int)(m->max_nitems * sizeof(struct menu_item *))));    if (!m->item_list) {	(void) fprintf(stderr,		       "menu_set: Malloc failed to allocate an item list.\n");	perror("menu_set");	m->max_nitems =  m->max_nitems - MENU_FILLER;	return FALSE;    }    return TRUE;}Private intremove_item(il, len, pos)	register struct menu_item *il[];{    register int i;    if (pos < 1 || pos > len) return FALSE;    for (i = pos; i < len; i++) il[i - 1] = il[i];    return TRUE;}Private intreplace_item(il, len, pos, mi)	struct menu_item *il[], *mi;{    if (pos < 1 || pos > len) return FALSE;    il[pos - 1] = mi;    return TRUE;}Private intinsert_item(il, len, pos, mi)	register struct menu_item *il[];	struct menu_item *mi;{    register int i;    if (pos < 0 || pos >= len) return FALSE;    for (i = len - 1; i > pos; --i) il[i] = il[i - 1];    il[i] = mi;    return TRUE;}Private intlookup(il, len, mi)	register struct menu_item *il[];	struct menu_item *mi;{    int i;        for (i = 0; i < len; i++) if (il[i] == mi) return i + 1;    return -1;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -