-- file: MFTimeImpl1.mesa -- Pascal-to-Mesa translator output, translated at October 31, 1985 4:28:02 pm PST DIRECTORY PascalBasic, PascalWizardFiles, MFTypes, MFProcArray, MFMath, MFOctants, MFTime; MFTimeImpl1: PROGRAM IMPORTS PascalBasic, MFProcArray, MFMath, MFOctants, MFTime EXPORTS MFTime = PUBLIC BEGIN OPEN PascalBasic, PascalWizardFiles, MFTypes, MFProcArray, MFMath, MFOctants, MFTime; --:507----552: TolStep: PascalInteger[0..6]; --:552----555:-- CurT: PascalInteger; CurTt: PascalInteger; TimeToGo: PascalInteger; --:555 --557:-- Delx: PascalInteger; Dely: PascalInteger; Tol: PascalInteger; Uv: PascalInteger[0..BistackSize]; Xy: PascalInteger[0..BistackSize]; ThreeL: PascalInteger; --:527----539:-- FindDirectionTime: PROCEDURE[X,Y: Scaled,H: Halfword] RETURNS[FindDirectionTimeResult: Scaled] = BEGIN Max:Scaled;P, Q:Halfword;N:Scaled;Tt:Scaled;--542: X1, X2, X3, Y1, Y2, Y3:Scaled;Theta, Phi:Angle;T:Fraction;--:542----540: {IF ABS[X]0 THEN Y_268435456 ELSE Y_-268435456; END ELSE IF X=0 THEN BEGIN FindDirectionTimeResult_0; GOTO Label10; END ELSE BEGIN Y_MakeFraction[Y,ABS[X]]; IF X>0 THEN X_268435456 ELSE X_-268435456; END--:540--;N_0;P_H; {{WHILE TRUE DO BEGIN IF Mem[P]^.Hh.B1=0 THEN GOTO Label45;Q_Mem[P]^.Hh.Rh; --541:--Tt_0;--543:--X1_Mem[ INT[P]+5]^.Int-Mem[ INT[P]+1]^.Int; X2_Mem[ INT[Q]+3]^.Int-Mem[ INT[P]+5]^.Int;X3_Mem[ INT[Q]+1]^.Int-Mem[ INT[Q]+3]^.Int; Y1_Mem[ INT[P]+6]^.Int-Mem[ INT[P]+2]^.Int;Y2_Mem[ INT[Q]+4]^.Int-Mem[ INT[P]+6]^.Int; Y3_Mem[ INT[Q]+2]^.Int-Mem[ INT[Q]+4]^.Int;Max_ABS[X1]; IF ABS[X2]>Max THEN Max_ABS[X2];IF ABS[X3]>Max THEN Max_ABS[X3]; IF ABS[Y1]>Max THEN Max_ABS[Y1];IF ABS[Y2]>Max THEN Max_ABS[Y2]; IF ABS[Y3]>Max THEN Max_ABS[Y3];IF Max=0 THEN GOTO Label40; WHILE Max<134217728 DO BEGIN Max_Max+Max;X1_X1+X1;X2_X2+X2;X3_X3+X3; Y1_Y1+Y1;Y2_Y2+Y2;Y3_Y3+Y3; END ENDLOOP ;T_X1; X1_TakeFraction[X1,X]+TakeFraction[Y1,Y]; Y1_TakeFraction[Y1,X]-TakeFraction[T,Y];T_X2; X2_TakeFraction[X2,X]+TakeFraction[Y2,Y]; Y2_TakeFraction[Y2,X]-TakeFraction[T,Y];T_X3; X3_TakeFraction[X3,X]+TakeFraction[Y3,Y]; Y3_TakeFraction[Y3,X]-TakeFraction[T,Y]--:543--; IF Y1=0 THEN IF X1>=0 THEN GOTO Label40;IF N>0 THEN BEGIN--544: Theta_NArg[X1,Y1]; IF Theta>=0 THEN IF Phi<=0 THEN IF Phi>=Theta-188743680 THEN GOTO Label40; IF Theta<=0 THEN IF Phi>=0 THEN IF Phi<=Theta+188743680 THEN GOTO Label40--: -- 544--;IF P=H THEN GOTO Label45; END;IF(X3#0)OR (Y3#0) THEN Phi_NArg[X3,Y3]; --546:--{IF X1<0 THEN IF X2<0 THEN IF X3<0 THEN GOTO Label30; IF AbVsCd[Y1,Y3,Y2,Y2]=0 THEN--548: BEGIN IF AbVsCd[Y1,Y2,0,0]<0 THEN BEGIN T_MakeFraction[Y1,Y1-Y2]; X1_X1-TakeFraction[X1-X2,T];X2_X2-TakeFraction[X2-X3,T]; IF X1-TakeFraction[X1-X2,T]>=0 THEN BEGIN Tt_ PascalDIVPower2[(T+2048),12]; GOTO Label40; END; END ELSE IF Y3=0 THEN IF Y1=0 THEN--549: BEGIN T_CrossingPoint[-X1,-X2,-X3]; IF T<=268435456 THEN BEGIN Tt_ PascalDIVPower2[(T+2048),12]; GOTO Label40; END; IF AbVsCd[X1,X3,X2,X2]<=0 THEN BEGIN T_MakeFraction[X1,X1-X2]; BEGIN Tt_ PascalDIVPower2[(T+2048),12]; GOTO Label40; END; END; END--:549 ELSE IF X3>=0 THEN BEGIN Tt_65536; GOTO Label40; END; GOTO Label30; END--:548--; IF Y1<=0 THEN IF Y1<0 THEN BEGIN Y1_-Y1;Y2_-Y2;Y3_-Y3; END ELSE IF Y2>0 THEN BEGIN Y2_-Y2;Y3_-Y3; END;--547: T_CrossingPoint[Y1,Y2,Y3];IF T>268435456 THEN GOTO Label30; Y2_Y2-TakeFraction[Y2-Y3,T];X1_X1-TakeFraction[X1-X2,T]; X2_X2-TakeFraction[X2-X3,T];X1_X1-TakeFraction[X1-X2,T]; IF X1>=0 THEN BEGIN Tt_ PascalDIVPower2[(T+2048),12]; GOTO Label40; END;IF Y2>0 THEN Y2_0; Tt_T;T_CrossingPoint[0,-Y2,-Y3];IF T>268435456 THEN GOTO Label30; X1_X1-TakeFraction[X1-X2,T];X2_X2-TakeFraction[X2-X3,T]; IF X1-TakeFraction[X1-X2,T]>=0 THEN BEGIN T_Tt-TakeFraction[Tt -268435456,T];BEGIN Tt_ PascalDIVPower2[(T+2048),12]; GOTO Label40; END; END--:547--;EXITS Label30 => NULL};--:546 --:541--P_Q;N_N+65536; END ENDLOOP ;EXITS Label45 => NULL};FindDirectionTimeResult_-65536; GOTO Label10; EXITS Label40 => NULL};FindDirectionTimeResult_N+Tt;EXITS Label10 => NULL}; END;--:539----556: PathIntersection: PROCEDURE[H,Hh: Halfword] = BEGIN P, Pp:Halfword; N, Nn:PascalInteger;--563: IF Mem[H]^.Hh.B1=0 THEN BEGIN Mem[ INT[H]+5]^.Int_Mem[ INT[H]+1]^.Int; Mem[ INT[H]+3]^.Int_Mem[ INT[H]+1]^.Int;Mem[ INT[H]+6]^.Int_Mem[ INT[H]+2]^.Int; Mem[ INT[H]+4]^.Int_Mem[ INT[H]+2]^.Int;Mem[H]^.Hh.B1_1; END; IF Mem[Hh]^.Hh.B1=0 THEN BEGIN Mem[ INT[Hh]+5]^.Int_Mem[ INT[Hh]+1]^.Int; Mem[ INT[Hh]+3]^.Int_Mem[ INT[Hh]+1]^.Int;Mem[ INT[Hh]+6]^.Int_Mem[ INT[Hh]+2]^.Int; Mem[ INT[Hh]+4]^.Int_Mem[ INT[Hh]+2]^.Int;Mem[Hh]^.Hh.B1_1; END;--:563--TolStep_0; {DO N_-65536;P_H;DO IF Mem[P]^.Hh.B1#0 THEN BEGIN Nn_-65536; Pp_Hh;DO IF Mem[Pp]^.Hh.B1#0 THEN BEGIN CubicIntersection[P,Pp]; IF CurT>0 THEN BEGIN CurT_CurT+N;CurTt_CurTt+Nn; GOTO Label10; END; END; Nn_Nn+65536;Pp_Mem[Pp]^.Hh.Rh; IF Pp=Hh THEN EXIT; ENDLOOP; END;N_N+65536; P_Mem[P]^.Hh.Rh; IF P=H THEN EXIT; ENDLOOP;TolStep_TolStep+3; IF INT[TolStep]>3 THEN EXIT; ENDLOOP; CurT_-65536;CurTt_-65536;EXITS Label10 => NULL}; END;--:562----564: END.