
    <<TypeStrings.mesa>>
        <<Copyright  1985 by Xerox Corporation.  All rights reserved.>>
        <<Maxwell on  11-Aug-81 10:59:55>>
        <<Rovner on  13-Aug-81  8:50:54>>
        <<Satterthwaite, May 6, 1983 1:08 pm>>
    <<Russ Atkinson (RRA) January 31, 1985 1:13:19 pm PST>>

    DIRECTORY
        Symbols USING [SEIndex],
        SymbolTable USING [Base];

    TypeStrings: DEFINITIONS = {

        Code: TYPE = MACHINE DEPENDENT {
            definition(200b), name, 
            record, structure, union, array, sequence, enumerated, subrange, opaque,
            countedZone, uncountedZone,
            list, relativeRef, ref, refAny, pointer, longPointer, descriptor, longDescriptor, --address--
            port, process, program, 
            type,
            nil,
            any,
            boolean,
            unspecified,
            globalFrame, localFrame,
            procedure, signal, error, --transfer-- 
            cardinal, integer, character, longInteger, longCardinal, --basic --
            string, stringBody, text, atomRec,
            mds, ordered, packed, readOnly, -- options
            real,
            paint,
            leftParen, rightParen,
        <<additons by EHS>>
            safeProc,
            safe,
            var,
            longUnspecified
            };        -- not yet:  code, base
        <<Code starts at 200b so that a typestring can be parsed rapidly>>
        <<a character in [000c..'Z] is a string name or length>>
        <<a character in [200b..377b] is a code>>
        <<the only exception is paint(8 chars), which is always proceeded by an opaque or paint code>>

        TypeString: TYPE = LONG STRING;

        Create: PROC[base:SymbolTable.Base, sei:Symbols.SEIndex, z:UNCOUNTED ZONE] 
            RETURNS[TypeString];
        <<will complain if all of the necessary information isn't in base>>
        <<ASSERTION: TypePack.Equivalent[[base1,sei1],[base2,sei2]]  >>
        <<IFF (Create[base1,sei1]=Create[base2,sei2])  >>

        }.
