-- file: MFEnvelopesImpl2.mesa -- Pascal-to-Mesa translator output, translated at October 31, 1985 4:28:01 pm PST DIRECTORY PascalBasic, PascalWizardFiles, MFTypes, MFProcArray, MFMath, MFOctants, MFEnvelopes; MFEnvelopesImpl2: PROGRAM IMPORTS MFProcArray, MFMath, MFOctants EXPORTS MFEnvelopes = PUBLIC BEGIN OPEN PascalBasic, PascalWizardFiles, MFTypes, MFProcArray, MFMath, MFOctants, MFEnvelopes; SplitForOffset: PROCEDURE[P: Halfword,T: Fraction] = BEGIN Q:Halfword; R:Halfword; Q_Mem[P]^.Hh.Rh; SplitCubic[P,T,Mem[ INT[Q]+1]^.Int,Mem[ INT[Q]+2]^.Int];R_Mem[P]^.Hh.Rh; IF Mem[ INT[R]+2]^.IntMem[ INT[Q]+2]^.Int THEN Mem[ INT[R]+2]^.Int_Mem[ INT[Q]+2]^.Int; IF Mem[ INT[R]+1]^.IntMem[ INT[Q]+1]^.Int THEN Mem[ INT[R]+1]^.Int_Mem[ INT[Q]+1]^.Int; END;--:493----497: FinOffsetPrep: PROCEDURE[P: Halfword,K: Halfword,W: Halfword, X0,X1,X2,Y0,Y1,Y2: PascalInteger,Rising: PascalBoolean,N: PascalInteger] = BEGIN Q, Ww:Halfword;Du, Dv:Scaled;T0, T1, T2:PascalInteger;T:Fraction;S:Fraction; V:PascalInteger; {WHILE TRUE DO BEGIN Q_Mem[P]^.Hh.Rh;Mem[P]^.Hh.B1_K; IF Rising THEN IF K=N THEN GOTO Label10 ELSE Ww_Mem[W]^.Hh.Rh ELSE IF K=1 THEN GOTO Label10 ELSE Ww_Mem[W]^.Hh.Lh;--498:--Du_Mem[ INT[Ww]+1]^.Int-Mem[ INT[W]+1]^.Int; Dv_Mem[ INT[Ww]+2]^.Int-Mem[ INT[W]+2]^.Int; IF ABS[Du]>=ABS[Dv] THEN BEGIN S_MakeFraction[Dv,Du]; T0_TakeFraction[X0,S]-Y0;T1_TakeFraction[X1,S]-Y1; T2_TakeFraction[X2,S]-Y2; END ELSE BEGIN S_MakeFraction[Du,Dv]; T0_X0-TakeFraction[Y0,S];T1_X1-TakeFraction[Y1,S]; T2_X2-TakeFraction[Y2,S]; END--:498--;T_CrossingPoint[T0,T1,T2]; IF T>=268435456 THEN GOTO Label10;--499:--BEGIN SplitForOffset[P,T]; Mem[P]^.Hh.B1_K;P_Mem[P]^.Hh.Rh;V_X0-TakeFraction[X0-X1,T]; X1_X1-TakeFraction[X1-X2,T];X0_V-TakeFraction[V-X1,T]; V_Y0-TakeFraction[Y0-Y1,T];Y1_Y1-TakeFraction[Y1-Y2,T]; Y0_V-TakeFraction[V-Y1,T];T1_T1-TakeFraction[T1-T2,T]; IF T1>0 THEN T1_0;T_CrossingPoint[0,-T1,-T2]; IF T<268435456 THEN BEGIN SplitForOffset[P,T]; Mem[Mem[P]^.Hh.Rh]^.Hh.B1_K;V_X1-TakeFraction[X1-X2,T]; X1_X0-TakeFraction[X0-X1,T];X2_X1-TakeFraction[X1-V,T]; V_Y1-TakeFraction[Y1-Y2,T];Y1_Y0-TakeFraction[Y0-Y1,T]; Y2_Y1-TakeFraction[Y1-V,T]; END; END--:499--; IF Rising THEN K_ INT[K]+1 ELSE K_ INT[K]-1;W_Ww; END ENDLOOP ;EXITS Label10 => NULL}; END;--:497 END.