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