DIRECTORY CDebugDefs USING [ CCCur, CCFirst, CellCard, CmdIndex, GetLongSelectionValue, GetSelectionValue, GoFwd, Handle, PutAsCC, PutAsComponent, PutAsLabelInfoIndex, PutAsStack, PutAsVar, PutCurrentBody, PutCurrentExpr, PutCurrentSource, PutCurrentStmt, PutLabelState, PutNextCC, PutPrevCC, PutRecentCC, PutStackDown, PutStackState, PutStackUp, PutTempState, RopeForFop, RopeForMop, StackTop], CodeDefs USING [StackIndex, StackNull], IO, Labels USING [Set], Menus USING [MouseButton], RESOut USING [PCr, PDecimal, POctal, PRope], Rope USING [Concat, ROPE], STDebugDefs USING [ NextSe, PutAsBti, PutAsCti, PutAsHti, PutAsMdi, PutAsSei, PutAsTree, PutAsVariousRep], Symbols USING [ISEIndex, ISENull, SEIndex], Tree USING [Index], ViewerTools USING [GetContents]; CDebugCommands: PROGRAM IMPORTS CDebugDefs, IO, Labels, RESOut, Rope, STDebugDefs, ViewerTools EXPORTS CDebugDefs, RESOut, STDebugDefs = BEGIN OPEN CDebugDefs, STDebugDefs; ROPE: TYPE = Rope.ROPE; Handle: TYPE = CDebugDefs.Handle; cancelAction: PUBLIC ERROR [endLine: BOOLEAN _ FALSE] = CODE; DoCommand: PUBLIC PROC [h: Handle, cmd: CmdIndex, button: Menus.MouseButton] = BEGIN ENABLE cancelAction => GO TO dont; Complain[h: h, msg: NIL, abort: FALSE]; h.stopFlag _ FALSE; SELECT cmd FROM tree => { index: Tree.Index _ GetSelectionValue[h]; PutAsTree[h, [subtree[index]]]}; asCC => PutAsCC[h, GetSelectionValue[h]]; var => BEGIN RESOut.PCr[h]; PutAsVar[h, GetSelectionValue[h]]; END; vcomp => BEGIN OPEN RESOut; val: UNSPECIFIED _ GetSelectionValue[h]; PCr[h]; POctal[h, val]; PRope[h, "^ = "]; PutAsComponent[h, val]; END; first => PutAsCC[h, CCFirst[h]]; cur => PutAsCC[h, CCCur[h]]; next => PutNextCC[h]; prev => PutPrevCC[h]; fwd => GoFwd[h, GetSelectionValue[h]]; rcnt => PutRecentCC[h, GetSelectionValue[h]]; temp => PutTempState[h]; allStack => PutStackState[h]; stack => PutAsStack[h, GetSelectionValue[h]]; tos => { st: CodeDefs.StackIndex _ StackTop[h]; IF st = CodeDefs.StackNull THEN RESOut.PRope[h, "\nStack empty"] ELSE PutAsStack[h, st]}; down => PutStackDown[h]; up => PutStackUp[h]; lbl => PutLabelState[h]; lii => PutAsLabelInfoIndex[h, GetSelectionValue[h]]; sei => { sei: Symbols.SEIndex _ GetSelectionValue[h]; IF PutAsSei[h, sei] THEN h.lastId _ LOOPHOLE[sei]}; nextse => { nsei: Symbols.ISEIndex _ NextSe[h, h.lastId]; IF nsei # Symbols.ISENull THEN {[] _ PutAsSei[h, nsei]; h.lastId _ nsei}; }; hti => PutAsHti[h, GetSelectionValue[h]]; cti => PutAsCti[h, GetSelectionValue[h]]; bti => PutAsBti[h, GetSelectionValue[h]]; mdi => PutAsMdi[h, GetSelectionValue[h]]; mop => PutAsMopcode[h, GetSelectionValue[h]]; fop => PutAsFopcode[h, GetSelectionValue[h]]; rep => PutAsVariousRep[h, GetLongSelectionValue[h]]; body => PutCurrentBody[h]; stmt => PutCurrentStmt[h]; expr => PutCurrentExpr[h]; source => PutCurrentSource[h]; ENDCASE; EXITS dont => RETURN; END; PutAsMopcode: PROCEDURE [h: Handle, n: CARDINAL] = BEGIN OPEN RESOut; PCr[h]; PDecimal[h, n]; PRope[h, " = z"]; PRope[h, RopeForMop[n]]; RETURN END; PutAsFopcode: PROCEDURE [h: Handle, n: CARDINAL] = BEGIN OPEN RESOut; PCr[h]; PDecimal[h, n]; PRope[h, " =q"]; PRope[h, RopeForFop[n]]; RETURN END; TreeDepth: PUBLIC SAFE PROC [h: REF ANY] RETURNS [CARDINAL] = TRUSTED { han: Handle _ NARROW[h]; RETURN [CDebugDefs.CellCard[han, han.cmd.dVal]]}; ShowLinks: PUBLIC SAFE PROCEDURE [h: REF ANY] RETURNS [BOOL] = TRUSTED { han: Handle _ NARROW[h]; RETURN[han.showLinks^]}; Complain: PUBLIC SAFE PROCEDURE [h: REF ANY , msg: ROPE, abort, clear: BOOLEAN _ TRUE] = TRUSTED BEGIN handle: Handle _ NARROW[h]; IF ~clear THEN msg _ Rope.Concat[ViewerTools.GetContents[handle.msg], msg]; Labels.Set[handle.msg, msg]; IF abort THEN ERROR cancelAction; END; PChar: PUBLIC SAFE PROCEDURE [h: REF ANY , c: CHARACTER] = TRUSTED BEGIN handle: Handle = NARROW[h]; IF handle.stopFlag THEN ERROR cancelAction[TRUE]; handle.out.PutChar[c]; handle.charsOnLine _ SELECT c FROM '\n => 0, ENDCASE => handle.charsOnLine + 1; END; MakeRoom: PUBLIC SAFE PROCEDURE [h: REF ANY , chars, indent: CARDINAL] RETURNS [was: BOOLEAN] = TRUSTED BEGIN handle: Handle = NARROW[h]; charsPerLine: CARDINAL = handle.ts.ww/handle.en-3; IF handle.charsOnLine + chars <= charsPerLine THEN RETURN [TRUE]; PChar[h, '\n]; THROUGH [0..indent) DO PChar[h, ' ]; ENDLOOP; RETURN[FALSE]; END; END. CDebugCommands.mesa Edited by Bruce, 14-Oct-81 11:06:09 Edited by Sweet, 14-Jan-83 15:48:28 Edited by Haynes, 29-Nov-82 20:27:52 Sweet February 11, 1986 11:18:32 am PST gFrames => GFrameSheet[h]; Things exported to STDebugDefs log writing procedures Κj˜Jšœ™Jšœ#™#Jšœ#™#šœ$™$Icode™'—J˜šΟk ˜ šœ œ˜JšœU˜UJšœ6˜6J˜6J˜GJ˜DJ˜"—Jšœ œ˜'Jšœ˜Jšœœ˜Jšœœ˜Jšœœ ˜,Jšœœœ˜šœ œ˜J˜DJšœ˜—Jšœœ˜+Jšœœ ˜Jšœ œ˜ —J˜šœœ˜Jšœ œ0˜FJšœ"˜)Jšœœ˜#J˜Jšœœœ˜J˜Jšœœ˜!š œœœ œœœ˜=J˜—šΟn œœœ8˜NJš˜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˜˜4J˜—˜J˜,Jšœœ œ˜3—˜ J˜-Jšœœ+˜IJ˜—J˜)J˜)J˜)˜)J˜—J˜-J˜-˜4J˜—J˜J˜J˜™J˜—J˜Jšœ˜—š˜Jšœœ˜—Jšœ˜J˜—šž œ œœ˜2Jšœœ˜J˜J˜J˜J˜Jš˜Jšœ˜J˜—šž œ œœ˜2Jšœœ˜J˜J˜J˜J˜Jš˜Jšœ˜J˜——šœ™J™šž œœœœœœœœœ˜GJšœœ˜Jšœ+˜1—J˜šž œœœ œœœœœœ˜HJšœœ˜Jšœ˜J˜—šžœœœœœœœœ˜XJš ˜ Jšœœ˜Jšœœ=˜KJ˜Jšœœœ˜!Jšœ˜J˜—J˜—šœ™J˜šžœœœ œœœ œ˜BJš˜Jšœœ˜Jšœœœœ˜1J˜šœœ˜"Jšœ ˜ Jšœ˜"—Jšœ˜J˜—š žœœœœœœ˜GJšœœ˜ Jš˜Jšœœ˜Jšœœ˜2Jšœ,œœœ˜AJšœ˜Jšœ œœ˜-Jšœœ˜Jšœ˜J˜—Jšœ˜—J˜—…—ήJ