-- file: MFOctantsImpl3.mesa -- Pascal-to-Mesa translator output, translated at October 31, 1985 4:28:01 pm PST DIRECTORY PascalBasic, PascalWizardFiles, MFTypes, MFProcArray, MFMath, MFOctants; MFOctantsImpl3: PROGRAM IMPORTS PascalBasic, MFProcArray, MFMath, MFOctants EXPORTS MFOctants = PUBLIC BEGIN OPEN PascalBasic, PascalWizardFiles, MFTypes, MFProcArray, MFMath, MFOctants; QuadrantSubdivide: PROCEDURE = BEGIN P, Q, R, S, Pp, Qq:Halfword;FirstX, FirstY:Scaled; Del1, Del2, Del3, Del, Dmax:Scaled;T:Fraction;DestX, DestY:Scaled; ConstantX:PascalBoolean; Subdiv1: PROCEDURE = BEGIN--407: IF Q=CurSpec THEN BEGIN DestX_FirstX;DestY_FirstY; END ELSE BEGIN DestX_Mem[ INT[Q]+1]^.Int;DestY_Mem[ INT[Q]+2]^.Int; END; Del1_Mem[ INT[P]+5]^.Int-Mem[ INT[P]+1]^.Int;Del2_Mem[ INT[Q]+3]^.Int-Mem[ INT[P]+5]^.Int; Del3_DestX-Mem[ INT[Q]+3]^.Int;--408: IF Del1#0 THEN Del_Del1 ELSE IF Del2#0 THEN Del_Del2 ELSE Del_Del3; IF Del#0 THEN BEGIN Dmax_ABS[Del1]; IF ABS[Del2]>Dmax THEN Dmax_ABS[Del2]; IF ABS[Del3]>Dmax THEN Dmax_ABS[Del3]; WHILE Dmax<134217728 DO BEGIN Dmax_Dmax+Dmax;Del1_Del1+Del1; Del2_Del2+Del2;Del3_Del3+Del3; END ENDLOOP ; END--:408--; IF Del=0 THEN ConstantX_TRUE ELSE BEGIN ConstantX_FALSE; IF Del<0 THEN--409:--BEGIN Mem[ INT[P]+1]^.Int_-Mem[ INT[P]+1]^.Int; Mem[ INT[P]+5]^.Int_-Mem[ INT[P]+5]^.Int;Mem[ INT[Q]+3]^.Int_-Mem[ INT[Q]+3]^.Int;Del1_-Del1; Del2_-Del2;Del3_-Del3;DestX_-DestX;Mem[P]^.Hh.B1_2; END--:409--; T_CrossingPoint[Del1,Del2,Del3];IF T<268435456 THEN--411: BEGIN SplitCubic[P,T,DestX,DestY];R_Mem[P]^.Hh.Rh; IF INT[Mem[R]^.Hh.B1]>1 THEN Mem[R]^.Hh.B1_1 ELSE Mem[R]^.Hh.B1_2; IF Mem[ INT[R]+1]^.Int0 THEN Del2_0; T_CrossingPoint[0,-Del2,-Del3];IF T<268435456 THEN--412: BEGIN SplitCubic[R,T,DestX,DestY];S_Mem[R]^.Hh.Rh; IF Mem[ INT[S]+1]^.IntDestX THEN Mem[ INT[R]+1]^.Int_DestX; END--:411--; END--:407--; END; P_CurSpec;FirstX_Mem[ INT[CurSpec]+1]^.Int; FirstY_Mem[ INT[CurSpec]+2]^.Int;{DO DO {--Label22:--Q_Mem[P]^.Hh.Rh;Subdiv1[];--413: Pp_P;DO Qq_Mem[Pp]^.Hh.Rh; Abnegate[Mem[ INT[Qq]+1]^.Int,Mem[ INT[Qq]+2]^.Int,Mem[Qq]^.Hh.B1,Mem[Pp]^.Hh.B1]; DestX_CurX;DestY_CurY;Del1_Mem[ INT[Pp]+6]^.Int-Mem[ INT[Pp]+2]^.Int; Del2_Mem[ INT[Qq]+4]^.Int-Mem[ INT[Pp]+6]^.Int;Del3_DestY-Mem[ INT[Qq]+4]^.Int;--408: IF Del1#0 THEN Del_Del1 ELSE IF Del2#0 THEN Del_Del2 ELSE Del_Del3; IF Del#0 THEN BEGIN Dmax_ABS[Del1]; IF ABS[Del2]>Dmax THEN Dmax_ABS[Del2]; IF ABS[Del3]>Dmax THEN Dmax_ABS[Del3]; WHILE Dmax<134217728 DO BEGIN Dmax_Dmax+Dmax;Del1_Del1+Del1; Del2_Del2+Del2;Del3_Del3+Del3; END ENDLOOP ; END--:408--; IF Del#0 THEN BEGIN IF Del<0 THEN--414: BEGIN Mem[ INT[Pp]+2]^.Int_-Mem[ INT[Pp]+2]^.Int;Mem[ INT[Pp]+6]^.Int_-Mem[ INT[Pp]+6]^.Int; Mem[ INT[Qq]+4]^.Int_-Mem[ INT[Qq]+4]^.Int;Del1_-Del1;Del2_-Del2;Del3_-Del3; DestY_-DestY;Mem[Pp]^.Hh.B1_Mem[Pp]^.Hh.B1+2; END--:414--; T_CrossingPoint[Del1,Del2,Del3];IF T<268435456 THEN--415: BEGIN SplitCubic[Pp,T,DestX,DestY];R_Mem[Pp]^.Hh.Rh; IF INT[Mem[R]^.Hh.B1]>2 THEN Mem[R]^.Hh.B1_Mem[R]^.Hh.B1-2 ELSE Mem[R]^.Hh.B1_ Mem[R]^.Hh.B1+2; IF Mem[ INT[R]+1]^.Int>DestX THEN Mem[ INT[R]+1]^.Int_DestX ELSE IF Mem[ INT[R]+1]^.Int0 THEN Del2_0;T_CrossingPoint[0,-Del2,-Del3]; IF T<268435456 THEN--416:--BEGIN SplitCubic[R,T,DestX,DestY]; S_Mem[R]^.Hh.Rh; IF Mem[ INT[S]+1]^.Int>DestX THEN Mem[ INT[S]+1]^.Int_DestX ELSE IF Mem[ INT[S]+1]^.IntDestY THEN Mem[ INT[R]+2]^.Int_DestY; END--:415--; END ELSE--417: IF ConstantX THEN BEGIN IF Q#P THEN BEGIN RemoveCubic[P]; IF CurSpec#Q THEN GOTO Label22 ELSE BEGIN CurSpec_P; GOTO Label10; END; END; END ELSE IF NOT PascalODD[Mem[Pp]^.Hh.B1] THEN--414: BEGIN Mem[ INT[Pp]+2]^.Int_-Mem[ INT[Pp]+2]^.Int;Mem[ INT[Pp]+6]^.Int_-Mem[ INT[Pp]+6]^.Int; Mem[ INT[Qq]+4]^.Int_-Mem[ INT[Qq]+4]^.Int;Del1_-Del1;Del2_-Del2;Del3_-Del3; DestY_-DestY;Mem[Pp]^.Hh.B1_Mem[Pp]^.Hh.B1+2; END--:414----:417--;Pp_Qq; IF Pp=Q THEN EXIT; ENDLOOP;IF ConstantX THEN--418:--BEGIN Pp_P;DO Qq_Mem[Pp]^.Hh.Rh; IF INT[Mem[Pp]^.Hh.B1]>2 THEN BEGIN Mem[Pp]^.Hh.B1_Mem[Pp]^.Hh.B1+1; Mem[ INT[Pp]+1]^.Int_-Mem[ INT[Pp]+1]^.Int;Mem[ INT[Pp]+5]^.Int_-Mem[ INT[Pp]+5]^.Int; Mem[ INT[Qq]+3]^.Int_-Mem[ INT[Qq]+3]^.Int; END;Pp_Qq; IF Pp=Q THEN EXIT; ENDLOOP; END--:418----:413--; P_Q;EXIT; EXITS Label22 => NULL} ENDLOOP; IF P=CurSpec THEN EXIT; ENDLOOP;EXITS Label10 => NULL}; END;--:406----419:-- END.