-- file: MFOctantsImpl4.mesa -- Pascal-to-Mesa translator output, translated at October 31, 1985 4:28:01 pm PST DIRECTORY PascalBasic, PascalWizardFiles, MFTypes, MFProcArray, MFInteraction, MFMath, MFMemory, MFSymbols, MFPaths, MFOctants, MFParsing, MFContours; MFOctantsImpl4: PROGRAM IMPORTS PascalBasic, MFProcArray, MFInteraction, MFMath, MFMemory, MFSymbols, MFPaths, MFOctants, MFParsing, MFContours EXPORTS MFOctants = PUBLIC BEGIN OPEN PascalBasic, PascalWizardFiles, MFTypes, MFProcArray, MFInteraction, MFMath, MFMemory, MFSymbols, MFPaths, MFOctants, MFParsing, MFContours; MakeSpec: PROCEDURE[H: Halfword,SafetyMargin: Scaled, Tracing: PascalInteger] RETURNS[MakeSpecResult: Halfword] = BEGIN P, Q, R, S:Halfword;K:PascalInteger; Chopped:PascalBoolean;--453:--O1, O2:SmallNumber;Clockwise:PascalBoolean; Dx1, Dy1, Dx2, Dy2:PascalInteger;Dmax, Del:PascalInteger;--:453-- MSBit: PROCEDURE = BEGIN--450:-- TurningNumber_0;P_CurSpec;Q_Mem[P]^.Hh.Rh; DO R_Mem[Q]^.Hh.Rh;IF(Mem[P]^.Hh.B1#Mem[Q]^.Hh.B1)OR (Q=R) THEN--452: BEGIN {ENABLE Error30 => GOTO Label30;NewBoundary[P,Mem[P]^.Hh.B1];S_Mem[P]^.Hh.Rh; O1_OctantNumber^[Mem[P]^.Hh.B1];O2_OctantNumber^[Mem[Q]^.Hh.B1]; SELECT O2-O1 FROM 1,-7,7,-1 => ERROR Error30;2,-6 =>Clockwise_FALSE; 3,-5,4,-4,5,-3 =>--454:--BEGIN--457:--Dx1_Mem[ INT[S]+1]^.Int-Mem[ INT[S]+3]^.Int; Dy1_Mem[ INT[S]+2]^.Int-Mem[ INT[S]+4]^.Int; IF Dx1=0 THEN IF Dy1=0 THEN BEGIN Dx1_Mem[ INT[S]+1]^.Int-Mem[ INT[P]+5]^.Int; Dy1_Mem[ INT[S]+2]^.Int-Mem[ INT[P]+6]^.Int; IF Dx1=0 THEN IF Dy1=0 THEN BEGIN Dx1_Mem[ INT[S]+1]^.Int-Mem[ INT[P]+1]^.Int; Dy1_Mem[ INT[S]+2]^.Int-Mem[ INT[P]+2]^.Int; END; END;Dmax_ABS[Dx1]; IF ABS[Dy1]>Dmax THEN Dmax_ABS[Dy1]; WHILE Dmax<268435456 DO BEGIN Dmax_Dmax+Dmax;Dx1_Dx1+Dx1;Dy1_Dy1+Dy1; END ENDLOOP ;Dx2_Mem[ INT[Q]+5]^.Int-Mem[ INT[Q]+1]^.Int;Dy2_Mem[ INT[Q]+6]^.Int-Mem[ INT[Q]+2]^.Int; IF Dx2=0 THEN IF Dy2=0 THEN BEGIN Dx2_Mem[ INT[R]+3]^.Int-Mem[ INT[Q]+1]^.Int; Dy2_Mem[ INT[R]+4]^.Int-Mem[ INT[Q]+2]^.Int; IF Dx2=0 THEN IF Dy2=0 THEN BEGIN IF Mem[R]^.Hh.B1=0 THEN BEGIN CurX_ Mem[ INT[R]+1]^.Int;CurY_Mem[ INT[R]+2]^.Int; END ELSE BEGIN Unskew[Mem[ INT[R]+1]^.Int,Mem[ INT[R]+2]^.Int,Mem[R]^.Hh.B1]; Skew[CurX,CurY,Mem[Q]^.Hh.B1]; END;Dx2_CurX-Mem[ INT[Q]+1]^.Int; Dy2_CurY-Mem[ INT[Q]+2]^.Int; END; END;Dmax_ABS[Dx2]; IF ABS[Dy2]>Dmax THEN Dmax_ABS[Dy2]; WHILE Dmax<268435456 DO BEGIN Dmax_Dmax+Dmax;Dx2_Dx2+Dx2;Dy2_Dy2+Dy2; END--:457-- ENDLOOP ;Unskew[Dx1,Dy1,Mem[P]^.Hh.B1];Del_PythAdd[CurX,CurY]; Dx1_MakeFraction[CurX,Del];Dy1_MakeFraction[CurY,Del]; Unskew[Dx2,Dy2,Mem[Q]^.Hh.B1];Del_PythAdd[CurX,CurY]; Dx2_MakeFraction[CurX,Del];Dy2_MakeFraction[CurY,Del]; Del_TakeFraction[Dx1,Dy2]-TakeFraction[Dx2,Dy1]; IF Del>4684844 THEN Clockwise_FALSE ELSE IF Del<-4684844 THEN Clockwise _TRUE ELSE Clockwise_RevTurns; END--:454--;6,-2 =>Clockwise_TRUE; 0 =>Clockwise_RevTurns; ENDCASE;--458: WHILE TRUE DO BEGIN IF Clockwise THEN IF O1=1 THEN O1_8 ELSE O1_O1-1 ELSE IF O1=8 THEN O1_1 ELSE O1_O1+1;IF O1=O2 THEN ERROR Error30; NewBoundary[S,OctantCode^[O1]];S_Mem[S]^.Hh.Rh; Mem[ INT[S]+3]^.Int_Mem[ INT[S]+5]^.Int; END--:458-- ENDLOOP ; EXITS Label30 => NULL};IF Q=R THEN BEGIN Q_Mem[Q]^.Hh.Rh;R_Q;P_S;Mem[S]^.Hh.Rh_Q; Mem[ INT[Q]+3]^.Int_Mem[ INT[Q]+5]^.Int;Mem[Q]^.Hh.B0_0;FreeNode[CurSpec,7]; CurSpec_Q; END;--459:--P_Mem[P]^.Hh.Rh;DO S_Mem[P]^.Hh.Rh; O1_OctantNumber^[Mem[ INT[P]+5]^.Int];O2_OctantNumber^[Mem[ INT[S]+3]^.Int]; IF ABS[O1-O2]=1 THEN BEGIN IF INT[O2]0 THEN PrintPath[CurSpec,427,TRUE]; MaxAllowed_268402687-SafetyMargin;--404:--P_CurSpec;K_1; Chopped_FALSE; DO IF ABS[Mem[ INT[P]+3]^.Int]>MaxAllowed THEN BEGIN Chopped_TRUE; IF Mem[ INT[P]+3]^.Int>0 THEN Mem[ INT[P]+3]^.Int_MaxAllowed ELSE Mem[ INT[P]+3]^.Int_ -MaxAllowed; END; IF ABS[Mem[ INT[P]+4]^.Int]>MaxAllowed THEN BEGIN Chopped_TRUE; IF Mem[ INT[P]+4]^.Int>0 THEN Mem[ INT[P]+4]^.Int_MaxAllowed ELSE Mem[ INT[P]+4]^.Int_ -MaxAllowed; END; IF ABS[Mem[ INT[P]+1]^.Int]>MaxAllowed THEN BEGIN Chopped_TRUE; IF Mem[ INT[P]+1]^.Int>0 THEN Mem[ INT[P]+1]^.Int_MaxAllowed ELSE Mem[ INT[P]+1]^.Int_ -MaxAllowed; END; IF ABS[Mem[ INT[P]+2]^.Int]>MaxAllowed THEN BEGIN Chopped_TRUE; IF Mem[ INT[P]+2]^.Int>0 THEN Mem[ INT[P]+2]^.Int_MaxAllowed ELSE Mem[ INT[P]+2]^.Int_ -MaxAllowed; END; IF ABS[Mem[ INT[P]+5]^.Int]>MaxAllowed THEN BEGIN Chopped_TRUE; IF Mem[ INT[P]+5]^.Int>0 THEN Mem[ INT[P]+5]^.Int_MaxAllowed ELSE Mem[ INT[P]+5]^.Int_ -MaxAllowed; END; IF ABS[Mem[ INT[P]+6]^.Int]>MaxAllowed THEN BEGIN Chopped_TRUE; IF Mem[ INT[P]+6]^.Int>0 THEN Mem[ INT[P]+6]^.Int_MaxAllowed ELSE Mem[ INT[P]+6]^.Int_ -MaxAllowed; END;P_Mem[P]^.Hh.Rh;Mem[P]^.Hh.B0_K; IF K<255 THEN K_K+1 ELSE K_1; IF P=CurSpec THEN EXIT; ENDLOOP; IF Chopped THEN BEGIN BEGIN IF Interaction=3 THEN NULL;PrintNl[133]; Print[431]; END;BEGIN HelpPtr_4;HelpLine^[3]_432;HelpLine^[2]_433; HelpLine^[1]_434;HelpLine^[0]_435; END;PutGetError[]; END--:404--; QuadrantSubdivide[];IF Internal^[36]>0 THEN XyRound[];OctantSubdivide[]; IF Internal^[36]>65536 THEN DiagRound[];--447:--P_CurSpec; DO DO {--Label22:--Q_Mem[P]^.Hh.Rh; IF P#Q THEN BEGIN IF Mem[ INT[P]+1]^.Int=Mem[ INT[P]+5]^.Int THEN IF Mem[ INT[P]+2]^.Int=Mem [ INT[P]+6]^.Int THEN IF Mem[ INT[P]+1]^.Int=Mem[ INT[Q]+3]^.Int THEN IF Mem[ INT[P]+2]^.Int=Mem[ INT[Q]+4 ]^.Int THEN BEGIN Unskew[Mem[ INT[Q]+1]^.Int,Mem[ INT[Q]+2]^.Int,Mem[Q]^.Hh.B1]; Skew[CurX,CurY,Mem[P]^.Hh.B1]; IF Mem[ INT[P]+1]^.Int=CurX THEN IF Mem[ INT[P]+2]^.Int=CurY THEN BEGIN RemoveCubic [P];IF Q#CurSpec THEN GOTO Label22;CurSpec_P;Q_P; END; END; END;P_Q; EXIT; EXITS Label22 => NULL} ENDLOOP; IF P=CurSpec THEN EXIT; ENDLOOP;--:447--MSBit[]; WHILE Mem[CurSpec]^.Hh.B0#0 DO CurSpec_Mem[CurSpec]^.Hh.Rh ENDLOOP ; IF Tracing>0 THEN IF Internal^[36]<=0 THEN PrintSpec[428] ELSE IF Internal^[36]>65536 THEN PrintSpec[429] ELSE PrintSpec[430]; MakeSpecResult_CurSpec; END;--:402----463:-- END.