-- file: MFInitImpl1.mesa -- Pascal-to-Mesa translator output, translated at October 31, 1985 4:28:03 pm PST -- Pavel, October 31, 1985 5:07:17 pm PST DIRECTORY PascalBasic, PascalWizardFiles, MFTypes, MFRest, MFInit, MFProcArray, MFExternals, MFInteraction, MFMemory, MFSymbols, MFInput, MFOps; MFInitImpl1: PROGRAM IMPORTS PascalWizardFiles, MFRest, MFProcArray, MFExternals, MFInteraction, MFMemory, MFSymbols, MFInput, MFOps EXPORTS MFInit = PUBLIC BEGIN OPEN MFRest, PascalBasic, PascalWizardFiles, MFTypes, MFInit, MFProcArray, MFExternals, MFInteraction, MFMemory, MFSymbols, MFInput, MFOps; --:1150----13:-- Bad: PascalInteger; --:1161----1182:-- BaseIdent: StrNumber; --:1182----1187:-- BaseFile: WordFile; InitTerminal: PROCEDURE RETURNS[InitTerminalResult: PascalBoolean] = BEGIN CmdBlank: PascalInteger =0;CmdOk: PascalInteger =1;CmdOverflow: PascalInteger =-1; CmdStatus:PascalInteger; ResetTermIn[@TermIn]; CmdStatus←StuffOnCmdLine[]; IF CmdStatus=CmdOverflow THEN Overflow[128,BufSize]; {IF CmdStatus=CmdOk THEN BEGIN InitTerminalResult←TRUE; GOTO Label10 ; END; WHILE TRUE DO BEGIN PascalWriteLongString[file: @TermOut, item: "**"];PascalTextBREAK[file: @TermOut]; IF NOT InputLn[@TermIn,TRUE] THEN BEGIN PascalWriteLn[file: @TermOut]; PascalWriteLongString[file: @TermOut, item: "! End of file on the terminal... why?"]; InitTerminalResult←FALSE; GOTO Label10; END;CurInput.LocField←First; WHILE( INT[CurInput.LocField]<Last)AND (Buffer↑[CurInput.LocField]=32)DO CurInput.LocField← INT[CurInput.LocField]+1 ENDLOOP ; IF INT[CurInput.LocField]<Last THEN BEGIN InitTerminalResult←TRUE; GOTO Label10; END; {PascalWriteLongString[file: @TermOut, item: "Please type the name of your input file."]; PascalWriteLn[file: @TermOut]}; END ENDLOOP ;EXITS Label10 => NULL}; END; GetStringsStarted: PROCEDURE RETURNS[GetStringsStartedResult: PascalBoolean] = BEGIN K, L:PascalInteger[0..127];M, N:PascalChar;G:StrNumber;A:PascalInteger;C:PascalBoolean; PoolPtr←0;StrPtr←0;MaxPoolPtr←0;MaxStrPtr←0; StrStart↑[0]←0;--48:--FOR i:INT IN [ INT[0 ].. INT[127 ]] DO K ← i; IF(--49: ( INT[K]<32)OR ( INT[K]>126)--:49--) THEN BEGIN BEGIN StrPool↑[PoolPtr]←94; PoolPtr←PoolPtr+1; END;BEGIN StrPool↑[PoolPtr]←94; PoolPtr←PoolPtr+1; END;IF INT[K]<64 THEN BEGIN StrPool↑[PoolPtr]←K+64; PoolPtr←PoolPtr+1; END ELSE BEGIN StrPool↑[PoolPtr]←K-64; PoolPtr←PoolPtr+1; END; END ELSE BEGIN StrPool↑[PoolPtr]←K; PoolPtr←PoolPtr+1; END;G←MakeString[];StrRef↑[G]←127;--:48-- ENDLOOP;--51: SetPoolName[];{IF AOpenIn[@PoolFile] THEN BEGIN C←FALSE;DO--52: BEGIN IF PascalTextEOF[file: @PoolFile] THEN BEGIN {PascalWriteLongString[file: @TermOut, item: "! MF.POOL has no check sum."]; PascalWriteLn[file: @TermOut]};AClose[@PoolFile]; GetStringsStartedResult←FALSE; GOTO Label10; END;{M←PascalReadChar[file: @PoolFile]; N←PascalReadChar[file: @PoolFile]}; IF M='* THEN--53:--BEGIN A←0;K←1; {WHILE TRUE DO BEGIN IF( INT[Xord↑[N]]<48)OR ( INT[Xord↑[N]]>57) THEN BEGIN {PascalWriteLongString[file: @TermOut, item: "! MF.POOL check sum doesn't have nine digits."]; PascalWriteLn[file: @TermOut]}; AClose[@PoolFile];GetStringsStartedResult←FALSE; GOTO Label10; END; A←10*A+Xord↑[N]-48;IF K=9 THEN GOTO Label30;K←K+1;N←PascalReadChar[file: @PoolFile]; END ENDLOOP ; EXITS Label30 => NULL};IF A#514717228 THEN BEGIN {PascalWriteLongString[file: @TermOut, item: "! MF.POOL doesn't match; TANGLE me again."]; PascalWriteLn[file: @TermOut]}; AClose[@PoolFile];GetStringsStartedResult←FALSE; GOTO Label10; END;C←TRUE; END--:53 ELSE BEGIN IF( INT[Xord↑[M]]<48)OR ( INT[Xord↑[M]]>57)OR ( INT[Xord↑[N]]<48)OR ( INT[Xord↑[N]]>57) THEN BEGIN {PascalWriteLongString[file: @TermOut, item: "! MF.POOL line doesn't begin with two digits."]; PascalWriteLn[file: @TermOut]}; AClose[@PoolFile];GetStringsStartedResult←FALSE; GOTO Label10; END; L←Xord↑[M]*10+Xord↑[N]-48*11; IF INT[PoolPtr+L+StringVacancies]>PoolSize THEN BEGIN {PascalWriteLongString[file: @TermOut, item: "! You have to increase POOLSIZE."]; PascalWriteLn[file: @TermOut]};AClose[@PoolFile]; GetStringsStartedResult←FALSE; GOTO Label10; END; FOR i:INT IN [ INT[1 ].. INT[L ]] DO K ← i; IF PascalTextEOLN[file: @PoolFile] THEN M←' ELSE M←PascalReadChar[file: @PoolFile];BEGIN StrPool↑[PoolPtr]←Xord↑[M];PoolPtr←PoolPtr+1; END; ENDLOOP; PascalReadLn[file: @PoolFile];G←MakeString[];StrRef↑[G]←127; END; END--:52--; IF C THEN EXIT; ENDLOOP; AClose[@PoolFile];GetStringsStartedResult←TRUE; END ELSE BEGIN {PascalWriteLongString[file: @TermOut, item: "! I can't read MF.POOL."]; PascalWriteLn[file: @TermOut]};AClose[@PoolFile]; GetStringsStartedResult←FALSE; GOTO Label10; END--:51--;EXITS Label10 => NULL}; END;--:47----65: --:1132----1186:----778:-- OpenBaseFile: PROCEDURE RETURNS[OpenBaseFileResult: PascalBoolean] = BEGIN J:PascalInteger[0..BufSize]; J←CurInput.LocField; {{IF Buffer↑[CurInput.LocField]=38 THEN BEGIN CurInput.LocField← INT[CurInput.LocField]+1;J←CurInput.LocField;Buffer↑[Last]←32; WHILE Buffer↑[J]#32 DO J←J+1 ENDLOOP ; PackBufferedName[CurInput.LocField,J-1]; IF WOpenIn[@BaseFile] THEN GOTO Label40; PackDefaultArea[CurInput.LocField,J-1]; IF WOpenIn[@BaseFile] THEN GOTO Label40;{PascalWriteLongString[file: @TermOut, item: "Sorry, I can't find that base;"] ; PascalWriteLongString[file: @TermOut, item: " will try your default."]; PascalWriteLn[file: @TermOut]};PascalTextBREAK[file: @TermOut]; END;PackAllDefault[]; IF NOT WOpenIn[@BaseFile] THEN BEGIN {PascalWriteLongString[file: @TermOut, item: "I can't find your default base file!"]; PascalWriteLn[file: @TermOut]}; OpenBaseFileResult←FALSE; GOTO Label10; END;EXITS Label40 => NULL};CurInput.LocField←J; OpenBaseFileResult←TRUE;EXITS Label10 => NULL}; END;--:778-- LoadBaseFile: PROCEDURE RETURNS[LoadBaseFileResult: PascalBoolean] = BEGIN K:PascalInteger;P, Q:Halfword;X:PascalInteger;W:FourQuarters; --1190:-- X←BaseFile.element.Int;{{IF X#514717228 THEN GOTO Label6666; BEGIN PascalGET[file: @BaseFile.baseFile, length: SIZE[MemoryWord, 2], element: @BaseFile.element];X←BaseFile.element.Int; END;IF X#0 THEN GOTO Label6666; BEGIN PascalGET[file: @BaseFile.baseFile, length: SIZE[MemoryWord, 2], element: @BaseFile.element];X←BaseFile.element.Int; END;IF X#50000 THEN GOTO Label6666; BEGIN PascalGET[file: @BaseFile.baseFile, length: SIZE[MemoryWord, 2], element: @BaseFile.element];X←BaseFile.element.Int; END;IF X#2100 THEN GOTO Label6666; BEGIN PascalGET[file: @BaseFile.baseFile, length: SIZE[MemoryWord, 2], element: @BaseFile.element];X←BaseFile.element.Int; END;IF X#1777 THEN GOTO Label6666; BEGIN PascalGET[file: @BaseFile.baseFile, length: SIZE[MemoryWord, 2], element: @BaseFile.element];X←BaseFile.element.Int; END;IF X#6 THEN GOTO Label6666--:1190 ;--1192:--BEGIN BEGIN PascalGET[file: @BaseFile.baseFile, length: SIZE[MemoryWord, 2], element: @BaseFile.element];X←BaseFile.element.Int; END; IF X<0 THEN GOTO Label6666;IF X>PoolSize THEN BEGIN {PascalWriteLongString[file: @TermOut, item: "---! Must increase the "]; PascalWriteLongString[file: @TermOut, item: "string pool size"]; PascalWriteLn[file: @TermOut]}; GOTO Label6666; END ELSE PoolPtr←X; END;BEGIN BEGIN PascalGET[file: @BaseFile.baseFile, length: SIZE[MemoryWord, 2], element: @BaseFile.element]; X←BaseFile.element.Int; END;IF X<0 THEN GOTO Label6666;IF X>MaxStrings THEN BEGIN {PascalWriteLongString[file: @TermOut, item: "---! Must increase the "]; PascalWriteLongString[file: @TermOut, item: "max strings"]; PascalWriteLn[file: @TermOut]}; GOTO Label6666; END ELSE StrPtr←X; END; FOR i:INT IN [ INT[0 ].. INT[StrPtr ]] DO K ← i; BEGIN BEGIN PascalGET[file: @BaseFile.baseFile, length: SIZE[MemoryWord, 2], element: @BaseFile.element]; X←BaseFile.element.Int; END; IF(X<0)OR (X>PoolPtr) THEN GOTO Label6666 ELSE StrStart↑[K]←X; END; StrRef↑[K]←127; ENDLOOP;K←0; WHILE K+4<PoolPtr DO BEGIN BEGIN PascalGET[file: @BaseFile.baseFile, length: SIZE[MemoryWord, 2], element: @BaseFile.element];W←BaseFile.element.Qqqq; END; StrPool↑[K]←W.B0;StrPool↑[K+1]←W.B1;StrPool↑[K+2]←W.B2; StrPool↑[K+3]←W.B3;K←K+4; END ENDLOOP ;K←PoolPtr-4;BEGIN PascalGET[file: @BaseFile.baseFile, length: SIZE[MemoryWord, 2], element: @BaseFile.element]; W←BaseFile.element.Qqqq; END;StrPool↑[K]←W.B0;StrPool↑[K+1]←W.B1; StrPool↑[K+2]←W.B2;StrPool↑[K+3]←W.B3--:1192--;--1194: BEGIN BEGIN PascalGET[file: @BaseFile.baseFile, length: SIZE[MemoryWord, 2], element: @BaseFile.element];X←BaseFile.element.Int; END; IF(X<1022)OR (X>49998) THEN GOTO Label6666 ELSE LoMemMax←X; END; BEGIN BEGIN PascalGET[file: @BaseFile.baseFile, length: SIZE[MemoryWord, 2], element: @BaseFile.element];X←BaseFile.element.Int; END; IF(X<23)OR (X>LoMemMax) THEN GOTO Label6666 ELSE Rover←X; END;P←0;Q←Rover; X←0;DO FOR i:INT IN [ INT[P ].. INT[ INT[Q]+1 ]] DO K ← i; PascalGET[file: @BaseFile.baseFile, length: SIZE[MemoryWord, 2], element: @BaseFile.element];Mem[K]↑←BaseFile.element; ENDLOOP;P← INT[Q]+Mem[Q]↑.Hh.Lh; IF( INT[P]>LoMemMax)OR (( INT[Q]>=Mem[ INT[Q]+1]↑.Hh.Rh)AND (Mem[ INT[Q]+1]↑.Hh.Rh#Rover)) THEN GOTO Label6666;Q←Mem[ INT[Q]+1]↑.Hh.Rh; IF Q=Rover THEN EXIT; ENDLOOP; FOR i:INT IN [ INT[P ].. INT[LoMemMax ]] DO K ← i; PascalGET[file: @BaseFile.baseFile, length: SIZE[MemoryWord, 2], element: @BaseFile.element];Mem[K]↑←BaseFile.element; ENDLOOP; BEGIN BEGIN PascalGET[file: @BaseFile.baseFile, length: SIZE[MemoryWord, 2], element: @BaseFile.element];X←BaseFile.element.Int; END; IF(X< INT[LoMemMax]+1)OR (X>49999) THEN GOTO Label6666 ELSE HiMemMin←X; END; BEGIN BEGIN PascalGET[file: @BaseFile.baseFile, length: SIZE[MemoryWord, 2], element: @BaseFile.element];X←BaseFile.element.Int; END; IF(X<0)OR (X>50000) THEN GOTO Label6666 ELSE Avail←X; END;MemEnd←50000; FOR i:INT IN [ INT[HiMemMin ].. INT[MemEnd ]] DO K ← i; PascalGET[file: @BaseFile.baseFile, length: SIZE[MemoryWord, 2], element: @BaseFile.element];Mem[K]↑←BaseFile.element; ENDLOOP;BEGIN PascalGET[file: @BaseFile.baseFile, length: SIZE[MemoryWord, 2], element: @BaseFile.element];VarUsed←BaseFile.element.Int; END; BEGIN PascalGET[file: @BaseFile.baseFile, length: SIZE[MemoryWord, 2], element: @BaseFile.element];DynUsed←BaseFile.element.Int; END--:1194--;--1196: BEGIN BEGIN PascalGET[file: @BaseFile.baseFile, length: SIZE[MemoryWord, 2], element: @BaseFile.element];X←BaseFile.element.Int; END; IF(X<1)OR (X>2229) THEN GOTO Label6666 ELSE HashUsed←X; END;P←0; DO BEGIN BEGIN PascalGET[file: @BaseFile.baseFile, length: SIZE[MemoryWord, 2], element: @BaseFile.element];X←BaseFile.element.Int; END; IF(X< INT[P]+1)OR (X>HashUsed) THEN GOTO Label6666 ELSE P←X; END; BEGIN PascalGET[file: @BaseFile.baseFile, length: SIZE[MemoryWord, 2], element: @BaseFile.element];Hash↑[P]←BaseFile.element.Hh; END;BEGIN PascalGET[file: @BaseFile.baseFile, length: SIZE[MemoryWord, 2], element: @BaseFile.element]; Eqtb↑[P]←BaseFile.element.Hh; END; IF P=HashUsed THEN EXIT; ENDLOOP; FOR i:INT IN [ INT[ INT[HashUsed]+1 ].. INT[2241 ]] DO P ← i; BEGIN PascalGET[file: @BaseFile.baseFile, length: SIZE[MemoryWord, 2], element: @BaseFile.element]; Hash↑[P]←BaseFile.element.Hh; END;BEGIN PascalGET[file: @BaseFile.baseFile, length: SIZE[MemoryWord, 2], element: @BaseFile.element];Eqtb↑[P]←BaseFile.element.Hh; END; ENDLOOP;BEGIN PascalGET[file: @BaseFile.baseFile, length: SIZE[MemoryWord, 2], element: @BaseFile.element];StCount←BaseFile.element.Int; END--:1196--;--1198: BEGIN BEGIN PascalGET[file: @BaseFile.baseFile, length: SIZE[MemoryWord, 2], element: @BaseFile.element];X←BaseFile.element.Int; END; IF(X<40)OR (X>MaxInternal) THEN GOTO Label6666 ELSE IntPtr←X; END; FOR i:INT IN [ INT[1 ].. INT[IntPtr ]] DO K ← i; BEGIN PascalGET[file: @BaseFile.baseFile, length: SIZE[MemoryWord, 2], element: @BaseFile.element]; Internal↑[K]←BaseFile.element.Int; END;BEGIN BEGIN PascalGET[file: @BaseFile.baseFile, length: SIZE[MemoryWord, 2], element: @BaseFile.element]; X←BaseFile.element.Int; END; IF(X<0)OR (X>StrPtr) THEN GOTO Label6666 ELSE IntName↑[K]←X; END; ENDLOOP; BEGIN BEGIN PascalGET[file: @BaseFile.baseFile, length: SIZE[MemoryWord, 2], element: @BaseFile.element];X←BaseFile.element.Int; END; IF(X<0)OR (X>2229) THEN GOTO Label6666 ELSE StartSym←X; END; BEGIN BEGIN PascalGET[file: @BaseFile.baseFile, length: SIZE[MemoryWord, 2], element: @BaseFile.element];X←BaseFile.element.Int; END; IF(X<0)OR (X>3) THEN GOTO Label6666 ELSE Interaction←X; END; BEGIN BEGIN PascalGET[file: @BaseFile.baseFile, length: SIZE[MemoryWord, 2], element: @BaseFile.element];X←BaseFile.element.Int; END; IF(X<0)OR (X>StrPtr) THEN GOTO Label6666 ELSE BaseIdent←X; END; BEGIN BEGIN PascalGET[file: @BaseFile.baseFile, length: SIZE[MemoryWord, 2], element: @BaseFile.element];X←BaseFile.element.Int; END; IF(X<1)OR (X>2241) THEN GOTO Label6666 ELSE BgLoc←X; END; BEGIN BEGIN PascalGET[file: @BaseFile.baseFile, length: SIZE[MemoryWord, 2], element: @BaseFile.element];X←BaseFile.element.Int; END; IF(X<1)OR (X>2241) THEN GOTO Label6666 ELSE EgLoc←X; END;BEGIN PascalGET[file: @BaseFile.baseFile, length: SIZE[MemoryWord, 2], element: @BaseFile.element]; X←BaseFile.element.Int; END;IF (X#69069)OR PascalEOF[file: @BaseFile.baseFile] THEN GOTO Label6666--:1198 ;LoadBaseFileResult←TRUE; GOTO Label10;EXITS Label6666 => NULL};{PascalWriteLongString[file: @TermOut, item: "(Fatal base file error; I'm stymied)"]; PascalWriteLn[file: @TermOut]}; LoadBaseFileResult←FALSE;EXITS Label10 => NULL}; END;--:1186----1201:----822:----1209:-- InitPrim: PROCEDURE = BEGIN--192:-- Primitive[282,40,1]; Primitive[283,40,2];Primitive[284,40,3];Primitive[285,40,4]; Primitive[286,40,5];Primitive[287,40,6];Primitive[288,40,7]; Primitive[289,40,8];Primitive[290,40,9];Primitive[291,40,10]; Primitive[292,40,11];Primitive[293,40,12];Primitive[294,40,13]; Primitive[295,40,14];Primitive[296,40,15];Primitive[297,40,16]; Primitive[298,40,17];Primitive[299,40,18];Primitive[300,40,19]; Primitive[301,40,20];Primitive[302,40,21];Primitive[303,40,22]; Primitive[304,40,23];Primitive[305,40,24];Primitive[306,40,25]; Primitive[307,40,26];Primitive[308,40,27];Primitive[309,40,28]; Primitive[310,40,29];Primitive[311,40,30];Primitive[312,40,31]; Primitive[313,40,32];Primitive[314,40,33];Primitive[315,40,34]; Primitive[316,40,35];Primitive[317,40,36];Primitive[318,40,37]; Primitive[319,40,38];Primitive[320,40,39];Primitive[321,40,40];--:192 --211:--Primitive[281,47,0];Primitive[91,63,0];Eqtb↑[2232]←Eqtb↑[CurSym]; Primitive[93,64,0];Primitive[125,65,0];Primitive[123,46,0]; Primitive[58,78,0];Eqtb↑[2234]←Eqtb↑[CurSym];Primitive[330,77,0]; Primitive[44,79,0];Primitive[59,80,0];Eqtb↑[2235]←Eqtb↑[CurSym]; Primitive[92,7,0];Primitive[331,18,0];Primitive[332,72,0]; Primitive[333,59,0];Primitive[334,32,0];BgLoc←CurSym; Primitive[335,57,0];Primitive[336,19,0];Primitive[337,60,0]; Primitive[338,27,0];Primitive[339,11,0];Primitive[324,81,0]; Eqtb↑[2239]←Eqtb↑[CurSym];EgLoc←CurSym;Primitive[340,26,0]; Primitive[341,6,0];Primitive[342,9,0];Primitive[343,70,0]; Primitive[344,73,0];Primitive[345,13,0];Primitive[346,14,0]; Primitive[347,15,0];Primitive[348,69,0];Primitive[349,28,0]; Primitive[350,24,0];Primitive[351,12,0];Primitive[352,8,0]; Primitive[353,17,0];Primitive[354,74,0];Primitive[355,35,0]; Primitive[356,58,0];Primitive[357,71,0];Primitive[358,75,0];--:211----682: Primitive[521,16,1];Primitive[522,16,2];Primitive[523,16,53]; Primitive[524,16,44];Primitive[525,16,49];Primitive[325,16,0]; Eqtb↑[2237]←Eqtb↑[CurSym];Primitive[526,4,2242];Primitive[527,4,2392]; Primitive[528,4,1];Primitive[326,4,0];Eqtb↑[2236]←Eqtb↑[CurSym];--:682 --687:--Primitive[529,61,0];Primitive[530,61,1];Primitive[64,61,2]; Primitive[531,61,3];--:687----694:--Primitive[542,56,2242]; Primitive[543,56,2392];Primitive[544,56,2542];Primitive[545,56,1]; Primitive[546,56,2];Primitive[547,56,3];--:694----708:--Primitive[557,3,0]; Primitive[483,3,1];--:708----739:--Primitive[584,1,1];Primitive[323,2,2]; Eqtb↑[2238]←Eqtb↑[CurSym];Primitive[585,2,3];Primitive[586,2,4];--:739 --892:--Primitive[220,33,30];Primitive[221,33,31];Primitive[222,33,32]; Primitive[223,33,33];Primitive[224,33,34];Primitive[225,33,35]; Primitive[226,33,36];Primitive[227,33,37];Primitive[228,34,38]; Primitive[229,34,39];Primitive[230,34,40];Primitive[231,34,41]; Primitive[232,34,42];Primitive[233,34,43];Primitive[234,34,44]; Primitive[235,34,45];Primitive[236,34,46];Primitive[237,34,47]; Primitive[238,34,48];Primitive[239,34,49];Primitive[240,34,50]; Primitive[241,34,51];Primitive[242,34,52];Primitive[243,34,53]; Primitive[244,34,54];Primitive[245,34,55];Primitive[246,34,56]; Primitive[247,34,57];Primitive[248,34,58];Primitive[249,34,59]; Primitive[250,34,60];Primitive[251,34,61];Primitive[252,34,62]; Primitive[253,34,63];Primitive[254,34,64];Primitive[255,34,65]; Primitive[256,34,66];Primitive[257,34,67];Primitive[258,36,68]; Primitive[43,43,69];Primitive[45,43,70];Primitive[42,55,71]; Primitive[47,54,72];Eqtb↑[2233]←Eqtb↑[CurSym];Primitive[259,45,73]; Primitive[183,45,74];Primitive[261,52,76];Primitive[260,45,75]; Primitive[60,50,77];Primitive[262,50,78];Primitive[62,50,79]; Primitive[263,50,80];Primitive[61,51,81];Primitive[264,50,82]; Primitive[265,37,94];Primitive[266,37,95];Primitive[267,37,96]; Primitive[268,37,97];Primitive[269,37,98];Primitive[270,37,99]; Primitive[271,37,100];Primitive[38,48,83];Primitive[272,55,84]; Primitive[273,55,85];Primitive[274,55,86];Primitive[275,55,87]; Primitive[276,55,88];Primitive[277,55,89];Primitive[278,55,90]; Primitive[279,55,91];Primitive[280,45,92];--:892----1012: Primitive[213,30,15];Primitive[199,30,4];Primitive[197,30,2]; Primitive[204,30,9];Primitive[201,30,6];Primitive[206,30,11]; Primitive[208,30,13];Primitive[209,30,14];--:1012----1017: Primitive[777,82,0];Primitive[778,82,1];--:1017----1023: Primitive[145,23,0];Primitive[146,23,1];Primitive[147,23,2]; Primitive[784,23,3];--:1023----1026:--Primitive[785,21,0]; Primitive[786,21,1];--:1026----1036:--Primitive[800,22,0]; Primitive[801,22,1];Primitive[802,22,2];Primitive[803,22,3]; Primitive[804,22,4];--:1036----1051:--Primitive[821,68,1]; Primitive[822,68,0];Primitive[823,68,2];Primitive[824,66,6]; Primitive[825,66,16];Primitive[826,67,0];Primitive[827,67,1];--:1051 --1078:--Primitive[857,25,0];Primitive[858,25,1];Primitive[859,25,2]; --:1078----1100:--Primitive[869,20,0];Primitive[870,20,1]; Primitive[871,20,2];Primitive[872,20,3];Primitive[873,20,4];--:1100 --1108:--Primitive[890,76,0];Primitive[891,76,128];--:1108----1175: Primitive[913,29,4];Primitive[914,29,16];--:1175-- END; InitTab: PROCEDURE = BEGIN K:PascalInteger;--176:--Rover←23;Mem[Rover]↑.Hh.Rh←65535; Mem[Rover]↑.Hh.Lh←1000;Mem[ INT[Rover]+1]↑.Hh.Lh←Rover; Mem[ INT[Rover]+1]↑.Hh.Rh←Rover;LoMemMax← INT[Rover]+1000; Mem[LoMemMax]↑.Hh.Rh←0;Mem[LoMemMax]↑.Hh.Lh←0; FOR i:INT IN [ INT[49999 ].. INT[50000 ]] DO K ← i; Mem[K]↑←Mem[LoMemMax]↑ ENDLOOP;Avail←0; MemEnd←50000;HiMemMin←49999;VarUsed←23;DynUsed←-0;--:176----193: IntName↑[1]←282;IntName↑[2]←283;IntName↑[3]←284;IntName↑[4]←285; IntName↑[5]←286;IntName↑[6]←287;IntName↑[7]←288;IntName↑[8]←289; IntName↑[9]←290;IntName↑[10]←291;IntName↑[11]←292;IntName↑[12]←293; IntName↑[13]←294;IntName↑[14]←295;IntName↑[15]←296;IntName↑[16]←297; IntName↑[17]←298;IntName↑[18]←299;IntName↑[19]←300;IntName↑[20]←301; IntName↑[21]←302;IntName↑[22]←303;IntName↑[23]←304;IntName↑[24]←305; IntName↑[25]←306;IntName↑[26]←307;IntName↑[27]←308;IntName↑[28]←309; IntName↑[29]←310;IntName↑[30]←311;IntName↑[31]←312;IntName↑[32]←313; IntName↑[33]←314;IntName↑[34]←315;IntName↑[35]←316;IntName↑[36]←317; IntName↑[37]←318;IntName↑[38]←319;IntName↑[39]←320;IntName↑[40]←321; --:193----203:--HashUsed←2229;StCount←0;Hash↑[2240].Rh←322; Hash↑[2238].Rh←323;Hash↑[2239].Rh←324;Hash↑[2237].Rh←325; Hash↑[2236].Rh←326;Hash↑[2235].Rh←59;Hash↑[2234].Rh←58; Hash↑[2233].Rh←47;Hash↑[2232].Rh←91;Hash↑[2231].Rh←41; Hash↑[2229].Rh←327;Eqtb↑[2231].Lh←62;--:203----229:--Mem[19]↑.Hh.Lh←2242; Mem[19]↑.Hh.Rh←0;--:229----324:--Mem[50000]↑.Hh.Lh←65535;--:324----475: Mem[3]↑.Hh.Lh←0;Mem[3]↑.Hh.Rh←0;Mem[4]↑.Hh.Lh←1;Mem[4]↑.Hh.Rh←0; FOR i:INT IN [ INT[5 ].. INT[11 ]] DO K ← i; Mem[K]↑←Mem[4]↑ ENDLOOP;Mem[12]↑.Int←0;Mem[0]↑.Hh.Rh←0; Mem[0]↑.Hh.Lh←0;Mem[1]↑.Int←0;Mem[2]↑.Int←0;--:475----586: Mem[13]↑.Hh.Rh←13;Mem[14]↑.Hh.Lh←13;Mem[13]↑.Hh.Lh←0;Mem[14]↑.Hh.Rh←0; --:586----701:--Mem[21]↑.Hh.B1←0;Mem[21]↑.Hh.Rh←2240;Eqtb↑[2240].Rh←21; Eqtb↑[2240].Lh←41;--:701----758:--Eqtb↑[2230].Lh←88;Hash↑[2230].Rh←601; --:758----910:--Mem[17]↑.Hh.B1←11;--:910----1115:--Mem[20]↑.Int←1073741824; --:1115----1126:--Mem[16]↑.Int←0;Mem[15]↑.Hh.Lh←0;--:1126----1184: BaseIdent←922;--:1184-- END;--:1209----1211:-- END.