setupinf.c
来自「开放源码的编译器open watcom 1.6.0版的源代码」· C语言 代码 · 共 1,908 行 · 第 1/5 页
C
1,908 行
def_ret = TRUE;
}
id = set_dlg_push_button( line_start, line_start, dlg->curr_dialog->controls, dlg->array.num-1, dlg->row_num,
dlg->num_push_buttons, W/BW - 1, W, BW );
if( def_ret ) dlg->curr_dialog->ret_val = IdToDlgState( id );
dlg->max_width = max( dlg->max_width, dlg->num_push_buttons * ( ( 3*BW ) / 2 ) );
line = next; next = NextToken( line, ',' );
if( line != NULL ) {
// condition for visibility (dynamic)
GUIStrDup( line,
&dlg->curr_dialog->pVisibilityConds[ dlg->curr_dialog->num_controls ] );
}
} else {
rc = FALSE;
}
return( rc );
}
static bool dialog_edit_button( char *next, DIALOG_INFO *dlg )
/*************************************************************/
{
int len;
char *line;
char *vbl_name;
char *val;
char *section;
char *button_text;
char *dialog_name;
#if defined( __NT__ )
char *value;
#endif
vhandle var_handle;
vhandle var_handle_2;
char buff[MAXBUF];
bool rc = TRUE;
char dummy_var[ DUMMY_VAR_SIZE ];
line = next; next = NextToken( line, ',' );
GUIStrDup( line, &vbl_name );
var_handle = AddVariable( vbl_name );
line = next; next = NextToken( line, ',' );
val = NULL;
if( line[ 0 ] != '\0' ) {
if( line[0] == '%' ) {
val = GetVariableStrVal( &line[1] );
} else if( line[0] == '@' ) {
// support @envvar@section:value - 2nd part is optional
section = strchr( &line[1], '@' );
if( section != NULL ) {
// terminate envvar
*section = '\0';
#if defined( __NT__ )
++section;
value = strchr( section, ':' );
if( value != NULL ) {
*value = '\0';
++value;
if( GetRegString( HKEY_CURRENT_USER, section, value, buff, MAXBUF ) ) {
val = buff;
}
}
#endif
}
if( val == NULL && line[1] != '\0' ) {
val = getenv( &line[1] );
}
} else {
val = line;
}
}
if( val == NULL || val[0] == '\0' ) val = VarGetStrVal( var_handle );
SetVariableByHandle( var_handle, val );
if( VariablesFile != NULL ) {
ReadVariablesFile( VarGetName( var_handle ) );
}
line = next; next = NextToken( line, '"' );
line = next; next = NextToken( line, '"' );
ReplaceVars( buff, line );
line = next; next = NextToken( line, ',' );
line = next; next = NextToken( line, ',' );
line = TrimQuote( line );
var_handle_2 = AddVariable( line );
len = max( BW, strlen( line + 2 ) );
button_text = line;
line = next; next = NextToken( line, ',' );
dialog_name = line;
line = next; next = NextToken( line, ',' );
if( line == NULL || *line == '\0' || EvalCondition( line ) ) {
dlg->curr_dialog->pVariables[dlg->num_variables] = var_handle;
dlg->num_variables += 1;
line = next; next = NextToken( line, ',' );
if( line != NULL ) {
// condition for visibility (dynamic)
GUIStrDup( line,
&dlg->curr_dialog->pVisibilityConds[ dlg->curr_dialog->num_controls ] );
GUIStrDup( line,
&dlg->curr_dialog->pVisibilityConds[ dlg->curr_dialog->num_controls + 1 ] );
}
MakeDummyVar( dummy_var );
var_handle_2 = AddVariable( dummy_var );
SetVariableByHandle( var_handle_2, dialog_name );
set_dlg_push_button( dummy_var, button_text, dlg->curr_dialog->controls, dlg->array.num-1, dlg->row_num,
4, 4, W, BW );
BumpArray( &dlg->array );
set_dlg_edit( dlg->curr_dialog->controls, dlg->array.num-1,
buff, VarGetId( var_handle ), C0, dlg->row_num, C0 + BW - 1 );
if( buff[0] != '\0' ) {
BumpArray( &dlg->array );
if( line != NULL ) {
// condition for visibility (dynamic)
GUIStrDup( line,
&dlg->curr_dialog->pVisibilityConds[ dlg->curr_dialog->num_controls + 2 ] );
}
MakeDummyVar( dummy_var );
// dummy_var allows control to have an id - used by dynamic visibility feature
var_handle = AddVariable( dummy_var );
set_dlg_dynamstring( dlg->curr_dialog->controls, dlg->array.num-1, buff, var_handle,
C0, dlg->row_num, C0 + strlen( buff ) );
}
dlg->max_width = max( dlg->max_width, 2*strlen( buff ) );
} else {
rc = FALSE;
}
GUIMemFree( vbl_name );
return( rc );
}
static bool dialog_other_button( char *next, DIALOG_INFO *dlg )
/*************************************************************/
{
char dummy_var[ DUMMY_VAR_SIZE ];
char *line, *button_text, *next_copy, *text, *dialog_name;
char *condition, *vis_condition;
vhandle var_handle;
bool rc = TRUE;
line = next; next = NextToken( line, ',' );
button_text = TrimQuote( line );
line = next; next = NextToken( line, ',' );
dialog_name = line;
GUIStrDup( next, &next_copy );
line = next; next = NextToken( line, ',' );
text = line;
line = next; next = NextToken( line, ',' );
condition = line;
line = next; next = NextToken( line, ',' );
vis_condition = line;
if( condition == NULL || *condition == '\0' || EvalCondition( condition ) ) {
MakeDummyVar( dummy_var );
var_handle = AddVariable( dummy_var );
SetVariableByHandle( var_handle, dialog_name );
set_dlg_push_button( dummy_var, button_text, dlg->curr_dialog->controls, dlg->array.num-1, dlg->row_num,
4, 4, W, BW );
if( text != NULL ) {
BumpArray( &dlg->array );
dlg->col_num = 1;
dialog_static( next_copy, dlg );
}
if( vis_condition != NULL ) {
// condition for visibility (dynamic)
GUIStrDup( vis_condition,
&dlg->curr_dialog->pVisibilityConds[ dlg->curr_dialog->num_controls ] );
if( text != NULL ) {
GUIStrDup( vis_condition,
&dlg->curr_dialog->pVisibilityConds[ dlg->curr_dialog->num_controls + 1 ] );
}
}
} else {
rc = FALSE;
}
GUIMemFree( next_copy );
return( rc );
}
static vhandle dialog_set_variable( DIALOG_INFO *dlg, char *vbl_name,
char *init_cond )
/*********************************************************************************/
{
vhandle var_handle;
dlg=dlg;
var_handle = AddVariable( vbl_name );
dlg->curr_dialog->pVariables[dlg->num_variables] = var_handle;
if( *init_cond == '\0' ) {
dlg->curr_dialog->pConditions[dlg->num_variables] = NULL;
} else {
GUIStrDup( init_cond, &dlg->curr_dialog->pConditions[dlg->num_variables] );
if( SkipDialogs ) {
if( stricmp( init_cond, "true" ) == 0 ) {
SetVariableByHandle( var_handle, "1" );
} else if( stricmp( init_cond, "false" ) == 0 ) {
SetVariableByHandle( var_handle, "0" );
} else {
SetVariableByHandle( var_handle, init_cond );
}
}
}
dlg->num_variables += 1;
return( var_handle );
}
static bool dialog_radiobutton( char *next, DIALOG_INFO *dlg )
/************************************************************/
{
int len;
char *line;
char *vbl_name;
vhandle var_handle;
char *text;
char *init_cond;
bool rc = TRUE;
line = next; next = NextToken( line, ',' );
GUIStrDup( line, &vbl_name );
line = next; next = NextToken( line, ',' );
GUIStrDup( line, &init_cond );
line = next; next = NextToken( line, '"' );
line = next; next = NextToken( line, '"' );
GUIStrDup( line, &text );
line = next; next = NextToken( line, ',' );
line = next; next = NextToken( line, ',' );
if( line == NULL || *line == '\0' || EvalCondition( line ) ) {
var_handle = dialog_set_variable( dlg, vbl_name, init_cond );
dlg->num_radio_buttons += 1;
len = strlen( text ) + 4; // room for button
line = next; next = NextToken( line, ',' );
if( line != NULL ) {
// condition for visibility (dynamic)
GUIStrDup( line,
&dlg->curr_dialog->pVisibilityConds[ dlg->curr_dialog->num_controls ] );
}
set_dlg_radio( dlg->curr_dialog->controls, dlg->array.num-1,
dlg->num_radio_buttons, text, VarGetId( var_handle ), C0, dlg->row_num, C0 + len );
dlg->max_width = max( dlg->max_width, len );
} else {
rc = FALSE;
}
GUIMemFree( init_cond );
GUIMemFree( vbl_name );
GUIMemFree( text );
return( rc );
}
static bool dialog_checkbox( char *next, DIALOG_INFO *dlg )
/*********************************************************/
{
int len;
char *line;
char *vbl_name;
vhandle var_handle;
char *text;
char *init_cond;
bool rc = TRUE;
line = next; next = NextToken( line, ',' );
GUIStrDup( line, &vbl_name );
line = next; next = NextToken( line, ',' );
GUIStrDup( line, &init_cond );
line = next; next = NextToken( line, '"' );
line = next; next = NextToken( line, '"' );
GUIStrDup( line, &text );
line = next; next = NextToken( line, ',' );
line = next; next = NextToken( line, ',' );
if( line == NULL || *line == '\0' || EvalCondition( line ) ) {
var_handle = dialog_set_variable( dlg, vbl_name, init_cond );
len = strlen( text ) + 4; // room for button
line = next; next = NextToken( line, ',' );
if( line != NULL ) {
// condition for visibility (dynamic)
GUIStrDup( line,
&dlg->curr_dialog->pVisibilityConds[ dlg->curr_dialog->num_controls ] );
}
set_dlg_check( dlg->curr_dialog->controls, dlg->array.num-1, text, VarGetId( var_handle ), dlg->col_num, dlg->row_num, dlg->col_num + len );
if( dlg->col_num == C0 ) {
// 1st check-box on line
dlg->max_width = max( dlg->max_width, len );
dlg->col_num += len + 1; // update col_num for next time
} else {
// 2nd check-box
len = max( dlg->col_num - 1, len );
dlg->max_width = max( dlg->max_width, 2 * len + 1 ); // add 1 for space
}
} else {
rc = FALSE;
}
GUIMemFree( init_cond );
GUIMemFree( vbl_name );
GUIMemFree( text );
return( rc );
}
static bool dialog_detail_check( char *next, DIALOG_INFO *dlg )
/*************************************************************/
{
char *line;
char *next2_org;
char *next2;
vhandle var_handle;
bool added;
line = next; next = NextToken( line, ',' );
line = TrimQuote( line );
var_handle = AddVariable( line );
SetVariableByHandle( var_handle, line );
line = next; next = NextToken( line, ',' );
GUIStrDup( next, &next2_org );
next2 = next2_org;
added = dialog_checkbox( next, dlg );
if( added ) {
BumpArray( &dlg->array );
set_dlg_push_button( VarGetName( var_handle ), line,
dlg->curr_dialog->controls, dlg->array.num-1, dlg->row_num,
4, 4, W, BW );
}
line = next2; next2 = NextToken( line, ',' );
line = next2; next2 = NextToken( line, ',' );
line = next2; next2 = NextToken( line, ',' );
line = next2; next2 = NextToken( line, ',' );
if( next2 != NULL ) {
// condition for visibility (dynamic)
GUIStrDup( next2,
&dlg->curr_dialog->pVisibilityConds[ dlg->curr_dialog->num_controls ] + 1 );
}
GUIMemFree( next2_org );
return( added );
}
extern void SimSetNeedGetDiskSizes()
/**********************************/
{
NeedGetDiskSizes = TRUE;
}
static bool dialog_editcontrol( char *next, DIALOG_INFO *dlg )
/************************************************************/
{
char *line;
char *vbl_name;
char *val;
char *section;
#if defined( __NT__ )
char *value;
#endif
vhandle var_handle;
char buff[MAXBUF];
bool rc = TRUE;
char dummy_var[ DUMMY_VAR_SIZE ];
line = next; next = NextToken( line, ',' );
GUIStrDup( line, &vbl_name );
var_handle = AddVariable( vbl_name );
line = next; next = NextToken( line, ',' );
val = NULL;
if( line[ 0 ] != '\0' ) {
if( line[0] == '%' ) {
val = GetVariableStrVal( &line[1] );
} else if( line[0] == '@' ) {
// support @envvar@section:value - 2nd part is optional
section = strchr( &line[1], '@' );
if( section != NULL ) {
// terminate envvar
*section = '\0';
#if defined( __NT__ )
++section;
value = strchr( section, ':' );
if( value != NULL ) {
*value = '\0';
++value;
if( GetRegString( HKEY_CURRENT_USER, section, value, buff, MAXBUF ) ) {
val = buff;
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?