home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 7 / 07.iso / c / c221 / 1.ddi / MWHC.001 / 00 < prev    next >
Encoding:
Text File  |  1992-07-27  |  68.4 KB  |  1,830 lines

  1. #########################################################################
  2. # High C / Professional Pascal / Lahey Fortran configuration file.
  3. # Copyright (C) 1989-1992 MetaWare Incorporated.  All rights reserved.
  4. #########################################################################
  5. # You may modify this file upon compiler installation.
  6. # Things you must do:
  7. #    Change HCDIR to the directory in which you installed High C compiler,
  8. #    or define HCDIR in the environment.
  9. #    Change PPDIR to the directory in which you installed Pascal compiler,
  10. #    or define PPDIR in the environment.
  11. #    Change LFDIR to the directory in which you installed Lahey Fortran
  12. #      compiler, or define LFDIR in the environment.
  13. #########################################################################
  14. #  Here, define them if you wish; take out the leading # that comments
  15. #  out the line:
  16. #HCDIR=/where/you/loadedHC
  17. #PPDIR=/where/you/loadedPP
  18. #LFDIR=/where/you/loadedLF
  19. #TOOLSDIR=/where/your/tools/are
  20. #########################################################################
  21. #  Enable C++ compilation.
  22. #  Uncomment the following line if you wish to enable C++ compilation.
  23. #  This option requires additional software supplied only with C++ compilers,
  24. #  so do not enable C++ unless you have licensed the C++ compiler.
  25. #########################################################################
  26. #CPP_OK=true
  27. #########################################################################
  28. #  Enable -Hloc C++ compilation.
  29. #  Enable -Hloclib C++ Compilation -- stream library won't work here.
  30. #  CAUTION: These features will not be supported in the future.
  31. #########################################################################
  32. #GLOC_CPP=true
  33. #LOCLIB_CPP=true
  34. # Allow user to specify C++ in environment
  35. ?%eCPP_OK ?!$CPP_OK CPP_OK=%e$CPP_OK
  36. #########################################################################
  37. #  Append default specifications to ARGS
  38. #########################################################################
  39. #  Supply any default parameters that are prepended to the actual command
  40. #  line here.
  41. #
  42. #  You could supply -c for those compilers that can't link on the host.
  43. #  You could supply -S for those compilers that can't assemble on the host.
  44. #########################################################################
  45. ARGS=
  46. #########################################################################
  47. #  Things you might do:
  48. #    Change TOOLSDIR to the directory where the assembler, linker, and UNIX
  49. #    cpp reside.
  50. #    Change the AS, LINKER, or CPP definition below to specify individually
  51. #    where the assembler, linker, or UNIX cpp reside.
  52. #    Change the LINKER definition below to indicate different libraries or
  53. #    other parameters for the link.
  54. #    Change the HCINC or PPINC variables to indicate different directories
  55. #    containing include files.
  56. #    For DOS/OS2/VMS, add a definition for TMPPREFIX which the driver will
  57. #    prepend before any argument temp file constructed when the command
  58. #    line exceeds 128 characters.  Or, supply such definition in
  59. #    the environment.
  60. #  Changes beyond this scope require reading the "configuration language"
  61. #  section of the Installation Guide.
  62. #########################################################################
  63.  
  64. #########################################################################
  65. #  Determine default directories to be referenced to access various
  66. #  components required by compilation.
  67. #########################################################################
  68. #  If XXDIR exists in the environment, choose environment version instead.
  69. #########################################################################
  70. ?%eHCDIR ?!$HCDIR HCDIR=%e$HCDIR
  71. ?%ePPDIR ?!$PPDIR PPDIR=%e$PPDIR
  72. ?%eMFDIR ?!$MFDIR MFDIR=%e$MFDIR
  73. ?%eLFDIR ?!$LFDIR LFDIR=%e$LFDIR
  74. ?%eTOOLSDIR ?!$TOOLSDIR TOOLSDIR=%e$TOOLSDIR
  75. ?%eOS2LIB ?!$OS2LIB OS2LIB=%e$OS2LIB
  76. ?!$TMPPREFIX ?%eTMPPREFIX TMPPREFIX=%e$TMPPREFIX %; \
  77.     # This will access a value in the environment if present.
  78.  
  79. ?!$HCDIR HCDIR=/you/must/specify/HCDIR
  80. ?!$PPDIR PPDIR=/you/must/specify/PPDIR
  81. ASSUME_LF=1     %; # Assume LF if neither MFDIR/LFDIR set.
  82. #ASSUME_MF=1 %; # Assume MF if neither MFDIR/LFDIR set.
  83. ?!$LFDIR ?$ASSUME_LF LFDIR=/you/must/specify/LFDIR
  84. ?!$MFDIR ?$ASSUME_MF MFDIR=/you/must/specify/MFDIR
  85. # Now we assume one of MFDIR/LFDIR are set.
  86. ?!$TOOLSDIR TOOLSDIR=
  87. DEFS= %; MDEFS= %; # MDEFS = mandatory; Hansi will not remove them.
  88.  
  89. #########################################################################
  90. #  This is the subdirectory under $HCDIR where the driver will look for
  91. #  executables.  If you want them somewhere else, change this variable.
  92. #########################################################################
  93. bin=bin
  94.  
  95. #########################################################################
  96. #  Define the target machine
  97. #########################################################################
  98. #  Compiler definition target and technology.
  99. #  Only one line should be appropriate.
  100. #########################################################################
  101. #OS=MSDOS %; CPU=I386     %; MACH=386 %; TARG=d386 %; MODELS=1 %; HC1x=1 %; PP2x=1 %; LOC=1
  102. OS=MSDOS %; CPU=I386     %; MACH=386 %; TARG=d386 %; MODELS=1
  103. #  Be sure to set LFLAG for target 29k as MRI or IPT to specify the assembler
  104. #    and the linker to be used.
  105. #    Also make sure that NATIVERUN is set to either "ebmon" or "runpceb".
  106. # MODELS = Does it support -Mx switch?
  107.  
  108. __CNF_VERSION=5
  109.  
  110. #########################################################################
  111. #  HOST definition.  Uncomment one and only one.
  112. #########################################################################
  113.  
  114. ?!$HOST #exit HOST not specified in driver config file!
  115. ?!$TARG #exit TARG not specified in driver config file!
  116.  
  117. # TARGET_IS_MSDOS is true for OS2, CDOS, and MSDOS -- things are similar.
  118. TARGET_IS_MSDOS=1
  119. ?|^     ?=# $HOST # dx86 # ^ ?=# $HOST # d386 # ^     \
  120.     ?=# $HOST # o286 # ^ ?=# $HOST # o386 # ^     \
  121.     ?=# $HOST # f286 # ^|   HOST_IS_MSDOS=1
  122.  
  123. slash=/ %; ?$HOST_IS_MSDOS slash=\ %;
  124. bin=$slash$bin     %; # Prepend appropriate dir seperator to "bin" designator
  125.  
  126. ?=^ $DRVPATH ^^ DRVPATH=./ %; # In case pgm name has no directory, supply .
  127. ?=^ $DRVPARENT ^^ DRVPARENT=. %; \
  128.     # In case pgm name has no directory, supply .
  129.  
  130. #########################################################################
  131. #  Front-end stuff to which processor-specific code may append options.
  132. #########################################################################
  133. festuff= %; # Stuff that pertains to all front-ends
  134. festuff_LOC= %; # Stuff that pertains to HC1.x and PP2.x  front-ends
  135. festuff_GOC= %; # Stuff that pertains to HC2/3.x and PP3.x  front-ends
  136. MFstuff= %; # Stuff that pertains to MF x.x front-end
  137. PPstuff= %; # Stuff that pertains to PP front ends only
  138. HCstuff= %; # Stuff that pertains to HC front ends only
  139. bestuff= %; # Stuff that pertains to HC2/3.x and PP 3.x back-ends
  140. CPPOPTS= %; # Options to be passed to outboard C preprocessor
  141. CPPDEFS= %; # -Dxxx=1 to be passed to outboard C preprocessor
  142.  
  143. #########################################################################
  144. #  Define procedures for predefining preprocessor symbols
  145. #########################################################################
  146. #proc predef name fval
  147.     # These names are legal even in ANSI mode:
  148.     val = $fval %; ?=^$?fval^^ val=1
  149.     festuff += -def "$name $val"
  150.     CPPOPTS += -D$name$)=$val
  151. #endp
  152. #proc predef_non_ansi name fval
  153.     # These names are not legal if in ANSI mode:
  154.     val = $fval %; ?=^$?fval^^ val=1
  155.     ?!-Hansi DEFS += -def "$name $val" %; CPPDEFS += -D$name$)=$val
  156. #endp
  157. #proc no_ansi_defs
  158.     DEFS = %; CPPDEFS =
  159. #endp
  160.  
  161. ##########################################################################
  162. #  Figure out what kind of driver I am.
  163. ##########################################################################
  164. # What kind of driver am I? C? Pascal? Fortran?  Depends upon my base name.
  165. dn = $~tolower~DRVNAME
  166. # If any of these strings are in the executable's name, it tells us what
  167. # kind of driver we are.
  168. ?!=^ $~str:hc~dn ^ ^ CDRV=1
  169. ?!=^ $~str:cc~dn ^ ^ CDRV=1
  170. ?!=^ $~str:pp~dn ^ ^ PDRV=1
  171. ?!=^ $~str:lf~dn ^ ^ FDRV=1
  172. ?!=^ $~str:ff~dn ^ ^ FDRV=1
  173. ?!=^ $~str:mf~dn ^ ^ FDRV=1
  174. ?!=^ $~str:xref~dn ^ ^ XDRV=1     %; # I can be xref at the same time.
  175. ?!|^ ?$CDRV ^ ?$PDRV ^ ?$FDRV ^|     #print I do not know what kind of \
  176.     driver I am:  C, Pascal, or Fortran. %; \
  177.         #exit The name of the driver must be such that I can figure this out.
  178. ?$CDRV ?$PDRV #exit I can't be both a C and Pascal driver.
  179. ?$CDRV ?$FDRV #exit I can't be both a C and Fortran driver.
  180. ?$PDRV ?$FDRV #exit I can't be both a Pascal and Fortran driver.
  181.  
  182.  
  183. ######################################################################
  184. #  For DOS or DOS 386, include DOS variables file after this comment
  185. ######################################################################
  186. ARGS2=$ARGS %; ARGS=
  187. # The set files will reset ARGS.
  188. ?!$XDRV #include $DRVNAME$)set.cnf
  189. ?$XDRV HCDIR=$DRVPARENT
  190. ARGS=$ARGS2 $ARGS
  191.  
  192.  
  193. #########################################################################
  194. # There must be no more settings of ARGS after this:
  195. ARGV=$ARGS     %; # Specify arguments to driver.
  196.  
  197. #########################################################################
  198. #  Define source file suffixes recognized by the driver.
  199. #########################################################################
  200. # Place CPP as the first element of these lists to say for which languages
  201. # CPP is supported.  Currently, just for C.  Do not confuse CPP as "C++".
  202. PEXT=.p .pas         %; # Pascal
  203. FEXT=CPP .f .for .qc .ftn %; # Fortran
  204. AEXT=.s .asm         %; # Assembly
  205. CEXT=CPP .c .i          %; # C
  206. CPPEXT=CPP .cc .cpp      %; # C++
  207.  
  208.  
  209. # Allow user-specification of C++ extensions on command line.
  210. -Hcppext=? %; # E.g., -Hcppext=c,cpp,foo
  211. #if ?$-Hcppext=?
  212.     CPPEXT=CPP
  213.     #foreach^ $~sep,~?-Hcppext=? ^ arg CPPEXT+= .$arg
  214.     # Now Rewrite CEXT, excluding those things in CPPEXT.
  215.     NEWCEXT=CPP
  216.     #proc addit x
  217.         #foreach^ $CPPEXT ^ argcpp ?=^ $arg ^ $argcpp ^ #return
  218.         NEWCEXT += $x
  219.     #endp
  220.     #foreach^ $CEXT ^ arg #call addit $arg
  221.     CEXT=$NEWCEXT
  222. #endif
  223.  
  224. #########################################################################
  225. #  Procedure for handling mutually exclusive arguments
  226. #########################################################################
  227.  
  228. #proc lastopt optlist
  229.     # Find the last opt specified in the optlist.
  230.     optmax=- %; # Default: junk.
  231.     #foreach^ $*optlist ^X ?$*X ?>^ $?#*X ^ $?#*optmax ^ optmax=$X
  232. #endp
  233. #proc mutex optlist default
  234.     #call lastopt $optlist
  235.     # If there exists a maximum option among them, kill the others off:
  236.     #if ?!=^ $optmax ^ - ^
  237.         #foreach^ $*optlist ^X ?!=^ $X ^ $optmax ^ #killopt $X
  238.     #else
  239.         # None of the options were set at all, so set the default one.
  240.         ?!=^ $default ^^ #setopt $default
  241.     #endif    
  242. #endp
  243.  
  244. # CLCC=1
  245. #if ?$CLCC
  246.     -dryrun ?-dryrun __BATCH=1 %; __NOBATCHTMP=1
  247.     -cpp=? ?-cpp=? CPPEXE=$-cpp=?
  248.     # -traditional by default.
  249.     CLOPTLIST=-ansi -Xa -Xt -traditional %; # -Xc omitted; invalid for CLCC.
  250.     #call mutex CLOPTLIST -traditional
  251.     # -list ?-list list=-on list %; -lines=? ?-lines=? list+=-lines $-lines=?
  252.     -proto ?-proto festuff_GOC = -on print_protos
  253.     -ansi ?-ansi #setopt -Hansi -Hansilib
  254.     -traditional
  255.     ?-traditional #setopt -Hcpp -Hpcc -Hnoansilib -fdouble %; \
  256.             festuff+= -on use_up_rules double_return %;     ?!-w #setopt -w2 %; \
  257.         # Set -w2 if -w wasn't given.
  258.     -target. -V    # Consume these two.
  259.     bestuff += -off optimize_divmod %; # .udivmod not in sun's library.
  260.     ?-g festuff_GOC += -on g_include_info
  261.     -M ?-M #setopt -Hmake
  262.     -MM ?-MM #setopt -Hmake -Hrel
  263.     -anno ?-anno #setopt -Hanno
  264.     x_stuff_needed=1
  265.     #call predef __CLCC__ 1
  266.     #call predef __unix__ 1
  267.     #call predef __$~tolower~CPU$)__
  268.     #call predef __$~tolower~OS$)__
  269.     #setopt -Hunixerr
  270. #endif
  271.  
  272. #########################################################################
  273. #  Other default arguments.
  274. #########################################################################
  275.  
  276. ?!$LOC #call predef _GOC
  277. ?$LOC #call predef _LOC
  278. # CPU/OS defines.
  279. #  If 386, wait to define CPU later. It may actually be a 286
  280. #call predef _$OS
  281. # For most CPUs, add lower-case version of CPU:
  282.  
  283. #call predef_non_ansi $~tolower~CPU
  284.  
  285. #foreach^ $?PREDEFS ^X #call predef_non_ansi $X 1
  286.  
  287. # Define "ATT_UNIX" variable if AT&T System V.3 or V.4
  288.  
  289. # -v means something different for AT&T V.4 and possibly for V.3.
  290.  
  291. -v ?-v __VERBOSE=1
  292.  
  293.  
  294. #########################################################################
  295. #  Error message header format.  Match UNIX or Microsoft C.
  296. #########################################################################
  297. # Format string:  %f = file  %l = line  %c = column  %q = "  %m = ,  %t = tab
  298. -Hunixerr -Hmscerr -Hturboerr -Hefmat=? -Hwfmat=?
  299. ?-Hunixerr EF=-efmat "%q%f%q%m line %l: " -wfmat "%q%f%q%m line %l: warning: "
  300. ?-Hmscerr EF=-efmat "%f(%l) : error %n: " -wfmat "%f(%l) : warning %n: "
  301. ?-Hturboerr EF=-efmat "Error %f %l: " -wfmat "Warning %f %l: "
  302. ?$EF festuff+=$EF
  303. ?$EF bestuff+=$EF
  304. # Perhaps he specified his own arbitrary format.  Send to front and back end.
  305. ?$-Hefmat=? festuff += -efmat $-Hefmat=? %; bestuff += -efmat $-Hefmat=?
  306. ?$-Hwfmat=? festuff += -wfmat $-Hwfmat=? %; bestuff += -wfmat $-Hwfmat=?
  307.  
  308. #########################################################################
  309. # DOS help facility.
  310. #########################################################################
  311. #if ?$HOST_IS_MSDOS
  312.     # Use our supplied fgrep program to produce on-line help.
  313.     -h?    # Help toggle.
  314.     # If help wanted, just find it and quit processing.
  315.     ?-h? #exec $DRVPARENT/bin/fgrep -q( $-h? $DRVPARENT/bin/hc386.hlp %; \
  316.                 #exit1 %; # Quit; no compilations.
  317. #endif
  318.  
  319. #########################################################################
  320. #  Determine where errors are sent (efile).
  321. #    For DOS and VMS, they are sent to standard output
  322. #    Otherwise, they are sent to standard error
  323. #  Determine suffix for executable of compiler:
  324. #    For DOS and VMS, it is ".exe"
  325. #    Others do not have a suffix.
  326. #########################################################################
  327.  
  328. # TAH=target at host; TAT=target at target (for native compilers).
  329. #if ?|^ ?$HOST_IS_MSDOS ^ ?=# $HOST # mvax # ^|
  330.     # Errors to stdout; files end in .exe.
  331.     efile=@ %; exe=.exe
  332.     ?=^ $HOST ^ f286 ^ exe=.286
  333.     -HV?
  334.     ?-HV? com=$-HV? %; exever=$com
  335.     TAH = $TARG %; AH = $TARG %; TAT = $TARG %; AT = $TARG
  336.     ?=# $HOST # mvax # TAH= %; AH= %; TAT= %; AT =
  337.     #    ?!=# $HOST # mvax # TAH= %; AH= %; TAT= %; AT =
  338. #else    
  339.     com=com %; efile=@E %; exe=
  340.     TAH=$TARG@$HOST %; AH=@$HOST %; TAT=$TARG@$TARG %; AT = @$TARG
  341. #endif
  342. # TAH=Composite name of a com file: target@host.
  343. EXESUFFIX=$exe %; # Inform driver.
  344.  
  345. # Determine suffix for object file: .obj for DOS and VMS; .o otherwise
  346. OBJSUFFIX=.o
  347. # MSDOS/VMS targets use .obj files.
  348. OBJSUFFIX=.obj
  349. # If exactly one source file being processed and -c/-S specified, allow -o
  350. # to specify the output.  SINGLEOBJFILE is ignored unless source count = 1.
  351. ?|^ ?-c ^ ?-S ^| ?-o? SINGLEOBJFILE=$-o?
  352.  
  353. #proc Ensure_directory thing
  354.     # Make sure *thing, if defined, ends in  \ or /.
  355.     ?$*thing ?!=^ $~tail:1~*thing ^ / ^ ?!=^ $~tail:1~*thing ^ \ ^      \
  356.         *thing = $*thing$)
  357. #endp
  358. # If object prefix specified, make sure it's a directory.
  359. ?$HOST_IS_MSDOS #call Ensure_directory OBJPREFIX
  360.  
  361. # For xreffing GOC output, there is no .xrf suffix on xrf files.
  362. XIEXT=$?:^ ?!$LOC ^ -iext " " ^^
  363. # LOC compilers expect a .(c/p) as suffix for input.  Tell them not to.
  364. IEXT=$?:^ ?$LOC ^ -iext " " ^^
  365. # LOC compilers don't expect arguments in batch files to be quoted:
  366. ?$LOC __NOQ=x %; # Tell driver.
  367.  
  368. #proc old_driver
  369.     #exit Need driver V$1.$2$?3 or later.  You have version $__major.$__minor.
  370. #endp
  371.  
  372. # If TOOLSEARCH is set we will search paths for assembler and linker (UNIX \
  373.     only)
  374. # if the file doesn't exist as specified.
  375. #proc pathsearch var path shortname
  376.     # If we shouldn't be searching, or the full name exists,
  377.     # just use the full name.
  378.     fullname=$path$slash$shortname
  379.     # Don't return the name with ".exe" appended if required to find it.
  380.     # In this way -native works properly for the tools on a .exe-host \
  381.         machine.
  382.     fullname2=$fullname
  383.     ?!=^ $?exe ^ ^ fullname2=$fullname$exe
  384.     ?|^ ?!$TOOLSEARCH ^ ?%i$fullname2 ^| *var = $fullname $*var %; #return
  385.     ?<^ $__minor ^ 6 ^     #print $fullname not found and path search \
  386.         unavailable: %;     #call old_driver 1 0 6
  387.     # Otherwise set to short name and prefix with search character :.
  388.     *var=:$shortname $*var
  389. #endp
  390.  
  391. #########################################################################
  392. #  Customized location of compiler executables and library
  393. #########################################################################
  394. #  If you want to change where HC1COM/HC2COM lives, set these lines.
  395. #  HC1COM=yourhc1com
  396. #  HC2COM=yourhc2com
  397. #  INLCOM=your inliner
  398. #  If you want to change where libraries live, set these lines:
  399. #  CLIB=yourCLIB
  400. #  PLIB=yourPLIB
  401. #  MWLIB=yourMWLIB
  402. #  If you want to change where include directory lives, set these lines.
  403. #  PPINC=-Iwhatever -Iandthensome
  404. #  HCINC=-Iwhatever -Iandthensome
  405. #  Change location of usr/include by changing USRINC.
  406. #########################################################################
  407. ?!$USRINC USRINC=/usr/include
  408.  
  409. # -D     %; # Uncomment this line for truly copious debugging information.
  410.  
  411. #######################################################################
  412. # May be invoking driver on output of preprocessed text (e.g., cfront, yacc)
  413. # If so, alter the name of the source file for sake of debugger and annotator
  414. #########################################################################
  415. -Hsrc=?
  416. ?-Hsrc=? __SOURCE=$?-Hsrc=?
  417.  
  418.  
  419.  
  420. ############################################################################
  421. #  If Pascal range-checking is to be ON, by default, comment out the \
  422.     following
  423. ############################################################################
  424. PPstuff+=-off CHECK_RANGE CHECK_SUBSCRIPT
  425.  
  426. ############################################################################
  427. #  CPP/NOCPP options.
  428. ############################################################################
  429. -Hcpp -Hnocpp    ?>^$?#-Hnocpp^$?#-Hcpp^ #killopt -Hcpp
  430.  
  431. ############################################################################
  432. #  Suppress object module?
  433. ############################################################################
  434. -Hnoobj? -noobj?
  435. ?|^?-Hnoobj^?-noobj^| __NOOBJECT=1 %; festuff_LOC += -noobj
  436.  
  437. ############################################################################
  438. #  Define profiling flags: -pg -p
  439. ############################################################################
  440. -p -pg    ?|^?-p^?-pg^| festuff_LOC += -p %; ?!$HOST_IS_MSDOS bestuff += -p
  441. ?$HOST_IS_MSDOS ?-p festuff_GOC += -p
  442.  
  443. ############################################################################
  444. #  Define floating point flags: -f -fsingle -fsingle
  445. ############################################################################
  446. -f -fsingle -fdouble -fsingle2
  447. ?>^$?#-fsingle^$?#-fdouble^ festuff += -off DOUBLE_MATH_ONLY %; fsingle=1
  448. ?>^$?#-f^$?#-fdouble^ festuff += -off DOUBLE_MATH_ONLY %; fsingle=1
  449. ?-fdouble ?>^$?#-fdouble^$?#-fsingle^ festuff += -on DOUBLE_MATH_ONLY
  450. ?-fsingle2 HCstuff += -off WIDEN_FLOAT_ARGS
  451.  
  452. ############################################################################
  453. #  PCC option.  If given, look like pcc as much as possible.
  454. ############################################################################
  455. -Hpcc
  456. # ?!-Hpcc ?!$HC1x HCstuff+= -def "__STDC__ 1"
  457. #if ?-Hpcc
  458.     ?$LOC festuff_LOC+=-on long_enums -on pcc
  459.     ?!$LOC HCstuff+= -on long_enums -on pcc -pcc
  460. #endif
  461.  
  462.  
  463. ############################################################################
  464. #  ANSI processing:  define parse/scan tables and switches.
  465. ############################################################################
  466. -Hansi
  467. #proc do_ansi
  468.     ?-Hkanji #exit Can't specify both -Hansi and -Hkanji
  469.     ?!$HCANSI_PT HCANSI_PT=$HCDIR$bin/hcansi.pt
  470.     ?!$HCANSI_ST HCANSI_ST=$HCDIR$bin/hcansi.st
  471.     ?!$HCANSI_SPT HCANSI_SPT=$HCDIR$bin/hcansip.pt
  472.     ?!$PPANSI_PT PPANSI_PT=$PPDIR$bin/ppansi.pt
  473.     ?!$PPANSI_ST PPANSI_ST=$PPDIR$bin/ppansi.st
  474.     CANSI=-pt $HCANSI_PT -spt $HCANSI_SPT -st $HCANSI_ST -ansi -on trigraphs
  475.     PANSI=-pt $PPANSI_PT -st $PPANSI_ST -ansi
  476.     #call no_ansi_defs %; # This may break lots of code, but ansi means ansi.
  477. #endp
  478. #if ?-Hansi
  479.     #call do_ansi
  480. #endif
  481.  
  482. ############################################################################
  483. #  VS Pascal compatibility
  484. ############################################################################
  485. -Hvs -vs
  486. #if ?|^ ?-Hvs ^ ?-vs ^|
  487.     ?!$VS_PT  VS_PT =$PPDIR/bin/vs.pt
  488.     ?!$VS_ST  VS_ST =$PPDIR/bin/vs.st
  489.     ?!$VS_SPT VS_SPT=$PPDIR/bin/vspre.pt
  490.     VS=-pt $VS_PT -st $VS_ST -spt $VS_SPT -vs
  491.     PPstuff+=$VS
  492.     ?-Hansi #print Cannot specify both -Hansi and -Hvs.
  493. #endif
  494.  
  495. ############################################################################
  496. #  Microsoft Pascal compatibility
  497. ############################################################################
  498. #if ?$PDRV      # Avoid introducing non-H option -ms unless Pascal driver.
  499.     -Hms -ms
  500.     #if ?|^ ?-Hms ^ ?-ms ^|
  501.         PPstuff += -mset -on pad_aggregates pad_byte_arrays align_variants align_2
  502.         bestuff += -mset
  503.     #endif
  504. #endif
  505.  
  506. #########################################################################
  507. #  Define __HIGHC__ if -Hansi and -Hpcc not specified
  508. #########################################################################
  509. ?!-Hansi ?!-Hpcc CPPHC=-D__HIGHC__=1
  510. -Hloclib
  511. -Hloc
  512. -Hcpp_ok
  513. # There are various reasons we can't have C++; consider them all here only:
  514. ?-Hloc ?!$GLOC_CPP FORCE_NOCPP=1
  515. ?-Hloclib ?!$LOCLIB_CPP FORCE_NOCPP=1
  516.  
  517. # DO_CPP means do c++: CPP_OK is 1 and FORCE_NOCPP hasn't been set.
  518. # Don't change FORCE_NOCPP after this point; it won't have effect.
  519. ?$CPP_OK ?!$FORCE_NOCPP DO_CPP=1
  520.  
  521. ?-Hcpp_ok ?!$DO_CPP -Hcpp_ok CPP_OK=1
  522. ?-Hloc ?$DO_CPP festuff_GOC+=-def "__GLOC__ 1"
  523. #proc c_wrap
  524.     # Wrap C files for C++.
  525.     ?$DO_CPP festuff_GOC+=-c_wrap ^$USRINC
  526. #endp
  527.  
  528.  
  529. #########################################################################
  530. #  Handle -Hunixlib and -Hmwlib
  531. #      IF user specified -Hunixlib then
  532. #         1) Reference UNIX header files only,
  533. #         2) Don't link in MetaWare ANSI library
  534. #########################################################################
  535. -Hunixlib -Hmwlib
  536. # There are synonyms that made sense in the past when UNIX had no ansi lib:
  537. -ansilib -noansilib -Hansilib -Hnoansilib
  538. ?-Hnoansilib    #setopt -Hunixlib
  539. ?-noansilib    #setopt -Hunixlib
  540. ?-Hansilib      #setopt -Hmwlib
  541. ?-ansilib    #setopt -Hmwlib
  542.  
  543. OPTLIST=-Hunixlib -Hmwlib
  544. # Option is mwlib by default unless UNIXLIB has been set.
  545. #call mutex OPTLIST $?:^ ?$UNIXLIB ^ -Hunixlib ^ -Hmwlib ^
  546.  
  547. #if ?-Hunixlib
  548.     #if ?!$HCINC
  549.         HCINC=-I$USRINC %; # Reference UNIX header files only
  550.         #call c_wrap
  551.     #endif
  552.     noansilib=1
  553.     ?!$CLIB CLIB= %; # Suppress MetaWare ANSI library
  554. #endif
  555.  
  556. #########################################################################
  557. #  Include files.
  558. #########################################################################
  559. ?$HCDIR ?!$HCINC HCINC=-I$HCDIR$slash$)inc
  560. #if ?-Hloclib
  561.     HCINC=-I$HCDIR$slash$)v1x$slash$)inc
  562.     ?$DO_CPP festuff_GOC+=-c_wrap ^v1x$slash$)inc
  563. #endif
  564. ?$DO_CPP CCINC=-I$HCDIR$slash$)incc %; HCINC+=$CCINC
  565. ?$PPDIR ?!$PPINC PPINC=-I$PPDIR$slash$)inc
  566. ?!$HOST_IS_MSDOS HCINC+= -I$USRINC
  567.  
  568. #########################################################################
  569. #  Debugger switches set by -g
  570. #########################################################################
  571. #if ?-g
  572.  
  573.     ?!$HCDEBUG HCDEBUG=
  574.     #if ?$LOC
  575.         festuff_LOC +=$HCDEBUG
  576.     #else
  577.         bestuff +=$HCDEBUG
  578.     #endif
  579.  
  580. #endif
  581.  
  582. #########################################################################
  583. #  Miscellaneous options.
  584. #  Those ending in ? can have a value; the rest cannot.
  585. #########################################################################
  586. -HX? -O? -w? -g? -Hasm -Hanno -Hlist -Hlist=? -Hsuffix=? -Hkanji -H+w -Hmbcs
  587. ?-Hlist list=-on list
  588. ?-Hlist=? list=-on list -list $-Hlist=? %; bestuff += -out $-Hlist=?
  589. #if ?-w
  590.     #if ?$LOC
  591.         festuff_LOC+=-off warn
  592.     #else
  593.         #if ?!$-w?
  594.         warn_level=0
  595.         #else
  596.         #foreach^ 0 1 2 3 4 ^N ?=^$N^$-w?^ warn_level=$-w?
  597.         ?!$warn_level #print Invalid warning level specification: $-w
  598.         #endif
  599.         #if ?$warn_level
  600.         HCstuff += -pragma "warning_level $warn_level"
  601.         #if ?=^$warn_level^0^
  602.             nowarn=-off warn
  603.             ?$PDRV bestuff += $nowarn
  604.         #endif
  605.         ?$FDRV MFstuff+= -w $warn_level
  606.         ?!<^$warn_level^4^ HCstuff += -on VP_UP_WARN
  607.         ?<^$warn_level^2^ HCstuff += -off PROTOTYPE_CONVERSION_WARN
  608.         #endif
  609.     #endif
  610. #endif
  611.  
  612. #################################################################
  613. # Process optimization level (-O switch)
  614. #################################################################
  615. #    Define meaning of optimization levels
  616. #       -O<level>     Optimize for speed at level <level>
  617. #    If no level is specified, 2 is assumed.
  618. #    If -O not specified, level is 1.
  619. #    If -Os, this means optimize-for-space.
  620. #    If you wish, you can name your own optimization levels (see below).
  621. ##############################################################
  622. #if ?-O        # if -O specified
  623.     O_level=2 %; #     Default, if level number not specified (-O).
  624.     ?$-O? O_level = $-O?
  625. #else
  626.     O_level = 1
  627. #endif
  628.  
  629. #############################################################
  630. # Set procedure opt_<level> to the appropriate options code
  631. # for optimization level <level>.
  632. # If no -O is specified, the default level is 1.
  633. # If -O is specified without a level number, the default is 2
  634. #
  635. # To turn on optimization toggle:  -on toggle_name...
  636. # To turn on loop-unrolling:   -L factor,size
  637. #
  638. # To turn on inlining: set HIT and/or HIC to appropriate values
  639. #############################################################
  640. #proc opt_s
  641.     bestuff += -on cross_jump optimize_for_space preload_args_from_memory         local_cse_iterate live_dead_iterate         mem_refs_from_loop loop_reg_rename         reg_alloc_enhance reduce_reg_contention
  642. #endp
  643.  
  644. #proc opt_0
  645.     bestuff += -on SOURCE_CODE_ORDER
  646. #endp
  647.  
  648. #proc opt_1
  649.     #call opt_0
  650.     bestuff += PRELOAD_ARGS_FROM_MEMORY
  651.     ?!-g bestuff += CROSS_JUMP
  652. #endp
  653.  
  654. #proc opt_2
  655.     # Notice that opt_2 is _not_ opt_1 with more things.
  656.     bestuff += -on BACK_SUBSTITUTE_EPILOG HIGH_LEVEL_SCHEDULING         GLOBAL_CSE LOCAL_CSE_ITERATE LIVE_DEAD_ITERATE CROSS_JUMP         MEM_REFS_FROM_LOOP LOOP_REG_RENAME         REG_ALLOC_ENHANCE REDUCE_REG_CONTENTION
  657. #endp
  658.  
  659. #proc opt_3
  660.     #call opt_2
  661.     bestuff += -on LOW_LEVEL_SCHEDULING CLEANUP_SPILLS
  662.     ?$NCR HIT=20 %; HIC=4
  663. #endp
  664.  
  665. #proc opt_4
  666.     #call opt_3
  667.     bestuff += -on BEHAVED
  668.     HCstuff += -on behaved %; # Keep in sync with above.
  669.     HIT=20 %; HIC=4
  670. #endp
  671.  
  672. #proc opt_5
  673.     #call opt_4
  674.     bestuff += -on STRENGTH_REDUCE INDUCTION_ELIM
  675. #endp
  676.  
  677. # Add loop unrolling and (for 860) software pipelining.
  678. #proc opt_6
  679.     #call opt_5
  680.     bestuff += -L 4,64
  681. #endp
  682.  
  683. #proc opt_7
  684.     #call opt_6
  685.     # Extra optimization for Intel 860
  686. #endp
  687.  
  688. #############################################################
  689. #  If you want to have your own optimization designation,
  690. #  set the value here.  E.g.,
  691. #          opt_fred = -on this -off that
  692. #  Then you can say -Ofred.
  693. #############################################################
  694.  
  695. # Now access the appropriate opt_xxx procedure:
  696. whichopt=opt_$O_level
  697. #if ?$*whichopt
  698.     #call $whichopt
  699. #else
  700.     #print Unknown optimization designation: $-O.  Opt level 0 assumed.
  701.     #call opt_0
  702. #endif
  703. bestuff += -l$O_level %; # Pass opt-level to back-end
  704.  
  705. #####################################################
  706. # End of processing optimization levels
  707. #####################################################
  708.  
  709. # Loop unrolling parameters appear after opt levels
  710. # so user's spec takes precedence.
  711. ?!$LOC -Hunroll=? ?-Hunroll=? #foreach^ $~all>~-Hunroll=? ^ X bestuff += -L \
  712.     $X
  713.  
  714. #################################################################
  715. # Handle other switches
  716. #################################################################
  717.  
  718. ?-Hasm festuff_LOC += -on asm %; bestuff+=-a -on asm
  719. ?-Hanno bestuff+= -a
  720. -Htmpprefix=? ?-Htmpprefix=? TMPPREFIX=$-Htmpprefix=?
  721. # Be sure the TMPPREFIX ends in a directory separator.
  722. ?$TMPPREFIX ?!=^ $~tail:1~TMPPREFIX ^ / ^ ?!=^ $~tail:1~TMPPREFIX ^ \ ^ \
  723.     TMPPREFIX=$TMPPREFIX/
  724. ?-g festuff_LOC+= -debug %; festuff_GOC += -g
  725. ?-Hsuffix=? OBJSUFFIX=$-Hsuffix=?
  726. ?-Hkanji kanji=-st $HCDIR$bin/ck.st -kanji %;     bestuff += -dbcs %; \
  727.     # Define Kanji scan tables.
  728. # Define Multibyte scan tables and pass -dbcs switch to front and back end..
  729. #if ?-Hmbcs
  730.     festuff_GOC += -def _MBCS
  731.     #if ?=^$OS$CPU^AIXIBM370^
  732.         festuff_GOC += -mbcs %; bestuff += -mbcs
  733.     #elif ?=^$OS^SUN^
  734.         festuff_GOC += -kanji %; bestuff += -kanji
  735.     #else
  736.         festuff_GOC += -dbcs -st $HCDIR$bin/cmbcs.st %;         bestuff += -dbcs
  737.     #endif
  738. #endif
  739. ?-Hsuffix=? OBJSUFFIX=$-Hsuffix=?
  740. ?-E E=-ppo @
  741. ?-P P=-ppo %s.i %; # Put preprocessing output in the .i file.
  742. ?-H+w HCstuff+= -off pcc_msgs
  743. ?!$LOC bestuff+=-e %; \
  744.     # Force optimizer to send warnings and errors to stdout.
  745. ?-Hmset bestuff+= -XM %; # Use Microsoft sets
  746.  
  747. #########################################################################
  748. #  Deal with targets that support multiple memory models
  749. #########################################################################
  750. #if ?$MODELS     %; # Does this support memory models?
  751.     -M? # Declare option -M with argument.    Now check the arguments:
  752.     #if ?-M
  753.         #foreach(^ l s m c b ^ large small medium compact big ^) v1 v2     ?=^ $-M? ^ $v1 ^ model=$v2 %; \
  754.             mletter=$v1
  755.     #endif
  756.     #if ?!$model
  757.         # if model wasn't defined, but -M was, complain.
  758.         ?-M #exit Invalid memory model specification: $?-M
  759.         model = small %; mletter = s %; # default if no other specified.
  760.     #else
  761.         # Don't force the model unless specified; this allows a
  762.         # profile to specify it.
  763.         festuff += -mm $model
  764.     #endif
  765.     ?-Hloclib model1x=v1x$slash$)$model
  766. #endif
  767.  
  768. #########################################################################
  769. #  Define libraries to be referenced in the generic case
  770. #########################################################################
  771. lib=lib
  772. ?$model lib=$lib/$model
  773.  
  774. ?$PDRV langname=PP %; ?!$LIBDIR LIBDIR=$PPDIR$slash$lib
  775. ?$CDRV langname=HC %; ?!$LIBDIR LIBDIR=$HCDIR$slash$lib
  776. #if ?$FDRV
  777.     #if ?$MFDIR
  778.         langname=MF %; ?!$LIBDIR LIBDIR=$MFDIR$slash$lib
  779.     #elif ?$LFDIR
  780.         langname=LF %; ?!$LIBDIR LIBDIR=$LFDIR$slash$lib
  781.         FSTART=$LIBDIR/fcrt0.o %; \
  782.             # Additional start-up routine for Lahey fortran.
  783.     #endif
  784. #endif
  785. CRT=crt
  786. START=$LIBDIR/$CRT$)0.o     %; # Start, if using MW libraries.
  787. ENTRY=_start
  788.  
  789. SYSLIB=/lib
  790. # For UNIX V.4, /lib is now in the C compilation system (ccs) directory.
  791.  
  792. # Set PLIB_USER_DEFINED if PLIB was set, etc.
  793. #foreach^ PLIB CLIB CCLIB FLIB MWLIB ^ N  X=$N$)_USER_DEFINED %; ?$*N *X=1
  794.  
  795. ?!$PLIB  PLIB=$LIBDIR/libpp.a
  796. FLIBNAME=$?:# ?$MFDIR # libf.a # lf$TARG.a #
  797. ?!$FLIB  FLIB=$LIBDIR/$FLIBNAME
  798. ?!$CLIB  CLIB=$LIBDIR/libc.a
  799. ?$DO_CPP ?!$CCLIB CCLIB=$LIBDIR/libcc.a
  800. ?!$MWLIB MWLIB=$LIBDIR/libmw.a
  801.  
  802. ?$LOC CLIB=     %; # If LOC compilers, no MW-supplied libc.a.
  803. lc = -lc     %; # Default.
  804. ldname=ld     %; # Default.
  805.  
  806. #proc checkpath
  807.     # See if $2 exists on path $*1.  We pass indirect in case $*1 is blank.
  808.     # If so call $3 with the full name.
  809.     # Be sure not to check for the existence of files like "C:\/link.exe".
  810.     # DOS gets a file open error (although C:/bin\/link.exe is OK),
  811.     # and the 3COM network gives a "Abort, Retry, Fail" (!!!) message.
  812.     # So this procedure overcomes the DOS and 3COM bugs:
  813.     path=$*1
  814.     # The slash variable was getting clobbered, so I had to copy into a
  815.     # local variable and use the local.  This way, it doesn't matter if
  816.     # it gets clobbered.  JT 1/30/90
  817.     localslash=$slash
  818.     # #print looking for $path$localslash$2
  819.     ?$HOST_IS_MSDOS ?|# ?=^ $~tail:1~path ^ / ^ # ?=^ $~tail:1~path ^ \ ^ # \
  820.         | localslash=
  821.     ?%i$path$localslash$2 #call $3 $path$localslash$2
  822. #endp
  823.  
  824. #########################################################################
  825. #  Library search mechanism.
  826. #########################################################################
  827. # Library search should be used when under non-UNIX systems or when
  828. # the libraries are independent of the host UNIX.
  829. # -Lxxx specifies a directory xxx to search in finding a library.
  830. # -lxxx specifies a library to search for.
  831. # If targetted to DOS, libraries are assumed to end in .lib.
  832. # Otherwise, they start with lib (unless -lxxx contains "lib") and
  833. # end in $LIBEXT
  834.  
  835. #NOTE: AM29K usurps "-lregs=xxx". Therefore we must declare it before -l?
  836. #  We must also intercept -lm so as to insert 29000 version of 29050 version
  837.  
  838.  
  839. LIBSEARCH=1
  840. # dotlib necessary due to .l86 default in Pharlap cross linker and
  841. # different FlexOS 286 convention.
  842. dotlib=.lib
  843. ?=. $TARG . f286 . dotlib=.l86[li]
  844.  
  845.  
  846. #if ?$LIBSEARCH
  847.     -L? -l?    # Library search path -L and library specification -l.
  848.     LIBEXT=a %; # Unix lib extension; may be altered in machine-specific
  849.     #  sections below prior to calling libsearch
  850.     #proc libsearch model_directory %; # Parameter relevant only to DOS.
  851.         # ?<^ $__minor ^ 5 ^ #call old_driver 1 0 5
  852.         EXTRALIBS=
  853.         set="EXTRALIBS+=%$1 %; FOUND=1"
  854.         #proc find_lib libname libsuffix
  855.         FOUND=0
  856.         ln=$libname
  857.  
  858.         # Do we need a . character?
  859.         ?=^ $~basename~~str:.~ln ^ ^ ln=$ln$dotlib
  860.         # Search as normal name first.
  861.         ?%i$ln #call set $ln %; #return
  862.         # Then in libpaths:
  863.         #foreach^ $~all>~?-L? ^ libpath #call checkpath libpath $ln set
  864.         # Then in distribution:
  865.         ?<^ $FOUND ^ 1 ^ #call checkpath model_directory $ln set
  866.         ln=$libname %; # For message below.
  867.  
  868.         ?<^ $FOUND ^ 1 ^ #print Warning: Library $ln not found, hence is \
  869.             omitted from link.
  870.         #endp
  871.  
  872.         #  Handle the AM29K -cl option
  873.         #
  874.  
  875.  
  876.         #foreach^ $~all>~?-l? ^ libwanted #call find_lib $libwanted $?libappendix
  877.     #endp
  878. #endif
  879.  
  880. #########################################################################
  881. #  OS MS-DOS Dependencies
  882. #########################################################################
  883.  
  884. -Hnogloc
  885. ?-Hnogloc bestuff += -Xn
  886. -fsoft    # For GOC only.
  887. -Hl=?    # Coprocessor/emulator library selection.
  888. -Hlib=?    # This is now obsolete.
  889. mletter= %; # Only small model for 386.
  890.  
  891. # Default to coprocessor for cross-compilers
  892. #if ?$HOST_IS_MSDOS
  893.     whichlib=e
  894.     # Change default if host machine has 8087 (MS-DOS/OS2 driver only).
  895.     ?$__87_EXISTS whichlib=c    
  896. #else
  897.     whichlib=c
  898. #endif
  899. ?=^ $?-Hl=? ^ c ^ whichlib=c
  900. ?=^ $?-Hl=? ^ e ^ whichlib=e
  901. #if ?$LOC
  902.     -femc87
  903.     ?-486 festuff_LOC += -on 486
  904.     ?-fsoft whichlib=e %; festuff_LOC += -off floating_point
  905.     na=$slash$)na
  906.     ?-f287 whichlib=c %; festuff_LOC += -on floating_point
  907.     ?-f387 whichlib=c %; festuff_LOC += -on 387 -on floating_point
  908.     ?-f1167 whichlib=e %; festuff_LOC += -on 1167  -def "__1167 1"
  909.     ?-f3167 whichlib=e %; festuff_LOC += -on 3167  -def "__1167 1"
  910.     ?-f4167 whichlib=e %; festuff_LOC += -on 3167  -def "__1167 1"
  911.     ?-femc87 whichlib=c %; festuff_LOC += -on emc87
  912. #else
  913.     na=$slash$)hcna
  914.     ?=^ $whichlib ^ e ^ whichlib=soft
  915.     ?=^ $whichlib ^ c ^ whichlib=387
  916.     ?-fsoft whichlib=soft
  917.     ?-f287 whichlib=287
  918.     ?-f387 whichlib=387
  919.     ?-f1167 whichlib=1167
  920.     ?-f3167 whichlib=3167
  921.     ?-f4167 whichlib=3167
  922.     ?-486sx ?!-f287 ?!-f387 ?!-1167 ?!-3167 ?!-f4167 whichlib=soft
  923.     #if ?|/ ?-Hloc / ?-Hloclib /|
  924.         ?=^$whichlib^287^ whichlib=loc %; whichgloclib=287 %; which1xlib=c
  925.         ?=^$whichlib^387^ whichlib=loc387 %; whichgloclib=387 %; which1xlib=c
  926.         ?=^$whichlib^soft^ whichlib=loc %; whichgloclib=soft %; which1xlib=e
  927.         ?=^$whichlib^1167^ whichlib=1167 %; whichgloclib=1167 %; which1xlib=e
  928.         ?=^$whichlib^3167^ whichlib=3167 %; whichgloclib=3167 %; which1xlib=e
  929.         na1x=$slash$)na
  930.     #endif
  931.     #if ?|/ ?-Hloc / ?-Hloclib /|
  932.         festuff += -pragma "calling_convention(_DEFAULT_CALLING_CONVENTION|_LOC_COMPAT,_DEFAULT)"
  933.         festuff += -pragma "calling_convention(_DEFAULT_CALLING_CONVENTION)"
  934.         festuff +=  -pragma "Align_members(1)"
  935.         bestuff += -Xl     %; # Tell back-end about -Hloc switch
  936.     #endif
  937. #endif
  938. _dir=$langname$)DIR %; _dir=$*_dir
  939. #call libsearch $_dir$slash$model %; # Find any libraries; add to EXTRALIBS.
  940. # Windows 3.0 support
  941. INITOBJS= %; DOSLIB=
  942. -Hwin
  943. #if ?-Hwin
  944.     DOSLIB= $_dir$slash$model$slash$)mwlibw$dotlib
  945.     #if ?-Hloclib
  946.         INITOBJS= $_dir$slash$model1x$slash$)initwin.obj %n
  947.     #else
  948.         INITOBJS= $_dir$slash$model$slash$)initwin.obj %n
  949.     #endif
  950. #endif
  951. -Hads
  952. #if ?-Hads
  953.     #if ?-Hloclib
  954.         INITOBJS= $_dir$slash$model1x$slash$)initads.obj $_dir$slash$model1x$slash$)dosads.obj %n
  955.     #else
  956.         INITOBJS= $_dir$slash$model$slash$)initads.obj $_dir$slash$model$slash$)mwintads.obj %n
  957.     #endif
  958. #endif
  959. -Hadi
  960. #if ?-Hadi
  961.     #if ?-Hloclib
  962.         INITOBJS= $_dir$slash$model1x$slash$)initadi.obj $_dir$slash$model1x$slash$)dosadi.obj %n
  963.     #else
  964.         INITOBJS= $_dir$slash$model$slash$)initadi.obj $_dir$slash$model$slash$)mwintadi.obj %n
  965.     #endif
  966. #endif
  967.  
  968. #if ?$HOST_IS_MSDOS
  969.     ULN=USERLIB$~toupper~mletter$~toupper~whichlib
  970. #else
  971.     ULN=userlib$~tolower~mletter$~tolower~whichlib
  972. #endif
  973. #if ?|/ ?-f1167 / ?-f3167 / ?-f4167 /|
  974.     # for weitek link with high speed lib
  975.     EXTRALIBS = $?EXTRALIBS $_dir$slash$)small$slash$)hcwp$dotlib
  976. #endif
  977. ?-Hlib=? EXTRALIBS= $?EXTRALIBS $~all>~?-Hlib=?
  978. #if ?$LOC
  979.     DOSLIB+=$?EXTRALIBS $?*ULN
  980. #else
  981.     DOSLIB+=$?EXTRALIBS $?USERLIB386 $?*ULN $?USERLIBNA
  982. #endif
  983. #
  984. # Support for Rational's DOS4G.  The converted libraries currently
  985. # reside in small/dos4g.  The toggles have different names for LOC and
  986. # GOC.
  987. #
  988. -Hdos4g
  989. #if ?-Hdos4g
  990.     festuff_GOC+=-on os2_obj
  991.     festuff_LOC+=-on os2_obj
  992.     LINKNAME=glu
  993.     ASNAME=masm386
  994. #endif
  995. ?$DO_CPP ?!-Hloclib DOSLIB+= $_dir$slash$model$slash$)hcc$mletter$)386$dotlib
  996. #if ?-Hloc
  997.     ?$DO_CPP DOSLIB+= \
  998.         $_dir$slash$model$slash$)hcc$mletter$whichgloclib$dotlib
  999. #elif ?!-Hloclib
  1000.     ?$DO_CPP DOSLIB+= $_dir$slash$model$slash$)hcc$mletter$whichlib$dotlib
  1001. #endif
  1002. #if ?!$LOC ?!-Hloclib
  1003.     DOSLIB+= $_dir$slash$model$slash$~tolower~langname$mletter$)386$dotlib
  1004.     DOSLIB+= $_dir$slash$model$slash$~tolower~langname$mletter$whichlib$dotlib
  1005.     #if ?$FDRV ?$MFDIR
  1006.         # Add C stuff after the fortran stuff.
  1007.         DOSLIB+= $_dir$slash$model$slash$)hc$mletter$)386$dotlib
  1008.         DOSLIB+= $_dir$slash$model$slash$)hc$mletter$whichlib$dotlib
  1009.     #endif
  1010. #endif
  1011. ?-Hloclib DOSLIB+= \
  1012.     $_dir$slash$model1x$slash$~tolower~langname$mletter$which1xlib$dotlib
  1013.  
  1014. # HC non-ansi library for MS-DOS:
  1015. #if ?|^ ?$CDRV ^ ?$FDRV ^|  ?!-Hansi ?!=^ $OS ^ OS2 ^ ?!=^ $OS ^ CDOS ^
  1016.     #if ?-Hloclib
  1017.         DOSLIB+=$_dir$slash$model1x$na1x$mletter$dotlib
  1018.     #else
  1019.         DOSLIB+=$_dir$slash$model$na$mletter$dotlib
  1020.     #endif
  1021. #endif
  1022. ?-Hloclib DOSLIB+= $_dir$slash$model1x$slash$mletter$)ldstub$dotlib
  1023. # OS2 libraries; typically, DOSCALLS is always needed, ANSI or not.
  1024.  
  1025. #proc check_link_as ldname asname
  1026.  
  1027.     #proc find varname toolname
  1028.         ?!$*varname set="*varname=%$1" %;         ?%i$toolname *varname=$toolname
  1029.         # Split the path by : if on UNIX and ; if on DOS.
  1030.         elements=$?:^ ?$HOST_IS_MSDOS ^ %e$~sep;~PATH ^ %e$~sep:~PATH ^
  1031.         #foreach^ $TOOLSDIR $elements ^ dir             #call checkpath dir $toolname set %; \
  1032.             ?$*varname #break
  1033.         ?!$*varname *varname=/$toolname/not/found/in/TOOLSDIR/or/PATH
  1034.     #endp
  1035.  
  1036.     add=
  1037.     #if ?$HOST_IS_MSDOS
  1038.         #if ?=^ $HOST ^ f286 ^
  1039.         ?=^ $~str:.286~ldname ^ ^ add=$exe
  1040.         #else
  1041.         ?=^ $~str:.exe~ldname ^ ^ add=$exe
  1042.         #endif    
  1043.     #endif
  1044.     #call find LINKER $ldname$add
  1045.  
  1046.     #call find AS $asname$add
  1047.  
  1048.     #  #call find LINKER $ldname %; #call find AS $asname
  1049.  
  1050. #endp
  1051. #proc dos_as_ld_opt
  1052.     # Define and inspect arbitrary linker/assembler.
  1053.     -Hldopt=? ldflags= %; #foreach^ $~sep,~~all>~?-Hldopt=? ^X ldflags += $X
  1054.     -Hasopt=? asflags= %; #foreach^ $~sep,~~all>~?-Hasopt=? ^X asflags += $X
  1055.     ?-p ldflags += -realbreak end_real %n %; \
  1056.         INITOBJS+=$_dir$slash$model$slash$)mwprof.obj %n
  1057. #endp
  1058.  
  1059. #proc MS_format_link
  1060.     # Microsoft format linker command line.
  1061.  
  1062.     LINKER+= @ %+%c %foreach %o %f + %n %end , %n %O %n , %n $DOSLIB /seg:500 $?ldflags
  1063.  
  1064. #endp
  1065. #proc MS_format_asm
  1066.     AS+= %s , %o $?asflags ;
  1067. #endp
  1068.  
  1069. #if ?|^ ?$x_stuff_needed ^ ?$ATT_UNIX ^|
  1070.     #proc x_stuff
  1071.         -X? # Ensure declared.
  1072.         #if ?!-Hansi
  1073.         xflag = -Xa     %; # Default value for -X flag
  1074.         #else
  1075.         xflag = -Xm
  1076.         #endif
  1077.         ?!$NCR xflag = -Xm         %; # Use -Xm except for NCR
  1078.         #if ?-X
  1079.         #if ?-Hansi
  1080.             #print Warning: -Hansi overrides -X setting.
  1081.         #elif ?=^$-X?^t^
  1082.             xflag=-Xt
  1083.         #elif ?=^$-X?^a^
  1084.             xflag=-Xa
  1085.         #elif ?=^$-X?^c^
  1086.             xflag=-Xc
  1087.         #elif ?=^$-X?^m^
  1088.             #  MetaWare Default option
  1089.             xflag=-Xm
  1090.         #else
  1091.             #print Warning: Unrecognized option: $-X
  1092.         #endif
  1093.         #endif
  1094.  
  1095.         #  When AT&T gets long-double support, remove the
  1096.         #  -nolongdouble or -doubleonly flags
  1097.         #
  1098.         #if ?=^$xflag^-Xt^
  1099.         HCstuff+= -on PCC USE_UP_RULES VP_UP_WARN -asm_reserve -unpragma             -def "_ALLOCA _ALLOCA"
  1100.         bestuff += -on GLOBALS_VOLATILE
  1101.         ?!$fsingle HCstuff += -on double_math_only
  1102.         #call predef __STDC__ 0
  1103.         ?$NCR HCstuff += -nolongdouble
  1104.         ?-Hcpp CPPOPTS += -Xt
  1105.         #elif ?=^$xflag^-Xa^
  1106.         HCstuff+= -on PCC VP_UP_WARN TRIGRAPHS -asm_reserve -unpragma             -def "_ALLOCA _ALLOCA"
  1107.         #call predef __STDC__ 0
  1108.         ?!$fsingle HCstuff += -on double_math_only
  1109.         ?$NCR HCstuff += -nolongdouble
  1110.         ?-Hcpp CPPOPTS += -Xa
  1111.         #elif ?=^$xflag^-Xc^
  1112.         HCstuff += -on TRIGRAPHS -unpragma
  1113.         ?$NCR HCstuff += -doubleonly %; bestuff += -XD
  1114.         # Enforce strict ANSI conformance in regard to floating point
  1115.         bestuff += -Xf
  1116.         #call no_ansi_defs %; # No non-ANSI predefined names permitted.
  1117.         ?-Hcpp CPPOPTS += -Xc
  1118.         #else
  1119.         ?!-Hansi HCstuff += -asm_reserve
  1120.         xflag=-Xc %; # Link with -Xc libraries
  1121.         #endif
  1122.     #endp
  1123.  
  1124. #endif
  1125.  
  1126.  
  1127.  
  1128. ?$CLCC HCstuff += -on LONG_ENUMS -off CHAR_DEFAULT_UNSIGNED %; #call x_stuff
  1129.  
  1130. # Allow -sched (old) and -Hsched (for V.4).  This requires newer driver.
  1131. # If you have an older driver, use commented-out line.
  1132. -Hsched    -sched test_sched=?|^ ?-Hsched ^ ?-sched ^|
  1133. $test_sched bestuff+=-on low_level_scheduling high_level_scheduling
  1134. # ?-sched bestuff+=-on low_level_scheduling high_level_scheduling
  1135.  
  1136.  
  1137. #########################################################################
  1138. #  Intel 386 Dependencies
  1139. #########################################################################
  1140. -f387 -f1167 -B -B- -f3167 -f4167 -NB -486 -486r -PI -386 -f287 -fsoft -fieee
  1141. -286 -80286 -80186 -8086 -8088 -088 -182 -086 -186
  1142. -fstrict -486sx
  1143. -f86     # Nexgen's F86 mode
  1144. -weitek # provided for Weitek as a way of passing default optimizations
  1145. # Following options only apply to MSDOS target
  1146.  
  1147. -Hw67flat # weitek flat model with wtlbase
  1148. -Hw67seg  # weitek segmented model for MSDOS
  1149.  
  1150.  
  1151. #
  1152. # -Hansi forces ANSI_FP tog to be turned on so that transcendentals set errno
  1153. #   Never mind, STRICT_ANSI_MATH must be turned on to surpress
  1154. #   transendental recognition altogether. This is because the side-effect
  1155. #   of setting "errno" gets lost.
  1156. #
  1157. ?-Hansi bestuff+=-on ANSI_FP %; festuff_GOC += -on STRICT_ANSI_MATH
  1158. ?-Hansi bestuff += -Xf %; # Strict ANSI-conformance in floating point
  1159.  
  1160. # Choose which target processor
  1161. OPTLIST=-PI -486 -486r -386 -f86 -486sx -286 -80286 -80186 -8086 -8088 -088 -186 -086 -186
  1162. #call mutex OPTLIST -386
  1163.  
  1164. OPTLIST=-f287 -f387 -f1167 -f3167 -fsoft -f4167
  1165. #if ?|^?-286^?-80286^?-186^?-80186^?-8086^?-8088^?-088^|
  1166.     fdefault=-f287
  1167. #else
  1168.     fdefault=-f387
  1169. #endif
  1170. ?$HOST_IS_MSDOS ?$TARGET_IS_MSDOS ?!$__87_EXISTS fdefault=-fsoft
  1171. #  -486sx defaults -fsoft
  1172. ?$TARGET_IS_MSDOS ?-486sx fdefault=-fsoft
  1173. #call mutex OPTLIST $fdefault
  1174.  
  1175. # We don't yet support direct ELF output. Always go thru assembler
  1176.  
  1177. ?!-S ?!>^$?#-NB^$?#-B^ __BFLAG=BIN
  1178.  
  1179. #if ?!$LOC
  1180.     # If -f287 specified after -f387, -f1167, -f3167 and -f4167,   then...
  1181.     ?-f287 festuff_GOC += -def "_I287 1" %; MACH=287 %; COPROC=1 %; \
  1182.         fltopt=-f287
  1183.     #if ?|/ ?-f1167 / ?-Hon=1167 /|
  1184.         bestuff+= -XW %; festuff_LOC+=-on 1167 %; COPROC=1 %;          MACH=386w %; \
  1185.             WEITEK=1 %; fltopt=-f1167
  1186.     #endif
  1187.     #if ?|/ ?-f3167 / ?-f4167 / ?-Hon=3167 / ?-Hon=4167 /|
  1188.         bestuff+= -XWY %; festuff_LOC+=-on 3167 %; COPROC=1 %; \
  1189.                      MACH=386w %; WEITEK=1 %; fltopt=-f3167
  1190.     #endif
  1191.     #if ?-fsoft
  1192.  
  1193.         CLIB=$LIBDIR/libc.fsoft.a %; PLIB=$LIBDIR/libpp.fsoft.a %; \
  1194.                  CCLIB=$LIBDIR/libcc.fsoft.a %;      MACH=386s %; fltopt=-fsoft %; \
  1195.             COPROC=1
  1196.  
  1197.     #endif
  1198.  
  1199.     #If no coprocesor selected, assume 387
  1200.     ?!$COPROC festuff_LOC+=-on 387 %;         COPROC=1 %; \
  1201.                 festuff_GOC += -def "_I387 1" %; fltopt=-f387
  1202.  
  1203.     #if ?$WEITEK
  1204.         MACH=386w %; festuff_GOC += -def "_WEITEK 1"
  1205.         #if ?-f1167
  1206.         CLIB=$LIBDIR/1167.a $LIBDIR/libc.1167.a %; \
  1207.                     CCLIB=$LIBDIR/libcc.1167.a %; \
  1208.                     PLIB=$LIBDIR/libpp.1167.a
  1209.         #elif ?-f3167
  1210.         CLIB=$LIBDIR/1167.a $LIBDIR/libc.3167.a %; \
  1211.                     CCLIB=$LIBDIR/libcc.3167.a %; \
  1212.                     PLIB=$LIBDIR/libpp.3167.a
  1213.         #else
  1214.         CLIB=$LIBDIR/1167.a $LIBDIR/libc.4167.a %; \
  1215.                     CCLIB=$LIBDIR/libcc.4167.a %; \
  1216.                     PLIB=$LIBDIR/libpp.4167.a
  1217.         #endif
  1218.         ?-lm #exit Cannot specify -lm with -f1167, -f3167, or -f4167
  1219.         ?$noansilib #exit Cannot specify -Hnoansilib with -f1167 -f3167 or \
  1220.             -f4167
  1221.  
  1222.         -Hw67flat
  1223.         -Hw67seg
  1224.         ?-Hw67flat ?!-Hw67seg           bestuff += -off \
  1225.             segmented_1167 -on use_wtlbase_for_weitek
  1226.         ?-Hw67seg ?!-Hw67flat bestuff += -on segmented_1167 %; \
  1227.                          ?-Hw67flat #exit Cannot specify -w67seg with -Hw67flat
  1228.  
  1229.     #else
  1230.         ?-lm1167 #exit Cannot specify -lm1167 unless -f1167, -f3167, or \
  1231.             -f4167         is specified.
  1232.         #if ?|/ ?-Hw67seg / ?-Hw67flat / ?-weitek /|
  1233.  
  1234.         #exit Cannot specify -weitek or -Hw67seg or -Hw67flat without            -f1167 or -f3167 or -f4167
  1235.  
  1236.         #endif
  1237.     #endif
  1238.  
  1239.  
  1240.     ?-f86 bestuff+= -XN -on scheduling
  1241.     # -f4167 implies -486 and 4167
  1242.     #if ?|/ ?-086 / ?-8086 / ?-8088 / ?-088 /|
  1243.         MACH=086 %; b16=1
  1244.         ?-fsoft MACH=186s
  1245.         ?$WEITEK MACH=086w
  1246.     #elif ?|/ ?-186 / ?-80186 /|
  1247.         MACH=186 %; b16=1 %; ?-fsoft MACH=186s
  1248.         ?$WEITEK MACH=186w
  1249.     #elif ?|/ ?-286 / ?-80286 /|
  1250.         MACH=286 %; b16=1 %; ?-fsoft MACH=286s
  1251.         ?$WEITEK MACH=286w
  1252.     #elif ?|/ ?-486 / ?-f4167 / ?-f86 / ?-486sx / ?-PI /| # Nexgen f86 => \
  1253.         486 as     well
  1254.         #if ?-PI
  1255.         MACH=PI
  1256.         #else
  1257.         bestuff += -X4
  1258.         MACH=486 %; #80486 switch
  1259.         #endif
  1260.         ?-fsoft MACH=486s     %; # Some 486 chips have no floating point.
  1261.         #  ?|/?-486/?-486sx/| CLIB=$LIBDIR/libc.486.a %; \
  1262.                     CCLIB=$LIBDIR/libcc.486.a
  1263.         #  ?-f86 CLIB=$LIBDIR/libc.f86.a %; CCLIB=$LIBDIR/libcc.f86.a
  1264.     #endif
  1265.  
  1266.     # MICROSOFT library doesn't have our math check routines. Don't inline \
  1267.         transc.
  1268.     #if ?$b16
  1269.         bestuff += -XM %; festuff_GOC += -on strict_ansi_math
  1270.         #call predef _I286
  1271.     #else
  1272.         #call predef _I386
  1273.     #endif
  1274.  
  1275.     ?-486r bestuff += -X4R %; MACH=486r %; \
  1276.             ?!-f387 #exit Cannot specify both $fltopt and -486r.
  1277.     #if ?|/ ?-486 / ?-486r / ?-f4167 / ?-f486sx /| # weitek for 486
  1278.         #if ?|/ ?-f4167 / ?-f3167 /|
  1279.         CLIB=$LIBDIR/1167.a $LIBDIR/libc.4167.a $?CLIB
  1280.         C     CLIB=$LIBDIR/libcc.4167.a
  1281.         #if ?-486r
  1282.             MACH=486wr
  1283.         #else
  1284.             MACH=486w
  1285.         #endif
  1286.         #endif
  1287.     #endif
  1288.     #if ?-weitek
  1289.         # ?!$-O? bestuff += -O
  1290.  
  1291.         ?!-Hw67flat bestuff += -off segmented_1167 -on use_wtlbase_for_weitek
  1292.         ?-Hw67seg #exit Cannot specify -Hw67seg when -weitek is specified
  1293.  
  1294.     #endif
  1295.     ?$TARGET_IS_MSDOS ?!$FDRV festuff_GOC += -pragma "stack_size_warn (4096)"
  1296.  
  1297.     ?-fieee    bestuff += -Xi     %; # IEEE floating point
  1298.     ?-fstrict bestuff += -Xf %; # Strict ANSI-conformance in floating point
  1299. #endif
  1300.  
  1301. #####################################################################
  1302. #  386/Protected mode <<>>
  1303. #####################################################################
  1304. #call dos_as_ld_opt
  1305. # Directories to search for include files
  1306. -I?
  1307. #if ?-I?
  1308.     __CNF_DOES_I=x
  1309.     #if ?!$LOC
  1310.         #foreach^ $~all>~-I? ^dir festuff_GOC+= -dir $dir
  1311.     #else
  1312.         #foreach^ $~all>~-I? ^dir festuff_LOC+= -dir $dir
  1313.     #endif
  1314. #endif
  1315. IPATH=IPATH
  1316. -Hipname=? ?-Hipname=? IPATH=$~toupper~-Hipname=?
  1317. #if ?!$LOC
  1318.     ?%e$IPATH #foreach^ %e$~sep;~*IPATH ^dir festuff_GOC+= -dir $dir
  1319. #else
  1320.     ?%e$IPATH #foreach^ %e$~sep;~*IPATH ^dir festuff_LOC+= -dir $dir
  1321. #endif
  1322.  
  1323. #if ?!$LOC
  1324.     festuff_GOC+= -off common_can_export
  1325.     #if ?-Hwin
  1326.         festuff_GOC+=             -on multiple_var_defs relax_func_ptr_rules char_is_rep             -off prototype_conversion_warn char_default_unsigned
  1327.     #else
  1328.         festuff_GOC+= -off multiple_var_defs
  1329.     #endif
  1330.     -Hinfo ?-Hinfo bestuff += -on print_info
  1331.     -Hobj=?
  1332.     #if ?-Hobj=
  1333.         #print Warning:
  1334.         #print   -Hobj=filename is no longer supported.
  1335.         #print    Please use the -o filename option instead.
  1336.         #print    See the Command-Line Options chapter of
  1337.         #exit    the Programmer's Guide for more information.
  1338.     #endif
  1339. #else
  1340.     ?-Hwin festuff_LOC+= -on multiple_var_defs         -off \
  1341.         prototype_conversion_warn         far_conversion_warnings \
  1342.         prototype_override_warnings         size_change_warnings \
  1343.         unused_parm_warnings public_var_warnings
  1344. #endif
  1345.  
  1346. # Use Pharlap's linker and assemblers as defaults for d386;
  1347. # use Microsoft's for o386.
  1348. # Read LINKNAME from environment if set.
  1349. ?%eLINKNAME LINKNAME=%e$LINKNAME
  1350. #if ?!$LINKNAME
  1351.     ?=^ $TARG ^ d386 ^ LINKNAME=386link
  1352.     ?=^ $TARG ^ o386 ^ LINKNAME=link386
  1353.     ?=^ $HOST ^ mvax ^ LINKNAME=xl386
  1354. #endif
  1355. #if ?!$ASNAME
  1356.     ?=^ $TARG ^ d386 ^ ASNAME=386asm
  1357.     ?=^ $TARG ^ o386 ^ ASNAME=masm386
  1358.     ?=^ $HOST ^ mvax ^ ASNAME=xa386
  1359. #endif
  1360. #call check_link_as $LINKNAME $ASNAME %; # Computes LINKER and AS.
  1361. EXE=$?:^ ?-o? ^ -exe $-o? ^^
  1362. #if ?=^ $TARG ^ d386 ^
  1363.     #proc ensure_dot_lib varname
  1364.         ?=^ $~str:.lib~*varname ^ ^ *varname=$*varname$).lib
  1365.     #endp
  1366.     # Must be sure libraries end in .lib, since there is no
  1367.     # other way to distinguish libraries from object modules.
  1368.     # The objects end in comma; we have to make sure we don't
  1369.     # end the libraries in a comma.  We assume that we'll have
  1370.     # at least one library.
  1371.     #if ?!=^ $~str:glu~LINKNAME^ ^
  1372.         #proc add_lib libname
  1373.         L2=$libname
  1374.         ?=^ $~str:.lib~L2 ^ ^ L2=$L2$).lib
  1375.         LINKER+=$L2 %n
  1376.         #endp
  1377.         # Rational's GLU linker.
  1378.         EXE=$?:^ ?-o ^ exp($-o?) ^^
  1379.         #ldopt -abterr. -acg -noacg -auto -buffer. -checksum          \
  1380.             -nochecksum -cob -nocob -codeview -dataseg. -dbg -dms.         \
  1381.             -dosseg  -dpmi -dsperr. -exclude. -farcall -nofarcall -fcl         \
  1382.             -format. -gdtsize. -group. -ignore -noignore -include.         \
  1383.             -init00 -initff -keyboard -map -mfl -mfx -mpl -mpx -ncl -nod         \
  1384.             -nosegs16 -notruncate -novcpi -nrt -nts. -option. -overload         \
  1385.             -ovf -package -rotate -rt -rtnerr. -sel -stack. -stub. -ts         \
  1386.             -verbose -xmax. -xmin.
  1387.         # exp. map. log. info.
  1388.         LINKER += @ %+%c.lnk %foreach %o %f %n %end
  1389.         #foreach^ $DOSLIB ^ foo #call add_lib $foo
  1390.         LINKER+=  $EXE %u -format lin %n
  1391.         ?$RATIONAL_LOADER LINKER+= -stub $RATIONAL_LOADER %n
  1392.         ?$RATIONAL_LINKDEBUG ?-g LINKER+=$RATIONAL_LINKDEBUG %n
  1393.         LINKER+=%n $?ldflags
  1394.     #elif ?!=^ $~str:mlk~LINKNAME^ ^
  1395.         comma=
  1396.         #proc add_lib libname
  1397.         L2=$libname
  1398.         ?=^ $~str:.lib~L2 ^ ^ L2=$L2$).lib
  1399.         LINKER+=$comma $L2 %n
  1400.         comma=,
  1401.         #endp
  1402.         # mlk linker.
  1403.         EXE=$?:^ ?-o ^ -output($-o?) ^^
  1404.         LINKER += @ %+%c.lnk $INITOBJS %foreach %o %f , %n %end
  1405.         #foreach^ $DOSLIB ^ foo #call add_lib $foo
  1406.         LINKER+=  $EXE %u -exp -flat %n $?ldflags
  1407.         ?$MLK_LINKDEBUG ?-g LINKER+=$MLK_LINKDEBUG %n
  1408.     #elif ?=^ $~str:l32.~LINKNAME ^ ^
  1409.         # Pharlap format linker; specify popular options.
  1410.         __OPT_WARN=1 %; # Warn of unknown options.
  1411.         #ldopt -lib. -exe. -map. -nomap -mapnames. -mapwidth. -fullseg             \
  1412.             -warn -nowarn -fullwarn -symbols -stack.            -mindata. \
  1413.             -maxdata. -minreal. -maxreal.            -offset. -onecase \
  1414.             -priv -twocase -tc
  1415.         ?!|/ ?-Hwin / ?-Hads / ?-Hadi /| LINKER+= -pack
  1416.         #if ?|/ ?-Hads / ?-Hadi /|
  1417.         LINKER+= -twocase @ %+%c.lnk $EXE %n %foreach %o %f %n %end
  1418.         LINKER+= $INITOBJS %n
  1419.         #else
  1420.         LINKER+= -twocase            @ %+%c.lnk $EXE %n $INITOBJS %foreach %o %f %n %end
  1421.         #endif
  1422.         ?$PHARLAP_LOADER LINKER+= $PHARLAP_LOADER %n
  1423.         #foreach^ $DOSLIB ^ foo LINKER+= -lib $foo %n
  1424.         LINKER+= %u
  1425.         ?$PHARLAP_LINKDEBUG ?-g LINKER+=$PHARLAP_LINKDEBUG %n
  1426.         LINKER+= %n $?ldflags
  1427.     #else
  1428.         #call MS_format_link %; # Lahey linker uses Microsoft format.
  1429.         LINKER+= ;
  1430.     #endif
  1431.     #if ?=^ $~str:masm.exe~ASNAME ^ ^
  1432.         AS+= %s -twocase -object %o $?asflags
  1433.     #else
  1434.         #call MS_format_asm     %; # Lahey customers usually use masm.
  1435.     #endif
  1436. #elif ?=^ $TARG ^ o386 ^
  1437.     #call MS_format_link %; #call MS_format_asm
  1438.     # Supply the default .def file anyway so user can modify it.
  1439.     LINKER+= , $?DEF ;
  1440. #endif
  1441. #if ?|/ ?-Hwin / ?-Hads / ?-Hadi / ?-p /|
  1442.     #proc LINKPROC
  1443.         #if ?!=^ $~str:mlk~LINKNAME^ ^
  1444.         ?!-o LINKER += -output($__EXE_NAME)
  1445.         #elif ?=^ $LINKNAME ^ 386link ^
  1446.         ?!-o LINKER += -exe $__EXE_NAME
  1447.         #endif
  1448.         #exec $LINKER
  1449.     #endp
  1450. #endif
  1451. #if ?-Hdos4g ?-g
  1452.     #proc LINKPROC
  1453.         #exec $LINKER
  1454.         ?>^ $RETCODE ^ 0 ^ #return     %; # Return if error code.
  1455.         #        #exec :makdbg32 $__EXE_NAME
  1456.     #endp
  1457. #endif
  1458.  
  1459.  
  1460.  
  1461.  
  1462. #########################################################################
  1463. #  Finish library definitions after processor-specific modifications.
  1464. #########################################################################
  1465. # These are the libraries.  If you prefer others, or have moved
  1466. # the libraries, rewrite these lines:
  1467. # If -noansilib specified, make sure -lc is searched first. There may still
  1468. # be High-C - specific functions referenced, therefore search CLIB and MWLIB
  1469. # afterwards.
  1470. #if ?!$LIBS
  1471.     ?!$DO_CPP CCLIB= %; # Kill C++ library if not in C++ mode.
  1472.     #if ?$noansilib
  1473.         ?$PDRV LIBS=$PLIB $lc $CLIB $MWLIB
  1474.         ?$CDRV LIBS=$?CCLIB $lc $CLIB $MWLIB
  1475.         ?$FDRV LIBS=$FLIB $lc $CLIB $MWLIB
  1476.     #else
  1477.         ?$PDRV LIBS=$PLIB $CLIB $MWLIB $lc
  1478.         ?$CDRV LIBS=$?CCLIB $CLIB $MWLIB $lc
  1479.         ?$FDRV LIBS=$FLIB $CLIB $MWLIB $lc
  1480.     #endif
  1481. #endif
  1482.  
  1483.  
  1484. #########################################################################
  1485. #  Sun Make compatibility
  1486. #########################################################################
  1487.  
  1488. # The Sun make program sets the environment variable SUNPRO_DEPENDENCIES
  1489. # to a filename followed by the target names for targets which need
  1490. # dependency rules built by the compiler.  The Sun compiler does this on
  1491. # the fly while compiling the module.  Here we catch the environment
  1492. # variable and set the necessary switches to make the same thing happen.
  1493. # We produce dependency entries for each source file being compiled,
  1494. # regardless of whether it was requested in the environment variable.
  1495. # Hopefully this won't cause any problems.
  1496.  
  1497. #if ?!$LOC
  1498.     #if ?%eSUNPRO_DEPENDENCIES
  1499.         # Declare -Hmake so the driver will let me run the back end.
  1500.         -Hmake -Hrel -Hmakeof -Hforcecom
  1501.         # The output filename is the first item in the environment variable.
  1502.         #foreach^ %e$SUNPRO_DEPENDENCIES ^ val MAKEOUTF=$val %; #break
  1503.         MAKEOFCMD=-makeof $MAKEOUTF
  1504.         # If no output file was found, let the dependency entry go to stdout.
  1505.         ?=^ $MAKEOUTF ^ ^ MAKEOFCMD=
  1506.         festuff_GOC+=-make -rel $MAKEOFCMD -forcecom
  1507.     #endif
  1508. #endif
  1509.  
  1510. #########################################################################
  1511. #  Define compiler commands.
  1512. #########################################################################
  1513. # Define compiler temporary files.
  1514. # hc2 and pascal can share the same temp file.
  1515. varfile=%t0 %; ILfile=%t1 %; hc2tmp=%t2 %; ptmp=%t2 %; deffile=%t3
  1516. hc2tmp2=%t3 %; # hc2tmp2 and deffile can share
  1517.  
  1518. # Common XX1COM/XXCOM stuff.
  1519. festuff_GOC += -mach $MACH -vfile $varfile -ofile $ILfile $?list         -dfile $deffile $?kanji $?E
  1520. more_stuff= $festuff $?list $?nowarn $?asm -fn -silent -efile $efile         $?kanji $?E $?DEFS $?MDEFS $?P
  1521. # Put GOC- and LOC-specific stuff at end of general FE list
  1522. # so things can be overriden if necessary
  1523. festuff_GOC = $more_stuff $festuff_GOC
  1524. festuff_LOC = $more_stuff $IEXT $festuff_LOC
  1525. LF_stuff = -il $ILfile -vf $varfile
  1526.  
  1527. #########################################################################
  1528. # Inliner for globally optimizing compiler.
  1529. #########################################################################
  1530. #if ?-native    # Compiler running native on CPU?
  1531.     1com=$AT %; # GOC front-end, target-hosted.
  1532.     2com=$TAT %; # GOC back-end, target-hosted.
  1533. #else
  1534.     1com=$AH %; # GOC front-end
  1535.     2com=$TAH %; # GOC back-end
  1536. #endif    
  1537. 0com=$1com$?com
  1538. ?$HOST_IS_MSDOS ?!$XDRV real1com=$?com
  1539. ?!$HOST_IS_MSDOS real1com=$?com
  1540. 1com=$1com$)1$?real1com
  1541. 2com=$2com$)2$?com
  1542. loccom=$TAH$?com %; # Locally-optimizing compilers front & back end.
  1543.  
  1544. #proc check_com cname default_dir default_name
  1545.     # If command-line override present for compiler name, use it;
  1546.     # otherwise, use present value or, if not set, use default.
  1547.     cswitch = -H$~tolower~cname$)=?
  1548.     #if ?$*cswitch
  1549.         # Check for -Hxxxcom=.  First see if exists; if doesn't, try
  1550.         # compiler bin directory.
  1551.         *cname=$*cswitch
  1552.         ?!%i$*cname *cname=$default_dir$bin/$*cname
  1553.     #endif    
  1554.     ?!$*cname *cname=$default_dir$bin/$default_name
  1555. #endp
  1556.  
  1557. #########################################################################
  1558. # Inliner for globally optimizing compiler.
  1559. #########################################################################
  1560. #if ?!|^ ?$HC1x ^ ?$PP2x ^| # Don't define if we're using LOC compilers.
  1561.     -Hit=? -Hic=? -Hib=? -His=?
  1562.     -Hir -Hix -Hin -Hia -Hih -Hid -Hip -Hi -Hiw -Hiu -Him
  1563.     # Do inliner if we've seen any of the flags.
  1564.     #foreach^ r x n a h d p u m ^ N X=-Hi$N %; ?$*X IARGS=$?IARGS -$N %; \
  1565.         # If -Hir, add -r; etc.
  1566.     #foreach^ t c b s ^ N X=-Hi$N$)= %; Y=$X$)? %; ?$*X IARGS=$?IARGS -$N $*Y %; \
  1567.         # If -Hit=5, add -t 5, etc.
  1568.     ?-Hi IARGS = $?IARGS     %; # Make sure defined.
  1569.     ?-Hiw IARGS = $?IARGS     %; # Make sure defined.
  1570.     -Hinliner=?
  1571.     #  HIC and HIT will be predefined if inliner is to be invoked due to
  1572.     #  optimization level. In such a case, turn on the "safe_only" switch to
  1573.     #  only inline those functions that the front-end has guaranteed are
  1574.     #  called consistently.
  1575.     #if ?!-Hit= ?!-Hic=     %; # If neither, then:
  1576.         ?$HIT ?!-g IARGS = $?IARGS -t $HIT
  1577.         ?$HIC ?!-g IARGS = $?IARGS -c $HIC
  1578.     #endif
  1579.     #   Pascal can't handle INLINER
  1580.     -Hnoinline    # Allow turning off inliner manually.
  1581.     #if ?$IARGS ?!$PDRV ?!-Hnoinline
  1582.         #if ?-g
  1583.         #print Inliner cannot be used with -g; inliner invocation suppressed.
  1584.         #else
  1585.         IARGS = -s 256 $IARGS %; # Don't inline fcns with stksize > 256.
  1586.         varfile2=%t3 %; ILfile2=%t4
  1587.         ?$INLCOM INLINER=$INLCOM
  1588.         #call check_com INLINER $HCDIR inl$0com
  1589.         # If multiple-module inlining, tell driver about it with -I.
  1590.         #if ?-Hiw
  1591.             INLINER+= $?INLINER_SUFFIX -I <source> $ILfile $ILfile2 $varfile $varfile2 $IARGS
  1592.         #else
  1593.             INLINER+= $?INLINER_SUFFIX %c.-Vi $varfile -Vo $varfile2 -i $ILfile -o $ILfile2 $IARGS
  1594.         #endif
  1595.         ILfile=$ILfile2 %; varfile = $varfile2
  1596.         #endif
  1597.     #endif    
  1598. #endif    
  1599.  
  1600. # Here define the compiler front and back-ends.
  1601.  
  1602. ##### Front ends. #####
  1603. ?!$HC1x -Hhc1com=? #call check_com HC1COM $HCDIR hc$1com %; \
  1604.         HC_FRONTEND=$HC1COM %; \
  1605.         HC1COM+=$?1SUFFIX %s $?CANSI $festuff_GOC $HCstuff -os $OS
  1606. ?!$PP2x -Hpp1com=? #call check_com PP1COM $PPDIR pp$1com %; \
  1607.         PP1COM+=$?1SUFFIX $?PANSI $festuff_GOC $PPstuff -tfile $ptmp -os $OS
  1608. -HZ? LFARGS= %; #foreach^ $~all>~?-HZ? ^ X LFARGS += -$X
  1609. ?$LFDIR -Hftn1com=? #call check_com FTN1COM $LFDIR lf$1com %; \
  1610.         FTN1COM+=$?1SUFFIX %s $LF_stuff -ftndir $DRVPATH             -mach $MACH $LFARGS -bdatatf $hc2tmp -drvname $DRVNAME             -exe $exe
  1611. -Hmf1com=? ?$MFDIR #call check_com MF1COM $MFDIR mf$1com %; \
  1612.         MF1COM+=$?1SUFFIX %s $festuff_GOC $MFstuff -os $OS
  1613.  
  1614. #if ?!$LOC
  1615.     HCPP1COM=$HC1COM -cpp 2 -on fe_inlining     -pt $HCDIR$bin/opc.pt -spt $HCDIR$bin/opcpre.pt
  1616.     # Outboard inliner doesn't support vartab 13 currently.
  1617.     ?-g HCPP1COM += -vartab 13
  1618.     # type checking for 370 is on for ESA, so use vartab 14.
  1619.     -Hcpp=? -Hcpplvl=? # Detect specification of cpp level so we can override cpp 2 above.
  1620.     # -Hcpp is obsolescent; replaced by -Hcpplvl.
  1621.     # If we specify -Hcpplvl with a C program, we need fe_inlining to support
  1622.     # C++ features.
  1623.     ?-Hcpp=? HC1COM+= -cpp $-Hcpp=? -on fe_inlining
  1624.     ?-Hcpp=? ?$HCPP1COM HCPP1COM+= -cpp $-Hcpp=?
  1625.     ?-Hcpplvl=? HC1COM+= -cpp $-Hcpplvl=? -on fe_inlining
  1626.     ?-Hcpplvl=? ?$HCPP1COM HCPP1COM+= -cpp $-Hcpplvl=?
  1627. #endif
  1628.  
  1629. ##### Back ends. #####
  1630. -Hhc2com=? #call check_com HC2COM $HCDIR hc$2com
  1631. # %c. is so that batch files for DOS start with $ILfile.
  1632. ?-HX XFLAGS=-X$-HX?
  1633. ?!$LOC HC2COM+=$?2SUFFIX %c.-i $ILfile -V $varfile         -T \
  1634.     $hc2tmp -T $hc2tmp2 $?XFLAGS $?-g $bestuff        -os $OS -efile \
  1635.     $efile
  1636. ?$LFDIR -Hftn2com=? #call check_com FTN2COM $LFDIR hc$2com %; \
  1637.     # Just the names only, please.
  1638. ?$MFDIR -Hmf2com=? #call check_com MF2COM $MFDIR hc$2com %; \
  1639.     # Just the names only, please.
  1640. -Hpp2com=? #call check_com PP2COM $PPDIR hc$2com
  1641. # Have the driver supply the temp file names to the LOC compilers.
  1642. festuff_LOC+=-tmpi1 %t0 -tmpi2 %t1 -tmptp %t2
  1643. ?$PP2x -Hppcom=? #call check_com PPCOM $PPDIR pp$loccom %; \
  1644.         PPCOM+=$?PANSI $festuff_LOC $PPstuff
  1645. ?$HC1x -Hhccom=? #call check_com HCCOM $HCDIR hc$loccom %; \
  1646.         HCCOM+=$?CANSI $festuff_LOC $HCstuff
  1647.  
  1648. #if ?$PFDIR    # Do for Promula Fortran:
  1649.     PFTMP=$%t3
  1650.     -Hpfarg=? pfflags= %; #foreach^ $~sep,~~all>~?-Hpfarg=? ^X pfflags += $X
  1651.     -Hpf0com=? #call check_com PF0COM $PFDIR pfc %; \
  1652.         PF0COM+=%s O$PFTMP $pfflags
  1653.     -Hpf2com=? #call check_com PF2COM $HCDIR hc$2com %; \
  1654.         # Just the names only, please.
  1655.     ?!$HC1x -Hpf1com=? #call check_com PF1COM $HCDIR hc$1com %; \
  1656.             PF1COM+=$?1SUFFIX $PFTMP $?CANSI $festuff_GOC $HCstuff -os $OS
  1657.     ?$HC1x  -Hpfcom=? #call check_com PFCOM $HCDIR hc$loccom %; \
  1658.             PFCOM+=$PFTMP -anno %s $?CANSI $festuff_LOC $HCstuff -iext " "
  1659.     ?$HCINC HCINC+=-I$PFDIR/lib
  1660.     ?$EXTRALIBS EXTRALIBS+=$PFDIR/lib/pfchc.lib
  1661. #endif    
  1662.  
  1663. # Define xref; use either PP or HC directory, depending upon driver type.
  1664. #if ?$XDRV
  1665.  
  1666.     Xname=xref$?exever
  1667.  
  1668.     ?$CDRV XREF=$HCDIR$bin/$Xname %s $XIEXT
  1669.     ?$PDRV XREF=$PPDIR/bin/$Xname $XIEXT
  1670.     ?$PP2x PPCOM+=-noobj
  1671.     ?$HC1x HCCOM+=-noobj
  1672. #endif
  1673.  
  1674. #########################################################################
  1675. #  Define assembler command (if not already defined)
  1676. #########################################################################
  1677. ?!$AS AS=-o %o $?asflags %s %; \
  1678.         #call pathsearch AS $TOOLSDIR/bin $?toolprefix$)as$?toolsuffix
  1679.  
  1680. #########################################################################
  1681. #  Define LINKER command (if not already defined)
  1682. #########################################################################
  1683. # %o = user objects; %u = user-specified link options (e.g. -lm).
  1684. ?-o? EXE=-o $-o?
  1685. ?!=^$ENTRY^^ ldflags = $?ldflags -e $ENTRY %; # Add entry specification
  1686. ?<^ $__minor ^ 8 ^ #call old_driver 1 0 8
  1687.  
  1688. #if ?$DO_CPP ?!$TARGET_IS_MSDOS # No prelinking needed for MS-DOS.
  1689.     #    If this is potentially a C++ program, we have to do special \
  1690.         processing
  1691.     # at link time.  The prelinker is run, and if necessary generates a new
  1692.     # C module that calls any static initialization routines required by the
  1693.     # program.  This new module must then be compiled and included in the \
  1694.         link.
  1695.     #    Because of this additional processing, we have to define a couple
  1696.     # procedures to do the linking, instead of just letting the driver take
  1697.     # care of it like it would for a normal C program.
  1698.  
  1699.     # All prelinker arguments start with -HP
  1700.     # The prelinker also recognizes some of the standard ld options, such
  1701.     # as -L and -l.  Those options that are not recognized and do not start
  1702.     # with -HP will be quietly ignored.  Erroneous -HP arguments will produce
  1703.     # a warning from the prelinker.
  1704.     # P_SYS must be defined for each host, and must contain -HPS system
  1705.     # appropriate to that system.  Current systems are SUN, VR3, VR4.
  1706.     # -HPu specifies that the compiler prepends an underscore onto external
  1707.     # names.  The prelinker needs to know about this so it can properly
  1708.     # resolve symbols.
  1709.  
  1710.     PLARGS=         %; # Pre-linker arguments
  1711.     -HPi           # Announce location of initializer routines
  1712.     -HPD           # debug level
  1713.     ?-HPi PLARGS+=-HPi
  1714.     ?-HPD PLARGS+=-HPD
  1715.     #proc PRELINKPROC
  1716.         PLINKDIR=$HCDIR$bin
  1717.         PLINK=prelink
  1718.         ?=^$TARG^sun4^  P_SYS=-HPS SUN -HPu           \
  1719.             -HPF`+t`t.seg`s`qdata`q`n.align`t4`n           \
  1720.             -HPF`iv(.globl`t`v;`v:`n`if(.word`t`f`n).word`t0`n) %; \
  1721.             use_as=1
  1722.         ?=^$TARG^sun3^  P_SYS=-HPS SUN -HPu
  1723.         ?=^$TARG^v386^  P_SYS=-HPS VR3
  1724.         ?=^$TARG^w386^  P_SYS=-HPS VR4
  1725.         ?=^$TARG^hob^   P_SYS=-HPS MW  -HPu         \
  1726.             -HPF`+t`tdata`nalign`t4`n         \
  1727.             -HPF`iv(global`t`v;`v:`nsize`t`v,`c*4+4`n         \
  1728.             -HPF`if(long`t`f`n)long`t0`n)eof`n %; use_as = 1
  1729.         ?=^$TARG^a370^  P_SYS=-HPS MW  -HPu
  1730.         # This overrides the previous:
  1731.         ?=^$TARG^a370^ ?=^$MACH^esa370^  P_SYS=-HPS MW           \
  1732.             -HPFLxxP0`tssect`n`tds`s0f`n`iv(`v`tequ`t*`+t`nentry`t`v`n           \
  1733.             -HPF`if(extrn`t`f`ndc`tal4(`f)`n)dc`tal4(0)`n`-t`n)`tend`n %; \
  1734.                     use_as = 1
  1735.         ?=^$TARG^w860^  P_SYS=-HPS MW
  1736.         ?=^$TARG^ 860^  P_SYS=-HPS MW  -HPu         \
  1737.             -HPF`+t`t.data`n.align`t4`n         \
  1738.             -HPF`iv(.globl`t`v;`v:`n`if(.long`t`f`n).long`t0`n) %; \
  1739.             use_as=1
  1740.         ?!$P_SYS  #exit C++ Prelinker arguments not set for this system
  1741.         P_OUT=$%t6
  1742.         PLINKARGS=-HPo $P_OUT.cpp $P_SYS $PLARGS
  1743.         PRELINKER=$PLINKDIR/$PLINK $PLINKARGS $START $?FSTART $%o $%u $?EXTRALIBS $LIBS $?END
  1744.         ?-native PRELINKER=$NATIVERUN $PRELINKER %; \
  1745.             # NATIVETOOLS not checked.
  1746.         #exec $PRELINKER
  1747.         # The prelinker returns 0 if it produced a C file that needs to be
  1748.         # compiled and linked.  It returns non-zero if something went wrong.
  1749.         #if ?=^ $RETCODE ^ 0 ^
  1750.         #  Compile or assemble $P_OUT.cpp
  1751.         #if ?$use_as
  1752.             asname= %; # Scan AS for assembler name:
  1753.             #foreach^ $OLDAS^X asname=$X %; #break
  1754.             ?-native asname=$NATIVERUN $asname
  1755.             #exec $asname -o $P_OUT.o $?asflags $P_OUT.cpp
  1756.         #else
  1757.             PCOMP=$DRIVER -c -Hnocopyr $P_OUT.cpp -o $P_OUT.o
  1758.             #exec :$PCOMP
  1759.         #endif
  1760.         PCRET=$RETCODE
  1761.         ?!=^ $PCRET ^ 0 ^  #exit Compilation failed
  1762.         PLOBJ=$P_OUT.o
  1763.         #endif
  1764.         #remove $P_OUT.cpp
  1765.     #endp
  1766.  
  1767.     #if ?!$LINKER
  1768.         LINKER=$?ldflags $START $?FSTART
  1769.         LINKFILES=$?EXTRALIBS $LIBS $?END $?EXE
  1770.         #call pathsearch LINKER $TOOLSDIR/bin $?toolprefix$ldname$?toolsuffix
  1771.     #endif
  1772.     #if ?!$LINKPROC_DEFINED
  1773.         #proc LINKPROC
  1774.         #call PRELINKPROC
  1775.         LINKER+=$?PLOBJ $%L $LINKFILES
  1776.         #exec $LINKER
  1777.         #remove $P_OUT.o
  1778.         #endp
  1779.         LINKPROC_DEFINED=yes
  1780.     #endif
  1781.  
  1782. #else
  1783.     # Standard linker setup
  1784.     ?!$LINKER     LINKER=$?ldflags $START $?FSTART %L $?EXTRALIBS $LIBS \
  1785.         $?END $?EXE %; \
  1786.             #call pathsearch LINKER $TOOLSDIR/bin $?toolprefix$ldname$?toolsuffix
  1787.  
  1788. #endif        # CPP_OK
  1789.  
  1790. ############################################################################
  1791. #  Define outboard C preprocessor command (if not already defined)
  1792. #  Run cpp if -Hcpp specified, unless -Hnocpp specified.
  1793. ############################################################################
  1794. ?!$CPPEXE CPPEXE=$SYSLIB/cpp %; # Full path name of cpp.
  1795. # >= version 1.7 of the driver we call CPP_PROC below; before, only HC could \
  1796.     have CPP.
  1797. ?-Hcpp CPP=$CPPEXE %; ?<^ $__minor ^ 7 ^ CPP+=$?CPPHC
  1798.  
  1799. #proc CPP_PROC Language infile outfile ifile_of_infile
  1800.     # If invoking CPP on assembler file, then assume an ASM_CPP_PROC
  1801.     #    ?=^ $Language ^ ASM ^ #call ASM_CPP_PROC $infile $outfile \
  1802.         $ifile_of_infile %; #        #return
  1803.     # $CPP now contains all the -Ds and the -I arguments.
  1804.     ADD=
  1805.     ?=^ $Language ^ HC ^ ADD=$HCINC $?CPPHC $?HCCINC
  1806.     ?=^ $Language ^ PP ^ ADD=$PPINC
  1807.     out=$outfile
  1808.     # Olivetti claims that you must pass -P to CPP to tell it not to
  1809.     # emit line control information.
  1810.     ?-P out=$ifile_of_infile %; ADD+=-P
  1811.     ?-E out=     %; # If -E, output to stdout only.
  1812.     # System V CPP requires infile and outfile at end of list.
  1813.     #exec $CPP $?ADD $CPPOPTS $CPPDEFS $infile $out
  1814. #endp
  1815.  
  1816. # Tools running native on CPU?
  1817. # Add any tools you also run native.
  1818. # WARNING:  If one back end is specified as native, all backends must be.
  1819. # Thus it is not possible to have HC2COM in the list but not FTN2COM.
  1820. NATIVETOOLS=HC1COM HCPP1COM HC2COM INLINER FTN1COM FTN2COM XREF
  1821. ?$PRELINKPROC OLDAS=$AS     %; # Prelinker needs old name of AS.
  1822. ?-native #foreach^ $NATIVETOOLS ^ N ?$*N *N=$NATIVERUN $*N
  1823.  
  1824. # Allow use of Eclipse's OS386 to run the unbound executables for HC LOC/GOC.
  1825. ?$HOST_IS_MSDOS -os386 ?-os386     #foreach^ HC1COM HC2COM HCCOM INLINER \
  1826.     ^N ?$*N *N=:up $*N
  1827.  
  1828. # If we specified to print branch profile info, do so and quit.
  1829.  
  1830.