
    <<RTBcd.Mesa>>
        <<Copyright  1985 by Xerox Corporation.  All rights reserved.>>
        <<Satterthwaite, 12-Mar-82 11:48:42>>
    <<Russ Atkinson (RRA) January 31, 1985 1:12:13 pm PST>>
        <<Satterthwaite June 3, 1986 10:57:42 am PDT>>

    DIRECTORY
        BcdDefs: TYPE USING [SGIndex, RefLitIndex, TypeIndex, VersionStamp],
        RCMap: TYPE USING [Base, Index],
        Symbols: TYPE USING [SEIndex];

    RTBcd: DEFINITIONS = {    -- BCD extensions for RT info

        VersionID: CARDINAL = 03122;

    <<rt segment headers>>

        RTHeader: TYPE = RECORD[
            versionIdent: CARDINAL _ VersionID,
            refLitTable: RTBase RELATIVE POINTER TO RefLitList,
            litBase: RTBase RELATIVE POINTER,    -- to uninterpreted words
            litLength: CARDINAL,
            rcMapBase: RTBase RELATIVE RCMap.Base,
            rcMapLength: CARDINAL,
            stampTable: RTBase RELATIVE POINTER TO StampList,
            typeTable: RTBase RELATIVE POINTER TO TypeList];

        RTBase: TYPE = LONG BASE POINTER TO RTHeader;


    <<REFs to literals and ATOMs>>

        RefLitIndex: TYPE = BcdDefs.RefLitIndex;

        RefLitItem: TYPE = RECORD[
            referentType: TypeIndex,
            offset, length: CARDINAL];

        RefLitList: TYPE = RECORD[SEQUENCE length: NAT OF RefLitItem];

    <<types>>

        TypeIndex: TYPE = BcdDefs.TypeIndex;

        TypeItem: TYPE = MACHINE DEPENDENT RECORD[
            table (0): BcdDefs.SGIndex,
            sei (2): Symbols.SEIndex,
            canonical (4): BOOLEAN,
            ct (5): CTInfo,
            ut (6): UTInfo,
            rcMap (9): RCMap.Index];

        TypeList: TYPE = RECORD[SEQUENCE length: NAT OF TypeItem];

        <<auxiliary type info>>

        CTInfo: TYPE = RECORD[index: CARDINAL];    -- offset of string from litBase

        StampList: TYPE = RECORD[SEQUENCE limit: [1..NAT.LAST] OF BcdDefs.VersionStamp];

        StampIndex: TYPE = RECORD[NAT];        -- index in StampList
        AnyStamp: StampIndex = [0];

        UTInfo: TYPE = MACHINE DEPENDENT RECORD[
            version (0): StampIndex,            -- AnyStamp => sei good in any table
            sei (1): Symbols.SEIndex];

        }.

