-- XXDebugCommands.mesa -- Edited by Bruce, Oct 14, 1980 11:38 AM DIRECTORY FormSW, Ascii USING [CR, SP, TAB], Inline USING [LongNumber], MsgSW, Put, RESOut, Selection, STDebugDefs USING [ NextSe, PutAsBti, PutAsCti, PutAsHti, PutAsLti, PutAsMdi, PutAsSei, PutAsTree, PutAsVariousRep], String USING [InvalidNumber], UserInput USING [ResetUserAbort, userAbort], XXDebugCommandDefs USING [ParamIndex], XXDebugDefs; XXDebugCommands: PROGRAM IMPORTS MsgSW, Put, RESOut, Selection, STDebugDefs, String, UserInput, XXDebugDefs EXPORTS RESOut, XXDebugDefs = BEGIN OPEN XXDebugDefs, RESOut; handle: PUBLIC RESOut.WindowsHandle _ NIL; cancelAction: PUBLIC ERROR [endLine: BOOLEAN _ FALSE] = CODE; ParamNotify: PUBLIC FormSW.ProcType = BEGIN OPEN STDebugDefs, XXDebugCommandDefs, XXDebugDefs; ENABLE cancelAction => BEGIN IF endLine THEN Put.Text[handle.fileSW, " XXX"L]; GO TO done; END; Complain[""L]; UserInput.ResetUserAbort[]; SELECT LOOPHOLE[index, ParamIndex] FROM foo => PutAsFoo[GetSelectionValue[]]; topctx => PutTopCtx[]; tos => PutTos[]; brk => PutAsBB[GetSelectionValue[]]; ctx => PutAsContext[GetSelectionValue[]]; stk => PutAsStack[GetSelectionValue[]]; lti => PutAsLti[GetSelectionValue[]]; tree => PutAsTree[GetSelectionValue[]]; sei => PutAsSei[GetSelectionValue[]]; nextse => NextSe[]; hti => PutAsHti[GetSelectionValue[]]; cti => PutAsCti[GetSelectionValue[]]; bti => PutAsBti[GetSelectionValue[]]; mdi => PutAsMdi[GetSelectionValue[]]; rep => PutAsVariousRep[GetSelectionValue[]]; user => UserOctalRead[GetLongSelectionValue[]]; pc => PrintPCCache[]; nxpc => PrintNextCacheItem[]; pcci => PrintCacheItem[GetSelectionValue[]]; list => PrintListNode[GetSelectionValue[]]; nxlist => PrintNextListNode[]; ENDCASE; EXITS done => NULL; END; GetSelectionValue: PUBLIC PROCEDURE RETURNS [val: UNSPECIFIED] = BEGIN num: Inline.LongNumber; num.lc _ GetLongSelectionValue[]; SELECT num.highbits FROM 0, 177777B => NULL; ENDCASE => {Complain["number too big"L]; ERROR cancelAction}; RETURN[num.lowbits]; END; GetLongSelectionValue: PUBLIC PROCEDURE RETURNS [val: LONG UNSPECIFIED] = BEGIN val _ Selection.LongNumber[radix: 10 ! String.InvalidNumber => GO TO noNumber]; RETURN; EXITS noNumber => BEGIN Complain["Select a number first"L]; ERROR cancelAction; END; END; Complain: PUBLIC PROCEDURE [msg: STRING, clear: BOOLEAN _ TRUE] = BEGIN IF handle.msgSW = NIL THEN RETURN; IF clear THEN MsgSW.Clear[handle.msgSW]; MsgSW.Post[sw: handle.msgSW, string: msg, endOfMsg: FALSE]; END; -- log writing procedures charsOnLine: CARDINAL _ 0; PChar: PUBLIC PROCEDURE [c: CHARACTER] = BEGIN IF UserInput.userAbort THEN ERROR cancelAction[TRUE]; Put.Char[handle.fileSW, c]; charsOnLine _ SELECT c FROM Ascii.TAB => ((charsOnLine+8)/8)*8, Ascii.CR => 0, ENDCASE => charsOnLine + 1; END; MakeRoom: PUBLIC PROCEDURE [chars, indent: CARDINAL] RETURNS [was: BOOLEAN]= BEGIN charsPerLine: CARDINAL = handle.fileSW.box.dims.w/7-4; IF charsOnLine + chars <= charsPerLine THEN RETURN [TRUE]; PCr[]; THROUGH [0..indent/8) DO PChar[Ascii.TAB]; ENDLOOP; THROUGH [0..indent MOD 8) DO PChar[Ascii.SP]; ENDLOOP; RETURN[FALSE]; END; END.