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