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

📄 walkmenu_set.c

📁 操作系统SunOS 4.1.3版本的源码
💻 C
📖 第 1 页 / 共 2 页
字号:
#ifndef lint#ifdef sccsstatic	char sccsid[] = "@(#)walkmenu_set.c 1.1 92/07/30 Copyright 1985 Sun Micro";#endif#endif/* * Copyright (c) 1985 by Sun Microsystems, Inc. *//*-	WALKING MENU PACKAGE	walkmenu_set.c, Sun Jun 30 15:38:39 1985		Craig Taylor,		Sun Microsystems *//* ------------------------------------------------------------------------- */#include <sys/types.h>#include <stdio.h>#include <varargs.h>#include <pixrect/pixrect.h>#include <pixrect/pixfont.h>#include <pixrect/pr_util.h>#include <pixrect/memvar.h>#include <sunwindow/sun.h> /* for LINT_CAST */#include <suntool/walkmenu_impl.h>/* ------------------------------------------------------------------------- *//*  * Public */    /* None *//*  * Package private */Pkg_extern	struct menu_item *menu_create_item_avlist();Pkg_extern	struct menu_ops_vector menu_ops;Pkg_extern	struct menu_ops_vector menu_item_ops;/* Pullright arrow pixrect.  This really is Pkg_private despite mpr_static. */Private		short arrow_data[] = {/*  0x0200, 0x0300, 0x7E80, 0x00C0, 0x7E80, 0x0300, 0x0200, 0x0000 (width=12) */    0x0080, 0x00C0, 0x1FA0, 0x0030, 0x1FA0, 0x00C0, 0x0080, 0x0000};Private		mpr_static(menu_arrow_pr, 14, 8, 1, arrow_data);Pkg_private	void menu_sets();Pkg_private	void menu_item_sets();Pkg_private	void menu_destroys();Pkg_private	void menu_item_destroys();/*  * Private */Private		int extend_item_list();Private		int remove_item();Private		int replace_item();Private		int insert_item();Private		int lookup();/*  * Private defs */    /*  None *//* ------------------------------------------------------------------------- */Pkg_private voidmenu_sets(m, attrs)	register struct menu *m;	register Menu_attribute *attrs;{       for (; *attrs; attrs = menu_attr_next(attrs))	switch (attrs[0]) {	  case MENU_ACTION_IMAGE:	  case MENU_ACTION_ITEM:	  case MENU_GEN_PULLRIGHT_IMAGE:	  case MENU_GEN_PULLRIGHT_ITEM:	  case MENU_GEN_PROC_IMAGE:	  case MENU_GEN_PROC_ITEM:	  case MENU_IMAGE_ITEM:	  case MENU_PULLRIGHT_IMAGE:	  case MENU_PULLRIGHT_ITEM:	  case MENU_STRING_ITEM:	    if (m->nitems < m->max_nitems || extend_item_list(m)) {		m->item_list[m->nitems++] = (struct menu_item *)LINT_CAST(		    menu_create_item(LINT_CAST(MENU_RELEASE),				     attrs[0], attrs[1], attrs[2], 0));	    }	    break;	  case MENU_APPEND_ITEM:	    if (m->nitems < m->max_nitems || extend_item_list(m))		m->item_list[m->nitems++] = (struct menu_item *)attrs[1];	    break;	    	  case MENU_BOXED:	    (void) image_set(&m->default_image, IMAGE_BOXED, attrs[1], 0);	    break;	  case MENU_CENTER:	    (void) image_set(&m->default_image, IMAGE_CENTER, attrs[1], 0);	    break;	    	  case MENU_CLIENT_DATA:	    m->client_data = (caddr_t)attrs[1];	    break;	    	  case HELP_DATA:	    m->help_data = (caddr_t)attrs[1];	    break;	    	  case MENU_COLUMN_MAJOR:	    m->column_major = (int)attrs[1];	    break;	    	  case MENU_DEFAULT:	    m->default_position = (int)attrs[1];	    break;	    	  case MENU_DEFAULT_ITEM:	    m->default_position = lookup(m->item_list, m->nitems,					(struct menu_item *)LINT_CAST(attrs[1]));	    break;	    	  case MENU_DEFAULT_IMAGE:	    if (attrs[1]) m->default_image = *(struct image *)attrs[1];	    break;	    	  case MENU_DEFAULT_SELECTION:	    m->default_selection = (Menu_attribute)attrs[1];	    break;	    	  case MENU_FONT:	    (void) image_set(&m->default_image, IMAGE_FONT, attrs[1], 0);	    break;	  case MENU_GEN_PROC:	    m->gen_proc = (struct menu *(*)())attrs[1];	    break;	  case MENU_HEIGHT:	    m->height = (int)attrs[1];	    break;	    	  case MENU_IMAGES:	    {   		char **a = (char **)&attrs[1];		while (*a) {		    if (m->nitems < m->max_nitems || extend_item_list(m)) {			m->item_list[m->nitems] = (struct menu_item *)LINT_CAST(				menu_create_item(LINT_CAST(MENU_RELEASE),				    MENU_IMAGE_ITEM, *a++, m->nitems + 1, 0));		    }		    m->nitems++;		}	    }	    break;	    	  case MENU_INITIAL_SELECTION:	  /* case MENU_ACCELERATED_SELECTION: Obsolete */	    m->initial_selection = (Menu_attribute)attrs[1];	    break;	    	  case MENU_INITIAL_SELECTION_EXPANDED:	    m->display_one_level = !(int)attrs[1];	    break;	    	  case MENU_INITIAL_SELECTION_SELECTED:	    m->stand_off = !(int)attrs[1];	    break;	    	  case MENU_JUMP_AFTER_SELECTION:	    m->jump_after_selection = (int)attrs[1];	    break;	  case MENU_JUMP_AFTER_NO_SELECTION:	    m->jump_after_no_selection = (int)attrs[1];	    break;	  case MENU_INSERT:	    if (++m->nitems < m->max_nitems || extend_item_list(m)) {		if (!insert_item(m->item_list, m->nitems,				 (int)attrs[1], (struct menu_item *)attrs[2]))		    --m->nitems;	    }	    break;	    	  case MENU_INSERT_ITEM:	    if (++m->nitems < m->max_nitems || extend_item_list(m)) {		if (!insert_item(m->item_list, m->nitems,			    lookup(m->item_list, m->nitems,				   (struct menu_item *)LINT_CAST(attrs[1])),			    (struct menu_item *)attrs[2]))		    --m->nitems;	    }	    break;	    	  case MENU_ITEM:	    if (m->nitems < m->max_nitems || extend_item_list(m)) {		m->item_list[m->nitems] = menu_create_item_avlist(&attrs[1]);	    }	    (void)menu_set((caddr_t)m->item_list[m->nitems++], MENU_RELEASE, 0);	    break;	    	  case MENU_LEFT_MARGIN:	    (void) image_set(&m->default_image, IMAGE_LEFT_MARGIN, attrs[1], 0);	    break;	    	  case MENU_MARGIN:	    (void) image_set(&m->default_image, IMAGE_MARGIN, attrs[1], 0);	    break;	    	  case MENU_NCOLS:	    m->ncols = imax(0, (int)attrs[1]);	    break;	  case MENU_NROWS:	    m->nrows = imax(0, (int)attrs[1]);	    break;	  case MENU_NOTIFY_PROC:	    m->notify_proc = (caddr_t (*)())attrs[1];	    if (!m->notify_proc) m->notify_proc = MENU_DEFAULT_NOTIFY_PROC;	    break;	    	  case MENU_PULLRIGHT_DELTA:	    m->pullright_delta = (int)attrs[1];	    if (m->pullright_delta < 0)		m->pullright_delta = MENU_DEFAULT_PULLRIGHT_DELTA;	    break;	    	  case MENU_REMOVE:	    if (remove_item(m->item_list, m->nitems, (int)attrs[1]))		--m->nitems;	    break;	    	  case MENU_REMOVE_ITEM:	    if (remove_item(m->item_list, m->nitems, 			    lookup(m->item_list, m->nitems,				   (struct menu_item *)LINT_CAST(attrs[1]))))	    --m->nitems;	    break;	    	  case MENU_REPLACE:	    (void) replace_item(m->item_list, m->nitems, (int)attrs[1],			 (struct menu_item *)LINT_CAST(attrs[2]));	    break;	    	  case MENU_REPLACE_ITEM:	    (void) replace_item(m->item_list, m->nitems,			 lookup(m->item_list, m->nitems,				(struct menu_item *)LINT_CAST(attrs[1])),			 (struct menu_item *)LINT_CAST(attrs[2]));	    break;	    	  case MENU_RIGHT_MARGIN:	    (void)image_set(&m->default_image, IMAGE_RIGHT_MARGIN, attrs[1], 0);	    break;	    	  case MENU_SELECTED:	    m->selected_position = (int)attrs[1];	    break;	    	  case MENU_SELECTED_ITEM:	    m->selected_position = lookup(m->item_list,m->nitems,					(struct menu_item *)LINT_CAST(attrs[1]));	    break;	    	  case MENU_SHADOW:	    m->shadow_pr = (struct pixrect *)attrs[1];	    break;	    	  case MENU_STAY_UP:	    m->stay_up = (int)attrs[1];	    break;	    	  case MENU_STRINGS:	    {   		char **a = (char **)&attrs[1];		while (*a) {		    if (m->nitems < m->max_nitems || extend_item_list(m)) {			m->item_list[m->nitems] = (struct menu_item *)			  LINT_CAST(menu_create_item(LINT_CAST(MENU_RELEASE),				    MENU_STRING_ITEM, *a++, m->nitems + 1, 0));		    }		    m->nitems++;		}	    }	    break;	    	  case MENU_TITLE_ITEM:	  case MENU_TITLE_IMAGE:	    if (m->nitems < m->max_nitems || extend_item_list(m))		m->item_list[m->nitems++] = (struct menu_item *)LINT_CAST(		    menu_create_item(LINT_CAST(((MENU_TITLE_ITEM == attrs[0])				     ? MENU_STRING : MENU_IMAGE)), attrs[1], 				     MENU_INVERT, TRUE, MENU_FEEDBACK, FALSE,				     MENU_BOXED, TRUE, MENU_RELEASE,				     MENU_NOTIFY_PROC, menu_return_no_value,				     0));	    break;	  case MENU_VALID_RESULT:	    m->valid_result = (int)attrs[1];	    break;	    	  case MENU_WIDTH:	    m->width = (int)attrs[1];	    break;	  case MENU_LINE_AFTER_ITEM:	    switch ((int)attrs[1])  {	       case MENU_HORIZONTAL_LINE: 	           m->h_line = 1;		   break;	       case MENU_VERTICAL_LINE:	           m->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:

⌨️ 快捷键说明

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