-- file: MFTimeImpl2.mesa -- Pascal-to-Mesa translator output, translated at October 31, 1985 4:28:02 pm PST DIRECTORY PascalBasic, PascalWizardFiles, MFTypes, MFProcArray, MFMoves, MFTime; MFTimeImpl2: PROGRAM IMPORTS PascalBasic, MFProcArray, MFMoves, MFTime EXPORTS MFTime = PUBLIC BEGIN OPEN PascalBasic, PascalWizardFiles, MFTypes, MFProcArray, MFMoves, MFTime; CubicIntersection: PROCEDURE[P,Pp: Halfword] = BEGIN Q, Qq:Halfword;--558:-- CIInit1: PROCEDURE = BEGIN Q←Mem[P]↑.Hh.Rh; Qq←Mem[Pp]↑.Hh.Rh;BisectPtr←20; BisectStack↑[BisectPtr-5]←Mem[ INT[P]+5]↑.Int-Mem[ INT[P]+1]↑.Int; BisectStack↑[BisectPtr-4]←Mem[ INT[Q]+3]↑.Int-Mem[ INT[P]+5]↑.Int; BisectStack↑[BisectPtr-3]←Mem[ INT[Q]+1]↑.Int-Mem[ INT[Q]+3]↑.Int; IF BisectStack↑[BisectPtr-5]<0 THEN IF BisectStack↑[BisectPtr-3]>=0 THEN BEGIN IF BisectStack↑[BisectPtr-4]<0 THEN BisectStack↑[BisectPtr -2]←BisectStack↑[BisectPtr-5]+BisectStack↑[BisectPtr-4] ELSE BisectStack↑[BisectPtr-2]←BisectStack↑[BisectPtr-5]; BisectStack↑[BisectPtr-1]←BisectStack↑[BisectPtr-5]+BisectStack↑ [BisectPtr-4]+BisectStack↑[BisectPtr-3]; IF BisectStack↑[BisectPtr-1]<0 THEN BisectStack↑[BisectPtr-1]←0; END ELSE BEGIN BisectStack↑[BisectPtr-2]← BisectStack↑[BisectPtr-5]+BisectStack↑[BisectPtr-4]+BisectStack↑[BisectPtr-3]; IF BisectStack↑[BisectPtr-2]>BisectStack↑[BisectPtr-5] THEN BisectStack↑[BisectPtr-2]←BisectStack↑[BisectPtr-5]; BisectStack↑[BisectPtr-1]←BisectStack↑[BisectPtr-5]+BisectStack↑ [BisectPtr-4]; IF BisectStack↑[BisectPtr-1]<0 THEN BisectStack↑[BisectPtr-1]←0; END ELSE IF BisectStack↑[BisectPtr-3]<=0 THEN BEGIN IF BisectStack↑ [BisectPtr-4]>0 THEN BisectStack↑[BisectPtr-1]←BisectStack↑[BisectPtr -5]+BisectStack↑[BisectPtr-4] ELSE BisectStack↑[BisectPtr-1]← BisectStack↑[BisectPtr-5]; BisectStack↑[BisectPtr-2]←BisectStack↑[BisectPtr-5]+BisectStack↑ [BisectPtr-4]+BisectStack↑[BisectPtr-3]; IF BisectStack↑[BisectPtr-2]>0 THEN BisectStack↑[BisectPtr-2]←0; END ELSE BEGIN BisectStack↑[BisectPtr-1]← BisectStack↑[BisectPtr-5]+BisectStack↑[BisectPtr-4]+BisectStack↑[BisectPtr-3]; IF BisectStack↑[BisectPtr-1]<BisectStack↑[BisectPtr-5] THEN BisectStack↑[BisectPtr-1]←BisectStack↑[BisectPtr-5]; BisectStack↑[BisectPtr-2]←BisectStack↑[BisectPtr-5]+BisectStack↑ [BisectPtr-4]; IF BisectStack↑[BisectPtr-2]>0 THEN BisectStack↑[BisectPtr-2]←0; END; BisectStack↑[BisectPtr-10]←Mem[ INT[P]+6]↑.Int-Mem[ INT[P]+2]↑.Int; BisectStack↑[BisectPtr-9]←Mem[ INT[Q]+4]↑.Int-Mem[ INT[P]+6]↑.Int; BisectStack↑[BisectPtr-8]←Mem[ INT[Q]+2]↑.Int-Mem[ INT[Q]+4]↑.Int; IF BisectStack↑[BisectPtr-10]<0 THEN IF BisectStack↑[BisectPtr-8]>=0 THEN BEGIN IF BisectStack↑[BisectPtr-9]<0 THEN BisectStack↑[BisectPtr -7]←BisectStack↑[BisectPtr-10]+BisectStack↑[BisectPtr-9] ELSE BisectStack↑[BisectPtr-7]←BisectStack↑[BisectPtr-10]; BisectStack↑[BisectPtr-6]←BisectStack↑[BisectPtr-10]+BisectStack↑ [BisectPtr-9]+BisectStack↑[BisectPtr-8]; IF BisectStack↑[BisectPtr-6]<0 THEN BisectStack↑[BisectPtr-6]←0; END ELSE BEGIN BisectStack↑[BisectPtr-7]← BisectStack↑[BisectPtr-10]+BisectStack↑[BisectPtr-9]+BisectStack↑[BisectPtr-8]; IF BisectStack↑[BisectPtr-7]>BisectStack↑[BisectPtr-10] THEN BisectStack↑[BisectPtr-7]←BisectStack↑[BisectPtr-10]; BisectStack↑[BisectPtr-6]←BisectStack↑[BisectPtr-10]+BisectStack↑ [BisectPtr-9]; IF BisectStack↑[BisectPtr-6]<0 THEN BisectStack↑[BisectPtr-6]←0; END ELSE IF BisectStack↑[BisectPtr-8]<=0 THEN BEGIN IF BisectStack↑ [BisectPtr-9]>0 THEN BisectStack↑[BisectPtr-6]←BisectStack↑[BisectPtr -10]+BisectStack↑[BisectPtr-9] ELSE BisectStack↑[BisectPtr-6]← BisectStack↑[BisectPtr-10]; BisectStack↑[BisectPtr-7]←BisectStack↑[BisectPtr-10]+BisectStack↑ [BisectPtr-9]+BisectStack↑[BisectPtr-8]; IF BisectStack↑[BisectPtr-7]>0 THEN BisectStack↑[BisectPtr-7]←0; END ELSE BEGIN BisectStack↑[BisectPtr-6]← BisectStack↑[BisectPtr-10]+BisectStack↑[BisectPtr-9]+BisectStack↑[BisectPtr-8]; IF BisectStack↑[BisectPtr-6]<BisectStack↑[BisectPtr-10] THEN BisectStack↑[BisectPtr-6]←BisectStack↑[BisectPtr-10]; BisectStack↑[BisectPtr-7]←BisectStack↑[BisectPtr-10]+BisectStack↑ [BisectPtr-9]; IF BisectStack↑[BisectPtr-7]>0 THEN BisectStack↑[BisectPtr-7]←0; END; END; CIInit2: PROCEDURE = BEGIN BisectStack↑[BisectPtr-15]←Mem[ INT[Pp]+5]↑.Int-Mem[ INT[Pp]+1]↑.Int; BisectStack↑[BisectPtr-14]←Mem[ INT[Qq]+3]↑.Int-Mem[ INT[Pp]+5]↑.Int; BisectStack↑[BisectPtr-13]←Mem[ INT[Qq]+1]↑.Int-Mem[ INT[Qq]+3]↑.Int; IF BisectStack↑[BisectPtr-15]<0 THEN IF BisectStack↑[BisectPtr-13]>=0 THEN BEGIN IF BisectStack↑[BisectPtr-14]<0 THEN BisectStack↑[BisectPtr -12]←BisectStack↑[BisectPtr-15]+BisectStack↑[BisectPtr-14] ELSE BisectStack↑[BisectPtr-12]←BisectStack↑[BisectPtr-15]; BisectStack↑[BisectPtr-11]←BisectStack↑[BisectPtr-15]+BisectStack↑ [BisectPtr-14]+BisectStack↑[BisectPtr-13]; IF BisectStack↑[BisectPtr-11]<0 THEN BisectStack↑[BisectPtr-11]←0; END ELSE BEGIN BisectStack↑[BisectPtr-12]← BisectStack↑[BisectPtr-15]+BisectStack↑[BisectPtr-14]+BisectStack↑[BisectPtr-13]; IF BisectStack↑[BisectPtr-12]>BisectStack↑[BisectPtr-15] THEN BisectStack↑[BisectPtr-12]←BisectStack↑[BisectPtr-15]; BisectStack↑[BisectPtr-11]←BisectStack↑[BisectPtr-15]+BisectStack↑ [BisectPtr-14]; IF BisectStack↑[BisectPtr-11]<0 THEN BisectStack↑[BisectPtr-11]←0; END ELSE IF BisectStack↑[BisectPtr-13]<=0 THEN BEGIN IF BisectStack↑ [BisectPtr-14]>0 THEN BisectStack↑[BisectPtr-11]←BisectStack↑ [BisectPtr-15]+BisectStack↑[BisectPtr-14] ELSE BisectStack↑[BisectPtr -11]←BisectStack↑[BisectPtr-15]; BisectStack↑[BisectPtr-12]←BisectStack↑[BisectPtr-15]+BisectStack↑ [BisectPtr-14]+BisectStack↑[BisectPtr-13]; IF BisectStack↑[BisectPtr-12]>0 THEN BisectStack↑[BisectPtr-12]←0; END ELSE BEGIN BisectStack↑[BisectPtr-11]← BisectStack↑[BisectPtr-15]+BisectStack↑[BisectPtr-14]+BisectStack↑[BisectPtr-13]; IF BisectStack↑[BisectPtr-11]<BisectStack↑[BisectPtr-15] THEN BisectStack↑[BisectPtr-11]←BisectStack↑[BisectPtr-15]; BisectStack↑[BisectPtr-12]←BisectStack↑[BisectPtr-15]+BisectStack↑ [BisectPtr-14]; IF BisectStack↑[BisectPtr-12]>0 THEN BisectStack↑[BisectPtr-12]←0; END;BisectStack↑[BisectPtr-20]←Mem[ INT[Pp]+6]↑.Int-Mem[ INT[Pp]+2]↑.Int; BisectStack↑[BisectPtr-19]←Mem[ INT[Qq]+4]↑.Int-Mem[ INT[Pp]+6]↑.Int; BisectStack↑[BisectPtr-18]←Mem[ INT[Qq]+2]↑.Int-Mem[ INT[Qq]+4]↑.Int; IF BisectStack↑[BisectPtr-20]<0 THEN IF BisectStack↑[BisectPtr-18]>=0 THEN BEGIN IF BisectStack↑[BisectPtr-19]<0 THEN BisectStack↑[BisectPtr -17]←BisectStack↑[BisectPtr-20]+BisectStack↑[BisectPtr-19] ELSE BisectStack↑[BisectPtr-17]←BisectStack↑[BisectPtr-20]; BisectStack↑[BisectPtr-16]←BisectStack↑[BisectPtr-20]+BisectStack↑ [BisectPtr-19]+BisectStack↑[BisectPtr-18]; IF BisectStack↑[BisectPtr-16]<0 THEN BisectStack↑[BisectPtr-16]←0; END ELSE BEGIN BisectStack↑[BisectPtr-17]← BisectStack↑[BisectPtr-20]+BisectStack↑[BisectPtr-19]+BisectStack↑[BisectPtr-18]; IF BisectStack↑[BisectPtr-17]>BisectStack↑[BisectPtr-20] THEN BisectStack↑[BisectPtr-17]←BisectStack↑[BisectPtr-20]; BisectStack↑[BisectPtr-16]←BisectStack↑[BisectPtr-20]+BisectStack↑ [BisectPtr-19]; IF BisectStack↑[BisectPtr-16]<0 THEN BisectStack↑[BisectPtr-16]←0; END ELSE IF BisectStack↑[BisectPtr-18]<=0 THEN BEGIN IF BisectStack↑ [BisectPtr-19]>0 THEN BisectStack↑[BisectPtr-16]←BisectStack↑ [BisectPtr-20]+BisectStack↑[BisectPtr-19] ELSE BisectStack↑[BisectPtr -16]←BisectStack↑[BisectPtr-20]; BisectStack↑[BisectPtr-17]←BisectStack↑[BisectPtr-20]+BisectStack↑ [BisectPtr-19]+BisectStack↑[BisectPtr-18]; IF BisectStack↑[BisectPtr-17]>0 THEN BisectStack↑[BisectPtr-17]←0; END ELSE BEGIN BisectStack↑[BisectPtr-16]← BisectStack↑[BisectPtr-20]+BisectStack↑[BisectPtr-19]+BisectStack↑[BisectPtr-18]; IF BisectStack↑[BisectPtr-16]<BisectStack↑[BisectPtr-20] THEN BisectStack↑[BisectPtr-16]←BisectStack↑[BisectPtr-20]; BisectStack↑[BisectPtr-17]←BisectStack↑[BisectPtr-20]+BisectStack↑ [BisectPtr-19]; IF BisectStack↑[BisectPtr-17]>0 THEN BisectStack↑[BisectPtr-17]←0; END;Delx←Mem[ INT[P]+1]↑.Int-Mem[ INT[Pp]+1]↑.Int;Dely←Mem[ INT[P]+2]↑.Int-Mem[ INT[Pp]+2]↑.Int; Tol←0;Uv←BisectPtr;Xy←BisectPtr;ThreeL←0;CurT←1;CurTt←1 ; END; --:558-- TimeToGo←5000;CIInit1[];CIInit2[]; {WHILE TRUE DO BEGIN DO {--Label22:--IF Delx-Tol<=BisectStack↑[Xy-11]-BisectStack↑[Uv -2] THEN IF Delx+Tol>=BisectStack↑[Xy-12]-BisectStack↑[Uv-1] THEN IF Dely-Tol<=BisectStack↑[Xy-16]-BisectStack↑[Uv-7] THEN IF Dely+Tol>=BisectStack↑[Xy-17]-BisectStack↑[Uv-6] THEN BEGIN IF CurT>=131072 THEN BEGIN CurT← PascalDIVPower2[(CurT+1),1];CurTt← PascalDIVPower2[(CurTt+1),1]; GOTO Label10; END; InterSubdivide[]; GOTO Label22; END; IF TimeToGo>0 THEN TimeToGo←TimeToGo-1 ELSE BEGIN CurT←0; CurTt←0; GOTO Label10; END;--560: DO {--Label45:--IF PascalODD[CurTt] THEN IF PascalODD[CurT] THEN--561:--BEGIN CurT← PascalDIVPower2[(CurT),1]; CurTt← PascalDIVPower2[(CurTt),1];IF CurT=0 THEN GOTO Label10;BisectPtr←BisectPtr-45; Delx←BisectStack↑[BisectPtr];Dely←BisectStack↑[BisectPtr+1]; Tol←BisectStack↑[BisectPtr+2];Uv←BisectStack↑[BisectPtr+3]; Xy←BisectStack↑[BisectPtr+4]; GOTO Label45; END--:561 ELSE BEGIN CurT←CurT+1; Delx←Delx+BisectStack↑[Uv-5]+BisectStack↑[Uv-4]+BisectStack↑[Uv-3]; Dely←Dely+BisectStack↑[Uv-10]+BisectStack↑[Uv-9]+BisectStack↑[Uv-8]; Uv←Uv+20;CurTt←CurTt-1;Xy←Xy-20; Delx←Delx+BisectStack↑[Xy-15]+BisectStack↑[Xy-14]+BisectStack↑[Xy-13]; Dely←Dely+BisectStack↑[Xy-20]+BisectStack↑[Xy-19]+BisectStack↑[Xy-18]; END ELSE BEGIN CurTt←CurTt+1;Tol←Tol+ThreeL; Delx←Delx-BisectStack↑[Xy-15]-BisectStack↑[Xy-14]-BisectStack↑[Xy-13]; Dely←Dely-BisectStack↑[Xy-20]-BisectStack↑[Xy-19]-BisectStack↑[Xy-18]; Xy←Xy+20; END--:560--;EXIT; EXITS Label45 => NULL} ENDLOOP;EXIT; EXITS Label22 => NULL} ENDLOOP; END ENDLOOP ;EXITS Label10 => NULL}; END;--:556----562: END.