void WantEquals( void ) { SkipSpaces(); if( CurrChar != '=' && CurrChar != '#' ) OptError( LIT( STARTUP_Expect_Eql ) ); NextChar(); SkipSpaces(); }
unsigned GetValue( void ) { unsigned long val; val = GetValueLong(); if( val > 0xffff ) OptError( LIT( STARTUP_Num_Too_Big ) ); return( val ); }
/* * GetValueLong -- get a long numeric value from command line */ unsigned long GetValueLong( void ) { unsigned long val; WantEquals(); if( !isdigit( CurrChar ) ) OptError( LIT( STARTUP_Invalid_Num ) ); val = 0; do { val = val * 10 + CurrChar - '0'; NextChar(); } while( isdigit( CurrChar ) ); return( val ); }
void ProcCmd( void ) { char buff[TXT_LEN]; unsigned screen_mem; size_t have_env; int pass; MemSize = MIN_MEM_SIZE; TrapParms = NULL; _SwitchOn( SW_LOAD_SYMS ); _SwitchOn( SW_USE_MOUSE ); ProcSysOptInit(); DUIScreenOptInit(); have_env = DUIEnvLkup( EXENAME, buff, sizeof( buff ) ); for( pass = 1; pass <= 2; ++pass ) { if( have_env ) { GetArg = &GetEnvArg; CurrArgc = 0; CurrArgp = buff; ProcOptList( pass ); if( CurrChar != ARG_TERMINATE ) { OptError( LIT_ENG( STARTUP_Expect_End_Env_Str ) ); } } GetArg = &GetCmdArg; CurrArgc = 0; CurrArgp = GetCmdArg( 0 ); if( CurrArgp != NULL ) { ProcOptList( pass ); if( pass == 2 ) { SetCmdArgStart( CurrArgc, CurrArgp ); } } if( pass == 1 ) { screen_mem = DUIConfigScreen(); if( MemSize + screen_mem >= MemSize ) { MemSize += screen_mem; } else { MemSize = ~0; } SysSetMemLimit(); TrapParms = DupStr( "std" ); InvokeFile = DupStr( "" ); } } }
static void ProcOptList( int pass ) { char buff[80]; char err_buff[CMD_LEN]; char *curr; unsigned long mem; SetupChar(); /* initialize scanner */ for( ;; ) { SkipSpaces(); if( !OptDelim( CurrChar ) ) break; NextChar(); curr = buff; #ifndef __GUI__ if( CurrChar == '?' ) { PrintUsage( MSG_USAGE_BASE ); StartupErr( "" ); } #endif while( isalnum( CurrChar ) ) { *curr++ = CurrChar; NextChar(); } if( curr == buff ) { if( OptDelim( CurrChar ) ) { NextChar(); SkipSpaces(); break; } OptError( LIT_ENG( STARTUP_No_Recog_Optn ) ); } switch( Lookup( OptNameTab, buff, curr - buff ) ) { case OPT_CONTINUE_UNEXPECTED_BREAK: _SwitchOn( SW_CONTINUE_UNEXPECTED_BREAK ); break; case OPT_DEFERSYM: _SwitchOn( SW_DEFER_SYM_LOAD ); break; case OPT_DOWNLOAD: DownLoadTask = true; break; case OPT_NOEXPORTS: _SwitchOn( SW_NO_EXPORT_SYMS ); break; case OPT_LOCALINFO: if( pass == 2 ) { char *symfile = GetFileName( pass ); FindLocalDebugInfo( symfile ); _Free( symfile ); } break; case OPT_INVOKE: if( pass == 2 ) _Free( InvokeFile ); InvokeFile = GetFileName( pass ); break; case OPT_NOINVOKE: if( pass == 2 ) _Free( InvokeFile ); InvokeFile = NULL; break; case OPT_NOSOURCECHECK: _SwitchOff( SW_CHECK_SOURCE_EXISTS ); break; case OPT_NOSYMBOLS: _SwitchOff( SW_LOAD_SYMS ); break; case OPT_NOMOUSE: _SwitchOff( SW_USE_MOUSE ); break; case OPT_DYNAMIC: mem = GetMemory(); if( pass == 1 ) { if( mem < MIN_MEM_SIZE ) mem = MIN_MEM_SIZE; MemSize = mem; } break; case OPT_DIP: { int i; for( i = 0; DipFiles[i] != NULL; ++i ) ; DipFiles[i] = GetFileName( pass ); } break; case OPT_TRAP: if( pass == 2 ) _Free( TrapParms ); TrapParms = GetFileName( pass ); SkipSpaces(); if( CurrChar == TRAP_PARM_SEPARATOR ) { NextChar(); GetTrapParm( pass ); } else if( CurrChar == '{' ) { GetTrapParm( pass ); } break; #ifdef ENABLE_TRAP_LOGGING case OPT_TRAP_DEBUG_FLUSH: if( pass == 2 ) _Free( TrapTraceFileName ); TrapTraceFileName = GetFileName( pass ); TrapTraceFileFlush = true; break; case OPT_TRAP_DEBUG: if( pass == 2 ) _Free( TrapTraceFileName ); TrapTraceFileName = GetFileName( pass ); TrapTraceFileFlush = false; break; #endif case OPT_REMOTE_FILES: _SwitchOn( SW_REMOTE_FILES ); break; case OPT_LINES: DUISetNumLines( GetValue() ); break; case OPT_COLUMNS: DUISetNumColumns( GetValue() ); break; #ifdef BACKWARDS case OPT_NO_FPU: case OPT_NO_ALTSYM: break; case OPT_REGISTERS: GetValue(); break; #endif case OPT_INITCMD: GetInitCmd( pass ); break; case OPT_POWERBUILDER: _SwitchOn( SW_POWERBUILDER ); break; case OPT_HELP: #ifndef __GUI__ PrintUsage( MSG_USAGE_BASE ); StartupErr( "" ); #endif break; default: if( !ProcSysOption( buff, curr - buff, pass ) && !DUIScreenOption( buff, curr - buff, pass ) ) { Format( err_buff, LIT_ENG( STARTUP_Invalid_Option ), buff, curr - buff ); StartupErr( err_buff ); } break; } } }