
    <<CompilerOps.Mesa>>
        <<Copyright © 1985 by Xerox Corporation.  All rights reserved.>>
        <<Satterthwaite, June 7, 1983 10:08 am>>
        <<Russ Atkinson, 28-Aug-81 12:26:43>>
        <<Maxwell, August 2, 1983 9:01 am>>
        <<Paul Rovner, October 17, 1983 11:25 am>>
        <<Russ Atkinson (RRA) March 6, 1985 10:10:11 pm PST>>
    <<>>
    DIRECTORY
        FS USING [OpenFile],
        FileSegment USING [Span],
        FileParms USING [ActualId, Ops],
        IO USING [STREAM],
        Rope USING [ROPE],
        TimeStamp USING [Stamp];

    CompilerOps: DEFINITIONS = {

        <<transaction definitions>>

            LetterSwitches: TYPE = PACKED ARRAY CHAR['a..'z] OF BOOL;

            Transaction: TYPE = RECORD [
                <<action>>
                    op: {compile, replace} _ $compile,
                <<input>>
                    source: FileParms.ActualId,
                    sourceStream: IO.STREAM,
                    fileParms: FileParms.Ops,
                    switches: LetterSwitches,
                    pattern: FileParms.ActualId,
                    objectName: Rope.ROPE,
                    objectFile: FS.OpenFile,
                    debugPass: CARDINAL_CARDINAL.LAST,
                <<output>>
                    objectVersion: TimeStamp.Stamp,
                    interface: BOOL,
                    matched: BOOL,
                    sourceTokens: CARDINAL,
                    nErrors, nWarnings: CARDINAL,
                    objectBytes, objectFrameSize, linkCount: CARDINAL,
                    bcdPages, codePages, symbolPages: FileSegment.Span,
                <<interaction>>
                    getStream: PROC [StreamId] RETURNS [IO.STREAM],
                    startPass: PROC [CARDINAL] RETURNS [goOn: BOOL]];

            StreamId: TYPE = MACHINE DEPENDENT {source, object, log, (255)};

        <<inquiries>>

            DefaultSwitches: PROC RETURNS [LetterSwitches];
            CompilerVersion: PROC RETURNS [TimeStamp.Stamp];
            AppendHerald: PROC [s: IO.STREAM];

        <<operations>>

            Start: PROC;
            DoTransaction: PROC [REF Transaction];        -- really a VAR
            Stop: PROC;

            Punt: ERROR;

            }.

