/* SCCSID = %W% %E% */ /* * Copyright Microsoft Corporation, 1983-1987 * * This Module contains Proprietary Information of Microsoft * Corporation and should be treated as Confidential. */ /**************************************************************** * * * NEWSTA.C * * * * Statically allocated global variable definitions. * * * ****************************************************************/ #include #include #include #include #if EXE386 #include #endif #if SETVBUF #include #endif #if OXOUT OR OIAPX286 #include #endif #include /* Variables shared regardless of executable format */ char FAR *lpszLink; char FAR *lpszPath; char FAR *lpszTMP; char FAR *lpszLIB; char FAR *lpszQH; char FAR *lpszHELPFILES; char FAR *lpszCmdLine; #if OSEGEXE RBTYPE procOrder; #endif int vmfd; BSTYPE bsErr /* DLH stderr isn't constant with CRT DLL */ /* = stderr */; BSTYPE bsInput; BSTYPE bsLst; BSTYPE bsRunfile; WORD cbBakpat; WORD cbRec; WORD cErrors; int (cdecl *cmpf)(const RBTYPE *sb1, const RBTYPE *sb2); #if OMF386 FTYPE f386; #endif #if (OSEGEXE AND defined(LEGO)) OR EXE386 FTYPE fKeepFixups; #endif #if EXE386 GRTYPE ggrFlat; FTYPE fFullMap; FTYPE fKeepVSize; #endif WORD extMac; WORD extMax; int ExitCode=0; FTYPE fFullMap; FTYPE fCommon; #if C8_IDE FTYPE fC8IDE = FALSE; #endif FTYPE fDelexe = (FTYPE) FALSE; FTYPE fDrivePass; FTYPE fFarCallTrans; FTYPE fIgnoreCase = (FTYPE) IGNORECASE; FTYPE fInOverlay; FTYPE fLibPass; FTYPE fLibraryFile; FTYPE fListAddrOnly; FTYPE fLstFileOpen; FTYPE fScrClosed = (FTYPE) TRUE; FTYPE fUndefinedExterns; FTYPE fExeStrSeen = FALSE; FTYPE fPackFunctions = (FTYPE) TRUE; #if TCE FTYPE fTCE = FALSE; #endif FTYPE fTextMoved = (FTYPE) FALSE; int NullDelta = 16; #if O68K FTYPE f68k = (FTYPE) FALSE; FTYPE fTBigEndian = (FTYPE) FALSE; BYTE iMacType = MAC_NONE; #endif /* O68K */ GRTYPE ggrDGroup; GRTYPE ggrMac = 1; GRTYPE grMac; SNTYPE gsnMac = 1; SNTYPE gsnMax = DFGSNMAX; SNTYPE gsnStack; WORD ifhLibCur; WORD ifhLibMac; long lfaLast; WORD lnameMac; WORD lnameMax = 256; WORD modkey; SNTYPE *mpextgsn; RATYPE *mpextra; RBTYPE FAR *mpextprop; SNTYPE mpggrgsn[GGRMAX]; GRTYPE *mpgrggr; #if FAR_SEG_TABLES RATYPE FAR *mpgsndra; FTYPE FAR *mpgsnfCod; RBTYPE FAR *mpgsnrprop; SEGTYPE FAR *mpgsnseg; RATYPE FAR *mpsegraFirst; SATYPE FAR *mpsegsa; BYTE FAR * FAR *mpsegMem; BYTE FAR * FAR *mpsaMem; #else RATYPE *mpgsndra; FTYPE *mpgsnfCod; RBTYPE *mpgsnrprop; SEGTYPE *mpgsnseg; RATYPE *mpsegraFirst; SATYPE *mpsegsa; #endif SNTYPE *mpsngsn; RBTYPE mpifhrhte[IFHLIBMAX]; long *mpitypelen; WORD *mpityptyp; RBTYPE FAR *mplnamerhte; BYTE *psbRun; WORD pubMac; #if TCE APROPCOMDAT *pActiveComdat; #endif int QCExtDefDelta = 0; int QCLinNumDelta = 0; WORD symMac; /* Number of symbols defined */ long raStart; #if NOT NEWSYM OR AUTOVM #if AUTOVM WORD rbMacSyms; #else RBTYPE rbMacSyms; #endif #endif RECTTYPE rect; #if RGMI_IN_PLACE BYTE bufg[DATAMAX + 4]; BYTE *rgmi; #else BYTE rgmi[DATAMAX + 4]; #endif RBTYPE rhteBegdata; RBTYPE rhteBss; RBTYPE rhteFirstObject; RBTYPE rhteRunfile; RBTYPE rhteStack; RBTYPE rprop1stFile; RBTYPE rprop1stOpenFile; RBTYPE r1stFile; SBTYPE sbModule; SEGTYPE segCodeLast; SEGTYPE segDataLast; SEGTYPE segLast; SEGTYPE segStart; WORD snkey; SNTYPE snMac; WORD typMac; WORD vcbData; WORD vcln; FTYPE vfCreated; FTYPE vfLineNos; FTYPE vfMap; FTYPE vfNewOMF; FTYPE vfNoDefaultLibrarySearch; FTYPE vfPass1; /* Pass 1 flag */ SNTYPE vgsnCur; #if EXE386 DWORD vpageCur; /* Current object page number */ #endif RATYPE vraCur; SNTYPE vgsnLineNosPrev; RECTTYPE vrectData; RBTYPE vrhte; RBTYPE vrhteCODEClass; RBTYPE vrhteFile; RBTYPE vrprop; RBTYPE vrpropFile; RBTYPE vrpropTailFile; SEGTYPE vsegCur; WORD ExeStrLen = 0; WORD ExeStrMax = 0; char FAR *ExeStrBuf = 0; #if LOCALSYMS FTYPE fLocals; WORD locMac; #endif #if FDEBUG FTYPE fDebug; #endif #if CMDXENIX WORD symlen; #endif #if OSMSDOS char bigbuf[LBUFSIZ]; FTYPE fPauseRun; BYTE chRunFile; BYTE chListFile; RBTYPE rhteLstfile; BYTE DskCur; #endif #if LIBMSDOS FTYPE fNoExtDic; long libHTAddr; #endif #if FIXEDSTACK int _stack = STKSIZ; #endif #if ECS FTYPE fLeadByte[0x80]; /* f(n) true iff n+0x80 is lead byte */ #endif #if CRLF char _eol[] = "\r\n"; #endif #if SYMDEB FTYPE fSymdeb; FTYPE fCVpack = (FTYPE) TRUE; FTYPE fDebSeg; FTYPE fSkipPublics; WORD cSegCode; WORD ObjDebTotal; SEGTYPE segDebFirst; SEGTYPE segDebLast; //DWORD vaCVMac = (DWORD) AREACV; //DWORD vaCVBase; #if OSEGEXE WORD cbImpSeg; SNTYPE gsnImports; #endif #endif #if NOT M_WORDSWAP OR M_BYTESWAP char _cbexehdr[] = "wssssssssssssss2sssssls7sl"; char _cbnewexe[] = "wsccsslssssllsssssssslss12c"; char _cbnewrlc[] = "wccs2cs"; char _cbnewseg[] = "wssss"; char _cblong[] = "wl"; char _cbword[] = "ws"; #endif #if C8_IDE char msgBuf[_MAX_PATH]; #endif #if OUT_EXP char bufExportsFileName[_MAX_PATH] = {'\0'}; #endif /* Variables for segmented-executable format */ #if OSEGEXE SNTYPE gsnAppLoader; RBTYPE vpropAppLoader; #if EXE386 DWORD hdrSize = 0x10000L; DWORD virtBase = 0x10000L; DWORD cbEntTab; DWORD cbNamePtr; DWORD cbOrdinal; DWORD cbExpName; DWORD cbImports; DWORD cbImportsMod; DWORD *mpsaVMArea; DWORD *mpsaBase; DWORD cbStack; DWORD cbStackCommit; DWORD cbHeap; DWORD cbHeapCommit; #else WORD cbHeap; WORD cbStack; #endif WORD cFixupBuckets; #if EXE386 WORD cChainBuckets = BKTMAX; #endif long chksum32; WORD cMovableEntries; #if EXE386 BYTE TargetOs; BYTE TargetSubsys = E32_SSWINCHAR; DWORD dfCode = OBJ_CODE | OBJ_READ | OBJ_EXEC; DWORD dfData = OBJ_INITDATA | OBJ_READ | OBJ_WRITE; BYTE ExeMajorVer = 0; BYTE ExeMinorVer = 0; BYTE UserMajorVer = 0; BYTE UserMinorVer = 0; #else #if DOSEXTENDER OR DOSX32 OR WIN_NT BYTE TargetOs = NE_WINDOWS; // For DOS the default is Windows #else BYTE TargetOs = NE_OS2; #endif WORD dfCode = NSCODE | (3<> 9; #endif #endif /* Variables shared by segmented x.out and DOS3 exes */ #if OIAPX286 OR ODOS3EXE GRTYPE *mpextggr; long FAR *mpsegcb; FTYPE FAR *mpsegFlags; char *ompimisegDstIdata; #endif /* Variables for x.out format */ #if OXOUT OR OIAPX286 FTYPE fIandD; FTYPE fLarge; FTYPE fLocals; FTYPE fMedium; FTYPE fMixed; FTYPE fSymbol = TRUE; WORD xever = DFXEVER; #endif #ifdef QCLINK #if NOT WIN_3 FTYPE fZ1 = FALSE; #endif FTYPE fZ2 = FALSE; #endif /* Variables for ILINK support */ #if ILINK FTYPE fZincr = FALSE; FTYPE fQCIncremental = FALSE; FTYPE fIncremental = FALSE; WORD imodFile; WORD imodCur = 0; /* one-based module number */ #endif WORD cbPadCode; /* code padding size */ WORD cbPadData = 16; /* data padding size */ /* Variables shared by segmented-exe and DOS3 executables */ #if OEXE FTYPE fDOSExtended; FTYPE fNoNulls; FTYPE fPackData = FALSE; FTYPE fPackSet; FTYPE fSegOrder; DWORD packLim; DWORD DataPackLim; #endif /* Variables for dual-exe format capability */ #if OSEGEXE AND ODOS3EXE FTYPE fNewExe; FTYPE fOptimizeFixups; void (NEAR *pfProcFixup)(FIXINFO *pfi); #endif /* Variables shared by segmented-exe and segmented-x.out */ #if OSEGEXE OR OIAPX286 RBTYPE mpggrrhte[GRMAX]; #if FAR_SEG_TABLES SNTYPE FAR *mpseggsn; #else SNTYPE *mpseggsn; #endif #endif FTYPE fNoEchoLrf; FTYPE fNoBanner; FTYPE BannerOnScreen; /* Variables for MS-DOS style command interface */ #if CMDMSDOS BYTE bSep = ','; /* Separator character */ BYTE chMaskSpace = ' '; FTYPE fEsc; #if WIN_3 FTYPE fNoprompt = TRUE; #else FTYPE fNoprompt; #endif #if USE_REAL FTYPE fUseReal = FALSE; FTYPE fSwNoUseReal = FALSE; #endif RBTYPE rgLibPath[IFHLIBMAX]; WORD cLibPaths; # if OSXENIX char CHSWITCH = '-'; /* Switch character */ # else char CHSWITCH = '/'; /* Switch character */ # endif #if OSMSDOS AND NOT WIN_3 int (cdecl *pfPrompt)() = PromptStd; #endif #if WIN_3 int (cdecl *pfPrompt)() = NULL; #endif #endif /* CMDMSDOS */ /* Miscellaneous combinations */ #if QBLIB FTYPE fQlib; #endif #if OSEGEXE OR QCLINK typedef void (FAR * FARFPTYPE)(); /* FAR function pointer type */ FARFPTYPE FAR *pfQTab; #endif char *lnknam = "LINK"; #if NEWSYM long cbSymtab; void (*pfEnSyms)(void (*pproc)(APROPNAMEPTR papropName, RBTYPE rhte, RBTYPE rprop, WORD fNewHte), ATTRTYPE attr) = BigEnSyms; #endif /* NEWSYM */ #if NEWLIST RBTYPE rbLstUndef = RHTENIL; #endif #if WIN_3 void (*pfCputc)(int ch) = CputcWin; void (*pfCputs)(char *str) = CputsWin; #else void (*pfCputc)(int ch) = CputcStd; void (*pfCputs)(char *str) = CputsStd; #endif #if NEWIO RBTYPE rbFilePrev; char mpifhfh[IFHLIBMAX]; #endif #if ILINK OR SYMDEB long lfaBase; #endif #if ALIGN_REC BYTE *pbRec; // data for current record char recbuf[8192]; // record buffer... #endif