📄 coptions.c
字号:
static void Set_ZU()
{
CompFlags.zu_switch_used = 1;
TargetSwitches |= FLOATING_SS;
}
#if _CPU == 386
static void Set_ZZ()
{
CompFlags.use_stdcall_at_number = 0;
}
#endif
#if _CPU == 8086
static void ChkSmartWindows()
{
if( tolower(*OptScanPtr) == 's' ) { /* 22-mar-94 */
TargetSwitches |= SMART_WINDOWS;
++OptScanPtr;
}
EnsureEndOfSwitch();
}
static void SetCheapWindows()
{
_SetConstTarg( "cheap_windows" );
ChkSmartWindows();
}
#endif
static void SetWindows()
{
_SetConstTarg( "windows" );
#if _CPU == 8086
ChkSmartWindows();
#endif
}
#endif
static void SetGenerateMakeAutoDepend()
{
CompFlags.generate_auto_depend = 1;
CMemFree( DependFileName );
DependFileName = GetAFileName();
if( !DependFileName[0] )
{
CMemFree( DependFileName );
DependFileName = NULL;
}
}
static void SetAutoDependTarget()
{
// auto set depend yes...
CompFlags.generate_auto_depend = 1;
CMemFree( DependTarget );
DependTarget = GetAFileName();
}
static void SetAutoDependSrcDepend()
{
CompFlags.generate_auto_depend = 1;
CMemFree( SrcDepName );
SrcDepName = GetAFileName();
}
static void SetAutoDependForeSlash()
{
DependForceSlash = '/';
}
static void SetAutoDependBackSlash()
{
DependForceSlash = '\\';
}
static void Set_PL() { CompFlags.cpp_line_wanted = 1; }
static void Set_PC()
{
CompFlags.keep_comments = 1;
CompFlags.comments_wanted = 1;
}
static void Set_PW()
{
if( OptValue != 0 && OptValue < 20 ) OptValue = 20;
if( OptValue > 10000 ) OptValue = 10000;
SetCppWidth( OptValue );
}
static void Set_PreProcChar() { PreProcChar = *OptScanPtr++; }
static void Set_OA() { GenSwitches |= RELAX_ALIAS; }
static void Set_OB() { GenSwitches |= BRANCH_PREDICTION; }
static void Set_OD() { GenSwitches |= NO_OPTIMIZATION; }
static void Set_OE()
{
Inline_Threshold = OptValue;
Toggles |= TOGGLE_INLINE;
}
#if _CPU == 8086 || _CPU == 386
static void Set_OC() { TargetSwitches |= NO_CALL_RET_TRANSFORM; }
static void Set_OF()
{
TargetSwitches |= NEED_STACK_FRAME;
if( OptValue != 0 ) DefaultInfo.class |= GENERATE_STACK_FRAME;
}
static void Set_OM() { TargetSwitches |= I_MATH_INLINE; }
static void Set_OP() { CompFlags.op_switch_used = 1; } // force floats to memory
#endif
static void Set_OH() { GenSwitches |= SUPER_OPTIMAL; }
static void Set_OK() { GenSwitches |= FLOW_REG_SAVES; }
static void Set_OI() { CompFlags.inline_functions = 1; }
static void Set_OL() { GenSwitches |= LOOP_OPTIMIZATION; }
static void Set_OL_plus() { GenSwitches |= LOOP_OPTIMIZATION | LOOP_UNROLLING; }
static void Set_ON() { GenSwitches |= FP_UNSTABLE_OPTIMIZATION; }
static void Set_OO() { GenSwitches &= ~MEMORY_LOW_FAILS; }
static void Set_OR() { GenSwitches |= INS_SCHEDULING; }
static void Set_OS() { GenSwitches &= ~NO_OPTIMIZATION; OptSize = 100; }
static void Set_OT() { GenSwitches &= ~NO_OPTIMIZATION; OptSize = 0; }
static void Set_OU() { CompFlags.unique_functions = 1; }
static void Set_OX()
{
Toggles &= ~TOGGLE_CHECK_STACK;
GenSwitches &= ~NO_OPTIMIZATION;
GenSwitches |= LOOP_OPTIMIZATION | INS_SCHEDULING | BRANCH_PREDICTION;
CompFlags.inline_functions = 1;
OptValue = 20; // Otherwise we effectively disable inlining!
Set_OE();
#if _CPU == 8086 || _CPU == 386
TargetSwitches |= I_MATH_INLINE;
#endif
}
static void Set_OZ() { GenSwitches |= NULL_DEREF_OK; }
// '=' indicates optional '='
// '#' indicates a decimal numeric value
// '$' indicates identifier
// '@' indicates filename
// '*' indicates additional characters will be scanned by option routine
// if a capital letter appears in the option, then input must match exactly
// otherwise all input characters are changed to lower case before matching
static struct option const Optimization_Options[] = {
{ "a", 0, Set_OA },
{ "b", 0, Set_OB },
{ "d", 0, Set_OD },
{ "e=#", 20, Set_OE },
#if _CPU == 8086 || _CPU == 386
{ "c", 0, Set_OC },
{ "f+", 1, Set_OF },
{ "f", 0, Set_OF },
{ "m", 0, Set_OM },
{ "p", 0, Set_OP },
#endif
{ "h", 0, Set_OH },
{ "i", 0, Set_OI },
{ "k", 0, Set_OK },
{ "l+", 0, Set_OL_plus },
{ "l", 0, Set_OL },
{ "n", 0, Set_ON },
{ "o", 0, Set_OO },
{ "r", 0, Set_OR },
{ "s", 0, Set_OS },
{ "t", 0, Set_OT },
{ "u", 0, Set_OU },
{ "x", 0, Set_OX },
{ "z", 0, Set_OZ },
{ 0, 0, 0 },
};
static struct option const Preprocess_Options[] = {
{ "c", 0, Set_PC },
{ "l", 0, Set_PL },
{ "w=#", 0, Set_PW },
{ "=", 0, Set_PreProcChar },
{ "#", 0, Set_PreProcChar },
{ 0, 0, 0 },
};
static void SetOptimization();
static void SetPreprocessOptions();
static struct option const CFE_Options[] = {
{ "o*", 0, SetOptimization },
{ "i=@", 0, SetInclude },
{ "zq", 0, Set_ZQ },
#if _CPU == 8086
{ "0", SW_CPU0, SetCPU },
{ "1", SW_CPU1, SetCPU },
{ "2", SW_CPU2, SetCPU },
{ "3", SW_CPU3, SetCPU },
{ "4", SW_CPU4, SetCPU },
{ "5", SW_CPU5, SetCPU },
{ "6", SW_CPU6, SetCPU },
#endif
#if _CPU == 386
{ "6r", SW_CPU6, SetCPU_xR },
{ "6s", SW_CPU6, SetCPU_xS },
{ "6", SW_CPU6, SetCPU },
{ "5r", SW_CPU5, SetCPU_xR },
{ "5s", SW_CPU5, SetCPU_xS },
{ "5", SW_CPU5, SetCPU },
{ "4r", SW_CPU4, SetCPU_xR },
{ "4s", SW_CPU4, SetCPU_xS },
{ "4", SW_CPU4, SetCPU },
{ "3r", SW_CPU3, SetCPU_xR },
{ "3s", SW_CPU3, SetCPU_xS },
{ "3", SW_CPU3, SetCPU },
#endif
{ "aa", 0, Set_AA },
// more specific commands first ... otherwise the
// short command sets us up for failure...
{ "adt=@", 0, SetAutoDependTarget },
{ "adbs", 0, SetAutoDependBackSlash },
{ "add=@", 0, SetAutoDependSrcDepend },
{ "adfs", 0, SetAutoDependForeSlash },
{ "ad=@", 0, SetGenerateMakeAutoDepend },
{ "ai", 0, Set_AI },
{ "aq", 0, Set_AQ },
#if _MACHINE == _ALPHA
{ "as", 0, Set_AS },
#endif
{ "d0*", 0, Set_D0 },
{ "d1*", 1, Set_D1 },
{ "d2*", 2, Set_D2 },
{ "d3*", 3, Set_D3 },
{ "d9*", 9, Set_D9 },
{ "d+*", 0, SetExtendedDefines },
{ "db", 0, SetBrowserInfo },
{ "d*", 0, DefineMacro },
{ "en", 0, Set_EN },
{ "ep=#", 0, Set_EP },
{ "ee", 0, Set_EE },
{ "ef", 0, Set_EF },
{ "ei", 0, Set_EI },
{ "em", 0, Set_EM },
#if _CPU == 8086 || _CPU == 386
{ "ec", 0, Set_EC },
{ "et", 0, Set_ET },
{ "eq", 0, Set_EQ },
{ "etp", 0, Set_ETP },
{ "esp", 0, Set_ESP },
#endif
#if _CPU == 386
{ "ez", 0, Set_EZ },
#endif
{ "e=#", 0, SetErrorLimit },
#if _CPU == 8086 || _CPU == 386
{ "hw", SW_DF_WATCOM, Set_DbgFmt },
#endif
{ "hda", SW_DF_DWARF_A, Set_DbgFmt },
{ "hdg", SW_DF_DWARF_G, Set_DbgFmt },
{ "hd", SW_DF_DWARF, Set_DbgFmt },
{ "hc", SW_DF_CV, Set_DbgFmt },
#if _CPU == 8086 || _CPU == 386
{ "g=$", 0, SetGroup },
#endif
{ "lc", 0, SetAPILogging },
#ifndef NDEBUG
#ifdef ASM_OUTPUT
{ "la", 0, SetAsmListing },
#endif
#ifdef OWL_LOGGING
{ "lo", 0, SetOwlLogging },
#endif
#endif
#if _CPU == 8086 || _CPU == 386
{ "ms", SW_MS, SetMemoryModel },
{ "mm", SW_MM, SetMemoryModel },
{ "mc", SW_MC, SetMemoryModel },
{ "ml", SW_ML, SetMemoryModel },
#endif
#if _CPU == 8086
{ "mh", SW_MH, SetMemoryModel },
#endif
#if _CPU == 386
{ "mf", SW_MF, SetMemoryModel },
#endif
#if _CPU == 8086 || _CPU == 386
{ "nc=$", 0, SetCodeClass },
{ "nd=$", 0, SetDataSegName },
{ "nt=$", 0, SetTextSegName },
#endif
{ "nm=$", 0, SetModuleName },
{ "p*", 0, SetPreprocessOptions },
{ "rod=@", 0, SetReadOnlyDir },
#if _CPU == 8086 || _CPU == 386
{ "re", 0, Set_RE },
{ "ri", 0, Set_RI },
{ "r", 0, Set_R },
{ "sg", 0, Set_SG },
{ "st", 0, Set_ST },
#endif
#if _MACHINE == _ALPHA
{ "si", 0, Set_SI },
#endif
{ "s", 0, Set_S },
{ "bd", 0, Set_BD },
{ "bc", 0, Set_BC },
{ "bg", 0, Set_BG },
{ "bm", 0, Set_BM },
#if _CPU != 8086
{ "br", 0, Set_BR },
#endif
{ "bw", 0, Set_BW },
{ "bt=$", 0, Set_BT },
{ "fhq=@", 0, Set_FHQ },
{ "fh=@", 0, Set_FH },
{ "fi=@", 0, Set_FI },
{ "fld", 0, Set_FLD },
{ "fo=@", 0, Set_FO },
{ "fr=@", 0, Set_FR },
#if _CPU == 8086 || _CPU == 386
{ "fp2", SW_FPU0, SetFPU },
{ "fp3", SW_FPU3, SetFPU },
{ "fp5", SW_FPU5, SetFPU },
{ "fp6", SW_FPU6, SetFPU },
{ "fpr", 0, Set_FPR },
{ "fpi87", 0, Set_FPI87 },
{ "fpi", 0, Set_Emu },
{ "fpc", 0, Set_FPC },
{ "fpd", 0, Set_FPD },
#endif
{ "j", 0, SetCharType },
{ "tp=$", 0, Set_TP },
{ "u$", 0, Set_U },
{ "v", 0, Set_V },
{ "wcd=#", 0, Set_WCD },
{ "wce=#", 0, Set_WCE },
{ "we", 0, Set_WE },
{ "wo", 0, Set_WO },
{ "wx", 0, Set_WX },
{ "w=#", 0, SetWarningLevel },
#if _CPU == 386
{ "xgv", 0, Set_XGV },
#endif
{ "xbsa", 0, Set_XBSA },
#if _MACHINE == _ALPHA
{ "xd", 0, Set_XD },
#endif
{ "za99", 0, Set_ZA99 },
{ "zA", 0, SetStrictANSI },
{ "za", 0, Set_ZA },
#if _CPU == 8086 || _CPU == 386
{ "zc", 0, Set_ZC },
{ "zdf", 0, Set_ZDF },
{ "zdp", 0, Set_ZDP },
{ "zdl", 0, Set_ZDL },
{ "zff", 0, Set_ZFF },
{ "zfp", 0, Set_ZFP },
{ "zgf", 0, Set_ZGF },
{ "zgp", 0, Set_ZGP },
#endif
{ "ze", 0, Set_ZE },
{ "zg", 0, Set_ZG },
{ "zi", 0, Set_ZI },
{ "zk0u", 0, Set_ZK0U },
{ "zk0", 0, Set_ZK0 },
{ "zk1", 0, Set_ZK1 },
{ "zk2", 0, Set_ZK2 },
{ "zk3", 0, Set_ZK3 },
{ "zkl", 0, Set_ZKL },
{ "zku=#", 0, Set_ZKU },
{ "zk", 0, Set_ZK },
{ "zld", 0, Set_ZLD },
{ "zlf", 0, Set_ZLF },
{ "zls", 0, Set_ZLS },
{ "zl", 0, Set_ZL },
{ "zm", 0, Set_ZM },
{ "zpw", 0, Set_ZPW },
{ "zp=#", 1, SetPackAmount },
#if _MACHINE == _ALPHA
{ "zps", 0, SetStructPack },
#endif
#if _CPU == 8086 || _CPU == 386
{ "zro", 0, Set_ZRO },
#endif
#if _CPU == 386
{ "zri", 0, Set_ZRI },
#endif
{ "zs", 0, Set_ZS },
{ "zt=#", 256, SetDataThreshHold },
#if _CPU == 8086 || _CPU == 386
{ "zu", 0, Set_ZU },
#endif
{ "zev", 0, Set_ZEV },
#if _CPU == 8086
{ "zW*", 0, SetCheapWindows },
{ "zw*", 0, SetWindows },
#endif
#if _CPU == 386
{ "zw", 0, SetWindows },
{ "zz", 0, Set_ZZ },
#endif
{ 0, 0, 0 },
};
static char *ProcessOption( struct option const *op_table, char *p, char *option_start )
{
int i;
int j;
char *opt;
char c;
for( i = 0; ; i++ ) {
opt = op_table[i].option;
if( opt == NULL ) break;
c = tolower( *p );
if( c == *opt ) {
OptValue = op_table[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;
op_table[i].function();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -