-- file: MFMemoryImpl.mesa -- Pascal-to-Mesa translator output, translated at October 31, 1985 4:28:01 pm PST DIRECTORY PascalBasic, PascalWizardFiles, MFTypes, MFProcArray, MFInteraction, MFSymbols, MFMemory; MFMemoryImpl: PROGRAM IMPORTS PascalBasic, MFProcArray, MFInteraction, MFSymbols EXPORTS MFMemory = PUBLIC BEGIN OPEN PascalBasic, PascalWizardFiles, MFTypes, MFProcArray, MFInteraction, MFSymbols, MFMemory; --:148----158: TempPtr: Halfword; LoMemMax: Halfword; HiMemMin: Halfword; --:159----160: VarUsed: PascalInteger; DynUsed: PascalInteger; --:160----161:-- Avail: Halfword; MemEnd: Halfword; --:161----166:-- Rover: Halfword; --:664----:162----163:-- GetAvail: PROCEDURE RETURNS[GetAvailResult: Halfword] = BEGIN P:Halfword; P_Avail; IF P#0 THEN Avail_Mem[Avail]^.Hh.Rh ELSE IF INT[MemEnd] INT[P]+1 THEN--170:--BEGIN Mem[P]^.Hh.Lh_R-P; Rover_P; GOTO Label40; END--:170--; IF R=P THEN IF((Mem[ INT[P]+1]^.Hh.Rh#Rover)OR (Mem[ INT[P]+1]^.Hh.Lh#Rover)) THEN--171 -- :--BEGIN Rover_Mem[ INT[P]+1]^.Hh.Rh;T_Mem[ INT[P]+1]^.Hh.Lh;Mem[ INT[Rover]+1]^.Hh.Lh_T; Mem[T+1]^.Hh.Rh_Rover; GOTO Label40; END--:171--;Mem[P]^.Hh.Lh_ INT[Q]-P--:169--; P_Mem[ INT[P]+1]^.Hh.Rh; IF P=Rover THEN EXIT; ENDLOOP; IF S=1073741824 THEN BEGIN GetNodeResult_65535; GOTO Label10; END; IF INT[LoMemMax]+265535 THEN T_65535; P_Mem[ INT[Rover]+1]^.Hh.Lh;Q_LoMemMax;Mem[ INT[P]+1]^.Hh.Rh_Q; Mem[ INT[Rover]+1]^.Hh.Lh_Q;Mem[ INT[Q]+1]^.Hh.Rh_Rover;Mem[ INT[Q]+1]^.Hh.Lh_P; Mem[Q]^.Hh.Rh_65535;Mem[Q]^.Hh.Lh_T-LoMemMax;LoMemMax_T; Mem[LoMemMax]^.Hh.Rh_0;Mem[LoMemMax]^.Hh.Lh_0;Rover_Q; GOTO Label20; END--:168--;Overflow[188,MemMax+1];EXITS Label40 => NULL};Mem[R]^.Hh.Rh_0; VarUsed_VarUsed+S;GetNodeResult_R;EXITS Label10 => NULL};EXIT; EXITS Label20 => NULL} ENDLOOP; END;--:167----172: FreeNode: PROCEDURE[P: Halfword,S: Halfword] = BEGIN Q:Halfword; Mem[P]^.Hh.Lh_S;Mem[P]^.Hh.Rh_65535;Q_Mem[ INT[Rover]+1]^.Hh.Lh; Mem[ INT[P]+1]^.Hh.Lh_Q;Mem[ INT[P]+1]^.Hh.Rh_Rover;Mem[ INT[Rover]+1]^.Hh.Lh_P; Mem[ INT[Q]+1]^.Hh.Rh_P;VarUsed_VarUsed-S; END;--:172----173: SortAvail: PROCEDURE = BEGIN P, Q, R:Halfword;OldRover:Halfword; P_GetNode[1073741824];P_Mem[ INT[Rover]+1]^.Hh.Rh; Mem[ INT[Rover]+1]^.Hh.Rh_65535;OldRover_Rover;WHILE P#OldRover DO--174: IF INT[P]=HiMemMin THEN IF P#50000 THEN BEGIN R_P;{DO Q_R; R_Mem[R]^.Hh.Rh;DynUsed_DynUsed-1;IF INT[R] NULL};Mem[Q]^.Hh.Rh_Avail;Avail_P; END; END; FlushNodeList: PROCEDURE[P: Halfword] = BEGIN Q:Halfword; WHILE P#0 DO BEGIN Q_P;P_Mem[P]^.Hh.Rh; IF INT[Q]