DIRECTORY IO USING [STREAM], Rope USING [ROPE], TeleLoad USING [AddressSpace, CoreAddress, CoreBlock, State8086Object]; LarkPrograms: CEDAR DEFINITIONS = { IDType: TYPE = {procedure, variable}; STObject: TYPE = RECORD [ id: Rope.ROPE _ NIL, addr: INT _ 0, type: IDType _ variable ]; nullItem: STObject; STItem: TYPE = REF STObject; SymbolTable: TYPE = REF SymTabObject; SymTabObject: TYPE = RECORD [ e: SEQUENCE length: NAT OF STObject ]; PatchItem: TYPE = REF PatchItemObject; PatchItemObject: TYPE = RECORD [ name: Rope.ROPE, address: TeleLoad.CoreAddress, wordValue: CARDINAL ]; Program: TYPE = REF ProgramObject; ProgramObject: TYPE = RECORD [ program: LIST OF TeleLoad.CoreBlock _ NIL, patchList: LIST OF PatchItem _ NIL, programName: Rope.ROPE _ NIL, addressSpace: TeleLoad.AddressSpace _ main, startState: TeleLoad.State8086Object, searchTable: REF SymTabObject _ NIL, nameTable: REF SymTabObject _ NIL ]; EnumeratePrograms: PROC [proc: PROC [program: Program] RETURNS [stop: BOOL]]; FetchProgram: PROC [programName: Rope.ROPE] RETURNS [p: Program]; AddOrReplaceProgram: PROC [program: Program]; ResetPatchList: PROC [program: Program]; ReadProgramFromDisk: PROC [objectFileName: Rope.ROPE, log: IO.STREAM _ NIL, addressSpace: TeleLoad.AddressSpace _ main] RETURNS [Program]; ReadProgramFromMBFile: PROC [mbFileName: Rope.ROPE, baseAddress: TeleLoad.CoreAddress, log: IO.STREAM _ NIL, addressSpace: TeleLoad.AddressSpace _ main] RETURNS [Program]; BuildSearchTable: PROC [program: Program, name: Rope.ROPE, log: IO.STREAM _ NIL]; PatchProgramWord: PROC [program: Program, address: TeleLoad.CoreAddress, wordValue: CARDINAL, name: Rope.ROPE _ NIL]; PatchFromFile: PROC [program: Program, fileName: Rope.ROPE, log: IO.STREAM _ NIL] RETURNS [LIST OF PatchItem]; ProcedureEnclosing: PROC [program: Program, addr: TeleLoad.CoreAddress, searchMonitor: BOOL _ TRUE] RETURNS [s: STObject]; FindVariable: PROC [program: Program, name: Rope.ROPE, searchMonitor: BOOL _ TRUE] RETURNS [item: STObject, found: BOOL]; Monitor: PROC [log: IO.STREAM _ NIL, addressSpace: TeleLoad.AddressSpace _ main] RETURNS [mon: Program]; }. April 25, 1983 11:08 am, LCS, created from TeleDebOps August 10, 1983 12:07 pm, LCS, added ReadProgramFromMBFile August 30, 1983 3:11 pm, LCS, added addressSpace arg to Monitor LarkPrograms.mesa Last Edited by: Stewart, August 30, 1983 3:11 pm Here is the symbol table part global variable with null stuff in it. Dealing with programs for Lark Enumerate all programs on tap. Search for the given program on the list of parsed programs Put the given program on the list of parsed programs, replacing a previous copy Reset the patch list associated with the program. program.patchList _ NIL Reads the program, but does not store it in the data base (use AddOrReplaceProgram) Read symbol tables for the program. Used internally by Monitor and ReadProgramFromDisk, probably not needed externally. Add a patch item to the list for the given program. Read patch items from the given file, checking symbol names against the symbol table for the given program. Symbol table access. ProcedureEnclosing is handy for printing stack traces. It finds the symbol with the next lowest address. (Note: works fine for finding the static symbol most nearby.) If searchMonitor = TRUE, then the search will include monitor symbols, if any can be found. Usual kind of symbol table lookup. If searchMonitor = TRUE, then the search will include monitor symbols, if any can be found. Return, if possible, a handle for the EPROM monitor for Lark. This is useful for looking at monitor statics. Ê•˜Jšœ™Jšœ0™0J˜šÏk ˜ Jšœœœ˜Jšœœœ˜Jšœ œ9˜GJ˜—Jšœœ œ˜#J™Jšœ™J˜Jšœœ˜%J˜šœ œœ˜Jšœ œœ˜Jšœœ˜J˜J˜—J˜J™&J˜J˜Jšœœœ ˜J˜Jšœ œœ˜%šœœœ˜Jšœœ œœ ˜#J˜J˜—Jšœ™J˜Jšœ œœ˜&šœœœ˜ Jšœ œ˜J˜Jšœ ˜J˜J˜—Jšœ œœ˜"šœœœ˜Jšœ œœœ˜*Jšœ œœ œ˜#Jšœœœ˜J˜+J˜%Jšœ œœ˜$Jšœ œ˜!J˜—J˜J™Jš Ïnœœœœœ˜MJ˜J™;Jšž œœœœ˜AJ˜J™OJšžœœ˜-J˜JšœJ™JJšžœœ˜(J˜JšœS™SJšžœœœœœœ.œ ˜ŠJ˜Jšžœœœ*œœœ.œ ˜«J˜Jšœx™xJš žœœœœœœ˜QJ˜J™3Jš žœœ>œ œœ˜uJ˜J™kJšž œœ#œœœœœœœ ˜nJ˜Jšœš™šJš žœœ?œœœ˜zJ˜Jšœ™Jšž œœœœœœœ˜yJ˜J™mJš žœœœœœ.œ˜hJ˜J˜Jšœœ˜5Jšœœ˜:Jšœœ#˜?—…— ¿