-- file: TexMemoryImpl.mesa -- Pascal-to-Mesa translator output, translated at September 27, 1985 10:21:37 am PDT DIRECTORY PascalBasic, TexTypes, TexInteraction, TexMemory, TexSymbols, TexParagraph, TexSysdepInline; TexMemoryImpl: PROGRAM IMPORTS PascalBasic, TexTypes, TexInteraction, TexSymbols, TexParagraph, TexSysdepInline EXPORTS TexMemory = PUBLIC BEGIN OPEN PascalBasic, TexTypes, TexInteraction, TexMemory, TexSymbols, TexParagraph, TexSysdepInline; LoMemMax: Halfword; HiMemMin: Halfword; --:116----117: VarUsed: PascalInteger; DynUsed: PascalInteger; --:117----118:-- Avail: Halfword; MemEnd: Halfword; --:118----124:-- Rover: Halfword; GetAvail: PROCEDURE RETURNS[GetAvailResult: Halfword] = BEGIN P:Halfword; P_Avail; IF P#0 THEN Avail_Mem[Avail]^.Hh.Rh ELSE IF INT[MemEnd]P+1 THEN--128:--BEGIN Mem[P]^.Hh.Lh_R-P;Rover_P; GOTO Label40; END--:128--; IF R=P THEN IF((Mem[P+1]^.Hh.Rh#Rover)OR (Mem[P+1]^.Hh.Lh#Rover)) THEN--129 -- :--BEGIN Rover_Mem[P+1]^.Hh.Rh;T_Mem[P+1]^.Hh.Lh;Mem[Rover+1]^.Hh.Lh_T; Mem[T+1]^.Hh.Rh_Rover; GOTO Label40; END--:129--;Mem[P]^.Hh.Lh_ INT[Q]-P--:127--; P_Mem[P+1]^.Hh.Rh; IF P=Rover THEN EXIT; ENDLOOP; IF S=1073741824 THEN BEGIN GetNodeResult_65515; GOTO Label10; END; IF INT[LoMemMax+2] NULL};Mem[R]^.Hh.Rh_0;VarUsed_VarUsed+S;GetNodeResult_R;EXITS Label10 => NULL};EXIT; EXITS Label20 => NULL} ENDLOOP; END;--:125----130: FreeNode: PROCEDURE[P: Halfword,S: Halfword] = BEGIN Q:Halfword; Mem[P]^.Hh.Lh_S;Mem[P]^.Hh.Rh_65515;Q_Mem[Rover+1]^.Hh.Lh; Mem[P+1]^.Hh.Lh_Q;Mem[P+1]^.Hh.Rh_Rover;Mem[Rover+1]^.Hh.Lh_P; Mem[Q+1]^.Hh.Rh_P;VarUsed_VarUsed-S; END;--:130----131: SortAvail: PROCEDURE = BEGIN P, Q, R:Halfword;OldRover:Halfword; P_GetNode[1073741824];P_Mem[Rover+1]^.Hh.Rh; Mem[Rover+1]^.Hh.Rh_65515;OldRover_Rover;WHILE P#OldRover DO--132: IF INT[P]MemEnd)OR ( INT[P] NULL};--:168--P_Rover;Q_0; Clobbered_FALSE; {DO IF( INT[P]>=LoMemMax)OR ( INT[P]=LoMemMax)OR ( INT[Mem[P+1]^.Hh.Rh]LoMemMax)OR (Mem[Mem[P+1]^.Hh.Rh+1]^.Hh.Lh#P) THEN Clobbered_TRUE; IF Clobbered THEN BEGIN PrintNl[174];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[175] ;PrintInt[Q]; GOTO Label32; END;Free^[Q]_TRUE; ENDLOOP;Q_P;P_Mem[P+1]^.Hh.Rh; IF P=Rover THEN EXIT; ENDLOOP;EXITS Label32 => NULL};--:169--P_MemMin; WHILE INT[P]<=LoMemMax DO BEGIN IF(Mem[P]^.Hh.Rh=65515) THEN BEGIN PrintNl[ 176];PrintInt[P]; END;WHILE ( INT[P]<=LoMemMax)AND NOT Free^[P]DO P_P+1 ENDLOOP ; WHILE ( INT[P]<=LoMemMax)AND Free^[P]DO P_P+1 ENDLOOP ; END--:170-- ENDLOOP ; IF PrintLocs THEN--171:--BEGIN PrintNl[177]; FOR i:INT IN [ INT[MemMin ].. 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--:171--;FOR i:INT IN [ INT[MemMin ].. 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; --:167----172:-- SearchMem: PROCEDURE[P: Halfword] = BEGIN Q:PascalInteger; FOR i:INT IN [ INT[MemMin ].. INT[LoMemMax ]] DO Q _ i; IF Mem[Q]^.Hh.Rh=P THEN BEGIN PrintNl[178];PrintInt[Q];PrintChar[41]; END; IF Mem[Q]^.Hh.Lh=P THEN BEGIN PrintNl[179];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[178];PrintInt[Q];PrintChar[41]; END; IF Mem[Q]^.Hh.Lh=P THEN BEGIN PrintNl[179];PrintInt[Q];PrintChar[41]; END; ENDLOOP;--255: FOR i:INT IN [ INT[1 ].. INT[4077 ]] DO Q _ i; IF Eqtb^[Q].Hh.Rh=P THEN BEGIN PrintNl[363]; PrintInt[Q];PrintChar[41]; END;--:255-- ENDLOOP;--285: IF INT[SavePtr]>0 THEN FOR i:INT IN [ INT[0 ].. INT[SavePtr-1 ]] DO Q _ i; IF SaveStack^[Q].Hh. Rh=P THEN BEGIN PrintNl[407];PrintInt[Q];PrintChar[41]; END;--:285-- ENDLOOP; --933: FOR i:INT IN [ INT[0 ].. INT[307 ]] DO Q _ i; IF HyphList^[Q]=P THEN BEGIN PrintNl[797]; PrintInt[Q];PrintChar[41]; END;--:933-- ENDLOOP; END;--:172----174: END.