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

📄 defaultsedit.c

📁 操作系统SunOS 4.1.3版本的源码
💻 C
📖 第 1 页 / 共 5 页
字号:
				    intvalue, strvalue2);			    defaults_set_enumeration(nodename, strvalue2, (int *)NULL);			    if (defobjptr->nodename!=NULL) {		                subtree_copy(defobjptr->nodename, nodename);			        defaults_set_enumeration(nodename, strvalue2,					(int *)NULL);			        defaults_move(getnodename_defobj(prevobjptr),					nodename, False, (int *)NULL);			        defaults_remove(defobjptr->nodename, (int *)NULL);			    } else  {			        defaults_move(getnodename_defobj(prevobjptr),					nodename, False, (int *)NULL);			    }			}		    }		}		break;		case Undefined:		break;	/* Do nothing */			   	default: /* Do nothing */		break;	    }	   prevobjptr = defobjptr;	   defobjptr = defobjptr->nodenext;	}    /* If there is an helpstring displayed, store this helpstring in the       database *//****  Commented out in order to not allow helptext editing in defaultsedit    helpobjptr = (Defobj)panel_get(helpdisplayitem, PANEL_CLIENT_DATA);    if (! strequal(helpobjptr->nodename, "")) {        (void)strcpy(fullname, helpobjptr->nodename);	(void)strcat(fullname, "/$Help");	helpstr = (char*)panel_get_value(helpdisplayitem);	if (strequal(helpstr, "")) {            if (store_panel_values) {	        defaults_remove(fullname, (int *)NULL);	    }            changedflg = True;	} else if (!strequal(helpstr, nohelpavail)){            if (store_panel_values) {	        (void)convert_string(helpstr, helpstr2);	        defaults_set_string(fullname, helpstr2, (int *)NULL);    	    }	    changedflg = True;	}    }****/        /*  Now we have to set the changed flag for special format programs  */    progname_pos = member_pos(get_cur_progname(), specformatnames);    if (progname_pos != -1) {	specformatnames[progname_pos]->changed = changedflg;    }    Debug(if (t_subtree_extractinfo)	    printf("<subtree_extractinfo: store_panel_values=%d changedflg=%d> ",    	    store_panel_values,changedflg);)    return changedflg;}/* * Display all information from the defaults database * for the currently selected program. * This information is displayed in the treepanel. * All panel items are created from scratch. */static voidsubtree_show(){   	char	namenode[DE_FULLNAME_MAX_LENGTH];	char	childforkname[DE_FULLNAME_MAX_LENGTH];	char	buttontext[DE_FULLNAME_MAX_LENGTH];	char	accessname[DE_FULLNAME_MAX_LENGTH];	Bool	flg;	firstdefobj = NULL;	lastinserteddefobj = NULL;	last_clicked_defobj = NULL;	show_message((char *)NULL, "", "");	(void)panel_paint(treepanel, PANEL_CLEAR);	(void)strcpy(namenode, get_cur_progname());	/* Check if subtree has info stored in spec format, like .mailrc */	flg = specialformat_to_defaults(namenode);	if (flg != True) return; /* Return if not successful conversion */	(void)strcpy(accessname, namenode);    /* Set scrollbar position to zero */    	(void)scrollbar_set((Scrollbar)(LINT_CAST(			panel_get(treepanel, PANEL_VERTICAL_SCROLLBAR))), 		SCROLL_VIEW_START, 0,        	SCROLL_REQUEST_MOTION,	SCROLL_ABSOLUTE,		0);    	(void)win_post_id_and_arg(treepanel, SCROLL_REQUEST, NOTIFY_SAFE,            panel_get(treepanel, PANEL_VERTICAL_SCROLLBAR), NOTIFY_COPY_NULL,	    NOTIFY_RELEASE_NULL);    	subtree_showitems(accessname, False);	(void)strcat(namenode, "/$Setup_program");	if (defaults_exists(namenode, (int *)NULL)) { 	    (void)strcpy(childforkname, defaults_get_string(namenode, "", (int *)NULL));	    (void)strcpy(buttontext, "Click to start setup program: ");	    (void)strcat(buttontext, childforkname);	    (void)panel_create_item(treepanel, PANEL_BUTTON,	 	PANEL_FEEDBACK,		PANEL_INVERTED,		PANEL_NOTIFY_PROC,	tree_runsetup_notifyproc, 		PANEL_LABEL_IMAGE, 		    panel_button_image(treepanel,buttontext,0,(Pixfont *)NULL),		PANEL_CLIENT_DATA,	NULL,		0);	    cur_ylinenr = cur_ylinenr+1;	}    	(void)panel_paint(treepanel, PANEL_CLEAR);}/* * Do a preorder traversal of the defaults database subtree denoted * by nodename, and display all leaf nodes, or intermediate nodes * with values. Display nodes as text items or choice items. */static voidsubtree_showitems(nodename, showparentflg)	char*	nodename;	/* Full name of node to show data from */	Bool	showparentflg;	/* if Not showparentflg, do not make */				/*  a panel_item out of nodename */{	char	sibling[DE_FULLNAME_MAX_LENGTH];	Defaulttype type;	/* Enumerate or String type defaults node */	if (nodename == NULL)  		return;	type = get_nodetype(nodename);	if (type==Message) {		showitem(nodename, Message);		return;	}	if (showparentflg) {	    if (type==Enumerate) {		showitem(nodename, type);		return;	    } else {		showitem(nodename, type);	    }	}	deflt_get_fullchild(nodename, sibling);	while (sibling!= NULL && strlen(sibling) != 0) {		subtree_showitems(sibling, True);		deflt_get_fullsibling(nodename, sibling, sibling);	}}static Booldisplayable_node(nodename)/* * Returns TRUE if node with name nodename is a node which is to be displayed. * Nodenames containing $ are not displayable nodes: /fum/$Help, /fie/$Fum * Otherwise, a displayable node is a leaf node or an intermediate level * node with a non-empty string standard value or user-assigned value. * A leaf node is a node which does not have any non-dollar children. */    char*   nodename;{    int	    nch;    char    childname[DE_FULLNAME_MAX_LENGTH];    int	    nodenamelen1;    for (nch=strlen(nodename)-1; nch>0; nch--) {	if (nodename[nch]=='/' ) {	    if (nodename[nch+1]=='$') return False;	    else break;	}    }    if (   ! strequal(defaults_get_default(nodename, "", (int *)NULL), DEFAULTS_UNDEFINED)	|| ! strequal(defaults_get_string(nodename, "", (int *)NULL), DEFAULTS_UNDEFINED) ) return True;    nodenamelen1 = strlen(nodename)+1;    deflt_get_fullchild(nodename, childname);    while (!strequal(childname, "") ) {    	if (childname[nodenamelen1] != '$') 	    return False;   /* This node has non-dollar child */	deflt_get_fullsibling(nodename, childname, childname);    }    return True;	    /* This node is a proper leaf node */}/* * Retrieve standard value from master_defaults for nodename. * Store it into standardval,  which is a pointer to a string area. */static char*get_standard_valuestr(nodename, standardval)	char*	nodename;	/* full_name of a node */	char*	standardval;	/* pointer to string area for standard value */{	char*	tmp;	if (nodename == NULL) {	    (void)strcpy(standardval, "");	} else if (defaults_exists(nodename, (int *)NULL)) {	    tmp = defaults_get_default(nodename, "", (int *)NULL);	    (void)strcpy(standardval, tmp);	}	return standardval;}/* * Create and initialize a default panel object,  which groups several * panel items together. * There are text panel objects and enumeration panel objects. * Each of these contains several panel items * Each tree panel item points to an instance of */static Defobjcreate_defobj(nodename, objtype)    char*   nodename;    Defaulttype	objtype;{	Defobj	defobjptr;	defobjptr = (Defobj)(LINT_CAST(get_memory(sizeof *defobjptr)));	defobjptr->nodetype = objtype;	defobjptr->nodename = strcpy(getchars(strlen(nodename)), nodename);	defobjptr->nodenext = NULL;	defobjptr->ilabel = NULL;	defobjptr->ivalue = NULL;	defobjptr->specifichelp = False;	return defobjptr;}/* * free memory occupied by defaults object and associated data. */static voidfreemem_defobj(defobjptr)    Defobj  defobjptr;{    if   (defobjptr->nodetype==Enumerate ||	  defobjptr->nodetype==Editenumerate) {	(void)panel_free(defobjptr->ilabel);	(void)panel_free(defobjptr->ivalue);	(void)panel_free(defobjptr->ifill1);    } else if (defobjptr->nodetype==String ||	       defobjptr->nodetype==Editstring) {	(void)panel_free(defobjptr->ilabel);	(void)panel_free(defobjptr->ivalue);    }    free_mem((int)defobjptr->nodename);    free_mem((int)defobjptr);}/* * Display defaults node with name nodename on the tree panel. */static voidshowitem(nodename, type)    char*   nodename;    Defaulttype    type;{    int	    ycoord;    char*   labelptr;    Defobj  defobjptr;        if (type==String && !displayable_node(nodename)) return;        labelptr =  nodename+strlen(get_cur_progname())+1;    /* add one pixel to avoid starting at pixel zero */    ycoord = PANEL_CU(cur_ylinenr) + 1;    cur_ylinenr = cur_ylinenr+1;    if (type==Enumerate) {	defobjptr=create_enum_defobj(labelptr, nodename, ycoord, False);    } else if (type==Message) {	defobjptr=create_message_defobj(labelptr, nodename, ycoord, False);    } else {	defobjptr=create_text_defobj(labelptr, nodename, ycoord, False);    }    if (firstdefobj==NULL) {	firstdefobj = defobjptr;	lastinserteddefobj = firstdefobj;    } else {	lastinserteddefobj->nodenext = defobjptr;	lastinserteddefobj = defobjptr;    }}/* * Create a default object of type String, which represents a defaults * database text node. */static Defobjcreate_text_defobj(labelname, nodenamei, ycoord, labeleditflg)	char*	labelname;  /* Label of panel item */	char*	nodenamei;   /* Full defaults database path name */	int	ycoord;	    /* Panel item y coordinate */	Bool	labeleditflg;	/* True if label should be editable */{	Panel_item pitem;	char	standardval[DE_NAME_ITEM_MAX_LENGTH];	char	valuestr[DE_NAME_ITEM_MAX_LENGTH];	char	tmp[DE_NAME_ITEM_MAX_LENGTH];	char	labelstr[DE_ITEM_MAX_LABEL_LENGTH];	char*	nodename;	int	valuepos;	int	valuealloclen;	Defobj	defobjptr;	Bool	standarddefinedflg;	if (labeleditflg) {	    defobjptr = create_defobj(nodenamei, Editstring);	    defobjptr->ilabel=panel_create_item(treepanel, PANEL_TEXT,		PANEL_ITEM_X, PANEL_CU(0),		PANEL_ITEM_Y, ycoord,		PANEL_VALUE_DISPLAY_LENGTH, DE_STANDARD_DISPLAYLEN, 		PANEL_VALUE_STORED_LENGTH, DE_FULLNAME_MAX_LENGTH, 		PANEL_VALUE, labelname, 		PANEL_EVENT_PROC, tree_text_eventproc,		PANEL_CLIENT_DATA, defobjptr, 		 0);	}	else {	    defobjptr = create_defobj(nodenamei, String);	    defobjptr->ilabel=panel_create_item(treepanel, PANEL_MESSAGE,		PANEL_ITEM_X, PANEL_CU(0),		PANEL_ITEM_Y, ycoord,		PANEL_LABEL_STRING,	labelname,		PANEL_LABEL_BOLD,	True,		PANEL_EVENT_PROC, tree_text_eventproc,		PANEL_CLIENT_DATA, defobjptr, 		 0);	}	nodename = defobjptr->nodename;	(void)strcpy(labelstr, "");	if (defaults_exists(nodename, (int *)NULL)) {	    (void)strcpy(tmp, defaults_get_string(nodename, "", (int *)NULL));	} else {	    (void)strcpy(tmp, "");	}	defaults_str_unparse(tmp, valuestr);	standarddefinedflg = True;	if (labeleditflg)	     (void)strcpy(standardval, "");	else {	    (void)get_standard_valuestr(nodename, tmp);	    if (strequal(tmp, DEFAULTS_UNDEFINED)) {		defaults_str_unparse(tmp, standardval);		if (strequal(valuestr, standardval)) (void)strcpy(valuestr, "");		(void)strcpy(standardval, "");		standarddefinedflg = False;	    } else {		defaults_str_unparse(tmp, standardval);	    }	}		valuealloclen=MAX(strlen(valuestr)+DE_MIN_VALUE_STOREDLEN,	     2*DE_MIN_VALUE_STOREDLEN);	if (strequal(valuestr, standardval)) (void)strcpy(valuestr, "");	if (strlen(standardval)>DE_STANDARD_DISPLAYLEN) {	    standardval[DE_STANDARD_DISPLAYLEN-3]='\0';	    (void)strcat(standardval, "...");	}	if (standarddefinedflg) {	    (void)strcpy(labelstr, "(");	    (void)strcat(labelstr, standardval);	    (void)strcat(labelstr, "):");	} else {	    (void)strcpy(labelstr, "  :");	}	valuepos = strlen(labelname)+strlen(labelstr)+1;	valuepos = MAX(DE_ITEMLABELPOS, valuepos);	pitem = panel_create_item(treepanel, PANEL_TEXT,		PANEL_ITEM_X, 		PANEL_CU(valuepos-strlen(labelstr)),		PANEL_ITEM_Y, ycoord,		PANEL_LABEL_STRING,	labelstr,		PANEL_VALUE_STORED_LENGTH,	valuealloclen, 		PANEL_VALUE_DISPLAY_LENGTH,	valuealloclen,		PANEL_EVENT_PROC, tree_text_eventproc,		PANEL_CLIENT_DATA, defobjptr, 		PANEL_PAINT, PANEL_NONE,		PANEL_NOTIFY_PROC, panel_notify_proc,		PANEL_NOTIFY_LEVEL, PANEL_ALL,		 0);	(void)panel_set(pitem, PANEL_VALUE, valuestr,	    PANEL_PAINT, PANEL_NONE, 	     0);	defobjptr->ivalue=pitem;	return defobjptr;}/* * Create a default object of type Message, which represents a defaults * database $Message node, which has $Message as a child. * The value of the $Message child node is the textstring which should * be printed out in the panel as a value.  *//* ARGSUSED */static Defobjcreate_message_defobj(labelname, nodenamei, ycoord, labeleditflg)	char*	labelname;  /* Label of panel item */	char*	nodenamei;   /* Full defaults database path name */	int	ycoord;	    /* Panel item y coordinate */	Bool	labeleditflg;	/* True if label should be editable */{	char	valuestr[DE_NAME_ITEM_MAX_LENGTH];	char	tmp[DE_NAME_ITEM_MAX_LENGTH];	char	nodename[DE_ITEM_MAX_LABEL_LENGTH];	Defobj	defobjptr;	defobjptr = create_defobj(nodenamei, Message);	(void)strcpy(nodename, nodenamei);	(void)strcat(nodename, "/$Message");	(void)strcpy(tmp, defaults_get_string(nodename, "", (int *)NULL));	defaults_str_unparse(tmp, valuestr);	defobjptr->ilabel=panel_create_item(treepanel, PANEL_MESSAGE,		PANEL_ITEM_X, PANEL_CU(0),		PANEL_ITEM_Y, ycoord,		PANEL_LABEL_STRING,	valuestr,		PANEL_CLIENT_DATA, defobjptr, 		 0);	defobjptr->ivalue=NULL;	return defobjptr;}

⌨️ 快捷键说明

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