-- file ComData.mesa
-- last modified by Satterthwaite, June 7, 1983 9:55 am

DIRECTORY
  Alloc: TYPE USING [Handle],
  BcdDefs: TYPE USING [SGRecord, VersionStamp],
  BcdOps: TYPE USING [MTHandle],
  FileParms: TYPE USING [ActualId],
  OSMiscOps: TYPE USING [Stamp],
  Symbols: TYPE USING [ISEIndex, CSEIndex, CTXIndex, CBTIndex],
  SymbolSegment: TYPE USING [FGTEntry],
  SymbolTable: TYPE USING [Base],
  Strings: TYPE USING [String],
  Tree: TYPE USING [Link];

ComData: PROGRAM = PUBLIC {
   OPEN Symbols;

 -- basic types (initialized in Pass1)

  typeINT, typeCARDINAL: CSEIndex;
  typeBOOL, typeCHAR, typeREAL: CSEIndex;
  typeSTRING, typeStringBody: CSEIndex;
  typeATOM, typeAtomRecord: CSEIndex;
  typeRefANY, typeListANY: CSEIndex;
  typeLOCK, typeCONDITION: CSEIndex;

 -- global info describing module

  interface: BOOL;			-- interface module
  monitored: BOOL;
  stopping: BOOL;
  outerCtx: CTXIndex;		-- predefined identifiers
  moduleCtx: CTXIndex;		-- module identifiers
  importCtx: CTXIndex;		-- import id context
  exportCtx: CTXIndex;		-- export id context
  mainCtx: CTXIndex;		-- main program's context
  nBodies: CARDINAL;
  nInnerBodies: CARDINAL;
  nSigCodes: CARDINAL;
  defBodyLimit: CARDINAL;
  linkCount: CARDINAL;		-- global control links (externals, etc)

 -- shared instance of SymbolTable

  ownSymbols: SymbolTable.Base;

 -- type identifiers (initialized in Pass1)

  idANY: ISEIndex;
  idINT, idCARDINAL, idCHAR, idBOOL, idREAL, idSTRING: ISEIndex;
  idTEXT: ISEIndex;
  idLOCK: ISEIndex;
  idATOM: ISEIndex;

 -- anonymous entry for undeclared ids

  seAnon: ISEIndex;

 -- symbolic constants

  tC0, tC1: Tree.Link;
  idUNWIND: ISEIndex;

 -- scratch storage
 
  table: Alloc.Handle;
  zone: UNCOUNTED ZONE;
  
 -- compilation options

  switches: PACKED ARRAY CHAR['a..'z] OF BOOL;

 -- input

  source: FileParms.ActualId;
  sourceTokens: CARDINAL;

  pattern: FileParms.ActualId;	-- old bcd to match
  matched: BOOL;
    
 -- variables used for error reporting

  nErrors: CARDINAL;
  nWarnings: CARDINAL;
  bodyIndex: CBTIndex;		-- current body
  textIndex: CARDINAL;		-- start index of line with error

 -- output

  compilerVersion: BcdDefs.VersionStamp;

  objectFile: Strings.String;
  objectVersion: BcdDefs.VersionStamp;
  objectStamp: OSMiscOps.Stamp;

  globalFrameSize: CARDINAL;
  objectBytes: CARDINAL;

  fgTable: LONG DESCRIPTOR FOR ARRAY OF SymbolSegment.FGTEntry ← NIL;

  bcdSeg, codeSeg, symSeg: BcdDefs.SGRecord;
  mtRoot: BcdOps.MTHandle ← NIL;
  mtRootSize: CARDINAL;
  fixupLoc: LONG CARDINAL;

  }.