-- file: MFOpsImpl5.mesa
-- Pascal-to-Mesa translator output, translated at October 31, 1985 4:28:02 pm PST
-- Pavel, October 31, 1985 5:07:15 pm PST


DIRECTORY
  PascalBasic,
  PascalWizardFiles,
  MFTypes, MFRest, 
  MFProcArray,
  MFExternals,
  MFInteraction,
  MFMath,
  MFMemory,
  MFSymbols,
  MFEdges,
  MFOctants,
  MFScreen,
  MFInput,
  MFFileNames,
  MFParsing,
  MFOps,
  MFTFM,
  MFGF,
  MFInit;

MFOpsImpl5: PROGRAM IMPORTS PascalBasic,  MFRest, PascalWizardFiles, MFProcArray, MFExternals, MFInteraction, MFMath, MFMemory, MFSymbols, MFEdges, MFOctants, MFScreen, MFInput, MFFileNames, MFParsing, MFOps, MFTFM, MFGF, MFInit EXPORTS MFOps = PUBLIC
BEGIN OPEN  MFRest, PascalBasic, PascalWizardFiles, MFTypes, MFProcArray, MFExternals, MFInteraction, MFMath, MFMemory, MFSymbols, MFEdges, MFOctants, MFScreen, MFInput, MFFileNames, MFParsing, MFOps, MFTFM, MFGF, MFInit;
 ScanWith: PROCEDURE RETURNS[ScanWithResult: PascalBoolean] = 
BEGIN T:SmallNumber;Result:PascalBoolean;
 T←CurMod;CurType←1;GetXNext[];ScanExpression[];Result←FALSE;
IF CurType#T  THEN--1054:--BEGIN DispErr[0,828];BEGIN HelpPtr←2;
HelpLine↑[1]←829;HelpLine↑[0]←830; END;IF T=6  THEN HelpLine↑[1]←831;
PutGetFlushError[0]; END--:1054
 ELSE IF CurType=6  THEN Result←TRUE  ELSE--1055:
BEGIN CurExp←RoundUnscaled[CurExp];
IF(ABS[CurExp]<4)AND (CurExp#0) THEN Result←TRUE  ELSE BEGIN BEGIN IF
Interaction=3  THEN NULL;PrintNl[133];Print[832]; END;BEGIN HelpPtr←1;
HelpLine↑[0]←830; END;PutGetFlushError[0]; END; END--:1055--;
ScanWithResult←Result; END;--:1053----1056:
 TfmCheck: PROCEDURE[M: SmallNumber] RETURNS[TfmCheckResult: Scaled]
 = 
BEGIN IF ABS[Internal↑[M]]>=134217728  THEN BEGIN BEGIN IF Interaction=3
 THEN NULL;PrintNl[133];Print[866]; END;Print[IntName↑[M]];Print[867];
BEGIN HelpPtr←1;HelpLine↑[0]←868; END;PutGetError[];
IF Internal↑[M]>0  THEN TfmCheckResult←134217727  ELSE TfmCheckResult←-134217727;
 END  ELSE TfmCheckResult←Internal↑[M]; END;--:1097-- DoShipOut: PROCEDURE
 = 
BEGIN  C:PascalInteger; GetXNext[];VarFlag←80;ScanExpression[];
{IF CurType#20  THEN IF CurType=11  THEN CurEdges←CurExp  ELSE BEGIN--
-- 1059:--BEGIN DispErr[0,836];BEGIN HelpPtr←4;HelpLine↑[3]←837;
HelpLine↑[2]←838;HelpLine↑[1]←839;HelpLine↑[0]←835; END;
PutGetFlushError[0]; END--:1059--; GOTO Label10;
 END  ELSE BEGIN FindEdgesVar[CurExp];CurType←1; END;
IF CurEdges#0  THEN BEGIN C← PascalMODPower2Mask[RoundUnscaled[Internal↑[18]],255];
IF C<0  THEN C←C+256;--1098:--IF C<Bc  THEN Bc←C;IF C>Ec  THEN Ec←C;
CharExists↑[C]←TRUE;GfDx↑[C]←Internal↑[24];GfDy↑[C]←Internal↑[25];
TfmWidth↑[C]←TfmCheck[20];TfmHeight↑[C]←TfmCheck[21];
TfmDepth↑[C]←TfmCheck[22];TfmItalCorr↑[C]←TfmCheck[23]--:1098--;
IF Internal↑[34]>=0  THEN ShipOut[C]; END;FlushCurExp[0];EXITS Label10 => NULL}; END;--:1069
--1070:-- DoDisplay: PROCEDURE = 
BEGIN  E:Halfword;
 GetXNext[];VarFlag←73;ScanPrimary[];{IF CurType#20  THEN--1059:
BEGIN DispErr[0,836];BEGIN HelpPtr←4;HelpLine↑[3]←837;
HelpLine↑[2]←838;HelpLine↑[1]←839;HelpLine↑[0]←835; END;
PutGetFlushError[0]; END--:1059-- ELSE BEGIN E←CurExp;CurType←1;
GetXNext[];ScanExpression[];{IF CurType#16  THEN  GOTO Label50;
CurExp←RoundUnscaled[CurExp];{IF CurExp<0  THEN  GOTO Label45;
IF CurExp>15  THEN  GOTO Label45;IF  NOT WindowOpen↑[CurExp] THEN  GOTO Label45;
FindEdgesVar[E];IF CurEdges#0  THEN DispEdges[CurExp]; GOTO Label10;
EXITS Label45 => NULL};CurExp←CurExp*65536;EXITS Label50 => NULL};DispErr[0,850];BEGIN HelpPtr←1;
HelpLine↑[0]←851; END;PutGetFlushError[0];FlushTokenList[E]; END;
EXITS Label10 => NULL}; END;--:1070----1071:-- GetPair: PROCEDURE[C: CommandCode] RETURNS[GetPairResult: PascalBoolean]
 = 
BEGIN P:Halfword;B:PascalBoolean;
 IF CurCmd#C  THEN GetPairResult←FALSE  ELSE BEGIN GetXNext[];
ScanExpression[];
IF NicePair[CurExp,CurType] THEN BEGIN P←Mem[CurExp+1]↑.Int;
CurX←Mem[ INT[P]+1]↑.Int;CurY←Mem[ INT[P]+3]↑.Int;B←TRUE; END  ELSE B←FALSE;
FlushCurExp[0];GetPairResult←B; END; END;--:1071----1072:
 DoOpenWindow: PROCEDURE = 
BEGIN  K:PascalInteger;R0, C0, R1, C1:Scaled;
 GetXNext[];ScanExpression[];{{IF CurType#16  THEN  GOTO Label45;
K←RoundUnscaled[CurExp];IF K<0  THEN  GOTO Label45;IF K>15  THEN  GOTO Label45;
IF  NOT GetPair[70] THEN  GOTO Label45;R0←CurX;C0←CurY;
IF  NOT GetPair[71] THEN  GOTO Label45;R1←CurX;C1←CurY;
IF  NOT GetPair[72] THEN  GOTO Label45;
OpenAWindow[K,R0,C0,R1,C1,CurX,CurY]; GOTO Label10;
EXITS Label45 => NULL};BEGIN IF Interaction=3  THEN NULL;PrintNl[133];Print[852]; END;
BEGIN HelpPtr←2;HelpLine↑[1]←853;HelpLine↑[0]←854; END;PutGetError[];
EXITS Label10 => NULL}; END;--:1072----1073:-- DoCull: PROCEDURE = 
BEGIN  E:Halfword;
Keeping:PascalInteger[0..1];W, WIn, WOut:PascalInteger; W←1;GetXNext[];VarFlag←67;
ScanPrimary[];{IF CurType#20  THEN--1059:--BEGIN DispErr[0,836];
BEGIN HelpPtr←4;HelpLine↑[3]←837;HelpLine↑[2]←838;HelpLine↑[1]←839;
HelpLine↑[0]←835; END;PutGetFlushError[0]; END--:1059
 ELSE BEGIN E←CurExp;CurType←1;Keeping←CurMod;
{IF  NOT GetPair[67] THEN  GOTO Label45;
WHILE(CurCmd=66)AND (CurMod=16)DO IF ScanWith [] THEN W←CurExp ENDLOOP ;--1074:
IF CurX>CurY  THEN  GOTO Label45;
IF Keeping=0  THEN BEGIN IF(CurX>0)OR (CurY<0) THEN  GOTO Label45;WOut←W;
WIn←0; END  ELSE BEGIN IF(CurX<=0)AND (CurY>=0) THEN  GOTO Label45;WOut←0;
WIn←W; END--:1074--;FindEdgesVar[E];
IF CurEdges#0  THEN CullEdges[FloorUnscaled[CurX+65535],
FloorUnscaled[CurY],WOut,WIn]; GOTO Label10;
EXITS Label45 => NULL};BEGIN IF Interaction=3  THEN NULL;PrintNl[133];Print[855]; END;
BEGIN HelpPtr←1;HelpLine↑[0]←856; END;PutGetError[];
FlushTokenList[E]; END;EXITS Label10 => NULL}; END;--:1073----1081:-- DoMessage: PROCEDURE
 = 
BEGIN M:PascalInteger[0..2]; M←CurMod;GetXNext[];ScanExpression[];
IF CurType#4  THEN BEGIN DispErr[0,566];BEGIN HelpPtr←1;
HelpLine↑[0]←860; END;PutGetError[];
 END  ELSE SELECT M FROM 0 =>BEGIN PrintNl[157];SlowPrint[CurExp]; END;
1 =>--1085:--BEGIN BEGIN IF Interaction=3  THEN NULL;PrintNl[133];Print[157]; END;
SlowPrint[CurExp];
IF ErrHelp#0  THEN UseErrHelp←TRUE  ELSE IF LongHelpSeen  THEN BEGIN
HelpPtr←1;HelpLine↑[0]←861;
 END  ELSE BEGIN IF  INT[Interaction]<3  THEN LongHelpSeen←TRUE;
BEGIN HelpPtr←4;HelpLine↑[3]←862;HelpLine↑[2]←863;HelpLine↑[1]←864;
HelpLine↑[0]←865; END; END;PutGetError[];UseErrHelp←FALSE; END--:1085--;
2 =>--1082:
BEGIN IF ErrHelp#0  THEN BEGIN IF  INT[StrRef↑[ErrHelp]]<127  THEN IF  INT[StrRef
↑[ErrHelp]]>1  THEN StrRef↑[ErrHelp]←StrRef↑[ErrHelp]-1  ELSE
FlushString[ErrHelp]; END;
IF(StrStart↑[CurExp+1]-StrStart↑[CurExp])=0  THEN ErrHelp←0  ELSE
BEGIN ErrHelp←CurExp;
BEGIN IF  INT[StrRef↑[ErrHelp]]<127  THEN StrRef↑[ErrHelp]←StrRef↑[ErrHelp]
+1; END; END; END--:1082--; ENDCASE;FlushCurExp[0]; END;--:1081----1102:
 GetCode: PROCEDURE RETURNS[GetCodeResult: EightBits] = 
BEGIN  C:PascalInteger; GetXNext[];
ScanExpression[];{IF CurType=16  THEN BEGIN C←RoundUnscaled[CurExp];
IF C>=0  THEN IF C<256  THEN  GOTO Label40;
 END  ELSE IF CurType=4  THEN IF
(StrStart↑[CurExp+1]-StrStart↑[CurExp])=1  THEN BEGIN C←StrPool↑[StrStart↑[CurExp]]; GOTO Label40; END;
DispErr[0,874];BEGIN HelpPtr←2;HelpLine↑[1]←875;HelpLine↑[0]←876;
 END;PutGetFlushError[0];C←0;EXITS Label40 => NULL};GetCodeResult←C; END;--:1102----1103:
 SetTag: PROCEDURE[C: EightBits,T: SmallNumber,R: EightBits]
 = 
BEGIN IF CharTag↑[C]=0  THEN BEGIN CharTag↑[C]←T;CharRemainder↑[C]←R;
 END  ELSE--1104:--BEGIN BEGIN IF Interaction=3  THEN NULL;PrintNl[133];
Print[877]; END;IF( INT[C]>32)AND ( INT[C]<128) THEN Print[C] ELSE BEGIN Print[878];
PrintInt[C]; END;Print[879];SELECT CharTag↑[C]FROM 1 =>Print[880];
2 =>Print[881];3 =>Print[871]; ENDCASE;BEGIN HelpPtr←2;HelpLine↑[1]←882;
HelpLine↑[0]←835; END;PutGetError[]; END--:1104--; END;--:1103----1105:
 DoTfmCommand: PROCEDURE = 
BEGIN  C, Cc:EightBits;K:PascalInteger[0..256];
J:PascalInteger; SELECT CurMod FROM 0 =>--1106:--BEGIN C←GetCode[];
WHILE CurCmd=78 DO BEGIN Cc←GetCode[];SetTag[C,2,Cc];C←Cc; END ENDLOOP ;
 END--:1106--;1 =>--1107:--BEGIN DO {--Label22:--C←GetCode[];IF CurCmd=78  THEN--1110:
BEGIN IF  INT[Nl]>255  THEN BEGIN BEGIN IF Interaction=3  THEN NULL;PrintNl[133];
Print[892]; END;BEGIN HelpPtr←1;HelpLine↑[0]←893; END;Error[];
 END  ELSE SetTag[C,1,Nl]; GOTO Label22; END--:1110--;
IF CurCmd=76  THEN BEGIN--1111:--LigKern↑[Nl].B1←C;
LigKern↑[Nl].B2←CurMod;LigKern↑[Nl].B0←0;
IF CurMod=0  THEN LigKern↑[Nl].B3←GetCode [] ELSE BEGIN GetXNext[];
ScanExpression[];IF CurType#16  THEN BEGIN DispErr[0,894];
BEGIN HelpPtr←2;HelpLine↑[1]←895;HelpLine↑[0]←181; END;
PutGetFlushError[0]; END;Kern↑[Nk]←CurExp;K←0;
WHILE Kern↑[K]#CurExp DO K←K+1 ENDLOOP ;
IF K=Nk  THEN BEGIN IF Nk=256  THEN Overflow[891,256];Nk←Nk+1; END;
LigKern↑[Nl].B3←K; END--:1111--;
IF Nl=LigTableSize  THEN Overflow[887,LigTableSize];Nl←Nl+1;
IF CurCmd=79  THEN  GOTO Label22; END  ELSE BEGIN BEGIN IF Interaction=3  THEN NULL;
PrintNl[133];Print[888]; END;BEGIN HelpPtr←1;HelpLine↑[0]←889; END;
BackError[]; END;IF  INT[Nl]>0  THEN LigKern↑[Nl-1].B0←128;EXIT; EXITS Label22 => NULL} ENDLOOP; END--:1107--;2 =>--1112:
BEGIN IF Ne=256  THEN Overflow[871,256];C←GetCode[];SetTag[C,3,Ne];
IF CurCmd#78  THEN BEGIN MissingErr[58];BEGIN HelpPtr←1;
HelpLine↑[0]←896; END;BackError[]; END;Exten↑[Ne].B0←GetCode[];
IF CurCmd#79  THEN BEGIN MissingErr[44];BEGIN HelpPtr←1;
HelpLine↑[0]←896; END;BackError[]; END;Exten↑[Ne].B1←GetCode[];
IF CurCmd#79  THEN BEGIN MissingErr[44];BEGIN HelpPtr←1;
HelpLine↑[0]←896; END;BackError[]; END;Exten↑[Ne].B2←GetCode[];
IF CurCmd#79  THEN BEGIN MissingErr[44];BEGIN HelpPtr←1;
HelpLine↑[0]←896; END;BackError[]; END;Exten↑[Ne].B3←GetCode[];Ne←Ne+1;
 END--:1112--;3,4 =>BEGIN C←CurMod;GetXNext[];ScanExpression[];
IF(CurType#16)OR (CurExp<32768) THEN BEGIN DispErr[0,883];
BEGIN HelpPtr←2;HelpLine↑[1]←884;HelpLine↑[0]←885; END;PutGetError[];
 END  ELSE BEGIN J←RoundUnscaled[CurExp];
IF CurCmd#78  THEN BEGIN MissingErr[58];BEGIN HelpPtr←1;
HelpLine↑[0]←886; END;BackError[]; END;IF C=3  THEN--1113:
DO IF J>HeaderSize  THEN Overflow[872,HeaderSize];
HeaderByte↑[J]←GetCode[];J←J+1; IF CurCmd#79--:1113-- THEN EXIT; ENDLOOP ELSE--1114:
DO IF J>MaxFontDimen  THEN Overflow[873,MaxFontDimen];
WHILE J>Np DO BEGIN Np←Np+1;Param↑[Np]←0; END ENDLOOP ;GetXNext[];
ScanExpression[];IF CurType#16  THEN BEGIN DispErr[0,897];
BEGIN HelpPtr←1;HelpLine↑[0]←181; END;PutGetFlushError[0]; END;
Param↑[J]←CurExp;J←J+1; IF CurCmd#79--:1114-- THEN EXIT; ENDLOOP; END; END; ENDCASE; END;
--:1105----1176:-- DoSpecial: PROCEDURE = 
BEGIN M:SmallNumber; M←CurMod;
GetXNext[];ScanExpression[];
IF Internal↑[34]>=0  THEN IF CurType#M  THEN--1177:--BEGIN DispErr[0,915];
BEGIN HelpPtr←1;HelpLine↑[0]←916; END;PutGetError[]; END--:1177
 ELSE BEGIN IF OutputFileName=0  THEN InitGf[];
IF M=4  THEN GfString[CurExp,0] ELSE BEGIN BEGIN GfBuf↑[GfPtr]←243;
GfPtr←GfPtr+1;IF GfPtr=GfLimit  THEN GfSwap[]; END;GfFour[CurExp];
 END; END;FlushCurExp[0]; END;--:1176----1185:-- StoreBaseFile: PROCEDURE
 = 
BEGIN K:PascalInteger;P, Q:Halfword;X:PascalInteger;W:FourQuarters;--1199:
Selector←5;Print[926];Print[JobName];PrintChar[32];
PrintInt[ RoundUnscaled[Internal↑[14]]MOD 100];PrintChar[46];
PrintInt[RoundUnscaled[Internal↑[15]]];PrintChar[46];
PrintInt[RoundUnscaled[Internal↑[16]]];PrintChar[41];
IF Interaction=0  THEN Selector←2  ELSE Selector←3;
BEGIN IF  INT[PoolPtr+1]>MaxPoolPtr  THEN BEGIN IF  INT[PoolPtr+1]>PoolSize  THEN
Overflow[129,PoolSize-InitPoolPtr];MaxPoolPtr←PoolPtr+1; END; END;
BaseIdent←MakeString[];StrRef↑[BaseIdent]←127;PackJobName[927];
WHILE  NOT WOpenOut[@BaseFile]DO PromptFileName[928,927] ENDLOOP ;
PrintNl[929];Print[WMakeNameString[@BaseFile]];
FlushString[StrPtr-1];PrintNl[BaseIdent]--:1199--;--1189:
BEGIN BaseFile.element.Int←514717228;PascalPUT[file: @BaseFile.baseFile, length: SIZE[MemoryWord, 2], element: @BaseFile.element]; END;
BEGIN BaseFile.element.Int←0;PascalPUT[file: @BaseFile.baseFile, length: SIZE[MemoryWord, 2], element: @BaseFile.element]; END;BEGIN BaseFile.element.Int←50000;
PascalPUT[file: @BaseFile.baseFile, length: SIZE[MemoryWord, 2], element: @BaseFile.element]; END;BEGIN BaseFile.element.Int←2100;PascalPUT[file: @BaseFile.baseFile, length: SIZE[MemoryWord, 2], element: @BaseFile.element]; END;
BEGIN BaseFile.element.Int←1777;PascalPUT[file: @BaseFile.baseFile, length: SIZE[MemoryWord, 2], element: @BaseFile.element]; END;BEGIN BaseFile.element.Int←6;
PascalPUT[file: @BaseFile.baseFile, length: SIZE[MemoryWord, 2], element: @BaseFile.element]; END--:1189--;--1191:--BEGIN BaseFile.element.Int←PoolPtr;
PascalPUT[file: @BaseFile.baseFile, length: SIZE[MemoryWord, 2], element: @BaseFile.element]; END;BEGIN BaseFile.element.Int←StrPtr;PascalPUT[file: @BaseFile.baseFile, length: SIZE[MemoryWord, 2], element: @BaseFile.element]; END;
FOR i:INT    IN [ INT[0 ].. INT[StrPtr ]] DO  K ← i;  BaseFile.element.Int←StrStart↑[K];
PascalPUT[file: @BaseFile.baseFile, length: SIZE[MemoryWord, 2], element: @BaseFile.element]; ENDLOOP;K←0;WHILE K+4<PoolPtr DO BEGIN W.B0←StrPool↑[K];
W.B1←StrPool↑[K+1];W.B2←StrPool↑[K+2];W.B3←StrPool↑[K+3];
BEGIN BaseFile.element.Qqqq←W;PascalPUT[file: @BaseFile.baseFile, length: SIZE[MemoryWord, 2], element: @BaseFile.element]; END;K←K+4; END ENDLOOP ;K←PoolPtr-4;
W.B0←StrPool↑[K];W.B1←StrPool↑[K+1];W.B2←StrPool↑[K+2];
W.B3←StrPool↑[K+3];BEGIN BaseFile.element.Qqqq←W;PascalPUT[file: @BaseFile.baseFile, length: SIZE[MemoryWord, 2], element: @BaseFile.element]; END;
PrintLn[];PrintInt[StrPtr];Print[923];PrintInt[PoolPtr]--:1191--;
--1193:--SortAvail[];VarUsed←0;BEGIN BaseFile.element.Int←LoMemMax;
PascalPUT[file: @BaseFile.baseFile, length: SIZE[MemoryWord, 2], element: @BaseFile.element]; END;BEGIN BaseFile.element.Int←Rover;PascalPUT[file: @BaseFile.baseFile, length: SIZE[MemoryWord, 2], element: @BaseFile.element]; END;P←0;
Q←Rover;X←0;DO FOR i:INT    IN [ INT[P ].. INT[ INT[Q]+1 ]] DO  K ← i;  BaseFile.element←Mem[K]↑;
PascalPUT[file: @BaseFile.baseFile, length: SIZE[MemoryWord, 2], element: @BaseFile.element]; ENDLOOP;X←X+Q+2-P;VarUsed←VarUsed+Q-P;P← INT[Q]+Mem[Q]↑.Hh.Lh;
Q←Mem[ INT[Q]+1]↑.Hh.Rh; IF Q=Rover THEN EXIT; ENDLOOP;VarUsed←VarUsed+LoMemMax-P;
DynUsed← INT[MemEnd]+1-HiMemMin;
FOR i:INT    IN [ INT[P ].. INT[LoMemMax ]] DO  K ← i;  BaseFile.element←Mem[K]↑;PascalPUT[file: @BaseFile.baseFile, length: SIZE[MemoryWord, 2], element: @BaseFile.element]; ENDLOOP;
X←X+LoMemMax+1-P;BEGIN BaseFile.element.Int←HiMemMin;PascalPUT[file: @BaseFile.baseFile, length: SIZE[MemoryWord, 2], element: @BaseFile.element]; END;
BEGIN BaseFile.element.Int←Avail;PascalPUT[file: @BaseFile.baseFile, length: SIZE[MemoryWord, 2], element: @BaseFile.element]; END;
FOR i:INT    IN [ INT[HiMemMin ].. INT[MemEnd ]] DO  K ← i;  BaseFile.element←Mem[K]↑;PascalPUT[file: @BaseFile.baseFile, length: SIZE[MemoryWord, 2], element: @BaseFile.element];
 ENDLOOP;X←X+MemEnd+1-HiMemMin;P←Avail;
WHILE P#0 DO BEGIN DynUsed←DynUsed-1;P←Mem[P]↑.Hh.Rh; END ENDLOOP ;
BEGIN BaseFile.element.Int←VarUsed;PascalPUT[file: @BaseFile.baseFile, length: SIZE[MemoryWord, 2], element: @BaseFile.element]; END;
BEGIN BaseFile.element.Int←DynUsed;PascalPUT[file: @BaseFile.baseFile, length: SIZE[MemoryWord, 2], element: @BaseFile.element]; END;PrintLn[];PrintInt[X];
Print[924];PrintInt[VarUsed];PrintChar[38];PrintInt[DynUsed]--:1193
;--1195:--BEGIN BaseFile.element.Int←HashUsed;PascalPUT[file: @BaseFile.baseFile, length: SIZE[MemoryWord, 2], element: @BaseFile.element]; END;
StCount← INT[2228]-HashUsed;
FOR i:INT    IN [ INT[1 ].. INT[HashUsed ]] DO  P ← i; IF Hash↑[P].Rh#0  THEN BEGIN BEGIN BaseFile.element.
Int←P;PascalPUT[file: @BaseFile.baseFile, length: SIZE[MemoryWord, 2], element: @BaseFile.element]; END;BEGIN BaseFile.element.Hh←Hash↑[P];PascalPUT[file: @BaseFile.baseFile, length: SIZE[MemoryWord, 2], element: @BaseFile.element];
 END;BEGIN BaseFile.element.Hh←Eqtb↑[P];PascalPUT[file: @BaseFile.baseFile, length: SIZE[MemoryWord, 2], element: @BaseFile.element]; END;
StCount←StCount+1; END ENDLOOP;
FOR i:INT    IN [ INT[ INT[HashUsed]+1 ].. INT[2241 ]] DO  P ← i;  BEGIN BaseFile.element.Hh←Hash↑[P];
PascalPUT[file: @BaseFile.baseFile, length: SIZE[MemoryWord, 2], element: @BaseFile.element]; END;BEGIN BaseFile.element.Hh←Eqtb↑[P];PascalPUT[file: @BaseFile.baseFile, length: SIZE[MemoryWord, 2], element: @BaseFile.element]; END; ENDLOOP;
BEGIN BaseFile.element.Int←StCount;PascalPUT[file: @BaseFile.baseFile, length: SIZE[MemoryWord, 2], element: @BaseFile.element]; END;PrintLn[];
PrintInt[StCount];Print[925]--:1195--;--1197:
BEGIN BaseFile.element.Int←IntPtr;PascalPUT[file: @BaseFile.baseFile, length: SIZE[MemoryWord, 2], element: @BaseFile.element]; END;
FOR i:INT    IN [ INT[1 ].. INT[IntPtr ]] DO  K ← i;  BEGIN BaseFile.element.Int←Internal↑[K];
PascalPUT[file: @BaseFile.baseFile, length: SIZE[MemoryWord, 2], element: @BaseFile.element]; END;BEGIN BaseFile.element.Int←IntName↑[K];PascalPUT[file: @BaseFile.baseFile, length: SIZE[MemoryWord, 2], element: @BaseFile.element]; END;
 ENDLOOP;BEGIN BaseFile.element.Int←StartSym;PascalPUT[file: @BaseFile.baseFile, length: SIZE[MemoryWord, 2], element: @BaseFile.element]; END;
BEGIN BaseFile.element.Int←Interaction;PascalPUT[file: @BaseFile.baseFile, length: SIZE[MemoryWord, 2], element: @BaseFile.element]; END;
BEGIN BaseFile.element.Int←BaseIdent;PascalPUT[file: @BaseFile.baseFile, length: SIZE[MemoryWord, 2], element: @BaseFile.element]; END;
BEGIN BaseFile.element.Int←BgLoc;PascalPUT[file: @BaseFile.baseFile, length: SIZE[MemoryWord, 2], element: @BaseFile.element]; END;
BEGIN BaseFile.element.Int←EgLoc;PascalPUT[file: @BaseFile.baseFile, length: SIZE[MemoryWord, 2], element: @BaseFile.element]; END;
BEGIN BaseFile.element.Int←69069;PascalPUT[file: @BaseFile.baseFile, length: SIZE[MemoryWord, 2], element: @BaseFile.element]; END;Internal↑[12]←0--:1197--;
--1200:--WClose[@BaseFile]--:1200--; END;--:1185-- 
 DoStatement: PROCEDURE = 
BEGIN CurType←1;GetXNext[];IF  INT[CurCmd]>43  THEN--989:
BEGIN IF  INT[CurCmd]<80  THEN BEGIN BEGIN IF Interaction=3  THEN NULL;
PrintNl[133];Print[734]; END;PrintCmdMod[CurCmd,CurMod];
PrintChar[39];BEGIN HelpPtr←5;HelpLine↑[4]←735;HelpLine↑[3]←736;
HelpLine↑[2]←737;HelpLine↑[1]←738;HelpLine↑[0]←739; END;BackError[];
GetXNext[]; END; END--:989-- ELSE IF  INT[CurCmd]>30  THEN--992:--BEGIN VarFlag←77;
ScanExpression[];
IF  INT[CurCmd]<81  THEN BEGIN IF CurCmd=51  THEN DoEquation [] ELSE IF 
CurCmd=77  THEN DoAssignment [] ELSE IF CurType=4  THEN--993:
BEGIN IF Internal↑[1]>0  THEN BEGIN PrintNl[157];SlowPrint[CurExp];
PascalTextBREAK[file: @TermOut]; END;IF Internal↑[34]>0  THEN--1178:
BEGIN IF OutputFileName=0  THEN InitGf[];GfString[917,CurExp];
 END--:1178--; END--:993-- ELSE IF CurType#1  THEN BEGIN DispErr[0,744];
BEGIN HelpPtr←3;HelpLine↑[2]←745;HelpLine↑[1]←746;HelpLine↑[0]←747;
 END;PutGetError[]; END;FlushCurExp[0];CurType←1; END; END--:992
 ELSE--991:--BEGIN IF Internal↑[7]>0  THEN ShowCmdMod[CurCmd,CurMod];
SELECT CurCmd FROM 30 =>DoTypeDeclaration[];
16 =>IF CurMod>2  THEN MakeOpDef [] ELSE IF CurMod>0  THEN ScanDef[];--1019:
24 =>DoRandomSeed[];--:1019----1022:--23 =>BEGIN PrintLn[];Interaction←CurMod;
--70:--IF Interaction=0  THEN Selector←0  ELSE Selector←1--:70--;
IF JobName#0  THEN Selector←Selector+2;GetXNext[]; END;--:1022----1025:
21 =>DoProtection[];--:1025----1029:--27 =>DefDelims[];--:1029----1032:
12 =>DO GetSymbol[];SaveVariable[CurSym];GetXNext[];
 IF CurCmd#79 THEN EXIT; ENDLOOP;13 =>DoInterim[];14 =>DoLet[];15 =>DoNewInternal[];--:1032
--1038:--22 =>DoShowWhatever[];--:1038----1057:--18 =>DoAddTo[];--:1057----1068:
17 =>DoShipOut[];11 =>DoDisplay[];28 =>DoOpenWindow[];19 =>DoCull[];--:1068----1075:
26 =>BEGIN GetSymbol[];StartSym←CurSym;GetXNext[]; END;--:1075----1080:
25 =>DoMessage[];--:1080----1099:--20 =>DoTfmCommand[];--:1099----1174:
29 =>DoSpecial[];--:1174-- ENDCASE;CurType←1; END--:991--;IF  INT[CurCmd]<80  THEN--990:
BEGIN BEGIN IF Interaction=3  THEN NULL;PrintNl[133];Print[740]; END;
BEGIN HelpPtr←6;HelpLine↑[5]←741;HelpLine↑[4]←742;HelpLine↑[3]←743;
HelpLine↑[2]←737;HelpLine↑[1]←738;HelpLine↑[0]←739; END;BackError[];
ScannerStatus←2;DO GetNext[];--742:
IF CurCmd=39  THEN BEGIN IF  INT[StrRef↑[CurMod]]<127  THEN IF  INT[StrRef↑[CurMod
]]>1  THEN StrRef↑[CurMod]←StrRef↑[CurMod]-1  ELSE FlushString[CurMod]
; END--:742--; IF  INT[CurCmd]>79 THEN EXIT; ENDLOOP;ScannerStatus←0; END--:990--;ErrorCount←0;
 END;--:988----1016:--
END.