-- file: PackCode.mesa
-- Edited by Sweet, 27-Jan-81 13:31:52
-- Edited by Lewis, October 20, 1980  3:14 PM
-- Edited by Levin, September 8, 1982 4:34 pm

DIRECTORY
  PackageSymbols USING [WordIndex],
  PieceTable USING [PieceIndex],
  Segments USING [FHandle];

PackCode: DEFINITIONS =
  BEGIN

  Address: TYPE = [0..77777B];  -- max of 32K
  WordIndex: TYPE = PackageSymbols.WordIndex;
  NullWordIndex: WordIndex = LAST[WordIndex];

  SeenModuleRecord: TYPE = RECORD [
    seen: BOOLEAN ← FALSE,
    newOffset: Address ← NULL, -- of entry vector within segment
    newPiece: PieceTable.PieceIndex ← NULL, -- of beginning of vector
    oldCodeFile: Segments.FHandle ← NULL,
    oldCodePosition: LONG CARDINAL ← NULL,
    newConstants: LONG POINTER ← NIL]; -- to new constant values

  PackError: SIGNAL [reason: Problem];
  Problem: TYPE = {InvalidCodeOffset, SegmentTooBig, StrangeJI, nonZeroBase};

-- implemented in PackCodeImpl
  ComputeCodePlacement: PUBLIC PROC;
  WriteBcdToFile: PUBLIC PROC;
  WriteCodeToBcdFile: PUBLIC PROC;

-- implemented in PackagerBcdTabDriver
  InitBcdTab: PROC;
  FinalizeBcdTab: PROC;

  END.