-- 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.