?? tkgen.c
字號:
printf( " }\n" ); break; case token_dep_mbool: modtoyes = 1; case token_dep_bool: printf( "\n" ); for ( tmp = cfg->depend; tmp; tmp = tmp->next ) if ( ! vartable[get_varnum( tmp->name )].global_written ) { global( tmp->name ); } printf( "\tset tmpvar_dep [effective_dep [list" ); for ( tmp = cfg->depend; tmp; tmp = tmp->next ) printf( " $%s", tmp->name ); printf( "]];set %s [sync_bool $%s $tmpvar_dep %d];", vartable[cfg->nameindex].name, vartable[cfg->nameindex].name, modtoyes ); printf( "if {$tmpvar_dep != 1" ); if (modtoyes) printf( " && $tmpvar_dep != 2" ); printf( "} then {configure_entry .menu%d.config.f.x%d disabled {y};", menu_num, line_num ); printf( "} else {" ); printf( "configure_entry .menu%d.config.f.x%d normal {y};", menu_num, line_num ); printf( "}; " ); case token_bool: if ( cfg->token == token_bool ) printf( "\n\t" ); printf( "configure_entry .menu%d.config.f.x%d normal {n l", menu_num, line_num ); if ( cfg->token == token_bool ) printf( " y" ); printf( "}" ); printf( "} else {"); printf( "configure_entry .menu%d.config.f.x%d disabled {y n l}}\n", menu_num, line_num ); break; case token_choice_header: printf( "configure_entry .menu%d.config.f.x%d normal {x l}", menu_num, line_num ); printf( "} else {" ); printf( "configure_entry .menu%d.config.f.x%d disabled {x l}", menu_num, line_num ); printf( "}\n" ); break; case token_choice_item: fprintf( stderr, "Internal error on token_choice_item\n" ); exit( 1 ); case token_dep_tristate: printf( "\n" ); for ( tmp = cfg->depend; tmp; tmp = tmp->next ) if ( ! vartable[get_varnum( tmp->name )].global_written ) { global( tmp->name ); } printf( "\tset tmpvar_dep [effective_dep [list" ); for ( tmp = cfg->depend; tmp; tmp = tmp->next ) printf( " $%s", tmp->name ); printf( "]];set %s [sync_tristate $%s $tmpvar_dep];", vartable[cfg->nameindex].name, vartable[cfg->nameindex].name ); printf( "\tif {$tmpvar_dep != 1} then {" ); printf( "configure_entry .menu%d.config.f.x%d disabled {y}", menu_num, line_num ); printf( "} else {" ); printf( "configure_entry .menu%d.config.f.x%d normal {y}", menu_num, line_num ); printf( "}; " ); printf( "if {$tmpvar_dep == 0} then {" ); printf( "configure_entry .menu%d.config.f.x%d disabled {m}", menu_num, line_num ); printf( "} else {" ); printf( "configure_entry .menu%d.config.f.x%d normal {m}", menu_num, line_num ); printf( "}; " ); case token_tristate: if ( cfg->token == token_tristate ) { printf( "\n\tconfigure_entry .menu%d.config.f.x%d normal {y}; ", menu_num, line_num ); } printf( "if {($CONFIG_MODULES == 1)} then {" ); printf( "configure_entry .menu%d.config.f.x%d normal {m}} else {", menu_num, line_num ); printf( "configure_entry .menu%d.config.f.x%d disabled {m}}; ", menu_num, line_num ); printf( "configure_entry .menu%d.config.f.x%d normal {n l}", menu_num, line_num ); /* * Or in a bit to the variable - this causes all of the radiobuttons * to be deselected (i.e. not be red). */ printf( "} else {" ); printf( "configure_entry .menu%d.config.f.x%d disabled {y n m l}}\n", menu_num, line_num ); break; case token_hex: case token_int: case token_string: printf( ".menu%d.config.f.x%d.x configure -state normal -foreground [ cget .ref -foreground ]; ", menu_num, line_num ); printf( ".menu%d.config.f.x%d.l configure -state normal; ", menu_num, line_num ); printf( "} else {" ); printf( ".menu%d.config.f.x%d.x configure -state disabled -foreground [ cget .ref -disabledforeground ]; ", menu_num, line_num ); printf( ".menu%d.config.f.x%d.l configure -state disabled}\n", menu_num, line_num ); break; case token_comment: case token_mainmenu_option: if ( line_num >= 0 ) { printf( "configure_entry .menu%d.config.f.x%d normal {m}", menu_num, line_num ); printf( "} else {" ); printf( "configure_entry .menu%d.config.f.x%d disabled {m}}\n", menu_num, line_num ); } else printf( ".f0.x%d configure -state normal } else { .f0.x%d configure -state disabled }\n", menu_num, menu_num ); break; } } else { int modtoyes = 0; switch ( cfg->token ) { default: printf( " }\n" ); break; case token_dep_mbool: modtoyes = 1; case token_dep_bool: printf( "\n" ); for ( tmp = cfg->depend; tmp; tmp = tmp->next ) if ( ! vartable[get_varnum( tmp->name )].global_written ) { global( tmp->name ); } printf( "\tset tmpvar_dep [effective_dep [list" ); for ( tmp = cfg->depend; tmp; tmp = tmp->next ) printf( " $%s", tmp->name ); printf( "]];set %s [sync_bool $%s $tmpvar_dep %d];", vartable[cfg->nameindex].name, vartable[cfg->nameindex].name, modtoyes ); case token_bool: if ( cfg->token == token_bool ) printf( "\n\t" ); printf( "set %s [expr $%s&15]", vartable[cfg->nameindex].name, vartable[cfg->nameindex].name ); printf( "}\n"); break; case token_choice_header: printf( "} else {" ); for ( cfg1 = cfg->next; cfg1 != NULL && cfg1->token == token_choice_item; cfg1 = cfg1->next ) printf( "set %s 4;", vartable[cfg1->nameindex].name ); printf( "}\n" ); break; case token_choice_item: fprintf( stderr, "Internal error on token_choice_item\n" ); exit( 1 ); case token_define_bool: case token_define_tristate: if ( ! vartable[get_varnum( cfg->value )].global_written ) { global( cfg->value ); } printf( "set %s $%s }\n", vartable[cfg->nameindex].name, cfg->value ); break; case token_define_hex: case token_define_int: printf( "set %s %s }\n", vartable[cfg->nameindex].name, cfg->value ); break; case token_define_string: printf( "set %s \"%s\" }\n", vartable[cfg->nameindex].name, cfg->value ); break; case token_dep_tristate: printf( "\n" ); for ( tmp = cfg->depend; tmp; tmp = tmp->next ) if ( ! vartable[get_varnum( tmp->name )].global_written ) { global( tmp->name ); } printf( "\tset tmpvar_dep [effective_dep [list" ); for ( tmp = cfg->depend; tmp; tmp = tmp->next ) printf( " $%s", tmp->name ); printf( "]]; set %s [sync_tristate $%s $tmpvar_dep]; ", vartable[cfg->nameindex].name, vartable[cfg->nameindex].name ); case token_tristate: if ( cfg->token == token_tristate ) printf( "if {($CONFIG_MODULES == 0) && ($%s == 2)} then {set %s 1}; ", vartable[cfg->nameindex].name, vartable[cfg->nameindex].name ); /* * Or in a bit to the variable - this causes all of the radiobuttons * to be deselected (i.e. not be red). */ printf( "set %s [expr $%s&15]", vartable[cfg->nameindex].name, vartable[cfg->nameindex].name ); printf( "}\n" ); break; case token_hex: case token_int: if ( cfg->value && *cfg->value == '$' ) { int index = get_varnum( cfg->value+1 ); printf( "\n" ); if ( ! vartable[index].global_written ) { global( vartable[index].name ); } printf( "\t" ); } if ( cfg->token == token_hex ) printf( "validate_hex " ); else if ( cfg->token == token_int ) printf( "validate_int " ); printf( "%s \"$%s\" %s}\n", vartable[cfg->nameindex].name, vartable[cfg->nameindex].name, cfg->value ); break; case token_unset: printf( "set %s 4}\n", vartable[cfg->nameindex].name ); break; } }}/* * Generate a line that writes a variable to the output file. */void generate_writeconfig( struct kconfig * cfg ){ struct condition * cond; struct dependency * tmp; int depmod = 2; /* * Generate global declaration for this symbol. */ if ( cfg->token != token_comment ) { if ( cfg->nameindex > 0 && ! vartable[cfg->nameindex].global_written ) { vartable[cfg->nameindex].global_written = 1; global( vartable[cfg->nameindex].name ); } if ( cfg->token == token_define_tristate || cfg->token == token_define_bool ) { if ( ! vartable[get_varnum( cfg->value )].global_written ) { vartable[get_varnum( cfg->value )].global_written = 1; global( cfg->value ); } } else if ( cfg->nameindex <= 0 && cfg->token == token_choice_header ) { printf( "\tglobal tmpvar_%d\n", -(cfg->nameindex) ); } } /* * Generate global declarations for the condition chain. */ for ( cond = cfg->cond; cond != NULL; cond = cond->next ) { switch( cond->op ) { default: break; case op_variable: if ( ! vartable[cond->nameindex].global_written ) { vartable[cond->nameindex].global_written = 1; global( vartable[cond->nameindex].name ); } break; } } /* * Generate indentation. */ printf( "\t" ); /* * Generate the conditional. */ if ( cfg->cond != NULL ) { printf( "if {" ); for ( cond = cfg->cond; cond != NULL; cond = cond->next ) { switch ( cond->op ) { default: break; case op_bang: printf( " ! " ); break; case op_eq: printf( " == " ); break; case op_neq: printf( " != " ); break; case op_and: printf( " && " ); break; case op_and1: printf( " && " ); break; case op_or: printf( " || " ); break; case op_lparen: printf( "(" ); break; case op_rparen: printf( ")" ); break; case op_variable: printf( "$%s", vartable[cond->nameindex].name ); break; case op_constant: if ( strcmp( cond->str, "n" ) == 0 ) printf( "0" ); else if ( strcmp( cond->str, "y" ) == 0 ) printf( "1" ); else if ( strcmp( cond->str, "m" ) == 0 ) printf( "2" ); else if ( strcmp( cond->str, "" ) == 0 ) printf( "4" ); else printf( "\"%s\"", cond->str ); break; } } printf( "} then {" ); } /* * Generate a procedure call to write the value. * This code depends on the write_* procedures in header.tk. */ switch ( cfg->token ) { default: if ( cfg->cond != NULL ) printf( " }" ); printf( "\n" ); break; case token_bool: case token_tristate: printf( "write_tristate $cfg $autocfg %s $%s [list $notmod] 2", vartable[cfg->nameindex].name, vartable[cfg->nameindex].name ); if ( cfg->cond != NULL ) printf( " }" ); printf( "\n" ); break; case token_choice_header: /* * This is funky code -- it fails if there were any conditionals. * Fortunately all the conditionals got stripped off somewhere * else. */ { struct kconfig * cfg1; for ( cfg1 = cfg->next; cfg1 != NULL && cfg1->token == token_choice_item; cfg1 = cfg1->next ) { printf("\n\tif { $tmpvar_%d == \"%s\" } then { write_tristate $cfg $autocfg %s 1 [list $notmod] 2 } else { write_tristate $cfg $autocfg %s 0 [list $notmod] 2 }", -(cfg->nameindex), cfg1->label, vartable[cfg1->nameindex].name,
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -