-- file: MFOctantsImpl1.mesa -- Pascal-to-Mesa translator output, translated at October 31, 1985 4:28:01 pm PST DIRECTORY PascalBasic, PascalWizardFiles, MFTypes, MFProcArray, MFInteraction, MFMath, MFMemory, MFOctants; MFOctantsImpl1: PROGRAM IMPORTS PascalBasic, MFProcArray, MFInteraction, MFMath, MFMemory EXPORTS MFOctants = PUBLIC BEGIN OPEN PascalBasic, PascalWizardFiles, MFTypes, MFProcArray, MFInteraction, MFMath, MFMemory, MFOctants; --:379----389:-- CurX: Scaled; CurY: Scaled; --:389----395:--OctantDir: LONG POINTER TO ARRAY PascalInteger[1..8] OF StrNumber _ PascalStaticZone.NEW[ARRAY PascalInteger[1..8] OF StrNumber]; --:395----403: CurSpec: Halfword; TurningNumber: PascalInteger; CurPen: Halfword; CurPathType: PascalInteger[0..2]; MaxAllowed: Scaled; --:403----427: Before: LONG POINTER TO ARRAY PascalInteger[0..300] OF Scaled _ PascalStaticZone.NEW[ARRAY PascalInteger[0..300] OF Scaled]; After: LONG POINTER TO ARRAY PascalInteger[0..300] OF Scaled _ PascalStaticZone.NEW[ARRAY PascalInteger[0..300] OF Scaled]; NodeToRound: LONG POINTER TO ARRAY PascalInteger[0..300] OF Halfword _ PascalStaticZone.NEW[ARRAY PascalInteger[0..300] OF Halfword]; CurRoundingPtr: PascalInteger[0..MaxWiggle]; MaxRoundingPtr: PascalInteger[0..MaxWiggle]; --:427 --430:-- CurGran: Scaled; --:430----448:--OctantNumber: LONG POINTER TO ARRAY PascalInteger[1..8] OF PascalInteger[1..8] _ PascalStaticZone.NEW[ARRAY PascalInteger[1..8] OF PascalInteger[1..8]]; OctantCode: LONG POINTER TO ARRAY PascalInteger[1..8] OF PascalInteger[1..8] _ PascalStaticZone.NEW[ARRAY PascalInteger[1..8] OF PascalInteger[1..8]]; --:448----455:-- RevTurns: PascalBoolean; Unskew: PROCEDURE[X,Y: Scaled,Octant: SmallNumber] = BEGIN SELECT Octant FROM 1 =>BEGIN CurX_X+Y;CurY_Y; END;5 =>BEGIN CurX_Y; CurY_X+Y; END;6 =>BEGIN CurX_-Y;CurY_X+Y; END;2 =>BEGIN CurX_-X-Y; CurY_Y; END;4 =>BEGIN CurX_-X-Y;CurY_-Y; END;8 =>BEGIN CurX_-Y; CurY_-X-Y; END;7 =>BEGIN CurX_Y;CurY_-X-Y; END;3 =>BEGIN CurX_X+Y; CurY_-Y; END; ENDCASE; END;--:388----473:-- Abnegate: PROCEDURE[X,Y: Scaled,OctantBefore,OctantAfter: SmallNumber] = BEGIN IF PascalODD[OctantBefore]=PascalODD[OctantAfter] THEN CurX_X ELSE CurX_ -X;IF( INT[OctantBefore]>2)=( INT[OctantAfter]>2) THEN CurY_Y ELSE CurY_-Y; END; --:390----391:-- CrossingPoint: PROCEDURE[A,B,C: PascalInteger] RETURNS[CrossingPointResult: Fraction] = BEGIN D:PascalInteger;X, Xx, X0, X1, X2:PascalInteger; {IF A<0 THEN BEGIN CrossingPointResult_0; GOTO Label10; END; IF C>=0 THEN BEGIN IF B>=0 THEN IF C>0 THEN BEGIN CrossingPointResult_ 268435457; GOTO Label10; END ELSE IF(A=0)AND (B=0) THEN BEGIN CrossingPointResult_268435457; GOTO Label10; END ELSE BEGIN CrossingPointResult_268435456; GOTO Label10; END; IF A=0 THEN BEGIN CrossingPointResult_0; GOTO Label10; END; END ELSE IF A=0 THEN IF B<=0 THEN BEGIN CrossingPointResult_0; GOTO Label10; END; --392:--D_1;X0_A;X1_A-B;X2_B-C;DO X_ PascalDIVPower2[(X1+X2),1]; IF X1-X0>X0 THEN BEGIN X2_X;X0_X0+X0;D_D+D; END ELSE BEGIN Xx_X1+X-X0;IF Xx>X0 THEN BEGIN X2_X;X0_X0+X0;D_D+D; END ELSE BEGIN X0_X0-Xx; IF X<=X0 THEN IF X+X2<=X0 THEN BEGIN CrossingPointResult_268435457; GOTO Label10; END;X1_X;D_D+D+1; END; END; IF D>=268435456 THEN EXIT; ENDLOOP; CrossingPointResult_D-268435456--:392--;EXITS Label10 => NULL}; END;--:391----394: PrintSpec: PROCEDURE[S: StrNumber] = BEGIN P, Q:Halfword; Octant:SmallNumber; PrintDiagnostic[412,S,TRUE];P_CurSpec; Octant_Mem[ INT[P]+3]^.Int;PrintLn[]; Unskew[Mem[ INT[CurSpec]+1]^.Int,Mem[ INT[CurSpec]+2]^.Int,Octant]; PrintTwo[CurX,CurY];Print[413]; {WHILE TRUE DO BEGIN Print[OctantDir^[Octant]];PrintChar[39]; {WHILE TRUE DO BEGIN Q_Mem[P]^.Hh.Rh;IF Mem[P]^.Hh.B1=0 THEN GOTO Label45; --397:--BEGIN PrintNl[424];Unskew[Mem[ INT[P]+5]^.Int,Mem[ INT[P]+6]^.Int,Octant]; PrintTwo[CurX,CurY];Print[391]; Unskew[Mem[ INT[Q]+3]^.Int,Mem[ INT[Q]+4]^.Int,Octant];PrintTwo[CurX,CurY]; PrintNl[388];Unskew[Mem[ INT[Q]+1]^.Int,Mem[ INT[Q]+2]^.Int,Octant]; PrintTwo[CurX,CurY];Print[425];PrintInt[Mem[Q]^.Hh.B0-1]; END--:397--; P_Q; END ENDLOOP ;EXITS Label45 => NULL};IF Q=CurSpec THEN GOTO Label30;P_Q;Octant_Mem[ INT[P]+3]^.Int; PrintNl[414]; END ENDLOOP ;EXITS Label30 => NULL};PrintNl[415];EndDiagnostic[TRUE]; END;--:394----398: PrintStrange: PROCEDURE[S: StrNumber] = BEGIN P:Halfword;F:Halfword; Q:Halfword;T:PascalInteger; IF Interaction=3 THEN NULL;PrintNl[62];--399: P_CurSpec;T_256;DO P_Mem[P]^.Hh.Rh; IF Mem[P]^.Hh.B0#0 THEN BEGIN IF Mem[P]^.Hh.B0=0 THEN DeltaA_After^[K+1]-NextA ELSE DeltaA_NextA-After ^[K+1];NextA_After^[K+1]; IF(DeltaA<0)OR (DeltaA>ABS[DeltaB+DeltaB]) THEN BEGIN AllSafe_FALSE; After^[K]_Before^[K]; IF K=CurRoundingPtr-1 THEN After^[0]_Before^[0] ELSE After^[K+1]_Before^ [K+1]; END; ENDLOOP; IF AllSafe THEN EXIT; ENDLOOP; END;--:426----429: BeforeAndAfter: PROCEDURE[B,A: Scaled,P: Halfword] = BEGIN IF CurRoundingPtr=MaxRoundingPtr THEN IF INT[MaxRoundingPtr]=0 THEN A_A-( A MOD CurGran)-O ELSE A_ A+( (-(A+1))MOD CurGran)-CurGran+1-O; IF B-A