-- DI.mesa last edit, Bruce October 25, 1980 9:02 PM
DIRECTORY
DebugFormat USING [BitAddress, Foo],
Inline USING [DIVMOD],
MachineDefs USING [BYTE, ControlLink, WordLength],
PrincOps USING [ControlLink],
Symbols USING [
ArraySEIndex, CSEIndex, CTXIndex, HTIndex, HTNull, IncludedCTXIndex, ISEIndex,
MDIndex, RecordSEIndex, SEIndex, SERecord, TransferMode, TypeClass],
Table USING [Base, Limit];
DI: DEFINITIONS IMPORTS Inline =
BEGIN OPEN Symbols;
Foo: TYPE = DebugFormat.Foo;
BitAddress: TYPE = DebugFormat.BitAddress;
CSEIndex: TYPE = Symbols.CSEIndex;
CTXIndex: TYPE = Symbols.CTXIndex;
HTIndex: TYPE = Symbols.HTIndex;
RecordSEIndex: TYPE = Symbols.RecordSEIndex;
SEIndex: TYPE = Symbols.SEIndex;
ISEIndex: TYPE = Symbols.ISEIndex;
EnumeratedSEIndex: TYPE = Table.Base RELATIVE POINTER [0..Table.Limit) TO
enumerated cons Symbols.SERecord;
ArrayDescSEIndex: TYPE = Table.Base RELATIVE POINTER [0..Table.Limit) TO
arraydesc cons Symbols.SERecord;
TransferSEIndex: TYPE = Table.Base RELATIVE POINTER [0..Table.Limit) TO
transfer cons Symbols.SERecord;
UnionSEIndex: TYPE = Table.Base RELATIVE POINTER [0..Table.Limit) TO
union cons Symbols.SERecord;
SubrangeSEIndex: TYPE = Table.Base RELATIVE POINTER [0..Table.Limit) TO
subrange cons Symbols.SERecord;
LongSEIndex: TYPE = Table.Base RELATIVE POINTER [0..Table.Limit) TO
long cons Symbols.SERecord;
SequenceSEIndex: TYPE = Table.Base RELATIVE POINTER [0..Table.Limit) TO
sequence cons Symbols.SERecord;
ValFormat: TYPE = RECORD [
SELECT tag: * FROM
none => [],
card => [],
int => [],
char => [],
pointer => [],
relative => [],
string => [],
enum => [esei: EnumeratedSEIndex],
ENDCASE];
NumberType: TYPE = {nogood, one, two}; -- ordered for Words
Words: TYPE = ARRAY NumberType[nogood..two) OF WORD;
Number: TYPE = RECORD [type: NumberType, pad: [0..37777B],
body: SELECT OVERLAID * FROM
integer => [i: INTEGER],
cardinal => [c: CARDINAL],
pointer => [p: POINTER],
unspecified => [u: UNSPECIFIED],
rep => [sign: BOOLEAN, fill1: [0..77777B)],
longInt => [li: LONG INTEGER],
longCard => [lc: LONG CARDINAL],
longPoint => [lp: LONG POINTER],
longUnspec => [lu: LONG UNSPECIFIED],
longRep => [fill2: UNSPECIFIED, lsign: BOOLEAN, fill3: [0..77777B)],
numArray => [w: Words],
ENDCASE];
NumAddr: TYPE = RECORD [SELECT OVERLAID * FROM
int => [pi: LONG POINTER TO INTEGER],
card => [pc: LONG POINTER TO CARDINAL],
lInt => [pli: LONG POINTER TO LONG INTEGER],
lCard => [plc: LONG POINTER TO LONG CARDINAL],
ENDCASE];
NumFormat: TYPE = RECORD [SELECT OVERLAID * FROM
int => [i: INTEGER],
card => [c: CARDINAL],
bytes => [b1, b2: MachineDefs.BYTE],
nibbles => [n1, n2, n3, n4: [0..16)],
ENDCASE];
LongNumFormat: TYPE = RECORD [ SELECT OVERLAID * FROM
int => [i: LONG INTEGER],
card => [c: LONG CARDINAL],
words => [w1, w2: CARDINAL],
bytes => [b1, b2, b3, b4: MachineDefs.BYTE],
ENDCASE];
Desc: TYPE = RECORD [base: POINTER, length: CARDINAL];
LongDesc: TYPE = RECORD [base: LONG POINTER, length: CARDINAL];
dereferenced: BOOLEAN;
MakeLongType: PROC [rType: SEIndex] RETURNS [type: CSEIndex];
GetNumber: PROC [f: Foo, code: Err ← invalidNumber] RETURNS [n: Number];
Format: PROC [sei: SEIndex] RETURNS [vf: ValFormat, intSub: BOOLEAN];
GetValue: PROC [f: Foo];
PutValue: PROC [lhs: Foo, from: LONG POINTER];
Normalize: PROC [bits: CARDINAL] RETURNS [word, offset: CARDINAL] =
INLINE {[word, offset] ← Inline.DIVMOD[bits, MachineDefs.WordLength]};
GetControlLink: PROC [Foo] RETURNS [PrincOps.ControlLink];
DerefProcDesc: PROC [PrincOps.ControlLink] RETURNS [PrincOps.ControlLink];
NotAProcedure: ERROR [cl: MachineDefs.ControlLink];
GetDesc: PROC [Foo] RETURNS [LongDesc, ArraySEIndex];
GetLongDesc: PROC [Foo] RETURNS [LongDesc, ArraySEIndex];
NotAnArray: ERROR;
NotHere: ERROR;
SizeMismatch: ERROR;
SetDefaultRadix: PROC [CARDINAL];
CheckClass: PROC [tc: TypeClass, f: Foo] RETURNS [UNSPECIFIED];
Pad: PROC [f: Foo, rsei: RecordSEIndex] RETURNS [pad: CARDINAL];
MapCtx: PROC [MDIndex, CTXIndex] RETURNS [IncludedCTXIndex];
SearchCtxList: PROC [hti: HTIndex, ctx: CTXIndex] RETURNS [sei: ISEIndex];
SearchCtxForVal: PROC [
val: UNSPECIFIED, ctx: CTXIndex, tm: TransferMode]
RETURNS [sei: ISEIndex];
SearchCtxForProc: PROC [val: UNSPECIFIED, ctx: CTXIndex]
RETURNS [sei: ISEIndex];
SearchCtxForSignal: PROC [val: UNSPECIFIED, ctx: CTXIndex]
RETURNS [sei: ISEIndex];
TypeForSe: PROC [sei: SEIndex] RETURNS [type: CSEIndex];
FindField: PROC [f: Foo, pad: CARDINAL, isei: ISEIndex]
RETURNS [field: Foo];
TagIsei: PROC [f: Foo, pad: CARDINAL, usei: UnionSEIndex]
RETURNS [isei: ISEIndex];
VType: TYPE = {controlled, overlaid, computed};
VariantType: PROC [UnionSEIndex] RETURNS [VType];
ResetLongs: PROC;
Err: TYPE = {callingInline, cantLengthen, constructor, indexTooBig, invalidAddress,
invalidNumber, invalidPointer, invalidSubrange, nilChk, notFound, notProcDesc,
notRelative, notType, notUniqueField, notValidField, overflow, relation,
sizeMismatch, tooManyArgs, typeMismatch, unknownVariant, wontDump, worryCall,
wrongBase, wrongNumberArgs, wrongBrackets,
wrongDollar, notArray, spare1, spare2, spare3};
AbortWithError: PROC [code: Err, hti: HTIndex ← Symbols.HTNull];
Error: PROC [code: Err, hti: HTIndex ← Symbols.HTNull];
END.