⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 coptions.c

📁 Open Watcom 的 C 编译器源代码
💻 C
📖 第 1 页 / 共 5 页
字号:
        if( SwData.cpu == SW_CPU_DEF ) SwData.cpu = SW_CPU5;
        if( SwData.fpu == SW_FPU_DEF ) SwData.fpu = SW_FPU3;
        if( SwData.mem == SW_M_DEF   ) SwData.mem = SW_MF;
        TargetSwitches |= USE_32;
    #else
        if( SwData.cpu == SW_CPU_DEF ) SwData.cpu = SW_CPU0;
        if( SwData.fpu == SW_FPU_DEF ) SwData.fpu = SW_FPU0;
        if( SwData.mem == SW_M_DEF   ) SwData.mem = SW_MS;
        SET_PEG( f );
        SET_PEG( g );
    #endif
    switch( SwData.fpu ) {
    case SW_FPU0:
        SET_FPU_LEVEL( ProcRevision, FPU_87 );
        break;
    case SW_FPU3:
        SET_FPU_LEVEL( ProcRevision, FPU_387 );
        break;
    case SW_FPU5:
        SET_FPU_LEVEL( ProcRevision, FPU_586 );
        break;
    case SW_FPU6:
        SET_FPU_LEVEL( ProcRevision, FPU_686 );
        break;
    default:
        break;
    }
    switch( SwData.fpt ) {
    case SW_FPT_DEF:
    case SW_FPT_EMU:
        SwData.fpt = SW_FPT_EMU;
        SET_FPU_EMU( ProcRevision );
        break;
    case SW_FPT_INLINE:
        SET_FPU_INLINE( ProcRevision );
        break;
    case SW_FPT_CALLS:
        SET_FPU( ProcRevision, FPU_NONE );
        break;
    }
    SET_CPU( ProcRevision, SwData.cpu - SW_CPU0 + CPU_86 );
    switch( SwData.mem ) {
    case SW_MF:
        TargetSwitches |= FLAT_MODEL | CHEAP_POINTER;
        SET_PEG( d );
        SET_PEG( e );
        SET_PEG( f );
    case SW_MS:
        TargetSwitches |= CHEAP_POINTER;
        SET_PEG( d );
        break;
    case SW_MM:
        TargetSwitches |= BIG_CODE | CHEAP_POINTER;
        SET_PEG( d );
        break;
    case SW_MC:
        TargetSwitches |= BIG_DATA | CHEAP_POINTER;
        break;
    case SW_ML:
        TargetSwitches |= BIG_CODE | BIG_DATA | CHEAP_POINTER;
        break;
    case SW_MH:
#if _CPU == 386
        TargetSwitches |= CHEAP_POINTER;
#endif
        TargetSwitches |= BIG_CODE | BIG_DATA;
        break;
    default:
        break;
    }
    if( !SwData.peg_ds_on ) TargetSwitches |= FLOATING_DS;
    if( !SwData.peg_es_on ) TargetSwitches |= FLOATING_ES;
    if( !SwData.peg_fs_on ) TargetSwitches |= FLOATING_FS;
    if( !SwData.peg_gs_on ) TargetSwitches |= FLOATING_GS;
#endif
    switch( SwData.dbg_fmt ) {
    case SW_DF_WATCOM:
        /* nothing to do */
        break;
    case SW_DF_CV:
        GenSwitches |= DBG_CV;
        break;
    case SW_DF_DEF:
        /* DWARF is the default */
    case SW_DF_DWARF:
        GenSwitches |= DBG_DF;
        break;
    case SW_DF_DWARF_A:
        GenSwitches |= DBG_DF | DBG_PREDEF;
        SymDFAbbr = SpcSymbol( "__DFABBREV", SC_EXTERN  );
        break;
    case SW_DF_DWARF_G:
        GenSwitches |= DBG_DF | DBG_PREDEF;
        SymDFAbbr = SpcSymbol( "__DFABBREV", SC_NULL  );
        break;
    }
}

static void MacroDefs()
{
    if( TargetSwitches & I_MATH_INLINE ) {
        Define_Macro( "__SW_OM" );
    }
#if _CPU == 8086 || _CPU == 386
 #if _CPU == 8086
  #define X86 "_M_I86"
 #else
  #define X86 "_M_386"
 #endif
    switch( SwData.mem ) {
    case SW_MS:
        Define_Macro( "__SW_MS" );
        Define_Macro( X86 "SM" );
        break;
    case SW_MM:
        Define_Macro( "__SW_MM" );
        Define_Macro( X86 "MM" );
        break;
    case SW_MC:
        Define_Macro( "__SW_MC" );
        Define_Macro( X86 "CM" );
        break;
    case SW_ML:
        Define_Macro( "__SW_ML" );
        Define_Macro( X86 "LM" );
        break;
    case SW_MH:
        Define_Macro( "__SW_MH" );
        Define_Macro( X86 "HM" );
        break;
    case SW_MF:
        Define_Macro( "__SW_MF" );
        break;
    default:
        break;
    }
    if( TargetSwitches & FLOATING_FS ) {
        Define_Macro( "__SW_ZFF" );
    } else {
        Define_Macro( "__SW_ZFP" );
    }
    if( TargetSwitches & FLOATING_GS ) {
        Define_Macro( "__SW_ZGF" );
    } else {
        Define_Macro( "__SW_ZGP" );
    }
    if( TargetSwitches & FLOATING_DS ) {
        Define_Macro( "__SW_ZDF" );
    } else {
        Define_Macro( "__SW_ZDP" );
    }
    if( TargetSwitches & FLOATING_SS ) {
        Define_Macro( "__SW_ZU" );
    }
    if( TargetSwitches & INDEXED_GLOBALS ) {
        Define_Macro( "__SW_XGV" );
    }
    if( TargetSwitches & WINDOWS ) {
        Define_Macro( "__SW_ZW" );
    }
    if( TargetSwitches & NO_CALL_RET_TRANSFORM ) {
        Define_Macro( "__SW_OC" );
    }
    if( TargetSwitches & NEED_STACK_FRAME ) {
        Define_Macro( "__SW_OF" );
    }
#endif
    if( GenSwitches & SUPER_OPTIMAL ) {
        Define_Macro( "__SW_OH" );
    }
    if( GenSwitches & FLOW_REG_SAVES ) {
        Define_Macro( "__SW_OK" );
    }
    if( GenSwitches & NO_OPTIMIZATION ) {
        Define_Macro( "__SW_OD" );
    }
    if( GenSwitches & RELAX_ALIAS ) {
        Define_Macro( "__SW_OA" );
    }
    if( GenSwitches & LOOP_OPTIMIZATION ) {
        Define_Macro( "__SW_OL" );
    }
    if( GenSwitches & INS_SCHEDULING ) {
        Define_Macro( "__SW_OR" );
    }
    if( GenSwitches & FP_UNSTABLE_OPTIMIZATION ) {
        Define_Macro( "__SW_ON" );
    }
    if( GenSwitches & FPU_ROUNDING_OMIT ) {
        Define_Macro( "__SW_ZRO" );
    }
    if( GenSwitches & FPU_ROUNDING_INLINE ) {
        Define_Macro( "__SW_ZRI" );
    }
    if( CompFlags.use_long_double ) {
        Define_Macro( "__SW_FLD" );
    }

    if( CompFlags.signed_char ) {
        Define_Macro( "__SW_J" );
    }
    if( PCH_FileName != NULL ) {
        Define_Macro( "__SW_FH" );
    }
    if( CompFlags.no_pch_warnings ) {
        Define_Macro( "__SW_FHQ" );
    }
    if( CompFlags.inline_functions ) {
        Define_Macro( "__SW_OI" );
    }
    if( CompFlags.unique_functions ) {
        Define_Macro( "__SW_OU" );
    }
    #if _CPU == 386
        if( CompFlags.register_conventions ) {
            Define_Macro( "__SW_3R" );
        } else {
            Define_Macro( "__SW_3S" );
        }
    #endif
    if( CompFlags.emit_names ) {
        Define_Macro( "__SW_EN" );
    }
    if( CompFlags.make_enums_an_int ) {
        Define_Macro( "__SW_EI" );
    }
    if( CompFlags.zc_switch_used ) {
        Define_Macro( "__SW_ZC" );
    }
    if( CompFlags.use_unicode == 0 ) {
        Define_Macro( "__SW_ZK" );
    }
#if _CPU == 8086 || _CPU == 386
    if( CompFlags.save_restore_segregs ) {
        Define_Macro( "__SW_R" );
    }
    if( CompFlags.sg_switch_used ) {
        Define_Macro( "__SW_SG" );
    }
    if( CompFlags.st_switch_used ) {
        Define_Macro( "__SW_ST" );
    }
    if( CompFlags.zu_switch_used ) {
        Define_Macro( "__SW_ZU" );
    }
#endif
    if( CompFlags.bm_switch_used ) {
        Define_Macro( "__SW_BM" );
        Define_Macro( "_MT" );
    }
    if( CompFlags.bd_switch_used ) {
        Define_Macro( "__SW_BD" );
    }
    if( CompFlags.bc_switch_used ) /*    Target is console application */
    {
        Define_Macro( "__SW_BC" );
    }
    if( CompFlags.bg_switch_used ) {
        Define_Macro( "__SW_BG" );
    }
    if( CompFlags.br_switch_used ) {
        Define_Macro( "__SW_BR" );
        Define_Macro( "_DLL" );
    }
    if( CompFlags.bw_switch_used ) {
        Define_Macro( "__SW_BW" );
    }
    if( CompFlags.zm_switch_used ) {
        Define_Macro( "__SW_ZM" );
    }
    if( CompFlags.ep_switch_used ) {
        Define_Macro( "__SW_EP" );
    }
    if( CompFlags.ee_switch_used ) {
        Define_Macro( "__SW_EE" );
    }
    if( CompFlags.ec_switch_used ) {
        Define_Macro( "__SW_EC" );
    }
#if _CPU == 8086 || _CPU == 386
    switch( GET_CPU( ProcRevision ) ) {
    case CPU_86:
        Define_Macro( "__SW_0" );
        PreDefine_Macro( "_M_IX86=0" );
        break;
    case CPU_186:
        Define_Macro( "__SW_1" );
        PreDefine_Macro( "_M_IX86=100" );
        break;
    case CPU_286:
        Define_Macro( "__SW_2" );
        PreDefine_Macro( "_M_IX86=200" );
        break;
    case CPU_386:
        Define_Macro( "__SW_3" );
        PreDefine_Macro( "_M_IX86=300" );
        break;
    case CPU_486:
        Define_Macro( "__SW_4" );
        PreDefine_Macro( "_M_IX86=400" );
        break;
    case CPU_586:
        Define_Macro( "__SW_5" );
        PreDefine_Macro( "_M_IX86=500" );
        break;
    case CPU_686:
        Define_Macro( "__SW_6" );
        PreDefine_Macro( "_M_IX86=600" );
        break;
    }
    switch( SwData.fpt ) {
    case SW_FPT_CALLS:
        CompFlags.op_switch_used = 0;           /* 05-sep-92 */
        Define_Macro( "__SW_FPC" );
        break;
    case SW_FPT_EMU:
        Define_Macro( "__SW_FPI" );
        Define_Macro( "__FPI__" );
        break;
    case SW_FPT_INLINE:
        Define_Macro( "__SW_FPI87" );
        Define_Macro( "__FPI__" );
        break;
    default:
        break;
    }
    switch( GET_FPU_LEVEL( ProcRevision ) ) {
    case FPU_NONE:
        break;
    case FPU_87:
        Define_Macro( "__SW_FP2" );
        break;
    case FPU_387:
        Define_Macro( "__SW_FP3" );
        break;
    case FPU_586:
        Define_Macro( "__SW_FP5" );
        break;
    case FPU_686:
        Define_Macro( "__SW_FP6" );
        break;
    }
    if( SwData.nd_used ) {
        Define_Macro( "__SW_ND" );
    }
    if( CompFlags.op_switch_used ) {            /* 05-sep-92 */
        Define_Macro( "__SW_OP" );
    }
#endif
    if( !(Toggles & TOGGLE_CHECK_STACK) ) {
        Define_Macro( "__SW_S" );
    }
}

static void AddIncList( char *str )
{
    int         len2;
    int         len;
    char        *p;

    len = strlen( str );
    if( HFileList != NULL ) {
        len2 = strlen( HFileList );
        p = (char *) CMemAlloc( len + len2 + 2 );
        memcpy( p, HFileList, len2 );
        p[ len2 ] = INCLUDE_SEP;
        memcpy( p + len2 + 1, str, len );
        p[ len + len2 + 1 ] = '\0';
        CMemFree( HFileList );
        HFileList = p;
    } else {
        p = (char *) CMemAlloc( (len + 1) * sizeof( char ) );
        memcpy( p, str, len );
        p[ len ] = '\0';
        HFileList = p;
    }
}

#define INC_VAR "INCLUDE"

void MergeInclude()
{
    /* must be called after GenCOptions to get req'd HFileList */
    char        *env_var;
    char        buff[128];

    switch( TargSys ) {
    case TS_CHEAP_WINDOWS:
    case TS_WINDOWS:
        strcpy( buff, "WINDOWS" );
        break;
    case TS_NETWARE:
    case TS_NETWARE5:
        strcpy( buff, "NETWARE" );
        break;
    default:
        strcpy( buff, SwData.sys_name );
        break;
    }
    strcat( buff, "_" INC_VAR );
    env_var = FEGetEnv( buff );
    if( env_var != NULL ) {
        while( *env_var == ' ' )  ++env_var;        /* 23-jun-93 */
        AddIncList( env_var );
    }

    #if _CPU == 386
        env_var = FEGetEnv( "INC386" );               /* 03-may-89 */
        if( env_var == NULL ) {                 /* 12-mar-90 */
            env_var = FEGetEnv( INC_VAR );
        }
    #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 );
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -