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