-- 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]↑.Int<Mem[ INT[P]+2]↑.Int THEN Mem[ INT[R]+2]↑.Int←Mem[ INT[P]+2]↑.Int ELSE IF Mem [ INT[R]+2]↑.Int>Mem[ INT[Q]+2]↑.Int THEN Mem[ INT[R]+2]↑.Int←Mem[ INT[Q]+2]↑.Int; IF Mem[ INT[R]+1]↑.Int<Mem[ INT[P]+1]↑.Int THEN Mem[ INT[R]+1]↑.Int←Mem[ INT[P]+1]↑.Int ELSE IF Mem [ INT[R]+1]↑.Int>Mem[ 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.