-- file SakuraUtil.Mesa
-- last modified by Satterthwaite, October 7, 1980  10:57 AM
-- last edit by Russ Atkinson, 29-May-81 15:07:23
-- last edit by Suzuki, 27-Jul-81 13:50:29

DIRECTORY
  SakuraOps: TYPE USING [TableId],
  IOStream: TYPE USING [Handle],
  SakuraTree: TYPE USING [Link, Map, Scan],
  Rope: TYPE USING [Ref];

SakuraUtil: DEFINITIONS =
  BEGIN OPEN Tree: SakuraTree;

 -- binary table management

  TableId: TYPE = SakuraOps.TableId;

  AcquireTable: PROC [SakuraOps.TableId] RETURNS [LONG POINTER];
  ReleaseTable: PROC [SakuraOps.TableId];

 -- compiler passes

  PassIndex: TYPE = {utilities, pass1, pass2, pass3, pass3p, pass4, pass5, debug};

  PrefillSymbols: PROC;

  P1Unit: PROC RETURNS [BOOLEAN];
  P2Unit: Tree.Map;
  P3Unit: Tree.Map;
  P3Postlude: PROC [expand: BOOLEAN];
  P4Unit: Tree.Scan;
  P5module: PROC;

 -- object output

  StartObjectFile: PROC [IOStream.Handle];
  EndObjectFile: PROC [update: BOOLEAN];
  TableOut: PROC;

  NextFilePage: PROC RETURNS [CARDINAL];
  StartBCD: PROC;
  ReadBCDOffset: PROC RETURNS [CARDINAL];
  ReadBCDIndex: PROC RETURNS [LONG CARDINAL];
  AppendBCDWord: PROC [word: UNSPECIFIED];
  AppendBCDWords: PROC [addr: POINTER, n: CARDINAL];
  AppendBCDString: PROC [s: STRING];
  UpdateBCDWords: PROC [offset: CARDINAL, addr: POINTER, n: CARDINAL];
  EndBCD: PROC;

 -- debugging

  PrintTree: PROC [Tree.Link];
  PrintBodies: PROC;
  PrintSymbols: PROC;

 -- printing
  PutDecimal: PROC [st: IOStream.Handle, x: LONG INTEGER];
  PutRope: PROC [st: IOStream.Handle, r: Rope.Ref];
  PrettyPrint: PROC [Tree.Link];

 -- swapping control

  MakeSwappable: PROC [module: PROGRAM, pass: PassIndex];

  Pass1, Pass2, Pass3, Pass3P, Pass4, Code: PROGRAM;

  END.