174 lines
6.3 KiB
C
174 lines
6.3 KiB
C
|
// globals.h - global variables/needed across modules
|
||
|
//
|
||
|
// Copyright (c) 1988-1990, Microsoft Corporation. All rights reserved.
|
||
|
//
|
||
|
// Purpose:
|
||
|
// Globals.c is the routine in which global variables reside. Globals.h mirrors
|
||
|
// the declarations in globals.c as externs and is included in all routines that
|
||
|
// use globals.
|
||
|
//
|
||
|
// Notes:
|
||
|
// This module was created for an interesting reason. NMAKE handles recursive
|
||
|
// calls by saving its global variables somewhere in memory. It handles this by
|
||
|
// allocating all global variables which have value changes in each recursive
|
||
|
// in adjacent memory. The routine called recursively is doMake() and before it
|
||
|
// is called the address of this chunk of memory is stored. When the recursive
|
||
|
// call returns the memory is restored using the stored address. startOfSave and
|
||
|
// endOfSave give the location of this chunk. The reason this method was opted
|
||
|
// for is that spawning of NMAKE would consume a lot of memory under DOS. This
|
||
|
// might not be very efficient under OS/2 because the code gets shared.
|
||
|
//
|
||
|
// Revision History:
|
||
|
// 15-Nov-1993 JdR Major speed improvements
|
||
|
// 04-Apr-1990 SB Add fHeapChk
|
||
|
// 01-Dec-1989 SB Made some variables near and pushed some into saveArea
|
||
|
// 19-Oct-1989 SB variable fOptionK added (ifdef SLASHK)
|
||
|
// 02-Oct-1989 SB add dynamic inline file handling support
|
||
|
// 24-Apr-1989 SB Added ext_size, filename_size, filenameext_size &
|
||
|
// resultbuf_size for OS/2 1.2 support
|
||
|
// 05-Apr-1989 SB made revList, delList, scriptFileList NEAR
|
||
|
// 22-Mar-1989 SB removed tmpFileStack and related variables
|
||
|
// 16-Feb-1989 SB added delList to have scriptfile deletes at end of make
|
||
|
// 21-Dec-1988 SB Added scriptFileList to handle multiple script files
|
||
|
// removed tmpScriptFile and fKeep (not reqd anymore)
|
||
|
// 19-Dec-1988 SB Added fKeep to handle KEEP/NOKEEP
|
||
|
// 14-Dec-1988 SB Added tmpScriptFile for 'z' option
|
||
|
// 30-Nov-1988 SB Added revList to handle 'z' option
|
||
|
// 23-Nov-1988 SB Added CmdLine[] to handle extmake syntax
|
||
|
// made pCmdLineCopy Global in build.c
|
||
|
// 21-Oct-1988 SB Added fInheritUserEnv to inherit macros
|
||
|
// 20-Sep-1988 RB Clean up.
|
||
|
// 17-Aug-1988 RB Declare everything NEAR.
|
||
|
// 06-Jul-1988 rj Ditched shell and argVector globals.
|
||
|
// Put all ECS declarations as macros in here.
|
||
|
|
||
|
#if defined(STATISTICS)
|
||
|
extern unsigned long CntfindMacro;
|
||
|
extern unsigned long CntmacroChains;
|
||
|
extern unsigned long CntinsertMacro;
|
||
|
extern unsigned long CntfindTarget;
|
||
|
extern unsigned long CnttargetChains;
|
||
|
extern unsigned long CntStriCmp;
|
||
|
extern unsigned long CntunQuotes;
|
||
|
extern unsigned long CntFreeStrList;
|
||
|
extern unsigned long CntAllocStrList;
|
||
|
#endif
|
||
|
|
||
|
extern BOOL fOptionK; // user specified /K ?
|
||
|
extern BOOL fDescRebuildOrder; // user specified /O ?
|
||
|
extern BOOL fSlashKStatus;
|
||
|
|
||
|
// boolean used by action.c & nmake.c
|
||
|
|
||
|
// Required for NMAKE enhancement -- to make NMAKE inherit user modified
|
||
|
// changes in the environment. To be set to true before defineMacro() is
|
||
|
// called so that user defined changes in environment variables are
|
||
|
// reflected in the environment. If set to false then these changes are
|
||
|
// made only in NMAKE tables and the environment remains unchanged
|
||
|
|
||
|
extern BOOL fInheritUserEnv;
|
||
|
|
||
|
extern BOOL fRebuildOnTie; // TRUE if /b specified, Rebuild on tie
|
||
|
|
||
|
// Used by action.c and nmake.c
|
||
|
|
||
|
// delList is the list of delete commands for deleting inline files which are
|
||
|
// to be deleted before NMAKE exits & have a NOKEEP action specified.
|
||
|
|
||
|
extern STRINGLIST * delList;
|
||
|
|
||
|
// Complete list of generated inline files. Required to avoid duplicate names
|
||
|
|
||
|
extern STRINGLIST * inlineFileList;
|
||
|
|
||
|
// from NMAKE.C
|
||
|
|
||
|
extern BOOL firstToken; // to initialize parser
|
||
|
extern BOOL bannerDisplayed;
|
||
|
extern UCHAR flags; // holds -d -s -n -i
|
||
|
extern UCHAR gFlags; // "global" -- all targets
|
||
|
extern char makeflags[];
|
||
|
extern FILE * file;
|
||
|
extern STRINGLIST * makeTargets; // list of targets to make
|
||
|
extern STRINGLIST * makeFiles; // user can specify > 1
|
||
|
extern BOOL fDebug;
|
||
|
|
||
|
|
||
|
// from LEXER.C
|
||
|
|
||
|
extern unsigned line;
|
||
|
extern BOOL colZero; // global flag set if at column zero
|
||
|
// of a makefile/tools.ini
|
||
|
extern char * fName;
|
||
|
extern char * string;
|
||
|
extern INCLUDEINFO incStack[MAXINCLUDE];
|
||
|
extern int incTop;
|
||
|
|
||
|
// Inline file list -- Gets created in lexer.c and is used by action.c to
|
||
|
// produce a delete command when 'NOKEEP' or Z option is set
|
||
|
|
||
|
extern SCRIPTLIST * scriptFileList;
|
||
|
|
||
|
// from PARSER.C
|
||
|
|
||
|
#define STACKSIZE 16
|
||
|
|
||
|
extern UCHAR stack[STACKSIZE];
|
||
|
extern int top; // gets pre-incremented before use
|
||
|
extern unsigned currentLine; // used for all error messages
|
||
|
extern BOOL init; // global boolean value to indicate
|
||
|
// if tools.ini is being parsed
|
||
|
// from ACTION.C
|
||
|
|
||
|
extern MACRODEF * macroTable[MAXMACRO];
|
||
|
extern MAKEOBJECT * targetTable[MAXTARGET];
|
||
|
extern STRINGLIST * macros;
|
||
|
extern STRINGLIST * dotSuffixList;
|
||
|
extern STRINGLIST * dotPreciousList;
|
||
|
extern RULELIST * rules;
|
||
|
extern STRINGLIST * list;
|
||
|
extern char * name;
|
||
|
extern BUILDBLOCK * block;
|
||
|
extern UCHAR currentFlags;
|
||
|
extern UCHAR actionFlags;
|
||
|
|
||
|
|
||
|
// from BUILD.C
|
||
|
|
||
|
extern unsigned errorLevel;
|
||
|
extern unsigned numCommands;
|
||
|
extern char * pCmdLineCopy;
|
||
|
|
||
|
// Used to store expanded Command Line returned by SPRINTF, the result on
|
||
|
// expanding extmake syntax part in the command line
|
||
|
extern char CmdLine[MAXCMDLINELENGTH];
|
||
|
|
||
|
// from IFEXPR.C
|
||
|
|
||
|
#define IFSTACKSIZE 16
|
||
|
|
||
|
extern UCHAR ifStack[IFSTACKSIZE];
|
||
|
extern int ifTop; // gets pre-incremented before use
|
||
|
extern char * lbufPtr; // pointer to alloc'd buffer
|
||
|
// we don't use a static buffer so
|
||
|
// that buffer may be realloced
|
||
|
extern char * prevDirPtr; // ptr to directive to be processed
|
||
|
extern unsigned lbufSize; // initial size of the buffer
|
||
|
|
||
|
|
||
|
// from UTIL.C
|
||
|
|
||
|
extern char * dollarDollarAt;
|
||
|
extern char * dollarLessThan;
|
||
|
extern char * dollarStar;
|
||
|
extern char * dollarAt;
|
||
|
extern STRINGLIST * dollarQuestion;
|
||
|
extern STRINGLIST * dollarStarStar;
|
||
|
|
||
|
extern char buf[MAXBUF]; // from parser.c
|
||
|
|
||
|
extern const char suffixes[]; // from action.c
|
||
|
extern const char ignore[];
|
||
|
extern const char silent[];
|
||
|
extern const char precious[];
|