-- DebugOps.mesa last edit, Bruce September 29, 1980 10:03 AM DIRECTORY DebugFormat USING [BBHandle, BitAddress, Foo], MachineDefs USING [ AccessOptions, AddModifyProc, BYTE, DefaultAccess, DefaultVersion, FileHandle, FileName, InvalidateFileCache, GFHandle, ModifyFile, CacheNewFile, PageNumber, VersionOptions], PrincOps USING [BytePC], Symbols USING [CSEIndex, typeANY], Window USING [Handle]; DebugOps: DEFINITIONS IMPORTS MachineDefs = BEGIN BitAddress: TYPE = DebugFormat.BitAddress; Foo: TYPE = DebugFormat.Foo; BBHandle: TYPE = DebugFormat.BBHandle; GFHandle: TYPE = MachineDefs.GFHandle; -- READing and WRITEing LongREAD: PROCEDURE [loc: LONG POINTER] RETURNS [val: UNSPECIFIED]; LongWRITE: PROCEDURE [loc: LONG POINTER, val: UNSPECIFIED]; LongCopyREAD: PROCEDURE [ from: LONG POINTER, nwords: CARDINAL, to: LONG POINTER]; LongCopyWRITE: PROCEDURE [ from: LONG POINTER, nwords: CARDINAL, to: LONG POINTER]; ShortREAD: PROCEDURE [loc: POINTER] RETURNS [val: UNSPECIFIED] = INLINE BEGIN RETURN[LongREAD[Lengthen[loc]]] END; ShortWRITE: PROCEDURE [loc: POINTER, val: UNSPECIFIED] = INLINE BEGIN LongWRITE[Lengthen[loc],val] END; ShortCopyREAD: PROCEDURE [from: POINTER, nwords: CARDINAL, to: POINTER] = INLINE BEGIN LongCopyREAD[Lengthen[from], nwords, to] END; ShortCopyWRITE: PROCEDURE [from: POINTER, nwords: CARDINAL, to: POINTER] = INLINE BEGIN LongCopyWRITE[from, nwords, Lengthen[to]] END; Lengthen: PROCEDURE [POINTER] RETURNS [LONG POINTER]; ReadCodeByte: PROC [gf: GFHandle, pc: PrincOps.BytePC] RETURNS [MachineDefs.BYTE]; WriteCodeByte: PROC [ gf: GFHandle, pc: PrincOps.BytePC, inst: MachineDefs.BYTE]; ReadCodeWord: PROC [gf: GFHandle, offset: INTEGER] RETURNS [UNSPECIFIED]; -- Variable Display FooProc: TYPE = PROCEDURE [f: Foo]; DisplayFoo: FooProc; Display: PROCEDURE [f: DebugFormat.Foo, rec: BOOLEAN ← FALSE]; -- File Cache CacheNewFile: PROCEDURE [ name: STRING, access: MachineDefs.AccessOptions ← MachineDefs.DefaultAccess, version: MachineDefs.VersionOptions ← MachineDefs.DefaultVersion] RETURNS [MachineDefs.FileHandle] = INLINE { RETURN[MachineDefs.CacheNewFile[name,access,version]]}; FileName: PROCEDURE [name: STRING, file: MachineDefs.FileHandle] = INLINE { MachineDefs.FileName[name,file]}; ModifyFile: PROCEDURE [name: STRING] RETURNS [BOOLEAN] = INLINE { RETURN[MachineDefs.ModifyFile[name]]}; InvalidateFileCache: PROCEDURE = INLINE {MachineDefs.InvalidateFileCache}; AddModifyProc: PROC [proc: PROC[STRING,MachineDefs.FileHandle] RETURNS [BOOLEAN]] = INLINE {MachineDefs.AddModifyProc[proc]}; AddStatisticsProcedure: PROC[PROC]; -- Debug Window window: Window.Handle; fileSW: Window.Handle; -- Interpreter Interpret: PROC [ exp: STRING, results: FooProc ← DisplayFoo, targetType: Symbols.CSEIndex ← Symbols.typeANY]; Numeric: PROC [STRING] RETURNS [BOOLEAN]; StringToModule: PROC [STRING] RETURNS [STRING]; StringExpToNum: PROC [exp: STRING, radix: CARDINAL] RETURNS [UNSPECIFIED]; StringExpToLNum: PROC [exp: STRING, radix: CARDINAL] RETURNS [LONG UNSPECIFIED]; StringExpToOctal: PROC [STRING] RETURNS [CARDINAL]; StringExpToLOctal: PROC [STRING] RETURNS [LONG CARDINAL]; StringExpToDecimal: PROC [STRING] RETURNS [INTEGER]; StringExpToLDecimal: PROC [STRING] RETURNS [LONG INTEGER]; ParseError: SIGNAL [errorLoc: CARDINAL]; SyntaxError: SIGNAL [errorLoc: CARDINAL]; InvalidCharacter: SIGNAL [index: CARDINAL]; InvalidNumber: SIGNAL [f: Foo]; -- other signals NotImplemented: SIGNAL [msg: STRING]; CommandNotAllowed: SIGNAL; UserAborted: SIGNAL; WriteProtected: SIGNAL [page: CARDINAL]; InvalidAddress: ERROR [address: LONG POINTER]; NonExistentMemoryPage: ERROR [page: MachineDefs.PageNumber]; Abort, Proceed, Kill, Quit: SIGNAL; END.