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