-- file: MFDebugImpl.mesa
-- Pascal-to-Mesa translator output, translated at October 31, 1985 4:28:03 pm PST
DIRECTORY
PascalBasic,
PascalWizardFiles,
MFTypes,
MFProcArray,
MFInteraction,
MFMemory,
MFSymbols,
MFOps,
MFDebug;
MFDebugImpl: PROGRAM IMPORTS PascalBasic, PascalWizardFiles, MFProcArray, MFInteraction, MFMemory, MFSymbols, MFOps EXPORTS MFDebug = PUBLIC
BEGIN OPEN PascalBasic, PascalWizardFiles, MFTypes, MFProcArray, MFInteraction, MFMemory, MFSymbols, MFOps, MFDebug;
--:166----178:
Free: LONG POINTER TO PACKED ARRAY PascalInteger[0..50000] OF PascalBoolean ← PascalStaticZone.NEW[PACKED ARRAY PascalInteger[0..50000] OF PascalBoolean];
WasFree: LONG POINTER TO PACKED ARRAY PascalInteger[0..50000] OF PascalBoolean ← PascalStaticZone.NEW[PACKED ARRAY PascalInteger[0..50000] OF PascalBoolean];
WasMemEnd: Halfword;
WasLoMax: Halfword;
WasHiMin: Halfword;
Panicking: PascalBoolean;
--:152----157:-- PrintWord: PROCEDURE[W: MemoryWord] =
BEGIN PrintInt[W.Int];
PrintChar[32];PrintScaled[W.Int];PrintChar[32];
PrintScaled[ PascalDIVPower2[W.Int ,12]];PrintLn[];PrintInt[W.Hh.Lh];PrintChar[61];
PrintInt[W.Hh.B0];PrintChar[58];PrintInt[W.Hh.B1];PrintChar[59];
PrintInt[W.Hh.Rh];PrintChar[32];PrintInt[W.Qqqq.B0];PrintChar[58];
PrintInt[W.Qqqq.B1];PrintChar[58];PrintInt[W.Qqqq.B2];PrintChar[58];
PrintInt[W.Qqqq.B3]; END;--:157----162:----217:-- CheckMem: PROCEDURE[PrintLocs: PascalBoolean] =
BEGIN P, Q, R:Halfword;
Clobbered:PascalBoolean; --182:-- --183:-- FOR i:INT IN [ INT[0 ].. INT[LoMemMax ]] DO P ← i; Free↑[P]←FALSE ENDLOOP;
FOR i:INT IN [ INT[HiMemMin ].. INT[MemEnd ]] DO P ← i; Free↑[P]←FALSE ENDLOOP;--181:--P←Avail;Q←0;
Clobbered←FALSE;
{WHILE P#0 DO BEGIN IF( INT[P]>MemEnd)OR ( INT[P]<HiMemMin) THEN Clobbered←TRUE
ELSE IF Free↑[P] THEN Clobbered←TRUE;
IF Clobbered THEN BEGIN PrintNl[189];PrintInt[Q]; GOTO Label31; END;
Free↑[P]←TRUE;Q←P;P←Mem[Q]↑.Hh.Rh; END ENDLOOP ;EXITS Label31 => NULL};--:181--P←Rover;Q←0;
Clobbered←FALSE;
{DO IF( INT[P]>=LoMemMax)OR ( INT[P]<0) THEN Clobbered←TRUE ELSE IF( INT[Mem[ INT[P]+1]↑.Hh.
Rh]>=LoMemMax)OR ( INT[Mem[ INT[P]+1]↑.Hh.Rh]<0) THEN Clobbered←TRUE ELSE IF NOT ((Mem
[P]↑.Hh.Rh=65535))OR ( INT[Mem[P]↑.Hh.Lh]<2)OR ( INT[P]+Mem[P]↑.Hh.Lh>LoMemMax)OR (Mem[
INT[Mem[ INT[P]+1]↑.Hh.Rh]+1]↑.Hh.Lh#P) THEN Clobbered←TRUE;
IF Clobbered THEN BEGIN PrintNl[190];PrintInt[Q]; GOTO Label32; END;
FOR i:INT IN [ INT[P ].. INT[ INT[P]+Mem[P]↑.Hh.Lh-1 ]] DO Q ← i; IF Free↑[Q] THEN BEGIN PrintNl[191]
;PrintInt[Q]; GOTO Label32; END;Free↑[Q]←TRUE; ENDLOOP;Q←P;P←Mem[ INT[P]+1]↑.Hh.Rh;
IF P=Rover THEN EXIT; ENDLOOP;EXITS Label32 => NULL};--:182--P←0;
WHILE INT[P]<=LoMemMax DO BEGIN IF(Mem[P]↑.Hh.Rh=65535) THEN BEGIN PrintNl[
192];PrintInt[P]; END;WHILE ( INT[P]<=LoMemMax)AND NOT Free↑[P]DO P← INT[P]+1 ENDLOOP ;
WHILE ( INT[P]<=LoMemMax)AND Free↑[P]DO P← INT[P]+1 ENDLOOP ; END--:183-- ENDLOOP ;--616:--Q←13;
P←Mem[Q]↑.Hh.Rh;
WHILE P#13 DO BEGIN IF Mem[ INT[P]+1]↑.Hh.Lh#Q THEN BEGIN PrintNl[464];
PrintInt[P]; END;P←Mem[ INT[P]+1]↑.Hh.Rh;R←HiMemMin;
DO IF INT[Mem[P]↑.Hh.Lh]>=R THEN BEGIN PrintNl[465];PrintInt[P]; END;
R←Mem[P]↑.Hh.Lh;Q←P;P←Mem[Q]↑.Hh.Rh; IF R=0 THEN EXIT; ENDLOOP; END--:616-- ENDLOOP ;
IF PrintLocs THEN--184:--BEGIN PrintNl[193];
FOR i:INT IN [ INT[0 ].. INT[LoMemMax ]] DO P ← i; IF NOT Free↑[P]AND ( ( INT[P]>WasLoMax)OR WasFree↑[P]
) THEN BEGIN PrintChar[32];PrintInt[P]; END ENDLOOP;
FOR i:INT IN [ INT[HiMemMin ].. INT[MemEnd ]] DO P ← i; IF NOT Free↑[P]AND ( ( INT[P]<WasHiMin)OR (
INT[P]>WasMemEnd)OR WasFree↑[P]) THEN BEGIN PrintChar[32];PrintInt[P]; END ENDLOOP;
END--:184--;FOR i:INT IN [ INT[0 ].. INT[LoMemMax ]] DO P ← i; WasFree↑[P]←Free↑[P] ENDLOOP;
FOR i:INT IN [ INT[HiMemMin ].. INT[MemEnd ]] DO P ← i; WasFree↑[P]←Free↑[P] ENDLOOP;
WasMemEnd←MemEnd;WasLoMax←LoMemMax;WasHiMin←HiMemMin; END;
--:180----185:-- SearchMem: PROCEDURE[P: Halfword] =
BEGIN Q:PascalInteger;
FOR i:INT IN [ INT[0 ].. INT[LoMemMax ]] DO Q ← i; IF Mem[Q]↑.Hh.Rh=P THEN BEGIN
PrintNl[194];PrintInt[Q];PrintChar[41]; END;
IF Mem[Q]↑.Hh.Lh=P THEN BEGIN PrintNl[195];PrintInt[Q];PrintChar[41];
END; ENDLOOP;
FOR i:INT IN [ INT[HiMemMin ].. INT[MemEnd ]] DO Q ← i; IF Mem[Q]↑.Hh.Rh=P THEN BEGIN
PrintNl[194];PrintInt[Q];PrintChar[41]; END;
IF Mem[Q]↑.Hh.Lh=P THEN BEGIN PrintNl[195];PrintInt[Q];PrintChar[41];
END; ENDLOOP;--209:
FOR i:INT IN [ INT[1 ].. INT[2241 ]] DO Q ← i; IF Eqtb↑[Q].Rh=P THEN BEGIN PrintNl[329];
PrintInt[Q];PrintChar[41]; END;--:209-- ENDLOOP; END;--:185----189:
DebugHelp: PROCEDURE
=
BEGIN K, L, M, N:PascalInteger; {WHILE TRUE DO BEGIN
PrintNl[935];PascalTextBREAK[file: @TermOut];M←PascalReadInteger[file: @TermIn];
IF M<0 THEN GOTO Label10 ELSE IF M=0 THEN BEGIN { GOTO Label888;
EXITS Label888 => NULL};M←0;--'BREAKPOINT'
END ELSE BEGIN N←PascalReadInteger[file: @TermIn];SELECT M FROM--1212:--1 =>PrintWord[Mem[N]↑];
2 =>PrintInt[Mem[N]↑.Hh.Lh];3 =>PrintInt[Mem[N]↑.Hh.Rh];
4 =>BEGIN PrintInt[Eqtb↑[N].Lh];PrintChar[58];PrintInt[Eqtb↑[N].Rh]; END;
5 =>PrintVariableName[N];6 =>PrintInt[Internal↑[N]];
7 =>DoShowDependencies[];9 =>ShowTokenList[N,0,100000,0];10 =>Print[N];
11 =>CheckMem[N>0];12 =>SearchMem[N];13 =>BEGIN L←PascalReadInteger[file: @TermIn];
PrintCmdMod[N,L]; END;14 =>FOR i:INT IN [ INT[0 ].. INT[N ]] DO K ← i; Print[Buffer↑[K]] ENDLOOP;
15 =>Panicking← NOT Panicking;--:1212-- ENDCASE =>Print[63]; END; END ENDLOOP ;EXITS Label10 => NULL}; END;
END.