static void SetCPUPMC( void ) /***************************/ { char *tmp; for( tmp=OptParm; tmp < OptScanPtr; tmp++ ) { if( *tmp == 'p' ) { if( SWData.cpu >= 2 ) { // set protected mode SWData.protect_mode = TRUE; } else { MsgPrintf1( MSG_CPU_OPTION_INVALID, CopyOfParm() ); } } else if( *tmp == 'r' ) { if( SWData.cpu >= 3 ) { // set register based calling convention Options.watcom_parms_passed_by_regs = TRUE; } else { MsgPrintf1( MSG_CPU_OPTION_INVALID, CopyOfParm() ); } } else if( *tmp == 's' ) { if( SWData.cpu >= 3 ) { // set stack based calling convention Options.watcom_parms_passed_by_regs = FALSE; } else { MsgPrintf1( MSG_CPU_OPTION_INVALID, CopyOfParm() ); } } else if( *tmp == '"' ) { // set default mangler char *dest; tmp++; dest = strchr(tmp, '"'); if( Options.default_name_mangler != NULL ) { AsmFree( Options.default_name_mangler ); } Options.default_name_mangler = AsmAlloc( dest - tmp + 1 ); dest = Options.default_name_mangler; for( ; *tmp != '"'; dest++, tmp++ ) { *dest = *tmp; } *dest = NULLC; } else { MsgPrintf1( MSG_UNKNOWN_OPTION, CopyOfParm() ); exit( 1 ); } } if( SWData.cpu < 3 ) { Options.watcom_parms_passed_by_regs = TRUE; if( SWData.cpu < 2 ) { SWData.protect_mode = FALSE; } } }
static void SetMM( void ) /***********************/ { char buffer[4]; switch( OptValue ) { case 'c': case 'f': case 'h': case 'l': case 'm': case 's': case 't': break; default: buffer[0] = '/'; buffer[1] = 'm'; buffer[2] = (char)OptValue; buffer[3] = '\0'; MsgPrintf1( MSG_UNKNOWN_OPTION, buffer ); exit( 1 ); } memory_model = (char)OptValue; }
static void SetMM( void ) /***********************/ { char buffer[20]; switch( OptValue ) { case 'c': case 'f': case 'h': case 'l': case 'm': case 's': case 't': break; default: strcpy( buffer, "/m" ); strcat( buffer, (char *)&OptValue ); MsgPrintf1( MSG_UNKNOWN_OPTION, buffer ); exit( 1 ); } memory_model = OptValue; }
static char *ProcessOption( char *p, char *option_start ) /*******************************************************/ { int i; int j; char *opt; char c; for( i = 0; ; i++ ) { opt = cmdl_options[i].option; if( opt == NULL ) break; c = tolower( *p ); if( c == *opt ) { OptValue = cmdl_options[i].value; j = 1; for( ;; ) { ++opt; if( *opt == '\0' || *opt == '*' ) { if( *opt == '\0' ) { if( p - option_start == 1 ) { // make sure end of option if( !OptionDelimiter( p[j] ) ) { break; } } } OptScanPtr = p + j; cmdl_options[i].function(); return( OptScanPtr ); } if( *opt == '#' ) { // collect a number if( p[j] >= '0' && p[j] <= '9' ) { OptValue = 0; for( ;; ) { c = p[j]; if( c < '0' || c > '9' ) break; OptValue = OptValue * 10 + c - '0'; ++j; } } } else if( *opt == '$' ) { // collect an identifer OptParm = &p[j]; for( ;; ) { c = p[j]; if( c == '\0' ) break; if( c == '-' ) break; if( c == ' ' ) break; if( c == SwitchChar ) break; ++j; } } else if( *opt == '@' ) { // collect a filename OptParm = &p[j]; c = p[j]; if( c == '"' ) { // "filename" for( ;; ) { c = p[++j]; if( c == '"' ) { ++j; break; } if( c == '\0' ) break; if( c == '\\' ) { ++j; } } } else { for( ;; ) { c = p[j]; if( c == '\0' ) break; if( c == ' ' ) break; if( c == '\t' ) break; #if !defined(__UNIX__) if( c == SwitchChar ) break; #endif ++j; } } } else if( *opt == '=' ) { // collect an optional '=' if( p[j] == '=' || p[j] == '#' ) ++j; } else { c = tolower( p[j] ); if( *opt != c ) { if( *opt < 'A' || *opt > 'Z' ) break; if( *opt != p[j] ) { break; } } ++j; } } } } MsgPrintf1( MSG_UNKNOWN_OPTION, option_start ); exit( 1 ); return( NULL ); }