-- file: MFOpsImpl3.mesa -- Pascal-to-Mesa translator output, translated at October 31, 1985 4:28:02 pm PST DIRECTORY PascalBasic, PascalWizardFiles, MFTypes, MFProcArray, MFInteraction, MFMemory, MFSymbols, MFPaths, MFEdges, MFOctants, MFContours, MFEnvelopes, MFEquations, MFInput, MFParsing, MFOps; MFOpsImpl3: PROGRAM IMPORTS MFProcArray, MFInteraction, MFMemory, MFSymbols, MFPaths, MFEdges, MFOctants, MFContours, MFEnvelopes, MFEquations, MFInput, MFParsing, MFOps EXPORTS MFOps = PUBLIC BEGIN OPEN PascalBasic, PascalWizardFiles, MFTypes, MFProcArray, MFInteraction, MFMemory, MFSymbols, MFPaths, MFEdges, MFOctants, MFContours, MFEnvelopes, MFEquations, MFInput, MFParsing, MFOps; DoInterim: PROCEDURE = BEGIN GetXNext[]; IF CurCmd#40 THEN BEGIN BEGIN IF Interaction=3 THEN NULL;PrintNl[133]; Print[789]; END;IF CurSym=0 THEN Print[794] ELSE Print[Hash↑[CurSym].Rh]; Print[795];BEGIN HelpPtr←1;HelpLine↑[0]←796; END;BackError[]; END ELSE BEGIN SaveInternal[CurMod];BackInput[]; END;DoStatement[]; END; --:1033----1034:-- DoLet: PROCEDURE = BEGIN L:Halfword; GetSymbol[]; L←CurSym;GetXNext[]; IF CurCmd#51 THEN IF CurCmd#77 THEN BEGIN MissingErr[61]; BEGIN HelpPtr←3;HelpLine↑[2]←797;HelpLine↑[1]←539;HelpLine↑[0]←798; END;BackError[]; END;GetSymbol[]; SELECT CurCmd FROM 10,53,44,49 =>Mem[CurMod]↑.Hh.Lh← INT[Mem[CurMod]↑.Hh.Lh]+1; ENDCASE => NULL;ClearSymbol[L,FALSE];Eqtb↑[L].Lh←CurCmd; IF CurCmd=41 THEN Eqtb↑[L].Rh←0 ELSE Eqtb↑[L].Rh←CurMod;GetXNext[]; END;--:1034----1035:-- DoNewInternal: PROCEDURE = BEGIN DO IF IntPtr=MaxInternal THEN Overflow[799,MaxInternal]; GetClearSymbol[];IntPtr←IntPtr+1;Eqtb↑[CurSym].Lh←40; Eqtb↑[CurSym].Rh←IntPtr;IntName↑[IntPtr]←Hash↑[CurSym].Rh; Internal↑[IntPtr]←0;GetXNext[]; IF CurCmd#79 THEN EXIT; ENDLOOP; END;--:1035----1039: DoShow: PROCEDURE = BEGIN DO GetXNext[];ScanExpression[];PrintNl[630]; PrintExp[0,2];FlushCurExp[0]; IF CurCmd#79 THEN EXIT; ENDLOOP; END;--:1039----1040: DispToken: PROCEDURE = BEGIN PrintNl[805];IF CurSym=0 THEN--1041: BEGIN IF CurCmd=42 THEN PrintScaled[CurMod] ELSE IF CurCmd=38 THEN BEGIN GPointer←CurMod;PrintCapsule[]; END ELSE BEGIN PrintChar[34]; Print[CurMod];PrintChar[34]; BEGIN IF INT[StrRef↑[CurMod]]<127 THEN IF INT[StrRef↑[CurMod]]>1 THEN StrRef↑ [CurMod]←StrRef↑[CurMod]-1 ELSE FlushString[CurMod]; END; END; END--:1041-- ELSE BEGIN Print[Hash↑[CurSym].Rh];PrintChar[61]; IF INT[Eqtb↑[CurSym].Lh]>=83 THEN Print[806];PrintCmdMod[CurCmd,CurMod]; IF CurCmd=10 THEN BEGIN PrintLn[];ShowMacro[CurMod,0,100000]; END; END; END;--:1040----1043:-- DoShowToken: PROCEDURE = BEGIN DO GetNext[]; DispToken[];GetXNext[]; IF CurCmd#79 THEN EXIT; ENDLOOP; END;--:1043----1044: DoShowStats: PROCEDURE = BEGIN PrintNl[815];PrintInt[VarUsed]; PrintChar[38];PrintInt[DynUsed];IF FALSE THEN Print[230];Print[426]; PrintInt[ INT[HiMemMin]-LoMemMax-1];Print[816];PrintLn[];PrintNl[817]; PrintInt[StrPtr-InitStrPtr];PrintChar[38]; PrintInt[PoolPtr-InitPoolPtr];Print[426]; PrintInt[MaxStrings-MaxStrPtr];PrintChar[38]; PrintInt[PoolSize-MaxPoolPtr];Print[816];PrintLn[];GetXNext[]; END; --:1044----1045:-- DispVar: PROCEDURE[P: Halfword] = BEGIN Q:Halfword; N:PascalInteger[0..MaxPrintLine]; IF Mem[P]↑.Hh.B0=21 THEN--1046: BEGIN Q←Mem[ INT[P]+1]↑.Hh.Lh;DO DispVar[Q];Q←Mem[Q]↑.Hh.Rh; IF Q=17 THEN EXIT; ENDLOOP; Q←Mem[ INT[P]+1]↑.Hh.Rh;WHILE Mem[Q]↑.Hh.B1=3 DO BEGIN DispVar[Q]; Q←Mem[Q]↑.Hh.Rh; END ENDLOOP ; END--:1046-- ELSE IF INT[Mem[P]↑.Hh.B0]>=22 THEN--1047: BEGIN PrintNl[157];PrintVariableName[P]; IF INT[Mem[P]↑.Hh.B0]>22 THEN Print[531];Print[818]; IF INT[FileOffset]>=MaxPrintLine-20 THEN N←5 ELSE N← MaxPrintLine-FileOffset-15;ShowMacro[Mem[ INT[P]+1]↑.Int,0,N]; END--:1047 ELSE IF Mem[P]↑.Hh.B0#0 THEN BEGIN PrintNl[157];PrintVariableName[P]; PrintChar[61];PrintExp[P,0]; END; END;--:1045----1048: DoShowVar: PROCEDURE = BEGIN DO GetNext[]; {IF INT[CurSym]>0 THEN IF INT[CurSym]<=2241 THEN IF CurCmd=41 THEN IF CurMod#0 THEN BEGIN DispVar[CurMod]; GOTO Label30; END;DispToken[];EXITS Label30 => NULL};GetXNext[]; IF CurCmd#79 THEN EXIT; ENDLOOP; END;--:1048----1049:-- DoShowDependencies: PROCEDURE = BEGIN P:Halfword; P←Mem[13]↑.Hh.Rh; WHILE P#13 DO BEGIN IF Interesting[P] THEN BEGIN PrintNl[157]; PrintVariableName[P]; IF Mem[P]↑.Hh.B0=17 THEN PrintChar[61] ELSE Print[633]; PrintDependency[Mem[ INT[P]+1]↑.Hh.Rh,Mem[P]↑.Hh.B0]; END;P←Mem[ INT[P]+1]↑.Hh.Rh; WHILE Mem[P]↑.Hh.Lh#0 DO P←Mem[P]↑.Hh.Rh ENDLOOP ;P←Mem[P]↑.Hh.Rh; END ENDLOOP ;GetXNext[]; END;--:1049----1050:-- DoShowWhatever: PROCEDURE = BEGIN IF Interaction=3 THEN NULL;SELECT CurMod FROM 0 =>DoShowToken[]; 1 =>DoShowStats[];2 =>DoShow[];3 =>DoShowVar[];4 =>DoShowDependencies[]; ENDCASE; IF Internal↑[32]>0 THEN BEGIN BEGIN IF Interaction=3 THEN NULL;PrintNl[133]; Print[819]; END;IF INT[Interaction]<3 THEN BEGIN HelpPtr←0; ErrorCount←ErrorCount-1; END ELSE BEGIN HelpPtr←1;HelpLine↑[0]←820; END;IF CurCmd=80 THEN Error [] ELSE PutGetError[]; END; END;--:1050----1053: FindEdgesVar: PROCEDURE[T: Halfword] = BEGIN P:Halfword; P←FindVariable[T];CurEdges←0;IF P=0 THEN BEGIN Obliterated[T]; PutGetError[]; END ELSE IF Mem[P]↑.Hh.B0#11 THEN BEGIN BEGIN IF Interaction=3 THEN NULL; PrintNl[133];Print[655]; END;ShowTokenList[T,0,1000,0];Print[833]; PrintType[Mem[P]↑.Hh.B0];PrintChar[41];BEGIN HelpPtr←2; HelpLine↑[1]←834;HelpLine↑[0]←835; END;PutGetError[]; END ELSE CurEdges←Mem[ INT[P]+1]↑.Int;FlushNodeList[T]; END;--:1056----1058: DoAddTo: PROCEDURE = BEGIN Lhs, Rhs:Halfword;W:PascalInteger; P:Halfword;Q:Halfword; GetXNext[];VarFlag←68;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 Lhs←CurExp; CurPathType←CurMod;CurType←1;GetXNext[];ScanExpression[]; IF CurPathType=2 THEN--1060:--BEGIN FindEdgesVar[Lhs]; IF CurEdges=0 THEN FlushCurExp[0] ELSE IF CurType#11 THEN BEGIN DispErr[0,840];BEGIN HelpPtr←2;HelpLine↑[1]←841;HelpLine↑[0]←835; END;PutGetFlushError[0]; END ELSE BEGIN MergeEdges[CurExp]; FlushCurExp[0]; END; END--:1060-- ELSE--1061: BEGIN IF CurType=14 THEN PairToPath[]; IF CurType#9 THEN BEGIN DispErr[0,840];BEGIN HelpPtr←2; HelpLine↑[1]←842;HelpLine↑[0]←835; END;PutGetFlushError[0]; FlushTokenList[Lhs]; END ELSE BEGIN Rhs←CurExp;W←1;CurPen←3; WHILE CurCmd=66 DO IF ScanWith [] THEN IF CurType=16 THEN W←CurExp ELSE--1062: BEGIN IF Mem[CurPen]↑.Hh.Lh=0 THEN TossPen[CurPen] ELSE Mem[CurPen]↑.Hh .Lh← INT[Mem[CurPen]↑.Hh.Lh]-1;CurPen←CurExp; END--:1062-- ENDLOOP ;--1063: FindEdgesVar[Lhs]; IF CurEdges=0 THEN TossKnotList[Rhs] ELSE BEGIN Lhs←0; {IF Mem[Rhs]↑.Hh.B0=0 THEN IF CurPathType=0 THEN--1064: IF Mem[Rhs]↑.Hh.Rh=Rhs THEN--1065:--BEGIN Mem[ INT[Rhs]+5]↑.Int←Mem[ INT[Rhs]+1]↑.Int; Mem[ INT[Rhs]+6]↑.Int←Mem[ INT[Rhs]+2]↑.Int;Mem[ INT[Rhs]+3]↑.Int←Mem[ INT[Rhs]+1]↑.Int; Mem[ INT[Rhs]+4]↑.Int←Mem[ INT[Rhs]+2]↑.Int;Mem[Rhs]↑.Hh.B0←1;Mem[Rhs]↑.Hh.B1←1; END--:1065-- ELSE BEGIN P←HtapYpoc[Rhs];Q←Mem[P]↑.Hh.Rh; Mem[ INT[PathTail]+5]↑.Int←Mem[ INT[Q]+5]↑.Int;Mem[ INT[PathTail]+6]↑.Int←Mem[ INT[Q]+6]↑.Int; Mem[PathTail]↑.Hh.B1←Mem[Q]↑.Hh.B1;Mem[PathTail]↑.Hh.Rh←Mem[Q]↑.Hh.Rh; FreeNode[Q,7];Mem[ INT[P]+5]↑.Int←Mem[ INT[Rhs]+5]↑.Int; Mem[ INT[P]+6]↑.Int←Mem[ INT[Rhs]+6]↑.Int;Mem[P]↑.Hh.B1←Mem[Rhs]↑.Hh.B1; Mem[P]↑.Hh.Rh←Mem[Rhs]↑.Hh.Rh;FreeNode[Rhs,7];Rhs←P; END--:1064 ELSE--1066:--BEGIN BEGIN IF Interaction=3 THEN NULL;PrintNl[133];Print[843]; END;BEGIN HelpPtr←2;HelpLine↑[1]←844;HelpLine↑[0]←835; END; PutGetError[];TossKnotList[Rhs]; GOTO Label45; END--:1066 ELSE IF CurPathType=0 THEN Lhs←HtapYpoc[Rhs];CurWt←W; Rhs←MakeSpec[Rhs,Mem[ INT[CurPen]+9]↑.Int,Internal↑[5]];--1067: {IF TurningNumber<=0 THEN IF CurPathType#0 THEN IF Internal↑[39]>0 THEN IF(TurningNumber<0)AND (Mem[CurPen]↑.Hh.Rh=0) THEN CurWt←-CurWt ELSE BEGIN IF TurningNumber=0 THEN IF(Internal↑[39]<=65536)AND (Mem[ CurPen]↑.Hh.Rh=0) THEN GOTO Label30 ELSE PrintStrange[845] ELSE PrintStrange[ 846];BEGIN HelpPtr←3;HelpLine↑[2]←847;HelpLine↑[1]←848; HelpLine↑[0]←849; END;PutGetError[]; END;EXITS Label30 => NULL};--:1067--IF Mem[ INT[CurPen]+9]↑.Int=0 THEN FillSpec[Rhs] ELSE FillEnvelope[Rhs]; IF Lhs#0 THEN BEGIN RevTurns←TRUE; Lhs←MakeSpec[Lhs,Mem[ INT[CurPen]+9]↑.Int,Internal↑[5]];RevTurns←FALSE; IF Mem[ INT[CurPen]+9]↑.Int=0 THEN FillSpec[Lhs] ELSE FillEnvelope[Lhs]; END; EXITS Label45 => NULL}; END--:1063--; IF Mem[CurPen]↑.Hh.Lh=0 THEN TossPen[CurPen] ELSE Mem[CurPen]↑.Hh.Lh← INT[Mem[CurPen]↑.Hh.Lh]-1; END; END--:1061--; END; END;--:1058----1069:----1097: END.