-- file: MFPathsImpl2.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, MFParsing; MFPathsImpl2: PROGRAM IMPORTS MFProcArray, MFInteraction, MFMath, MFSymbols, MFPaths, MFParsing EXPORTS MFPaths = PUBLIC BEGIN OPEN PascalBasic, PascalWizardFiles, MFTypes, MFProcArray, MFInteraction, MFMath, MFMemory, MFSymbols, MFPaths, MFParsing; --:299-- SolveChoices: PROCEDURE[P,Q: Halfword,N: Halfword] = BEGIN K:PascalInteger[0..PathSize];R, S, T:Halfword;--286:--Aa, Bb, Cc, Ff, Acc:Fraction; Dd, Ee:Scaled;Lt, Rt:Scaled;--:286-- K_0;S_P; {{WHILE TRUE DO BEGIN T_Mem[S]^.Hh.Rh;IF K=0 THEN--285: SELECT Mem[S]^.Hh.B1 FROM 2 =>IF Mem[T]^.Hh.B0=2 THEN--301: BEGIN Aa_NArg[DeltaX^[0],DeltaY^[0]];NSinCos[Mem[ INT[P]+5]^.Int-Aa]; Ct_NCos;St_NSin;NSinCos[Mem[ INT[Q]+3]^.Int-Aa];Cf_NCos;Sf_-NSin; SetControls[P,Q,0]; GOTO Label10; END--:301-- ELSE--293: BEGIN Vv^[0]_Mem[ INT[S]+5]^.Int-NArg[DeltaX^[0],DeltaY^[0]]; IF ABS[Vv^[0]]>188743680 THEN IF Vv^[0]>0 THEN Vv^[0]_Vv^[0]-377487360 ELSE Vv^[0]_Vv^[0]+377487360;Uu^[0]_0;Ww^[0]_0; END--:293--; 3 =>IF Mem[T]^.Hh.B0=3 THEN--302:--BEGIN Mem[P]^.Hh.B1_1;Mem[Q]^.Hh.B0_1; Lt_ABS[Mem[ INT[Q]+4]^.Int];Rt_ABS[Mem[ INT[P]+6]^.Int]; IF Rt=65536 THEN BEGIN IF DeltaX^[0]>=0 THEN Mem[ INT[P]+5]^.Int_ Mem[ INT[P]+1]^.Int+( (DeltaX^[0]+1)/3) ELSE Mem[ INT[P]+5]^.Int_Mem[ INT[P]+1]^.Int+( (DeltaX^[0]-1)/3); IF DeltaY^[0]>=0 THEN Mem[ INT[P]+6]^.Int_Mem[ INT[P]+2]^.Int+( (DeltaY^[0]+1)/3) ELSE Mem[ INT[P]+6]^.Int_Mem[ INT[P]+2]^.Int+( (DeltaY^[0]-1)/3); END ELSE BEGIN Ff_MakeFraction[65536,3*Rt]; Mem[ INT[P]+5]^.Int_Mem[ INT[P]+1]^.Int+TakeFraction[DeltaX^[0],Ff]; Mem[ INT[P]+6]^.Int_Mem[ INT[P]+2]^.Int+TakeFraction[DeltaY^[0],Ff]; END; IF Lt=65536 THEN BEGIN IF DeltaX^[0]>=0 THEN Mem[ INT[Q]+3]^.Int_ Mem[ INT[Q]+1]^.Int-( (DeltaX^[0]+1)/3) ELSE Mem[ INT[Q]+3]^.Int_Mem[ INT[Q]+1]^.Int-( (DeltaX^[0]-1)/3); IF DeltaY^[0]>=0 THEN Mem[ INT[Q]+4]^.Int_Mem[ INT[Q]+2]^.Int-( (DeltaY^[0]+1)/3) ELSE Mem[ INT[Q]+4]^.Int_Mem[ INT[Q]+2]^.Int-( (DeltaY^[0]-1)/3); END ELSE BEGIN Ff_MakeFraction[65536,3*Lt]; Mem[ INT[Q]+3]^.Int_Mem[ INT[Q]+1]^.Int-TakeFraction[DeltaX^[0],Ff]; Mem[ INT[Q]+4]^.Int_Mem[ INT[Q]+2]^.Int-TakeFraction[DeltaY^[0],Ff]; END; GOTO Label10; END--:302-- ELSE--294:--BEGIN Cc_Mem[ INT[S]+5]^.Int;Lt_ABS[Mem[ INT[T]+4]^.Int]; Rt_ABS[Mem[ INT[S]+6]^.Int]; IF(Rt=65536)AND (Lt=65536) THEN Uu^[0]_MakeFraction[Cc+Cc+65536,Cc+131072 ] ELSE Uu^[0]_CurlRatio[Cc,Rt,Lt];Vv^[0]_-TakeFraction[Psi^[1],Uu^[0]]; Ww^[0]_0; END--:294--;4 =>BEGIN Uu^[0]_0;Vv^[0]_0;Ww^[0]_268435456; END; ENDCASE--:285-- ELSE SELECT Mem[S]^.Hh.B0 FROM 5,4 =>--287:--BEGIN--288: IF ABS[Mem[ INT[R]+6]^.Int]=65536 THEN BEGIN Aa_134217728;Dd_2*Delta^[K]; END ELSE BEGIN Aa_MakeFraction[65536,3*ABS[Mem[ INT[R]+6]^.Int]-65536]; Dd_TakeFraction[Delta^[K],805306368-MakeFraction[65536,ABS[Mem[ INT[R]+6]^. Int]]]; END;IF ABS[Mem[ INT[T]+4]^.Int]=65536 THEN BEGIN Bb_134217728; Ee_2*Delta^[K-1]; END ELSE BEGIN Bb_MakeFraction[65536,3*ABS[Mem[ INT[T]+4]^.Int]-65536]; Ee_TakeFraction[Delta^[K-1],805306368-MakeFraction[65536,ABS[Mem[ INT[T]+4]^. Int]]]; END;Cc_268435456-TakeFraction[Uu^[K-1],Aa]--:288--;--289: Dd_TakeFraction[Dd,Cc];Lt_ABS[Mem[ INT[S]+4]^.Int];Rt_ABS[Mem[ INT[S]+6]^.Int]; IF Lt#Rt THEN IF Lt--295:--BEGIN Cc_Mem[ INT[S]+3]^.Int; Lt_ABS[Mem[ INT[S]+4]^.Int];Rt_ABS[Mem[ INT[R]+6]^.Int]; IF(Rt=65536)AND (Lt=65536) THEN Ff_MakeFraction[Cc+Cc+65536,Cc+131072] ELSE Ff_CurlRatio[Cc,Lt,Rt]; Theta^[N]_-MakeFraction[TakeFraction[Vv^[ INT[N]-1],Ff], 268435456-TakeFraction[Ff,Uu^[ INT[N]-1]]]; GOTO Label40; END--:295--;2 =>--292: BEGIN Theta^[N]_Mem[ INT[S]+3]^.Int-NArg[DeltaX^[ INT[N]-1],DeltaY^[ INT[N]-1]]; IF ABS[Theta^[N]]>188743680 THEN IF Theta^[N]>0 THEN Theta^[N]_Theta^[N] -377487360 ELSE Theta^[N]_Theta^[N]+377487360; GOTO Label40; END--:292--; ENDCASE;R_S; S_T;K_K+1; END ENDLOOP ;EXITS Label40 => NULL};--297: FOR i:INT DECREASING IN [ INT[0 ].. INT[ INT[N]-1 ]] DO K _ i; Theta^[K]_Vv^[K]-TakeFraction[Theta^[K+1],Uu^[K]] ENDLOOP; S_P;K_0;DO T_Mem[S]^.Hh.Rh;NSinCos[Theta^[K]];St_NSin; Ct_NCos;NSinCos[-Psi^[K+1]-Theta^[K+1]];Sf_NSin;Cf_NCos; SetControls[S,T,K];K_K+1;S_T; IF K=N--:297-- THEN EXIT; ENDLOOP;EXITS Label10 => NULL}; END;--:284 MakeChoices: PROCEDURE[Knots: Halfword] = BEGIN H:Halfword; P, Q:Halfword;--280:--K, N:PascalInteger[0..PathSize];S, T:Halfword;Delx, Dely:Scaled; Sine, Cosine:Fraction;--:280-- BEGIN IF ArithError THEN ClearArith[]; END;IF Internal^[4]>0 THEN PrintPath[Knots,394,TRUE];--271:--P_Knots; DO Q_Mem[P]^.Hh.Rh; IF Mem[ INT[P]+1]^.Int=Mem[ INT[Q]+1]^.Int THEN IF Mem[ INT[P]+2]^.Int=Mem[ INT[Q]+2]^.Int THEN IF INT[Mem[P]^.Hh.B1]>1 THEN BEGIN Mem[P]^.Hh.B1_1; IF Mem[P]^.Hh.B0=4 THEN BEGIN Mem[P]^.Hh.B0_3;Mem[ INT[P]+3]^.Int_65536; END; Mem[Q]^.Hh.B0_1;IF Mem[Q]^.Hh.B1=4 THEN BEGIN Mem[Q]^.Hh.B1_3; Mem[ INT[Q]+5]^.Int_65536; END;Mem[ INT[P]+5]^.Int_Mem[ INT[P]+1]^.Int; Mem[ INT[Q]+3]^.Int_Mem[ INT[P]+1]^.Int;Mem[ INT[P]+6]^.Int_Mem[ INT[P]+2]^.Int; Mem[ INT[Q]+4]^.Int_Mem[ INT[P]+2]^.Int; END;P_Q; IF P=Knots--:271-- THEN EXIT; ENDLOOP;--272:--H_Knots; {WHILE TRUE DO BEGIN IF Mem[H]^.Hh.B0#4 THEN GOTO Label30; IF Mem[H]^.Hh.B1#4 THEN GOTO Label30;H_Mem[H]^.Hh.Rh; IF H=Knots THEN BEGIN Mem[H]^.Hh.B0_5; GOTO Label30; END; END ENDLOOP ;EXITS Label30 => NULL};--:272--P_H; DO--273:--Q_Mem[P]^.Hh.Rh; IF INT[Mem[P]^.Hh.B1]>=2 THEN BEGIN WHILE(Mem[Q]^.Hh.B0=4)AND (Mem[Q]^.Hh.B1=4)DO Q_Mem[Q]^.Hh.Rh ENDLOOP ;--278:----281:--K_0;S_P;N_PathSize; DO T_Mem[S]^.Hh.Rh;DeltaX^[K]_Mem[ INT[T]+1]^.Int-Mem[ INT[S]+1]^.Int; DeltaY^[K]_Mem[ INT[T]+2]^.Int-Mem[ INT[S]+2]^.Int; Delta^[K]_PythAdd[DeltaX^[K],DeltaY^[K]]; IF INT[K]>0 THEN BEGIN Sine_MakeFraction[DeltaY^[K-1],Delta^[K-1]]; Cosine_MakeFraction[DeltaX^[K-1],Delta^[K-1]]; Psi^[K]_NArg[TakeFraction[DeltaX^[K],Cosine]+TakeFraction[DeltaY^[K], Sine],TakeFraction[DeltaY^[K],Cosine]-TakeFraction[DeltaX^[K],Sine]]; END;K_K+1;S_T;IF K=PathSize THEN Overflow[399,PathSize]; IF S=Q THEN N_K; IF( INT[K]>=N)AND (Mem[S]^.Hh.B0#5) THEN EXIT; ENDLOOP; IF K=N THEN Psi^[N]_0 ELSE Psi^[K]_Psi^[1]--:281--;--282: IF Mem[Q]^.Hh.B0=4 THEN BEGIN Delx_Mem[ INT[Q]+5]^.Int-Mem[ INT[Q]+1]^.Int; Dely_Mem[ INT[Q]+6]^.Int-Mem[ INT[Q]+2]^.Int; IF(Delx=0)AND (Dely=0) THEN BEGIN Mem[Q]^.Hh.B0_3;Mem[ INT[Q]+3]^.Int_65536; END ELSE BEGIN Mem[Q]^.Hh.B0_2;Mem[ INT[Q]+3]^.Int_NArg[Delx,Dely]; END; END; IF(Mem[P]^.Hh.B1=4)AND (Mem[P]^.Hh.B0=1) THEN BEGIN Delx_Mem[ INT[P]+1]^.Int-Mem[ INT[P ]+3]^.Int;Dely_Mem[ INT[P]+2]^.Int-Mem[ INT[P]+4]^.Int; IF(Delx=0)AND (Dely=0) THEN BEGIN Mem[P]^.Hh.B1_3;Mem[ INT[P]+5]^.Int_65536; END ELSE BEGIN Mem[P]^.Hh.B1_2;Mem[ INT[P]+5]^.Int_NArg[Delx,Dely]; END; END--:282--;SolveChoices[P,Q,N]--:278--; END;P_Q--:273--; IF P=H THEN EXIT; ENDLOOP; IF Internal^[4]>0 THEN PrintPath[Knots,395,TRUE]; IF ArithError THEN--270:--BEGIN BEGIN IF Interaction=3 THEN NULL; PrintNl[133];Print[396]; END;BEGIN HelpPtr_2;HelpLine^[1]_397; HelpLine^[0]_398; END;PutGetError[];ArithError_FALSE; END--:270--; END; END.