-- P5L.mesa, modified by Sweet, December 4, 1979  11:32 AM
DIRECTORY
  AltoDefs: FROM "altodefs",
  CodeDefs: FROM "codedefs",
  Symbols: FROM "symbols",
  Tree: FROM "tree";

P5L: DEFINITIONS =
  BEGIN OPEN Symbols, CodeDefs;

  -- from VarUtils

  AdjustComponent: PROCEDURE [var: POINTER TO VarComponent,
    rSei: RecordSEIndex, fSei: ISEIndex, tBits: CARDINAL];
  AllLoaded: PROCEDURE [r: VarIndex, junkOk: BOOLEAN ← FALSE]
    RETURNS [BOOLEAN];
  ComponentForLex: PROCEDURE [l: Lexeme, allowFields: BOOLEAN ← FALSE]
    RETURNS [VarComponent]; 
  ComponentForSE: PROCEDURE [sei: ISEIndex]
    RETURNS [var: VarComponent];
  CopyLex: PROCEDURE [l: Lexeme] RETURNS [Lexeme];
  CopyToTemp: PROCEDURE [r: VarIndex, tsei: ISEIndex ← ISENull]
    RETURNS [var: VarComponent, sei: ISEIndex];
  CopyVarItem: PROCEDURE [r: VarIndex] RETURNS [rr: VarIndex];
  EasilyLoadable: PROCEDURE
    [var: VarComponent, dir: MoveDirection]
    RETURNS [evar: VarComponent];
  EasyToLoad: PROCEDURE
    [var: VarComponent, dir: MoveDirection]
    RETURNS [BOOLEAN];
  FieldOfComponent: PROCEDURE [var: POINTER TO VarComponent,
    wd, bd, wSize, bSize: CARDINAL ← 0];
  FieldOfComponentOnly: PROCEDURE [var: POINTER TO VarComponent,
    wd, bd, wSize, bSize: CARDINAL ← 0];
  FieldOfVar: PROCEDURE [r: VarIndex,
    wd, bd, wSize, bSize: CARDINAL ← 0];
  FieldOfVarOnly: PROCEDURE [r: VarIndex,
    wd, bd, wSize, bSize: CARDINAL ← 0];
  GenVarItem: PROCEDURE [tag: VarTag] RETURNS [r: VarIndex];
  InCode: PROCEDURE [r: VarIndex] RETURNS [BOOLEAN];
  LongVarAddress: PROCEDURE [r: VarIndex] RETURNS [BOOLEAN];
  ModComponent: PROCEDURE [var: POINTER TO VarComponent,
    wd, bd: CARDINAL ← 0];
  NormalizeExp: PROCEDURE
    [r: VarIndex, tempsei: ISEIndex ← ISENull, codeOk: BOOLEAN ← FALSE]
    RETURNS [nwords: CARDINAL, long: BOOLEAN, tsei: ISEIndex];
  NormalLex: PROCEDURE [nwords: CARDINAL, long, code: BOOLEAN ← FALSE]
    RETURNS [Lexeme];
  OVarItem: PROCEDURE [var: VarComponent] RETURNS [r: VarIndex];
  ReleaseLex: PROCEDURE [lex: Lexeme];
  ReleaseVarItem: PROCEDURE [r: VarIndex];
  ReusableCopies: PROCEDURE [r: VarIndex, dir: MoveDirection,
    stackOk: BOOLEAN ← TRUE]
    RETURNS [r1, r2: VarIndex];
  TOSAddrLex: PROCEDURE [size: CARDINAL, long: BOOLEAN ← FALSE] 
    RETURNS [bdo Lexeme];
  TOSCodeAddrLex: PROCEDURE [size: CARDINAL] RETURNS [bdo Lexeme];
  TOSComponent: PROCEDURE [size: CARDINAL ← 1] RETURNS [VarComponent];
  TOSLex: PROCEDURE [size: CARDINAL ← 1] RETURNS [Lexeme];
  VarAddressEasy: PROCEDURE [r: VarIndex] RETURNS [BOOLEAN];
  VarAlignment: PROCEDURE [r: VarIndex, dir: MoveDirection]
    RETURNS [bd, bSize: [0..AltoDefs.wordlength), wSize: CARDINAL];
  VarFinal: PROCEDURE;
  VarForLex: PROCEDURE [l: Lexeme] RETURNS [r: VarIndex]; 
  VarInit: PROCEDURE;
  VarStackWords: PROCEDURE [r: VarIndex] RETURNS [nW: CARDINAL];

  -- from VarBasics

  AddrComponent: PROCEDURE [var: VarComponent] RETURNS [avar: VarComponent];
  AddrForVar: PROCEDURE [r: VarIndex, codeOk: BOOLEAN ← FALSE]
    RETURNS [avar: VarComponent];
  BaseComponent: PROCEDURE [lvl: ContextLevel] RETURNS [VarComponent];
  GenAdd: PROCEDURE [delta: UNSPECIFIED, long: BOOLEAN ← FALSE];
  GenAnd: PROCEDURE [delta: UNSPECIFIED];
  GenRFC: PROCEDURE [wd: CARDINAL, bd: [0..16), len: [1..16]];
  GenShift: PROCEDURE [delta: UNSPECIFIED];
  LoadAddress: PROCEDURE [r: VarIndex, codeOk: BOOLEAN ← FALSE]
    RETURNS [long: BOOLEAN];
  LoadBoth: PROCEDURE [atC1, atC2: POINTER TO VarComponent, abelian: BOOLEAN];
  LoadSum: PROCEDURE [atB, atD: POINTER TO VarComponent]
    RETURNS [bpSize: [1..2]];
  MakeBo: PROCEDURE [r: VarIndex] RETURNS [bor: BoVarIndex];
  MakeComponent: PROCEDURE [r: VarIndex, allowFields: BOOLEAN ← FALSE]
    RETURNS [var: VarComponent];
  VarVarAssign: PROCEDURE [to, from: VarIndex, isexp: BOOLEAN]
    RETURNS [l: Lexeme];
  Words: PROCEDURE [w: CARDINAL, b: [0..AltoDefs.wordlength)]
    RETURNS [CARDINAL];

  -- from VarMove

  LoadComponent: PROCEDURE [var: VarComponent];
  LoadVar: PROCEDURE [r: VarIndex];
  StoreComponent: PROCEDURE [var: VarComponent];
  StoreVar: PROCEDURE [r: VarIndex];
  END...