MicroDefs.mesa
Copyright © 1985 by Xerox Corporation. All rights reserved.
Willie-sue, February 26, 1986 10:51:16 am PST
Dave Rumph, November 20, 1986 3:16:50 pm PST
-- taken from MicDecl.d
MicroDefs:
CEDAR
DEFINITIONS
= BEGIN
ROPE: TYPE = Rope.ROPE;
STREAM: TYPE = IO.STREAM;
Error: SIGNAL[explanation: ROPE ← NIL];
Failure: SIGNAL[explanation: ROPE ← NIL];
SrcFile: TYPE = REF SrcFileRec;
SrcFileRec:
TYPE =
RECORD[
fullName: ROPE,
strm: STREAM,
upperCaseFlag: BOOL,
next: SrcFile
];
OutputFile: TYPE = REF OutputFileRec;
OutputFileRec:
TYPE =
RECORD[
fullName: ROPE,
strm: STREAM
];
Memory: TYPE = REF MemoryRec;
MemoryRec:
TYPE =
RECORD[
symIndex: INTEGER, -- back pointer to symbolRec for this memory
widthInBits: INTEGER,
widthInWords: INTEGER,
size: INTEGER,
memoryNum: INTEGER,
accumWord: WordSeq,
sourceIndex: INTEGER,
sinkIndex: INTEGER,
listOptions: WORD,
listFields: WordSeq ← NIL, -- one word per bit of memory width
lTag: CARDINAL,
memSymPost: INTEGER ← 0,
tagMacro: INTEGER ← 0
];
WordSeq: TYPE = REF WordSeqRec;
WordSeqRec: TYPE = RECORD[ints: SEQUENCE length: [0 .. 4000) OF WORD];
IntegerSeq: TYPE = REF IntegerSeqRec;
IntegerSeqRec: TYPE = RECORD[ints: SEQUENCE length: [0 .. 4000) OF INTEGER];
SymbolType:
TYPE =
MACHINE
DEPENDENT {
nullType(0), macroType(1), fieldType(2), integerType(3), addressType(4),
builtInType(5), neutralType(6), memoryType(7), undefnType(8), bitTableType(9) };
SymbolObj: TYPE = REF SymbolRec;
SymbolRec:
TYPE =
RECORD[
symb: ATOM,
name: ROPE,
sType: SymbolType,
symIndex: INTEGER ← 0,
sMisc: INTEGER ← 0, -- interpretation depends on sType
sVal: WORD ← 0, -- interpretation depends on sType
redef: SymbolObj ← NIL,
sData: REF ANY -- depnds on sType
];
Interpretation of sMisc & sVal:
sType sMisc sVal
fieldType firstBitNumber numBits
integerType - value
addressType memoryIndex address in memory
builtInType builtIn Index
Interpretation of sData:
sType sData
macroType REF macroDefnIndex (REF INT)
memoryType MemoryObj
bitTableType BitTableObj
BitTableObj: TYPE = REF BitTableRec;
BitTableRec:
TYPE =
RECORD[
btSize: INTEGER,
btBits: WordSeq
];
for expanding encoded blocks
ArgRef: TYPE = REF ArgRec;
ArgRec: TYPE = RECORD[aPtr: LONG POINTER TO WORD, lx: INTEGER];
Evaluation Modes
EvalMode: TYPE = {returnVal, accumulateVal, fieldStoreVal};
Lexical scan markers - must be control "char's"
endc:
CHAR = '\n;
-- '\n
endcI: INTEGER = 15B;
sepc: CHAR = IO.SP; -- IO.SP
Aend: CHAR = '\001;
Aargn: CHAR = '\002;
Aarg2: CHAR = '\003;
Aarg1: CHAR = '\004;
Anargs: CHAR = '\005;
Askip: CHAR = '\006;
symc: CHAR = '\025;
numc: CHAR = '\026;
num6c: CHAR = '\027;
Displacements
mcsp: INTEGER = -1;
isval: INTEGER = -2;
asmem: INTEGER = -1;
asval: INTEGER = -2;
bsno: INTEGER = -2;
bttab: INTEGER = -2;
btsize: INTEGER = -3;
Block prefix displacement
bprefix: INTEGER = -1;
LIST flags
LFbinary: WORD = 1;
LFfields: WORD = 2;
LFnumeric: WORD = 4;
LFalphabetic: WORD = 10B;
LF16bit: WORD = 20B;
LFany: WORD = LFbinary + LFfields + LF16bit; -- list stores if any of these is set
Initial BUILTIN numbers
biBUILTIN: INTEGER = 1;
biINSERT: INTEGER = 20;
Buffer lengths
stBufSize: CARDINAL = 512;
Binary block types
MBend: INTEGER = 0;
MBdata: INTEGER = 1;
MBseta: INTEGER = 2;
MBfixup: INTEGER = 3;
MBmemdef: INTEGER = 4;
MBsymbol: INTEGER = 5;
MBext: INTEGER = 6;
END.