
    <<Copier.Mesa>>
        <<Copyright  1985 by Xerox Corporation.  All rights reserved.>>
        <<Satterthwaite, June 18, 1986 10:59:14 am PDT>>
        <<Paul Rovner, September 6, 1983 11:53 pm>>
        <<Russ Atkinson (RRA) March 6, 1985 10:09:34 pm PST>>
    <<>>
    DIRECTORY
        Alloc: TYPE USING [Handle],
        FileParms: TYPE USING [ActualId, Ops],
        Rope: TYPE USING [ROPE],
        Symbols: TYPE,
        SymbolTable: TYPE USING [Base, Handle],
        TimeStamp: TYPE USING [Stamp];

    Copier: DEFINITIONS = {
        OPEN Symbols;

        SEToken: TYPE [2];
        nullSEToken: READONLY SEToken;

    <<implemented by FilePack>>

        FileInit: PROC[
            self: FileParms.ActualId,
            ownTable: Alloc.Handle,
            ops: FileParms.Ops];
        FileReset: PROC;

        CreateFileTable: PROC[CARDINAL];
        EnterFile: PROC[formalId, typeId: HTIndex, defaultFile: Rope.ROPE] RETURNS[MDIndex];
        FindMdEntry: PROC[id: HTIndex, version: TimeStamp.Stamp, file: HTIndex]
            RETURNS[MDIndex];
        FreeSymbolTable: PROC[SymbolTable.Base];
        GetSymbolTable: PROC[MDIndex] RETURNS[SymbolTable.Base];
        MapSymbols: PROC[FileParms.ActualId] RETURNS[SymbolTable.Base];
        TableForModule: PROC[MDIndex] RETURNS[SymbolTable.Handle]; 
        UnmapSymbols: PROC[SymbolTable.Base];

        FileProblem: SIGNAL[hti: HTIndex] RETURNS[BOOL];
        FileVersion: SIGNAL[hti: HTIndex] RETURNS[BOOL];
        FileVersionMix: SIGNAL[hti: HTIndex];

    <<implemented by SymbolCopier>>

        CopierInit: PROC[
            ownTable: Alloc.Handle, symbolCachePages: CARDINAL, useMemo: BOOL_TRUE];
        CopierReset: PROC;

        AugmentContext: PROC[IncludedCTXIndex, MDIndex];
        CompleteContext: PROC[ctx: IncludedCTXIndex, depth: Closure_unit];
        CopyExternalBody: PROC[MDIndex, CBTIndex] RETURNS [CBTIndex];
        CopySymbol: PROC[mdi: MDIndex, iSei: SEIndex, depth: Closure_full] RETURNS[sei: SEIndex];
        CopyUnion: PROC[ctx: CTXIndex, depth: Closure_none];
        CtxFirst: PROC[CTXIndex] RETURNS [SEToken];
        CtxNext: PROC[CTXIndex, SEToken] RETURNS [SEToken];
        CtxValue: PROC[CTXIndex, CARD] RETURNS[SEToken];
        Delink: PROC[ISEIndex];
        FillModule: PROC[sei: ISEIndex, typeId: HTIndex, mdi: MDIndex];
        FindExternalCtx: PROC[MDIndex, CTXIndex] RETURNS[IncludedCTXIndex];
        Outer: PROC[mdi: MDIndex, inner: PROC[SymbolTable.Base]];
        SearchFileCtx: PROC[HTIndex, IncludedCTXIndex] RETURNS[BOOL, ISEIndex];
        TokenHash: PROC[CTXIndex, SEToken] RETURNS[HTIndex];
        TokenSymbol: PROC[CTXIndex, SEToken] RETURNS[ISEIndex];
        TokenValue: PROC[CTXIndex, SEToken] RETURNS[CARD];

        TableRelocated: SIGNAL;
        UnknownModule: SIGNAL[hti: HTIndex];

        }.

