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