-- file Copier.Mesa
-- last modified by Sandman, August 26, 1980  2:29 PM

DIRECTORY
  Segments USING [FHandle, SHandle],
  BcdDefs USING [VersionStamp],
  Strings USING [SubString],
  Symbols,
  SymbolTable USING [Base, Handle];
  
Copier: DEFINITIONS =
  BEGIN
  OPEN Symbols;
  
  SEToken: TYPE = PRIVATE RECORD [ISEIndex];
  NullSEToken: SEToken = [ISENull];
  
-- implemented by FilePack

  FileInit: PROC [self: STRING, version: BcdDefs.VersionStamp];
  FileReset: PROC;
  
  CreateFileTable: PROC [CARDINAL];
  EnterFile: PROC [HTIndex, Strings.SubString] RETURNS [HTIndex];
  EnterFileSegment: PROC [
      id: HTIndex, version: BcdDefs.VersionStamp, fileSeg: Segments.SHandle]
    RETURNS [MDIndex];
  FindMdEntry: PROC [id: HTIndex, version: BcdDefs.VersionStamp, file: HTIndex]
    RETURNS [MDIndex];
  FreeSymbolTable: PROC [SymbolTable.Base];
  GetSymbolTable: PROC [MDIndex] RETURNS [SymbolTable.Base];
  HtiToMdi: PROC [HTIndex] RETURNS [MDIndex];
  LocateTables: PROC [CARDINAL];
  TableForModule: PROC [MDIndex] RETURNS [SymbolTable.Handle]; 
  
  FileProblem: SIGNAL [hti: HTIndex] RETURNS [BOOLEAN];
  FileVersion: SIGNAL [hti: HTIndex] RETURNS [BOOLEAN];
  FileVersionMix: SIGNAL [hti: HTIndex];
  OwnFile: SIGNAL [file: Segments.FHandle];
  
-- implemented by SymbolCopier

  CopierInit: PROC [cache: BOOLEAN];
  CopierReset: PROC;
  
  AugmentContext: PROC [IncludedCTXIndex, BOOLEAN, MDIndex];
  CompleteContext: PROC [IncludedCTXIndex, BOOLEAN];
  CopyExternalBody: PROC [MDIndex, CBTIndex] RETURNS [CBTIndex];
  CopyUnion: PROC [CTXIndex];
  CtxFirst: PROC [CTXIndex] RETURNS [SEToken];
  CtxNext: PROC [CTXIndex, SEToken] RETURNS [SEToken];
  CtxValue: PROC [CTXIndex, CARDINAL] RETURNS [SEToken];
  Delink: PROC [ISEIndex];
  FillModule: PROC [sei: ISEIndex, key: HTIndex];
  FindExternalCtx: PROC [MDIndex, CTXIndex] RETURNS [IncludedCTXIndex];
  Outer: PROC [mdi: MDIndex, inner: PROC [SymbolTable.Base]];
  SearchFileCtx: PROC [HTIndex, IncludedCTXIndex] RETURNS [BOOLEAN, ISEIndex];
  TokenHash: PROC [CTXIndex, SEToken] RETURNS [HTIndex];
  TokenSymbol: PROC [CTXIndex, SEToken] RETURNS [ISEIndex];
  TokenValue: PROC [CTXIndex, SEToken] RETURNS [CARDINAL];
  
  TableRelocated: SIGNAL;
  UnknownModule: SIGNAL [hti: HTIndex];
  
  -- implemented by debugger
  PurgeMdi: PROC [MDIndex];
  
  END.