您当前的位置:首页 > IT编程 > C++
| C语言 | Java | VB | VC | python | Android | TensorFlow | C++ | oracle | 学术与代码 | cnn卷积神经网络 | gnn | 图像修复 | Keras | 数据集 | Neo4j | 自然语言处理 | 深度学习 | 医学CAD | 医学影像 | 超参数 | pointnet | pytorch | 异常检测 | Transformers | 情感分类 | 知识图谱 |

自学教程:C++ sym_is_choice函数代码示例

51自学网 2021-06-03 08:36:23
  C++
这篇教程C++ sym_is_choice函数代码示例写得很实用,希望能帮到您。

本文整理汇总了C++中sym_is_choice函数的典型用法代码示例。如果您正苦于以下问题:C++ sym_is_choice函数的具体用法?C++ sym_is_choice怎么用?C++ sym_is_choice使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。

在下文中一共展示了sym_is_choice函数的19个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。

示例1: check_conf

static void check_conf(struct menu *menu){	struct symbol *sym;	struct menu *child;	if (!menu_is_visible(menu))		return;	sym = menu->sym;	if (sym && !sym_has_value(sym)) {		if (sym_is_changable(sym) ||		    (sym_is_choice(sym) && sym_get_tristate_value(sym) == yes)) {			if (input_mode == dont_ask ||			    input_mode == dont_ask_dont_tell) {				if (input_mode == dont_ask &&				    sym->name && !sym_is_choice_value(sym)) {					fprintf(stderr,"CONFIG_%s/n",sym->name);					++return_value;				}			} else {			if (!conf_cnt++)				printf(_("*/n* Restart config.../n*/n"));			rootEntry = menu_get_parent_menu(menu);			conf(rootEntry);		}	}	}	for (child = menu->list; child; child = child->next)		check_conf(child);}
开发者ID:3null,项目名称:fastsocket,代码行数:31,


示例2: check_conf

static void check_conf(struct menu *menu){	struct symbol *sym;	struct menu *child;	if (!menu_is_visible(menu))		return;	sym = menu->sym;	if (sym && !sym_has_value(sym)) {		if (sym_is_changable(sym) ||		    (sym_is_choice(sym) && sym_get_tristate_value(sym) == yes)) {			if (input_mode == listnewconfig) {				if (sym->name && !sym_is_choice_value(sym)) {					printf("%s%s/n", CONFIG_, sym->name);				}			} else if (input_mode != oldnoconfig) {				if (!conf_cnt++)					printf(_("*/n* Restart config.../n*/n"));				rootEntry = menu_get_parent_menu(menu);				conf(rootEntry);			}		}	}	for (child = menu->list; child; child = child->next)		check_conf(child);}
开发者ID:LGaljo,项目名称:android_kernel_samsung_s3ve3g,代码行数:28,


示例3: check_conf

static void check_conf(struct menu *menu){	struct symbol *sym;	struct menu *child;	if (!menu_is_visible(menu))		return;	sym = menu->sym;	if (!sym)		goto conf_childs;	if (sym_is_choice(sym)) {		if (!sym_has_value(sym)) {			if (!conf_cnt++)				printf("*/n* Restart config.../n*/n");			rootEntry = menu_get_parent_menu(menu);			conf(rootEntry);		}		if (sym_get_tristate_value(sym) != mod)			return;		goto conf_childs;	}	if (!sym_has_value(sym)) {		if (!conf_cnt++)			printf("*/n* Restart config.../n*/n");		rootEntry = menu_get_parent_menu(menu);		conf(rootEntry);	}conf_childs:	for (child = menu->list; child; child = child->next)		check_conf(child);}
开发者ID:mmikulicic,项目名称:acaros,代码行数:35,


示例4: conf_read_simple

int conf_read_simple(const char *name){	FILE *in = NULL;	char line[1024];	char *p, *p2;	struct symbol *sym;	int i;	if (name) {		in = zconf_fopen(name);	} else {		const char **names = conf_confnames;		while ((name = *names++)) {			name = conf_expand_value(name);			in = zconf_fopen(name);			if (in) {				printf(_("#/n"				         "# using defaults found in %s/n"				         "#/n"), name);				break;			}		}	}	if (!in)		return 1;	conf_filename = name;	conf_lineno = 0;	conf_warnings = 0;	conf_unsaved = 0;	for_all_symbols(i, sym) {		sym->flags |= SYMBOL_NEW | SYMBOL_CHANGED;		if (sym_is_choice(sym))			sym->flags &= ~SYMBOL_NEW;		sym->flags &= ~SYMBOL_VALID;		switch (sym->type) {		case S_INT:		case S_HEX:		case S_STRING:			if (sym->user.val)				free(sym->user.val);		default:			sym->user.val = NULL;			sym->user.tri = no;		}	}
开发者ID:AndrewScull,项目名称:dizibox,代码行数:47,


示例5: check_conf

static void check_conf(struct menu *menu){	struct symbol *sym;	struct menu *child;	if (!menu_is_visible(menu))		return;	sym = menu->sym;	if (sym && !sym_has_value(sym)) {		if (sym_is_changable(sym) ||		    (sym_is_choice(sym) && sym_get_tristate_value(sym) == yes)) {			if (!conf_cnt++)				printf(_("*/n* Restart config.../n*/n"));			rootEntry = menu_get_parent_menu(menu);			conf(rootEntry);		}	}	for (child = menu->list; child; child = child->next)		check_conf(child);}
开发者ID:0x6e3078,项目名称:toybox,代码行数:22,


示例6: check_conf

static void check_conf(struct menu *menu){	struct symbol *sym;	struct menu *child;	if (!menu_is_visible(menu))		return;	sym = menu->sym;	if (sym && !sym_has_value(sym)) {		if (sym_is_changable(sym) ||		    (sym_is_choice(sym) && sym_get_tristate_value(sym) == yes)) {			if (input_mode == listnewconfig) {				if (sym->name) {					const char *str;					if (sym->type == S_STRING) {						str = sym_get_string_value(sym);						str = sym_escape_string_value(str);						printf("%s%s=%s/n", CONFIG_, sym->name, str);						free((void *)str);					} else {						str = sym_get_string_value(sym);						printf("%s%s=%s/n", CONFIG_, sym->name, str);					}				}			} else {				if (!conf_cnt++)					printf("*/n* Restart config.../n*/n");				rootEntry = menu_get_parent_menu(menu);				conf(rootEntry);			}		}	}	for (child = menu->list; child; child = child->next)		check_conf(child);}
开发者ID:krzk,项目名称:linux,代码行数:38,


示例7: conf_reset

void conf_reset(int def){	struct symbol *sym;	int i, def_flags;	def_flags = SYMBOL_DEF << def;	for_all_symbols(i, sym) {		sym->flags |= SYMBOL_CHANGED;		sym->flags &= ~(def_flags|SYMBOL_VALID);		if (sym_is_choice(sym))			sym->flags |= def_flags;		switch (sym->type) {		case S_INT:		case S_HEX:		case S_STRING:			if (sym->def[def].val)				free(sym->def[def].val);			/* fall through */		default:			sym->def[def].val = NULL;			sym->def[def].tri = no;		}	}
开发者ID:whble,项目名称:trunk,代码行数:23,


示例8: conf

static void conf(struct menu *menu){	struct symbol *sym;	struct property *prop;	struct menu *child;	if (!menu_is_visible(menu))		return;	sym = menu->sym;	prop = menu->prompt;	if (prop) {		const char *prompt;		switch (prop->type) {		case P_MENU:			if ((input_mode == silentoldconfig ||			     input_mode == listnewconfig ||			     input_mode == oldnoconfig) &&			    rootEntry != menu) {				check_conf(menu);				return;			}			/* fall through */		case P_COMMENT:			prompt = menu_get_prompt(menu);			if (prompt)				printf("%*c/n%*c %s/n%*c/n",					indent, '*',					indent, '*', _(prompt),					indent, '*');		default:			;		}	}	if (!sym)		goto conf_childs;	if (sym_is_choice(sym)) {		conf_choice(menu);		if (sym->curr.tri != mod)			return;		goto conf_childs;	}	switch (sym->type) {	case S_INT:	case S_HEX:	case S_STRING:		conf_string(menu);		break;	default:		conf_sym(menu);		break;	}conf_childs:	if (sym)		indent += 2;	for (child = menu->list; child; child = child->next)		conf(child);	if (sym)		indent -= 2;}
开发者ID:LGaljo,项目名称:android_kernel_samsung_s3ve3g,代码行数:65,


示例9: conf

static void conf(struct menu *menu){	struct menu *submenu;	const char *prompt = menu_get_prompt(menu);	struct symbol *sym;	struct menu *active_menu = NULL;	int res;	int s_scroll = 0;	while (1) {		item_reset();		current_menu = menu;		build_conf(menu);		if (!child_count)			break;		if (menu == &rootmenu) {			item_make("--- ");			item_set_tag(':');			item_make(_("    Load an Alternate Configuration File"));			item_set_tag('L');			item_make(_("    Save an Alternate Configuration File"));			item_set_tag('S');		}		dialog_clear();		res = dialog_menu(prompt ? _(prompt) : _("Main Menu"),				  _(menu_instructions),				  active_menu, &s_scroll);		if (res == 1 || res == KEY_ESC || res == -ERRDISPLAYTOOSMALL)			break;		if (!item_activate_selected())			continue;		if (!item_tag())			continue;		submenu = item_data();		active_menu = item_data();		if (submenu)			sym = submenu->sym;		else			sym = NULL;		switch (res) {		case 0:			switch (item_tag()) {			case 'm':				if (single_menu_mode)					submenu->data = (void *) (long) !submenu->data;				else					conf(submenu);				break;			case 't':				if (sym_is_choice(sym) && sym_get_tristate_value(sym) == yes)					conf_choice(submenu);				else if (submenu->prompt->type == P_MENU)					conf(submenu);				break;			case 's':				conf_string(submenu);				break;			case 'L':				conf_load();				break;			case 'S':				conf_save();				break;			}			break;		case 2:			if (sym)				show_help(submenu);			else				show_helptext(_("README"), _(mconf_readme));			break;		case 3:			if (item_is_tag('t')) {				if (sym_set_tristate_value(sym, yes))					break;				if (sym_set_tristate_value(sym, mod))					show_textbox(NULL, setmod_text, 6, 74);			}			break;		case 4:			if (item_is_tag('t'))				sym_set_tristate_value(sym, no);			break;		case 5:			if (item_is_tag('t'))				sym_set_tristate_value(sym, mod);			break;		case 6:			if (item_is_tag('t'))				sym_toggle_tristate_value(sym);			else if (item_is_tag('m'))				conf(submenu);			break;		case 7:			search_conf();			break;		}	}//.........这里部分代码省略.........
开发者ID:16rd,项目名称:rt-n56u,代码行数:101,


示例10: build_conf

static void build_conf(struct menu *menu){	struct symbol *sym;	struct property *prop;	struct menu *child;	int type, tmp, doint = 2;	tristate val;	char ch;	if (!menu_is_visible(menu))		return;	sym = menu->sym;	prop = menu->prompt;	if (!sym) {		if (prop && menu != current_menu) {			const char *prompt = menu_get_prompt(menu);			switch (prop->type) {			case P_MENU:				child_count++;				prompt = _(prompt);				if (single_menu_mode) {					item_make("%s%*c%s",						  menu->data ? "-->" : "++>",						  indent + 1, ' ', prompt);				} else					item_make("   %*c%s  --->", indent + 1, ' ', prompt);				item_set_tag('m');				item_set_data(menu);				if (single_menu_mode && menu->data)					goto conf_childs;				return;			case P_COMMENT:				if (prompt) {					child_count++;					item_make("   %*c*** %s ***", indent + 1, ' ', _(prompt));					item_set_tag(':');					item_set_data(menu);				}				break;			default:				if (prompt) {					child_count++;					item_make("---%*c%s", indent + 1, ' ', _(prompt));					item_set_tag(':');					item_set_data(menu);				}			}		} else			doint = 0;		goto conf_childs;	}	type = sym_get_type(sym);	if (sym_is_choice(sym)) {		struct symbol *def_sym = sym_get_choice_value(sym);		struct menu *def_menu = NULL;		child_count++;		for (child = menu->list; child; child = child->next) {			if (menu_is_visible(child) && child->sym == def_sym)				def_menu = child;		}		val = sym_get_tristate_value(sym);		if (sym_is_changable(sym)) {			switch (type) {			case S_BOOLEAN:				item_make("[%c]", val == no ? ' ' : '*');				break;			case S_TRISTATE:				switch (val) {				case yes: ch = '*'; break;				case mod: ch = 'M'; break;				default:  ch = ' '; break;				}				item_make("<%c>", ch);				break;			}			item_set_tag('t');			item_set_data(menu);		} else {			item_make("   ");			item_set_tag(def_menu ? 't' : ':');			item_set_data(menu);		}		item_add_str("%*c%s", indent + 1, ' ', _(menu_get_prompt(menu)));		if (val == yes) {			if (def_menu) {				item_add_str(" (%s)", _(menu_get_prompt(def_menu)));				item_add_str("  --->");				if (def_menu->list) {					indent += 2;					build_conf(def_menu);					indent -= 2;				}			}			return;//.........这里部分代码省略.........
开发者ID:16rd,项目名称:rt-n56u,代码行数:101,


示例11: menu_finalize

void menu_finalize(struct menu *parent){    struct menu *menu, *last_menu;    struct symbol *sym;    struct property *prop;    struct expr *parentdep, *basedep, *dep, *dep2, **ep;    sym = parent->sym;    if (parent->list) {        if (sym && sym_is_choice(sym)) {            /* find the first choice value and find out choice type */            for (menu = parent->list; menu; menu = menu->next) {                if (menu->sym) {                    current_entry = parent;                    menu_set_type(menu->sym->type);                    current_entry = menu;                    menu_set_type(sym->type);                    break;                }            }            parentdep = expr_alloc_symbol(sym);        } else if (parent->prompt) {            parentdep = parent->prompt->visible.expr;        } else {            parentdep = parent->dep;        }        for (menu = parent->list; menu; menu = menu->next) {            basedep = expr_transform(menu->dep);            basedep = expr_alloc_and(expr_copy(parentdep), basedep);            basedep = expr_eliminate_dups(basedep);            menu->dep = basedep;            if (menu->sym) {                prop = menu->sym->prop;            } else {                prop = menu->prompt;            }            for (; prop; prop = prop->next) {                if (prop->menu != menu) {                    continue;                }                dep = expr_transform(prop->visible.expr);                dep = expr_alloc_and(expr_copy(basedep), dep);                dep = expr_eliminate_dups(dep);                if (menu->sym && menu->sym->type != S_TRISTATE) {                    dep = expr_trans_bool(dep);                }                prop->visible.expr = dep;                if (prop->type == P_SELECT) {                    struct symbol *es = prop_get_symbol(prop);                    es->rev_dep.expr = expr_alloc_or(es->rev_dep.expr,                                                     expr_alloc_and(expr_alloc_symbol(menu->sym), expr_copy(dep)));                }            }        }        for (menu = parent->list; menu; menu = menu->next) {            menu_finalize(menu);        }    } else if (sym) {        basedep = parent->prompt ? parent->prompt->visible.expr : NULL;        basedep = expr_trans_compare(basedep, E_UNEQUAL, &symbol_no);        basedep = expr_eliminate_dups(expr_transform(basedep));        last_menu = NULL;        for (menu = parent->next; menu; menu = menu->next) {            dep = menu->prompt ? menu->prompt->visible.expr : menu->dep;            if (!expr_contains_symbol(dep, sym)) {                break;            }            if (expr_depends_symbol(dep, sym)) {                goto next;            }            dep = expr_trans_compare(dep, E_UNEQUAL, &symbol_no);            dep = expr_eliminate_dups(expr_transform(dep));            dep2 = expr_copy(basedep);            expr_eliminate_eq(&dep, &dep2);            expr_free(dep);            if (!expr_is_yes(dep2)) {                expr_free(dep2);                break;            }            expr_free(dep2);next:            menu_finalize(menu);            menu->parent = parent;            last_menu = menu;        }        if (last_menu) {            parent->list = parent->next;            parent->next = last_menu->next;            last_menu->next = NULL;        }    }    for (menu = parent->list; menu; menu = menu->next) {        if (sym && sym_is_choice(sym) && menu->sym) {            menu->sym->flags |= SYMBOL_CHOICEVAL;            if (!menu->prompt) {                menu_warn(menu, "choice value must have a prompt");            }            for (prop = menu->sym->prop; prop; prop = prop->next) {                if (prop->type == P_PROMPT && prop->menu != menu) {//.........这里部分代码省略.........
开发者ID:kesl-internal,项目名称:khypervisor-v2,代码行数:101,


示例12: conf

static void conf(struct menu *menu){	struct dialog_list_item *active_item = NULL;	struct menu *submenu;	const char *prompt = menu_get_prompt(menu);	struct symbol *sym;	char active_entry[40];	int stat, type;	unlink("lxdialog.scrltmp");	active_entry[0] = 0;	while (1) {		indent = 0;		child_count = 0;		current_menu = menu;		cdone(); cinit();		build_conf(menu);		if (!child_count)			break;		if (menu == &rootmenu) {			cmake(); cprint_tag(":"); cprint_name("--- ");			cmake(); cprint_tag("L"); cprint_name("Load an Alternate Configuration File");			cmake(); cprint_tag("S"); cprint_name("Save Configuration to an Alternate File");		}		dialog_clear();		stat = dialog_menu(prompt ? prompt : "Main Menu",				menu_instructions, rows, cols, rows - 10,				active_entry, item_no, items);		if (stat < 0)			return;		if (stat == 1 || stat == 255)			break;		active_item = first_sel_item(item_no, items);		if (!active_item)			continue;		active_item->selected = 0;		strncpy(active_entry, active_item->tag, sizeof(active_entry));		active_entry[sizeof(active_entry)-1] = 0;		type = active_entry[0];		if (!type)			continue;		sym = NULL;		submenu = NULL;		if (sscanf(active_entry + 1, "%p", &submenu) == 1)			sym = submenu->sym;		switch (stat) {		case 0:			switch (type) {			case 'm':				if (single_menu_mode)					submenu->data = (void *) (long) !submenu->data;				else					conf(submenu);				break;			case 't':				if (sym_is_choice(sym) && sym_get_tristate_value(sym) == yes)					conf_choice(submenu);				else if (submenu->prompt->type == P_MENU)					conf(submenu);				break;			case 's':				conf_string(submenu);				break;			case 'L':				conf_load();				break;			case 'S':				conf_save();				break;			}			break;		case 2:			if (sym)				show_help(submenu);			else				show_helptext("README", mconf_readme);			break;		case 3:			if (type == 't') {				if (sym_set_tristate_value(sym, yes))					break;				if (sym_set_tristate_value(sym, mod))					show_textbox(NULL, setmod_text, 6, 74);			}			break;		case 4:			if (type == 't')				sym_set_tristate_value(sym, no);			break;		case 5:			if (type == 't')				sym_set_tristate_value(sym, mod);			break;		case 6:			if (type == 't')				sym_toggle_tristate_value(sym);//.........这里部分代码省略.........
开发者ID:0919061,项目名称:PX4NuttX,代码行数:101,


示例13: build_conf

static void build_conf(struct menu *menu){	struct symbol *sym;	struct property *prop;	struct menu *child;	int type, tmp, doint = 2;	tristate val;	char ch;	if (!menu_is_visible(menu))		return;	sym = menu->sym;	prop = menu->prompt;	if (!sym) {		if (prop && menu != current_menu) {			const char *prompt = menu_get_prompt(menu);			switch (prop->type) {			case P_MENU:				child_count++;				cmake();				cprint_tag("m%p", menu);				if (single_menu_mode) {					cprint_name("%s%*c%s",						menu->data ? "-->" : "++>",						indent + 1, ' ', prompt);				} else {					cprint_name("   %*c%s  --->", indent + 1, ' ', prompt);				}				if (single_menu_mode && menu->data)					goto conf_childs;				return;			default:				if (prompt) {					child_count++;					cmake();					cprint_tag(":%p", menu);					cprint_name("---%*c%s", indent + 1, ' ', prompt);				}			}		} else			doint = 0;		goto conf_childs;	}	cmake();	type = sym_get_type(sym);	if (sym_is_choice(sym)) {		struct symbol *def_sym = sym_get_choice_value(sym);		struct menu *def_menu = NULL;		child_count++;		for (child = menu->list; child; child = child->next) {			if (menu_is_visible(child) && child->sym == def_sym)				def_menu = child;		}		val = sym_get_tristate_value(sym);		if (sym_is_changable(sym)) {			cprint_tag("t%p", menu);			switch (type) {			case S_BOOLEAN:				cprint_name("[%c]", val == no ? ' ' : '*');				break;			case S_TRISTATE:				switch (val) {				case yes: ch = '*'; break;				case mod: ch = 'M'; break;				default:  ch = ' '; break;				}				cprint_name("<%c>", ch);				break;			}		} else {			cprint_tag("%c%p", def_menu ? 't' : ':', menu);			cprint_name("   ");		}		cprint_name("%*c%s", indent + 1, ' ', menu_get_prompt(menu));		if (val == yes) {			if (def_menu) {				cprint_name(" (%s)", menu_get_prompt(def_menu));				cprint_name("  --->");				if (def_menu->list) {					indent += 2;					build_conf(def_menu);					indent -= 2;				}			}			return;		}	} else {		if (menu == current_menu) {			cprint_tag(":%p", menu);			cprint_name("---%*c%s", indent + 1, ' ', menu_get_prompt(menu));			goto conf_childs;		}		child_count++;//.........这里部分代码省略.........
开发者ID:0919061,项目名称:PX4NuttX,代码行数:101,


示例14: conf

static void conf(struct menu *menu){	struct menu *submenu;	const char *prompt = menu_get_prompt(menu);	struct symbol *sym;	char active_entry[40];	int stat, type, i;	unlink("lxdialog.scrltmp");	active_entry[0] = 0;	while (1) {		cprint_init();		cprint("--title");		cprint("%s", prompt ? prompt : "Main Menu");		cprint("--menu");		cprint(menu_instructions);		cprint("%d", rows);		cprint("%d", cols);		cprint("%d", rows - 10);		cprint("%s", active_entry);		current_menu = menu;		build_conf(menu);		if (!child_count)			break;		if (menu == &rootmenu) {			cprint(":");			cprint("--- ");			cprint("L");			cprint("    Load an Alternate Configuration File");			cprint("S");			cprint("    Save Configuration to an Alternate File");		}		stat = exec_conf();		if (stat < 0)			continue;		if (stat == 1 || stat == 255)			break;		type = input_buf[0];		if (!type)			continue;		for (i = 0; input_buf[i] && !isspace(input_buf[i]); i++)			;		if (i >= sizeof(active_entry))			i = sizeof(active_entry) - 1;		input_buf[i] = 0;		strcpy(active_entry, input_buf);		sym = NULL;		submenu = NULL;		if (sscanf(input_buf + 1, "%p", &submenu) == 1)			sym = submenu->sym;		switch (stat) {		case 0:			switch (type) {			case 'm':				if (single_menu_mode)					submenu->data = (void *) (long) !submenu->data;				else					conf(submenu);				break;			case 't':				if (sym_is_choice(sym) && sym_get_tristate_value(sym) == yes)					conf_choice(submenu);				else if (submenu->prompt->type == P_MENU)					conf(submenu);				break;			case 's':				conf_string(submenu);				break;			case 'L':				conf_load();				break;			case 'S':				conf_save();				break;			}			break;		case 2:			if (sym)				show_help(submenu);			else				show_readme();			break;		case 3:			if (type == 't') {				if (sym_set_tristate_value(sym, yes))					break;				if (sym_set_tristate_value(sym, mod))					show_textbox(NULL, setmod_text, 6, 74);			}			break;		case 4:			if (type == 't')				sym_set_tristate_value(sym, no);			break;		case 5://.........这里部分代码省略.........
开发者ID:FelipeFernandes1988,项目名称:Alice-1121-Modem,代码行数:101,


示例15: menu_finalize

voidmenu_finalize(struct menu *parent){    struct menu *menu, *last_menu;    struct symbol *sym;    struct property *prop;    struct expr *parentdep, *basedep, *dep, *dep2;    sym = parent->sym;    if (parent->list) {	if (sym && sym_is_choice(sym)) {	    /* find the first choice value and find out choice type */	    for (menu = parent->list; menu; menu = menu->next) {		if (menu->sym) {		    current_entry = parent;		    menu_set_type(menu->sym->type);		    current_entry = menu;		    menu_set_type(sym->type);		    break;		}	    }	    parentdep = expr_alloc_symbol(sym);	} else if (parent->prompt)	    parentdep = E_EXPR(parent->prompt->visible);	else	    parentdep = parent->dep;	for (menu = parent->list; menu; menu = menu->next) {	    basedep = expr_transform(menu->dep);	    basedep = expr_alloc_and(expr_copy(parentdep), basedep);	    basedep = expr_eliminate_dups(basedep);	    menu->dep = basedep;	    if (menu->sym)		prop = menu->sym->prop;	    else		prop = menu->prompt;	    for (; prop; prop = prop->next) {		if (prop->menu != menu)		    continue;		dep = expr_transform(E_EXPR(prop->visible));		dep = expr_alloc_and(expr_copy(basedep), dep);		dep = expr_eliminate_dups(dep);		if (menu->sym && menu->sym->type != S_TRISTATE)		    dep = expr_trans_bool(dep);		E_EXPR(prop->visible) = dep;	    }	}	for (menu = parent->list; menu; menu = menu->next)	    menu_finalize(menu);    } else if (sym && parent->prompt) {	basedep = E_EXPR(parent->prompt->visible);	basedep = expr_trans_compare(basedep, E_UNEQUAL, &symbol_no);	basedep = expr_eliminate_dups(expr_transform(basedep));	last_menu = NULL;	for (menu = parent->next; menu; menu = menu->next) {	    dep = menu->prompt ? E_EXPR(menu->prompt->visible) : menu->dep;	    if (!expr_contains_symbol(dep, sym))		break;	    if (expr_depends_symbol(dep, sym))		goto next;	    dep = expr_trans_compare(dep, E_UNEQUAL, &symbol_no);	    dep = expr_eliminate_dups(expr_transform(dep));	    dep2 = expr_copy(basedep);	    expr_eliminate_eq(&dep, &dep2);	    expr_free(dep);	    if (!expr_is_yes(dep2)) {		expr_free(dep2);		break;	    }	    expr_free(dep2);	  next:	    menu_finalize(menu);	    menu->parent = parent;	    last_menu = menu;	}	if (last_menu) {	    parent->list = parent->next;	    parent->next = last_menu->next;	    last_menu->next = NULL;	}    }    for (menu = parent->list; menu; menu = menu->next) {	if (sym && sym_is_choice(sym) && menu->sym) {	    menu->sym->flags |= SYMBOL_CHOICEVAL;	    current_entry = menu;	    menu_set_type(sym->type);	    menu_add_prop(P_CHOICE, NULL, parent->sym, NULL);	    prop = sym_get_choice_prop(parent->sym);	    //dep = expr_alloc_one(E_CHOICE, dep);	    //dep->right.sym = menu->sym;	    prop->dep = expr_alloc_one(E_CHOICE, prop->dep);	    prop->dep->right.sym = menu->sym;	}	if (menu->list && (!menu->prompt || !menu->prompt->text)) {	    for (last_menu = menu->list;; last_menu = last_menu->next) {		last_menu->parent = parent;		if (!last_menu->next)		    break;	    }	    last_menu->next = menu->next;//.........这里部分代码省略.........
开发者ID:vovan888,项目名称:linux-on-sx1,代码行数:101,


示例16: menu_finalize

void menu_finalize(struct menu *parent){	struct menu *menu, *last_menu;	struct symbol *sym;	struct property *prop;	struct expr *parentdep, *basedep, *dep, *dep2, **ep;	sym = parent->sym;	if (parent->list) {		/*		 * This menu node has children. We (recursively) process them		 * and propagate parent dependencies before moving on.		 */		if (sym && sym_is_choice(sym)) {			if (sym->type == S_UNKNOWN) {				/* find the first choice value to find out choice type */				current_entry = parent;				for (menu = parent->list; menu; menu = menu->next) {					if (menu->sym && menu->sym->type != S_UNKNOWN) {						menu_set_type(menu->sym->type);						break;					}				}			}			/* set the type of the remaining choice values */			for (menu = parent->list; menu; menu = menu->next) {				current_entry = menu;				if (menu->sym && menu->sym->type == S_UNKNOWN)					menu_set_type(sym->type);			}			/*			 * Use the choice itself as the parent dependency of			 * the contained items. This turns the mode of the			 * choice into an upper bound on the visibility of the			 * choice value symbols.			 */			parentdep = expr_alloc_symbol(sym);		} else if (parent->prompt)			/* Menu node for 'menu' */			parentdep = parent->prompt->visible.expr;		else			/* Menu node for 'if' */			parentdep = parent->dep;		/* For each child menu node... */		for (menu = parent->list; menu; menu = menu->next) {			/*			 * Propagate parent dependencies to the child menu			 * node, also rewriting and simplifying expressions			 */			basedep = rewrite_m(menu->dep);			basedep = expr_transform(basedep);			basedep = expr_alloc_and(expr_copy(parentdep), basedep);			basedep = expr_eliminate_dups(basedep);			menu->dep = basedep;			if (menu->sym)				/*				 * Note: For symbols, all prompts are included				 * too in the symbol's own property list				 */				prop = menu->sym->prop;			else				/*				 * For non-symbol menu nodes, we just need to				 * handle the prompt				 */				prop = menu->prompt;			/* For each property... */			for (; prop; prop = prop->next) {				if (prop->menu != menu)					/*					 * Two possibilities:					 *					 * 1. The property lacks dependencies					 *    and so isn't location-specific,					 *    e.g. an 'option'					 *					 * 2. The property belongs to a symbol					 *    defined in multiple locations and					 *    is from some other location. It					 *    will be handled there in that					 *    case.					 *					 * Skip the property.					 */					continue;				/*				 * Propagate parent dependencies to the				 * property's condition, rewriting and				 * simplifying expressions at the same time				 */				dep = rewrite_m(prop->visible.expr);				dep = expr_transform(dep);				dep = expr_alloc_and(expr_copy(basedep), dep);				dep = expr_eliminate_dups(dep);//.........这里部分代码省略.........
开发者ID:EmDepTeam,项目名称:buildroot,代码行数:101,


示例17: sym_check_prop

static void sym_check_prop(struct symbol *sym){	struct property *prop;	struct symbol *sym2;	char *use;	for (prop = sym->prop; prop; prop = prop->next) {		switch (prop->type) {		case P_DEFAULT:			if ((sym->type == S_STRING || sym->type == S_INT || sym->type == S_HEX) &&			    prop->expr->type != E_SYMBOL)				prop_warn(prop,				    "default for config symbol '%s'"				    " must be a single symbol", sym->name);			if (prop->expr->type != E_SYMBOL)				break;			sym2 = prop_get_symbol(prop);			if (sym->type == S_HEX || sym->type == S_INT) {				if (!menu_validate_number(sym, sym2))					prop_warn(prop,					    "'%s': number is invalid",					    sym->name);			}			if (sym_is_choice(sym)) {				struct property *choice_prop =					sym_get_choice_prop(sym2);				if (!choice_prop ||				    prop_get_symbol(choice_prop) != sym)					prop_warn(prop,						  "choice default symbol '%s' is not contained in the choice",						  sym2->name);			}			break;		case P_SELECT:		case P_IMPLY:			use = prop->type == P_SELECT ? "select" : "imply";			sym2 = prop_get_symbol(prop);			if (sym->type != S_BOOLEAN && sym->type != S_TRISTATE)				prop_warn(prop,				    "config symbol '%s' uses %s, but is "				    "not bool or tristate", sym->name, use);			else if (sym2->type != S_UNKNOWN &&				 sym2->type != S_BOOLEAN &&				 sym2->type != S_TRISTATE)				prop_warn(prop,				    "'%s' has wrong type. '%s' only "				    "accept arguments of bool and "				    "tristate type", sym2->name, use);			break;		case P_RANGE:			if (sym->type != S_INT && sym->type != S_HEX)				prop_warn(prop, "range is only allowed "						"for int or hex symbols");			if (!menu_validate_number(sym, prop->expr->left.sym) ||			    !menu_validate_number(sym, prop->expr->right.sym))				prop_warn(prop, "range is invalid");			break;		default:			;		}	}}
开发者ID:EmDepTeam,项目名称:buildroot,代码行数:63,


示例18: menu_finalize

void menu_finalize(struct menu *parent){	struct menu *menu, *last_menu;	struct symbol *sym;	struct property *prop;	struct expr *parentdep, *basedep, *dep, *dep2, **ep;	sym = parent->sym;	if (parent->list) {		if (sym && sym_is_choice(sym)) {			if (sym->type == S_UNKNOWN) {				/* find the first choice value to find out choice type */				current_entry = parent;				for (menu = parent->list; menu; menu = menu->next) {					if (menu->sym && menu->sym->type != S_UNKNOWN) {						menu_set_type(menu->sym->type);						break;					}				}			}			if (parent->prompt &&			    !expr_is_yes(parent->prompt->visible.expr)) {				parent->visibility = expr_alloc_and (parent->visibility,								     parent->prompt->visible.expr);			}			/* set the type of the remaining choice values */			for (menu = parent->list; menu; menu = menu->next) {				current_entry = menu;				if (menu->sym && menu->sym->type == S_UNKNOWN)					menu_set_type(sym->type);			}			parentdep = expr_alloc_symbol(sym);		} else if (parent->prompt)			parentdep = parent->prompt->visible.expr;		else			parentdep = parent->dep;		for (menu = parent->list; menu; menu = menu->next) {			basedep = expr_transform(menu->dep);			basedep = expr_alloc_and(expr_copy(parentdep), basedep);			basedep = expr_eliminate_dups(basedep);			menu->dep = basedep;			if (menu->sym)				prop = menu->sym->prop;			else				prop = menu->prompt;			for (; prop; prop = prop->next) {				if (prop->menu != menu)					continue;				dep = expr_transform(prop->visible.expr);				dep = expr_alloc_and(expr_copy(basedep), dep);				dep = expr_eliminate_dups(dep);				if (menu->sym && menu->sym->type != S_TRISTATE)					dep = expr_trans_bool(dep);				prop->visible.expr = dep;				if (prop->type == P_SELECT) {					struct symbol *es = prop_get_symbol(prop);					es->rev_dep.expr = expr_alloc_or(es->rev_dep.expr,							expr_alloc_and(expr_alloc_symbol(menu->sym), expr_copy(dep)));				}			}		}		for (menu = parent->list; menu; menu = menu->next)			menu_finalize(menu);	} else if (sym) {		basedep = parent->prompt ? parent->prompt->visible.expr : NULL;		basedep = expr_trans_compare(basedep, E_UNEQUAL, &symbol_no);		basedep = expr_eliminate_dups(expr_transform(basedep));		last_menu = NULL;		for (menu = parent->next; menu; menu = menu->next) {			dep = menu->prompt ? menu->prompt->visible.expr : menu->dep;			if (!expr_contains_symbol(dep, sym))				break;			if (expr_depends_symbol(dep, sym))				goto next;			dep = expr_trans_compare(dep, E_UNEQUAL, &symbol_no);			dep = expr_eliminate_dups(expr_transform(dep));			dep2 = expr_copy(basedep);			expr_eliminate_eq(&dep, &dep2);			expr_free(dep);			if (!expr_is_yes(dep2)) {				expr_free(dep2);				break;			}			expr_free(dep2);		next:			menu_finalize(menu);			menu->parent = parent;			last_menu = menu;		}		if (last_menu) {			parent->list = parent->next;			parent->next = last_menu->next;			last_menu->next = NULL;		}		sym->dir_dep.expr = expr_alloc_or(sym->dir_dep.expr, parent->dep);	}	for (menu = parent->list; menu; menu = menu->next) {		if (sym && sym_is_choice(sym) &&//.........这里部分代码省略.........
开发者ID:Christopher83,项目名称:linaro_crosstool-ng,代码行数:101,


示例19: my_print_symbol

void my_print_symbol(FILE *out, struct menu *menu){	struct symbol *sym = menu->sym;	struct property *prop;	static char buf[50];	tristate is_tristate = no;	if (sym_is_choice(sym)) {		char itemname[50];		fprintf(out, "#startchoice/n");		current_choice = menu;		choice_count++;		//unnamed choices get a generic id                if (sym->name)                        snprintf(itemname, sizeof itemname, "%s", sym->name);                else {                        snprintf(itemname, sizeof itemname, "CHOICE_%d", choice_count);                }		fprintf(out, "Choice/t%s", itemname);		snprintf(buf, sizeof buf, itemname);		// optional, i.e. all items can be deselected		if (current_choice->sym->flags & SYMBOL_OPTIONAL)			fprintf(out, "/toptional");		else			fprintf(out, "/trequired");		if (current_choice->sym->type & S_TRISTATE)			fprintf(out, "/ttristate");		else			fprintf(out, "/tboolean");		fprintf(out, "/n");	} else {		if (current_choice)			fprintf(out, "ChoiceItem/t%s/t%s/n", sym->name, buf);		fprintf(out, "Item/t%s", sym->name);		switch (sym->type) {		case S_BOOLEAN:			fputs("/tboolean/n", out);			is_tristate = yes;			break;		case S_TRISTATE:			fputs("/ttristate/n", out);			is_tristate = mod;			break;		case S_STRING:			fputs("/tstring/n", out);			break;		case S_INT:			fputs("/tinteger/n", out);			break;		case S_HEX:			fputs("/thex/n", out);			break;		default:			fputs("/t???/n", out);			break;		}	}	//if (menu->dep || is_tristate != no) {		char itemname[50];		int has_prompts = 0;		if (sym->name)			snprintf(itemname, sizeof itemname, "%s", sym->name);		else {			snprintf(itemname, sizeof itemname, "CHOICE_%d", choice_count);			choicestring = buf;		}		if (menu->dep) {		    fprintf(out, "Depends/t%s/t/"", itemname);		    my_expr_fprint(menu->dep, out);		    fprintf(out, "/"/n");		}		for_all_prompts(sym, prop) {			has_prompts++;			fprintf(out, "Prompt/t%s/t/"",itemname);			my_expr_fprint(prop->visible.expr, out);			fprintf(out, "/"/n");		}
开发者ID:ckaestne,项目名称:undertaker,代码行数:88,



注:本文中的sym_is_choice函数示例整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。


C++ sym_is_choice_value函数代码示例
C++ sym_is_changable函数代码示例
万事OK自学网:51自学网_软件自学网_CAD自学网自学excel、自学PS、自学CAD、自学C语言、自学css3实例,是一个通过网络自主学习工作技能的自学平台,网友喜欢的软件自学网站。