coptions.c
来自「开放源码的编译器open watcom 1.6.0版的源代码」· C语言 代码 · 共 2,108 行 · 第 1/5 页
C
2,108 行
}
#else
env_var = FEGetEnv( INC_VAR );
#endif
if( env_var != NULL ) {
while( *env_var == ' ' ) ++env_var; /* 23-jun-93 */
AddIncList( env_var );
}
CMemFree( SwData.sys_name );
}
static int OptionDelimiter( char c )
{
if( c == ' ' || c == '-' || c == '\0' || c == '\t' || c == SwitchChar ) {
return( 1 );
}
return( 0 );
}
static void EnsureEndOfSwitch( void )
{
char c;
if( !OptionDelimiter( *OptScanPtr ) ) {
for(;;) { // find start of switch
c = *OptScanPtr;
if( c == '-' || c == SwitchChar ) break;
--OptScanPtr;
}
OptScanPtr = BadCmdLine( ERR_INVALID_OPTION, OptScanPtr );
}
}
#if _CPU == _AXP
static void SetStructPack( void ) { CompFlags.align_structs_on_qwords = 1; }
#endif
static void SetPackAmount( void ) { PackAmount = OptValue; }
static void Set_DbgFmt( void ) { SwData.dbg_fmt = OptValue; }
#if _CPU == 8086 || _CPU == 386
static void SetCPU( void ) { SwData.cpu = OptValue; }
#endif
#if _CPU == 386
static void SetCPU_xR( void ) { SwData.cpu = OptValue; CompFlags.register_conventions = 1; }
static void SetCPU_xS( void ) { SwData.cpu = OptValue; CompFlags.register_conventions = 0; }
#endif
#if _CPU == 8086 || _CPU == 386
static void SetFPU( void ) { SwData.fpu = OptValue; }
static void Set_FPR( void ) { Stack87 = 4; }
static void Set_FPI87( void ) { SwData.fpt = SW_FPT_INLINE; }
static void Set_Emu( void ) { SwData.fpt = SW_FPT_EMU; }
static void Set_FPC( void ) { SwData.fpt = SW_FPT_CALLS; }
static void Set_FPD( void ) { TargetSwitches |= P5_DIVIDE_CHECK; }
static void SetMemoryModel( void ) { SwData.mem = OptValue; }
#endif
static void Set_BD( void ) { CompFlags.bd_switch_used = 1; GenSwitches |= DLL_RESIDENT_CODE; }
static void Set_BC( void ) { CompFlags.bc_switch_used = 1; }
static void Set_BG( void ) { CompFlags.bg_switch_used = 1; }
static void Set_BM( void ) { CompFlags.bm_switch_used = 1; }
#if _CPU != 8086
static void Set_BR( void ) { CompFlags.br_switch_used = 1; }
#endif
static void Set_BW( void ) { CompFlags.bw_switch_used = 1; }
static void Set_BT( void ) { SetTargName( OptParm, OptScanPtr - OptParm ); }
static void SetExtendedDefines( void )
{
CompFlags.extended_defines = 1;
EnsureEndOfSwitch();
}
static void SetBrowserInfo( void ) { CompFlags.emit_browser_info = 1; }
#if _CPU == _AXP
static void Set_AS( void )
{
TargetSwitches |= ALIGNED_SHORT;
}
#endif
static void Set_AA( void ) { CompFlags.auto_agg_inits = 1; }
static void Set_AI( void ) { CompFlags.no_check_inits = 1; }
static void Set_AQ( void ) { CompFlags.no_check_qualifiers = 1; }
static void Set_D0( void )
{
GenSwitches &= ~(NUMBERS | DBG_TYPES | DBG_LOCALS | NO_OPTIMIZATION);
CompFlags.debug_info_some = 0;
CompFlags.no_debug_type_names = 0;
EnsureEndOfSwitch();
}
static void Set_D1( void )
{
GenSwitches |= NUMBERS;
if( *OptScanPtr == '+' ) {
++OptScanPtr;
CompFlags.debug_info_some = 1;
GenSwitches |= DBG_TYPES | DBG_LOCALS;
}
EnsureEndOfSwitch();
}
static void Set_D2( void )
{
GenSwitches |= NUMBERS | DBG_TYPES | DBG_LOCALS | NO_OPTIMIZATION;
CompFlags.inline_functions = 0;
if( *OptScanPtr == '~' ) {
++OptScanPtr;
CompFlags.no_debug_type_names = 1;
}
EnsureEndOfSwitch();
}
static void Set_D3( void )
{
CompFlags.dump_types_with_names = 1;
Set_D2();
}
static void Set_D9( void ) { CompFlags.use_full_codegen_od = 1; }
static void DefineMacro( void ) { OptScanPtr = Define_UserMacro( OptScanPtr ); }
static void SetErrorLimit( void ) { ErrLimit = OptValue; }
#if _CPU == 8086 || _CPU == 386
static void SetDftCallConv( void )
{
switch( OptValue ) {
case 1:
DftCallConv = &CdeclInfo;
break;
case 2:
DftCallConv = &StdcallInfo;
break;
case 3:
DftCallConv = &FastcallInfo;
break;
case 4:
DftCallConv = &OptlinkInfo;
break;
case 5:
DftCallConv = &PascalInfo;
break;
case 6:
DftCallConv = &SyscallInfo;
break;
case 7:
DftCallConv = &FortranInfo;
break;
case 8:
default:
DftCallConv = &WatcallInfo;
break;
}
}
static void Set_EC( void ) { CompFlags.ec_switch_used = 1; }
#endif
static void Set_EE( void ) { CompFlags.ee_switch_used = 1; }
static void Set_EF( void ) { CompFlags.ef_switch_used = 1; }
static void Set_EN( void ) { CompFlags.emit_names = 1; }
static void Set_EI( void ) { CompFlags.make_enums_an_int = 1;
CompFlags.original_enum_setting = 1;}
static void Set_EM( void ) { CompFlags.make_enums_an_int = 0;
CompFlags.original_enum_setting = 0;}
#if _CPU == 8086 || _CPU == 386
static void Set_ET( void ) { TargetSwitches |= P5_PROFILING; }
static void Set_ETP( void ) { TargetSwitches |= NEW_P5_PROFILING; }
static void Set_ESP( void ) { TargetSwitches |= STATEMENT_COUNTING; }
#endif
#if _CPU == 386
static void Set_EZ( void ) { TargetSwitches |= EZ_OMF; }
static void Set_OMF( void ) { TargetSwitches &= ~(OBJ_ELF | OBJ_COFF); }
#endif
#if /*_CPU == 386 || */_CPU == _AXP || _CPU == _PPC || _CPU == _MIPS
static void Set_ELF( void ) { GenSwitches &= ~OBJ_OWL;
GenSwitches |= OBJ_ELF; }
static void Set_COFF( void ) { GenSwitches &= ~OBJ_OWL;
GenSwitches |= OBJ_COFF; }
#endif
#if _CPU == _AXP || _CPU == _PPC || _CPU == _MIPS
static void Set_EndianLittle( void ){ GenSwitches &= ~OBJ_ENDIAN_BIG; }
static void Set_EndianBig( void ) { GenSwitches |= OBJ_ENDIAN_BIG; }
#endif
static void Set_EP( void )
{
CompFlags.ep_switch_used = 1;
ProEpiDataSize = OptValue;
}
void SetNoCurrInc( void ) { CompFlags.curdir_inc = 0;}
static void StripQuotes( char *fname )
{
char *s;
char *d;
if( *fname == '"' ) {
// string will shrink so we can reduce in place
d = fname;
for( s = d + 1; *s && *s != '"'; ++s ) {
// collapse double backslashes, only then look for escaped quotes
if( s[0] == '\\' && s[1] == '\\' ) {
++s;
} else if( s[0] == '\\' && s[1] == '"' ) {
++s;
}
*d++ = *s;
}
*d = '\0';
}
}
static char *CopyOfParm( void )
{
char *p;
unsigned len;
len = OptScanPtr - OptParm;
p = (char *) CMemAlloc( len + 1 );
memcpy( p, OptParm, len );
p[ len ] = '\0';
return( p );
}
static char *GetAFileName( void )
{
char *fname;
fname = CopyOfParm();
StripQuotes( fname );
return( fname );
}
static void Set_FH( void )
{
if( OptParm == OptScanPtr ) {
PCH_FileName = DEFAULT_PCH_NAME;
} else {
PCH_FileName = GetAFileName();
}
}
static void Set_FHQ( void )
{
CompFlags.no_pch_warnings = 1;
Set_FH();
}
static void Set_FI( void )
{
ForceInclude = GetAFileName();
}
static void Set_FLD( void )
{
CompFlags.use_long_double = 1;
}
static void SetTrackInc( void )
{
CompFlags.track_includes = 1;
}
static void Set_FO( void )
{
CMemFree( ObjectFileName );
ObjectFileName = GetAFileName();
CompFlags.cpp_output_to_file = 1; /* in case '-p' option */
}
static void Set_FR( void )
{
CMemFree( ErrorFileName );
ErrorFileName = GetAFileName();
if( *ErrorFileName == '\0' ) {
CMemFree( ErrorFileName );
ErrorFileName = NULL;
}
}
#if _CPU == 8086 || _CPU == 386
static void SetCodeClass( void ) { CodeClassName = CopyOfParm(); }
static void SetDataSegName( void )
{
SwData.nd_used = 1;
DataSegName = CopyOfParm();
SegData = -1;
if( *DataSegName == '\0' ) {
CMemFree( DataSegName );
DataSegName = NULL;
}
}
static void SetTextSegName( void ) { TextSegName = CopyOfParm(); }
static void SetGroup( void ) { GenCodeGroup = CopyOfParm(); }
#endif
static void SetModuleName( void ) { ModuleName = CopyOfParm(); }
static void SetAPILogging( void ) { GenSwitches |= ECHO_API_CALLS; }
#ifndef NDEBUG
#ifdef ASM_OUTPUT
static void SetAsmListing( void ) { TargetSwitches |= ASM_OUTPUT; }
#endif
#ifdef OWL_LOGGING
static void SetOwlLogging( void ) { TargetSwitches |= OWL_LOGGING; }
#endif
#endif
static void SetInclude( void )
{
char *fname;
fname = GetAFileName();
AddIncList( fname );
CMemFree( fname );
}
static void SetReadOnlyDir( void )
{
char *dirpath;
dirpath = GetAFileName();
SrcFileReadOnlyDir( dirpath );
CMemFree( dirpath );
}
static void SetCharType( void )
{
SetSignedChar();
CompFlags.signed_char = 1;
}
#if _CPU == 8086 || _CPU == 386
static void Set_RE( void ) { CompFlags.rent = 1; }
static void Set_RI( void ) { CompFlags.returns_promoted = 1; }
static void Set_R( void ) { CompFlags.save_restore_segregs = 1; }
static void Set_SG( void ) { CompFlags.sg_switch_used = 1; }
static void Set_ST( void ) { CompFlags.st_switch_used = 1; }
#endif
#if _CPU == _AXP || _CPU == _MIPS
static void Set_SI( void ) { TargetSwitches |= STACK_INIT; }
#endif
static void Set_S( void ) { Toggles &= ~TOGGLE_CHECK_STACK; }
static void Set_TP( void )
{
char *togname;
togname = CopyOfParm();
SetToggleFlag( togname, TRUE );
CMemFree( togname );
}
static void SetDataThreshHold( void ){ DataThreshold = OptValue; }
static void Set_U( void )
{
char *name;
name = CopyOfParm();
AddUndefName( name );
CMemFree( name );
}
static void Set_V( void ) { CompFlags.generate_prototypes = 1; }
static void Set_WE( void ) { CompFlags.warnings_cause_bad_exit = 1; }
static void Set_WO( void ) { CompFlags.using_overlays = 1; }
static void Set_WX( void ) { WngLevel = 4; }
static void SetWarningLevel( void ) { WngLevel = OptValue; }
static void Set_WCD( void ) { EnableDisableMessage( 0, OptValue ); }
static void Set_WCE( void ) { EnableDisableMessage( 1, OptValue ); }
#if _CPU == 386
static void Set_XGV( void ) { TargetSwitches |= INDEXED_GLOBALS; }
#endif
static void Set_XBSA( void )
{
CompFlags.unaligned_segs = 1;
}
#if _CPU == _AXP
static void Set_XD( void ) { TargetSwitches |= EXCEPT_FILTER_USED; }
#endif
static void Set_ZA99( void )
{
CompFlags.c99_extensions = 1;
}
static void Set_ZA( void )
{
CompFlags.extensions_enabled = 0;
CompFlags.unique_functions = 1;
TargetSwitches &= ~I_MATH_INLINE;
}
static void SetStrictANSI( void )
{
CompFlags.strict_ANSI = 1;
Set_ZA();
}
#if _CPU == 8086 || _CPU == 386
static void Set_ZC( void )
{
CompFlags.strings_in_code_segment = 1;
CompFlags.zc_switch_used = 1; /* 04-jun-91 */
TargetSwitches |= CONST_IN_CODE;
}
static void Set_ZDF( void ) { SwData.peg_ds_used = 1; SwData.peg_ds_on = 0; }
static void Set_ZDP( void ) { SwData.peg_ds_used = 1; SwData.peg_ds_on = 1; }
static void Set_ZDL( void ) { TargetSwitches |= LOAD_DS_DIRECTLY; }
static void Set_ZFF( void ) { SwData.peg_fs_used = 1; SwData.peg_fs_on = 0; }
static void Set_ZFP( void ) { SwData.peg_fs_used = 1; SwData.peg_fs_on = 1; }
static void Set_ZGF( void ) { SwData.peg_gs_used = 1; SwData.peg_gs_on = 0; }
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?