CGenDebugCons.mesa Edited by Sweet, 18-Feb-83 22:09:38
DIRECTORY
CGenDebugDefs USING [GetBackup],
CodeDefs USING [ConsDestination],
FormSW USING [
AllocateItemDescriptor, BooleanItem, ClientItemsProcType, Display,
ItemHandle, line0, line1, line2, NumberItem, StringItem],
Symbols USING [ContextLevel, lG, lL, lZ],
Tool USING [Create, MakeFormSW, MakeSWsProc],
ToolWindow USING [SetTinyName, TransitionProcType],
Window USING [Handle, Place],
WindowFont USING [CharWidth];
CGenDebugCons: PROGRAM
IMPORTS CGenDebugDefs, FormSW, Tool, ToolWindow, WindowFont
EXPORTS CGenDebugDefs =
BEGIN
OPEN FormSW, CGenDebugDefs;
window: Window.Handle;
h: Window.Handle;
windowIsActive: BOOLEANFALSE;
MakeMySWs: Tool.MakeSWsProc =
BEGIN
h ← Tool.MakeFormSW[window: window, formProc: MakeParameterArray];
END;
Init: PRIVATE PROCEDURE =
BEGIN
window ← Tool.Create[
makeSWsProc: MakeMySWs,
name: "Constructor Destination"L,
clientTransition: Transit,
cmSection: "ConsDest"L];
ToolWindow.SetTinyName[window, "Cons"L, "Dest"L]
END;
Transit: ToolWindow.TransitionProcType = {windowIsActive ← new = active};
ConsParamIndex: TYPE = {bd, inFrame, pLoaded, ignSafen, pDel,
wSize, fOff, pSti, pLen, rem, bSize, fLvl, pBackup};
ConsParams: TYPE = LONG DESCRIPTOR FOR ARRAY ConsParamIndex OF
FormSW.ItemHandle;
cw: CARDINAL = WindowFont.CharWidth['w];
Col1: CARDINAL = 0*cw;
Col2: CARDINAL = Col1 + 12*cw;
Col3: CARDINAL = Col2 + 13*cw;
Col4: CARDINAL = Col3 + 13*cw;
Col5: CARDINAL = Col4 + 13*cw;
bdPlace: Window.Place = [x: Col1, y: line0];
wSizePlace: Window.Place = [x: Col1, y: line1];
bSizePlace: Window.Place = [x: Col1, y: line2];
inFramePlace: Window.Place = [x: Col2, y: line0];
fOffPlace: Window.Place = [x: Col2, y: line1];
fLvlPlace: Window.Place = [x: Col2, y: line2];
pLoadedPlace: Window.Place = [x: Col3, y: line0];
pStiPlace: Window.Place = [x: Col3, y: line1];
pBackupPlace: Window.Place = [x: Col3, y: line2];
ignSafenPlace: Window.Place = [x: Col4, y: line0];
pLenPlace: Window.Place = [x: Col4, y: line1];
pDelPlace: Window.Place = [x: Col5, y: line0];
remPlace: Window.Place = [x: Col5, y: line1];
MakeParameterArray: FormSW.ClientItemsProcType =
BEGIN OPEN FormSW;
nParams: CARDINAL = LOOPHOLE[LAST[ConsParamIndex], CARDINAL] + 1;
params: ConsParams ← LOOPHOLE[
AllocateItemDescriptor[nParams]];
params[bd] ← NumberItem[readOnly: TRUE, signed: FALSE,
tag: "bd"L, place: bdPlace, value: @bdWord];
params[wSize] ← NumberItem[readOnly: TRUE, signed: FALSE,
tag: "wSize"L, place: wSizePlace, value: @cd.wSize];
params[bSize] ← NumberItem[readOnly: TRUE, signed: FALSE,
tag: "bSize"L, place: bSizePlace, value: @bSizeWord];
params[inFrame] ← BooleanItem[
tag: "inFrame"L, place: inFramePlace, switch: @inFrame];
params[fOff] ← NumberItem[readOnly: TRUE, signed: FALSE,
tag: "fOff"L, place: fOffPlace, value: @cd.fOffset];
params[fLvl] ← StringItem[
tag: "fLvl"L, place: fLvlPlace, readOnly: TRUE, string: @fLvlString];
params[pLoaded] ← BooleanItem[
tag: "pLoaded"L, place: pLoadedPlace, switch: @pLoaded];
params[pSti] ← NumberItem[readOnly: TRUE, signed: FALSE,
tag: "pSti"L, place: pStiPlace, value: @pStiWord];
params[pBackup] ← StringItem[
tag: "pBkp"L, place: pBackupPlace, readOnly: TRUE, string: @pBackupString];
params[ignSafen] ← BooleanItem[
tag: "ignSafen"L, place: ignSafenPlace, switch: @ignSafen];
params[pLen] ← NumberItem[readOnly: TRUE, signed: FALSE,
tag: "pLen"L, place: pLenPlace, value: @pLenWord];
params[pDel] ← NumberItem[readOnly: TRUE,
tag: "pDel"L, place: pDelPlace, value: @cd.pDelta];
params[rem] ← NumberItem[readOnly: TRUE, signed: FALSE,
tag: "rem"L, place: remPlace, value: @cd.remaining];
RETURN[items: LOOPHOLE[params], freeDesc: TRUE];
END;
cd: PUBLIC CodeDefs.ConsDestination;
UpdateConstDest: PUBLIC PROCEDURE =
BEGIN
DoLvl: PROC [s: LONG STRING, l: Symbols.ContextLevel] =
BEGIN
s.length ← 1;
s[0] ← SELECT l FROM
Symbols.lZ => 'Z,
Symbols.lG => 'G,
Symbols.lL => 'L,
> LAST[Symbols.ContextLevel] => '?,
ENDCASE => '0 + l;
END;
inFrame ← IF cd.inFrame THEN TRUE ELSE FALSE;
pLoaded ← IF cd.pLoaded THEN TRUE ELSE FALSE;
ignSafen ← IF cd.ignoreSafen THEN TRUE ELSE FALSE;
bdWord ← cd.bd;
bSizeWord ← cd.bSize;
DoLvl[fLvlString, cd.fLevel];
pLenWord ← cd.pLength;
pStiWord ← LOOPHOLE[cd.pSti];
CGenDebugDefs.GetBackup[pBackupString, cd.pBackup];
IF windowIsActive THEN FormSW.Display[h];
END;
inFrame, pLoaded, ignSafen: BOOLEAN;
bdWord: CARDINAL;
bSizeWord: CARDINAL;
pLenWord: CARDINAL;
pStiWord: CARDINAL;
fLvlShortString: STRING ← [1];
pBackupShortString: STRING ← [30];
fLvlString: LONG STRING ← fLvlShortString;
pBackupString: LONG STRING ← pBackupShortString;
Init[];
END.