-- file: MFOpsImpl6.mesa -- Pascal-to-Mesa translator output, translated at October 31, 1985 4:28:02 pm PST DIRECTORY PascalBasic, PascalWizardFiles, MFTypes, MFProcArray, MFInteraction, MFMath, MFMemory, MFSymbols, MFEdges, MFEquations, MFParsing, MFOps, MFEnvelopes; MFOpsImpl6: PROGRAM IMPORTS PascalBasic, MFProcArray, MFInteraction, MFMath, MFMemory, MFSymbols, MFEdges, MFEquations, MFParsing, MFOps, MFEnvelopes EXPORTS MFOps = PUBLIC BEGIN OPEN PascalBasic, PascalWizardFiles, MFTypes, MFProcArray, MFInteraction, MFMath, MFMemory, MFSymbols, MFEdges, MFEquations, MFParsing, MFOps, MFEnvelopes; --922:-- BadBinary: PROCEDURE[P: Halfword,C: Quarterword] = BEGIN DispErr[P,157];DispErr[0,703];IF INT[C]>=94 THEN PrintOp[C]; PrintKnownOrUnknownType[Mem[P]^.Hh.B0,P]; IF INT[C]>=94 THEN Print[348] ELSE PrintOp[C]; PrintKnownOrUnknownType[CurType,CurExp];BEGIN HelpPtr_3; HelpLine^[2]_704;HelpLine^[1]_713;HelpLine^[0]_714; END;PutGetError[]; END;--:922----927:-- Tarnished: PROCEDURE[P: Halfword] RETURNS[TarnishedResult: Halfword] = BEGIN Q:Halfword;R:Halfword; Q_Mem[ INT[P]+1]^.Int; R_ INT[Q]+BigNodeSize^[Mem[P]^.Hh.B0];{DO R_ INT[R]-2; IF Mem[R]^.Hh.B0=19 THEN BEGIN TarnishedResult_1; GOTO Label10; END; IF R=Q THEN EXIT; ENDLOOP; TarnishedResult_0;EXITS Label10 => NULL}; END;--:927----929:----934:-- DepFinish: PROCEDURE[V,Q: Halfword, T: SmallNumber] = BEGIN P:Halfword;Vv:Scaled; IF Q=0 THEN P_CurExp ELSE P_Q;Mem[ INT[P]+1]^.Hh.Rh_V; Mem[P]^.Hh.B0_T;IF Mem[V]^.Hh.Lh=0 THEN BEGIN Vv_Mem[ INT[V]+1]^.Int; IF Q=0 THEN FlushCurExp[Vv] ELSE BEGIN RecycleValue[P]; Mem[Q]^.Hh.B0_16;Mem[ INT[Q]+1]^.Int_Vv; END; END ELSE IF Q=0 THEN CurType_T; IF FixNeeded THEN FixDependencies[]; END;--:934 AddOrSubtract: PROCEDURE[P,Q: Halfword,C: Quarterword] = BEGIN S, T:SmallNumber;R:Halfword;V:PascalInteger; IF Q=0 THEN BEGIN T_CurType; IF INT[T]<17 THEN V_CurExp ELSE V_Mem[CurExp+1]^.Hh.Rh; END ELSE BEGIN T_Mem[Q]^.Hh.B0; IF INT[T]<17 THEN V_Mem[ INT[Q]+1]^.Int ELSE V_Mem[ INT[Q]+1]^.Hh.Rh; END; {IF T=16 THEN BEGIN IF C=70 THEN V_-V; IF Mem[P]^.Hh.B0=16 THEN BEGIN V_SlowAdd[Mem[ INT[P]+1]^.Int,V]; IF Q=0 THEN CurExp_V ELSE Mem[ INT[Q]+1]^.Int_V; GOTO Label10; END;--930: R_Mem[ INT[P]+1]^.Hh.Rh;WHILE Mem[R]^.Hh.Lh#0 DO R_Mem[R]^.Hh.Rh ENDLOOP ; Mem[ INT[R]+1]^.Int_SlowAdd[Mem[ INT[R]+1]^.Int,V];IF Q=0 THEN BEGIN Q_GetNode[2]; CurExp_Q;CurType_Mem[P]^.Hh.B0;Mem[Q]^.Hh.B1_11; END; Mem[ INT[Q]+1]^.Hh.Rh_Mem[ INT[P]+1]^.Hh.Rh;Mem[Q]^.Hh.B0_Mem[P]^.Hh.B0; Mem[ INT[Q]+1]^.Hh.Lh_Mem[ INT[P]+1]^.Hh.Lh;Mem[Mem[ INT[P]+1]^.Hh.Lh]^.Hh.Rh_Q; Mem[P]^.Hh.B0_16;--:930-- END ELSE BEGIN IF C=70 THEN NegateDepList[V]; --931:--IF Mem[P]^.Hh.B0=16 THEN--932: BEGIN WHILE Mem[V]^.Hh.Lh#0 DO V_Mem[V]^.Hh.Rh ENDLOOP ; Mem[V+1]^.Int_SlowAdd[Mem[ INT[P]+1]^.Int,Mem[V+1]^.Int]; END--:932 ELSE BEGIN S_Mem[P]^.Hh.B0;R_Mem[ INT[P]+1]^.Hh.Rh; {IF T=17 THEN BEGIN IF S=17 THEN IF MaxCoef[R]+MaxCoef[V]<626349397 THEN BEGIN V_PPlusQ[V,R,17]; GOTO Label30; END;T_18; V_POverV[V,65536,17,18]; END; IF S=18 THEN V_PPlusQ[V,R,18] ELSE V_PPlusFq[V,65536,R,18,17]; EXITS Label30 => NULL};--933:--IF Q#0 THEN DepFinish[V,Q,T] ELSE BEGIN CurType_T; DepFinish[V,0,T]; END--:933--; END--:931--; END;EXITS Label10 => NULL}; END;--:929----942: DepMult: PROCEDURE[P: Halfword,V: PascalInteger,VIsScaled: PascalBoolean] = BEGIN Q:Halfword;S, T:SmallNumber; {IF P=0 THEN Q_CurExp ELSE IF Mem[P]^.Hh.B0#16 THEN Q_P ELSE BEGIN IF VIsScaled THEN Mem[ INT[P]+1]^.Int_TakeScaled[Mem[ INT[P]+1]^.Int,V] ELSE Mem[ INT[P]+1]^.Int_TakeFraction[Mem[ INT[P]+1]^.Int,V]; GOTO Label10; END;T_Mem[Q]^.Hh.B0; Q_Mem[ INT[Q]+1]^.Hh.Rh;S_T; IF T=17 THEN IF VIsScaled THEN IF AbVsCd[MaxCoef[Q],ABS[V], 626349396,65536]>=0 THEN T_18;Q_PTimesV[Q,V,S,T,VIsScaled]; DepFinish[Q,P,T];EXITS Label10 => NULL}; END;--:942----945:-- HardTimes: PROCEDURE[P: Halfword] = BEGIN Q:Halfword;R:Halfword;U, V:Scaled; IF Mem[P]^.Hh.B0=14 THEN BEGIN Q_StashCurExp[];UnstashCurExp[P]; P_Q; END;R_Mem[CurExp+1]^.Int;U_Mem[ INT[R]+1]^.Int;V_Mem[ INT[R]+3]^.Int;--946: Mem[ INT[R]+2]^.Hh.B0_Mem[P]^.Hh.B0;NewDep[ INT[R]+2,CopyDepList[Mem[ INT[P]+1]^.Hh.Rh]]; Mem[R]^.Hh.B0_Mem[P]^.Hh.B0;Mem[ INT[R]+1]^_Mem[ INT[P]+1]^; Mem[Mem[ INT[P]+1]^.Hh.Lh]^.Hh.Rh_R;FreeNode[P,2]--:946--;DepMult[R,U,TRUE]; DepMult[ INT[R]+2,V,TRUE]; END;--:945----948:-- DepDiv: PROCEDURE[P: Halfword, V: Scaled] = BEGIN Q:Halfword;S, T:SmallNumber; {IF P=0 THEN Q_CurExp ELSE IF Mem[P]^.Hh.B0#16 THEN Q_P ELSE BEGIN Mem[ INT[P]+1]^.Int_MakeScaled[Mem[ INT[P]+1]^.Int,V]; GOTO Label10; END; T_Mem[Q]^.Hh.B0;Q_Mem[ INT[Q]+1]^.Hh.Rh;S_T; IF T=17 THEN IF AbVsCd[MaxCoef[Q],65536,626349396,ABS[V]]>=0 THEN T_ 18;Q_POverV[Q,V,S,T];DepFinish[Q,P,T];EXITS Label10 => NULL}; END;--:948----952: SetUpTrans: PROCEDURE[C: Quarterword] = BEGIN P, Q, R:Halfword; IF(C#88)OR (CurType#13) THEN--954:--BEGIN P_StashCurExp[]; CurExp_IdTransform[];CurType_13;Q_Mem[CurExp+1]^.Int;{SELECT C FROM--956: 84 =>IF Mem[P]^.Hh.B0=16 THEN--957: BEGIN NSinCos[( Mem[ INT[P]+1]^.Int MOD 23592960)*16]; Mem[ INT[Q]+5]^.Int_RoundFraction[NCos];Mem[ INT[Q]+9]^.Int_RoundFraction[NSin]; Mem[ INT[Q]+7]^.Int_-Mem[ INT[Q]+9]^.Int;Mem[ INT[Q]+11]^.Int_Mem[ INT[Q]+5]^.Int; GOTO Label30; END--:957--;85 =>IF INT[Mem[P]^.Hh.B0]>14 THEN BEGIN Install[ INT[Q]+6,P]; GOTO Label30; END; 86 =>IF INT[Mem[P]^.Hh.B0]>14 THEN BEGIN Install[ INT[Q]+4,P];Install[ INT[Q]+10,P]; GOTO Label30; END;87 =>IF Mem[P]^.Hh.B0=14 THEN BEGIN R_Mem[ INT[P]+1]^.Int;Install[Q,R]; Install[ INT[Q]+2, INT[R]+2]; GOTO Label30; END; 89 =>IF INT[Mem[P]^.Hh.B0]>14 THEN BEGIN Install[ INT[Q]+4,P]; GOTO Label30; END; 90 =>IF INT[Mem[P]^.Hh.B0]>14 THEN BEGIN Install[ INT[Q]+10,P]; GOTO Label30; END; 91 =>IF Mem[P]^.Hh.B0=14 THEN--958:--BEGIN R_Mem[ INT[P]+1]^.Int;Install[ INT[Q]+4,R]; Install[ INT[Q]+10,R];Install[ INT[Q]+8, INT[R]+2]; IF Mem[ INT[R]+2]^.Hh.B0=16 THEN Mem[ INT[R]+3]^.Int_-Mem[ INT[R]+3]^.Int ELSE NegateDepList[Mem[ INT[R]+3]^.Hh.Rh];Install[ INT[Q]+6, INT[R]+2]; GOTO Label30; END--:958--;88 => NULL; --:956-- ENDCASE;DispErr[P,723];BEGIN HelpPtr_3;HelpLine^[2]_724; HelpLine^[1]_725;HelpLine^[0]_406; END;PutGetError[]; EXITS Label30 => NULL};RecycleValue[P];FreeNode[P,2]; END--:954--;--955: Q_Mem[CurExp+1]^.Int;R_ INT[Q]+12;{DO R_ INT[R]-2; IF Mem[R]^.Hh.B0#16 THEN GOTO Label10; IF R=Q THEN EXIT; ENDLOOP;Txx_Mem[ INT[Q]+5]^.Int; Txy_Mem[ INT[Q]+7]^.Int;Tyx_Mem[ INT[Q]+9]^.Int;Tyy_Mem[ INT[Q]+11]^.Int;Tx_Mem[ INT[Q]+1]^.Int; Ty_Mem[ INT[Q]+3]^.Int;FlushCurExp[0]--:955--;EXITS Label10 => NULL}; END;--:952----959: SetUpKnownTrans: PROCEDURE[C: Quarterword] = BEGIN SetUpTrans[C]; IF CurType#16 THEN BEGIN DispErr[0,726];BEGIN HelpPtr_3; HelpLine^[2]_727;HelpLine^[1]_728;HelpLine^[0]_406; END; PutGetFlushError[0];Txx_65536;Txy_0;Tyx_0;Tyy_65536;Tx_0;Ty_0; END; END;--:959----960:-- Trans: PROCEDURE[P,Q: Halfword] = BEGIN V:Scaled; V_TakeScaled[Mem[P]^.Int,Txx]+TakeScaled[Mem[Q]^.Int,Txy]+Tx; Mem[Q]^.Int_TakeScaled[Mem[P]^.Int,Tyx]+TakeScaled[Mem[Q]^.Int,Tyy]+Ty; Mem[P]^.Int_V; END;--:960----961:-- PathTrans: PROCEDURE[P: Halfword, C: Quarterword] = BEGIN Q:Halfword; SetUpKnownTrans[C]; UnstashCurExp[P]; {IF CurType=6 THEN BEGIN IF Mem[CurExp+9]^.Int=0 THEN IF Tx=0 THEN IF Ty =0 THEN GOTO Label10;FlushCurExp[MakePath[CurExp]];CurType_8; END; Q_CurExp;DO IF Mem[Q]^.Hh.B0#0 THEN Trans[ INT[Q]+3, INT[Q]+4];Trans[ INT[Q]+1, INT[Q]+2]; IF Mem[Q]^.Hh.B1#0 THEN Trans[ INT[Q]+5, INT[Q]+6];Q_Mem[Q]^.Hh.Rh; IF Q=CurExp THEN EXIT; ENDLOOP; EXITS Label10 => NULL}; END;--:961----962:-- EdgesTrans: PROCEDURE[P: Halfword,C: Quarterword] = BEGIN SetUpKnownTrans[C];UnstashCurExp[P]; CurEdges_CurExp;{IF Mem[CurEdges]^.Hh.Rh=CurEdges THEN GOTO Label10; IF Txx=0 THEN IF Tyy=0 THEN IF PascalMODPower2Mask[Txy ,65535]=0 THEN IF PascalMODPower2Mask[Tyx ,65535]=0 THEN BEGIN XySwapEdges[];Txx_Txy;Tyy_Tyx;Txy_0;Tyx_0; IF Mem[CurEdges]^.Hh.Rh=CurEdges THEN GOTO Label10; END; IF Txy=0 THEN IF Tyx=0 THEN IF PascalMODPower2Mask[Txy ,65535]=0 THEN IF PascalMODPower2Mask[Tyy ,65535]=0 THEN--963:--BEGIN IF(Txx=0)OR (Tyy=0) THEN BEGIN TossEdges[CurEdges]; CurExp_GetNode[6];InitEdges[CurExp]; END ELSE BEGIN IF Txx<0 THEN BEGIN XReflectEdges[];Txx_-Txx; END; IF Tyy<0 THEN BEGIN YReflectEdges[];Tyy_-Tyy; END; IF Txx#65536 THEN XScaleEdges[ PascalDIVPower2[Txx ,16]]; IF Tyy#65536 THEN YScaleEdges[ PascalDIVPower2[Tyy ,16]];--964: Tx_RoundUnscaled[Tx];Ty_RoundUnscaled[Ty]; IF(Mem[ INT[CurEdges]+2]^.Hh.Lh+Tx<=0)OR (Mem[ INT[CurEdges]+2]^.Hh.Rh+Tx>=8192)OR ( Mem[ INT[CurEdges]+1]^.Hh.Lh+Ty<=0)OR (Mem[ INT[CurEdges]+1]^.Hh.Rh+Ty>=8191)OR ( ABS[Tx]>=4096)OR (ABS[Ty]>=4096) THEN BEGIN BEGIN IF Interaction=3 THEN NULL; PrintNl[133];Print[732]; END;BEGIN HelpPtr_3;HelpLine^[2]_733; HelpLine^[1]_405;HelpLine^[0]_406; END;PutGetError[]; END ELSE BEGIN IF Tx#0 THEN BEGIN IF NOT (ABS[Mem[ INT[CurEdges]+3]^.Hh.Lh-Tx -4096]<4096) THEN FixOffset[]; Mem[ INT[CurEdges]+2]^.Hh.Lh_Mem[ INT[CurEdges]+2]^.Hh.Lh+Tx; Mem[ INT[CurEdges]+2]^.Hh.Rh_Mem[ INT[CurEdges]+2]^.Hh.Rh+Tx; Mem[ INT[CurEdges]+3]^.Hh.Lh_Mem[ INT[CurEdges]+3]^.Hh.Lh-Tx; Mem[ INT[CurEdges]+4]^.Int_0; END; IF Ty#0 THEN BEGIN Mem[ INT[CurEdges]+1]^.Hh.Lh_Mem[ INT[CurEdges]+1]^.Hh.Lh+Ty; Mem[ INT[CurEdges]+1]^.Hh.Rh_Mem[ INT[CurEdges]+1]^.Hh.Rh+Ty; Mem[ INT[CurEdges]+5]^.Hh.Lh_Mem[ INT[CurEdges]+5]^.Hh.Lh+Ty; Mem[ INT[CurEdges]+4]^.Int_0; END; END--:964--; END; GOTO Label10; END--:963--; BEGIN IF Interaction=3 THEN NULL;PrintNl[133];Print[729]; END; BEGIN HelpPtr_3;HelpLine^[2]_730;HelpLine^[1]_731;HelpLine^[0]_406; END;PutGetError[];EXITS Label10 => NULL}; END;--:962----965:----967:-- END.