-- file: MFEdgesImpl2.mesa -- Pascal-to-Mesa translator output, translated at October 31, 1985 4:28:01 pm PST DIRECTORY PascalBasic, PascalWizardFiles, MFTypes, MFProcArray, MFInteraction, MFMemory, MFMoves, MFEdges, MFParsing; MFEdgesImpl2: PROGRAM IMPORTS PascalBasic, MFProcArray, MFInteraction, MFMemory, MFMoves, MFEdges, MFParsing EXPORTS MFEdges = PUBLIC BEGIN OPEN PascalBasic, PascalWizardFiles, MFTypes, MFProcArray, MFInteraction, MFMemory, MFMoves, MFEdges, MFParsing; YReflectEdges: PROCEDURE = BEGIN P, Q, R:Halfword; P_Mem[ INT[CurEdges]+1]^.Hh.Lh; Mem[ INT[CurEdges]+1]^.Hh.Lh_ INT[8191]-Mem[ INT[CurEdges]+1]^.Hh.Rh; Mem[ INT[CurEdges]+1]^.Hh.Rh_ INT[8191]-P; Mem[ INT[CurEdges]+5]^.Hh.Lh_ INT[8191]-Mem[ INT[CurEdges]+5]^.Hh.Lh; P_Mem[CurEdges]^.Hh.Rh;Q_CurEdges;DO R_Mem[P]^.Hh.Rh; Mem[P]^.Hh.Rh_Q;Mem[Q]^.Hh.Lh_P;Q_P;P_R; IF Q=CurEdges THEN EXIT; ENDLOOP; Mem[ INT[CurEdges]+4]^.Int_0; END;--:336----337:-- XReflectEdges: PROCEDURE = BEGIN P, Q, R, S:Halfword;M:PascalInteger; P_Mem[ INT[CurEdges]+2]^.Hh.Lh; Mem[ INT[CurEdges]+2]^.Hh.Lh_ INT[8192]-Mem[ INT[CurEdges]+2]^.Hh.Rh; Mem[ INT[CurEdges]+2]^.Hh.Rh_ INT[8192]-P;M_( INT[4096]+Mem[ INT[CurEdges]+3]^.Hh.Lh)*8+8; Mem[ INT[CurEdges]+3]^.Hh.Lh_4096;P_Mem[CurEdges]^.Hh.Rh;DO--339: Q_Mem[ INT[P]+1]^.Hh.Rh;R_50000;WHILE Q#50000 DO BEGIN S_Mem[Q]^.Hh.Rh; Mem[Q]^.Hh.Rh_R;R_Q;Mem[R]^.Hh.Lh_M-Mem[Q]^.Hh.Lh;Q_S; END ENDLOOP ; Mem[ INT[P]+1]^.Hh.Rh_R--:339--;--338:--Q_Mem[ INT[P]+1]^.Hh.Lh; WHILE INT[Q]>1 DO BEGIN Mem[Q]^.Hh.Lh_M-Mem[Q]^.Hh.Lh;Q_Mem[Q]^.Hh.Rh; END--:338-- ENDLOOP ;P_Mem[P]^.Hh.Rh; IF P=CurEdges THEN EXIT; ENDLOOP;Mem[ INT[CurEdges]+4]^.Int_0; END; --:337----340:-- YScaleEdges: PROCEDURE[S: PascalInteger] = BEGIN P, Q, Pp, R, Rr, Ss:Halfword;T:PascalInteger; IF(S*( INT[Mem[ INT[CurEdges]+1]^.Hh.Rh]-4095)>=4096)OR (S*( INT[Mem[ INT[CurEdges]+1]^.Hh .Lh]-4096)<=-4096) THEN BEGIN BEGIN IF Interaction=3 THEN NULL;PrintNl[133]; Print[403]; END;BEGIN HelpPtr_3;HelpLine^[2]_404;HelpLine^[1]_405; HelpLine^[0]_406; END;PutGetError[]; END ELSE BEGIN Mem[ INT[CurEdges]+1]^.Hh.Rh_S*( INT[Mem[ INT[CurEdges]+1]^.Hh.Rh]-4095) +4095;Mem[ INT[CurEdges]+1]^.Hh.Lh_S*( INT[Mem[ INT[CurEdges]+1]^.Hh.Lh]-4096)+4096; --341:--P_CurEdges;DO Q_P;P_Mem[P]^.Hh.Rh; FOR i:INT IN [ INT[2 ].. INT[S ]] DO T _ i; Pp_GetNode[2];Mem[Q]^.Hh.Rh_Pp; Mem[P]^.Hh.Lh_Pp;Mem[Pp]^.Hh.Rh_P;Mem[Pp]^.Hh.Lh_Q;Q_Pp;--335: R_Mem[ INT[P]+1]^.Hh.Rh;Rr_ INT[Pp]+1;WHILE R#50000 DO BEGIN Ss_GetAvail[]; Mem[Rr]^.Hh.Rh_Ss;Rr_Ss;Mem[Rr]^.Hh.Lh_Mem[R]^.Hh.Lh;R_Mem[R]^.Hh.Rh; END ENDLOOP ;Mem[Rr]^.Hh.Rh_50000;R_Mem[ INT[P]+1]^.Hh.Lh;Rr_49999; WHILE INT[R]>1 DO BEGIN Ss_GetAvail[];Mem[Rr]^.Hh.Rh_Ss;Rr_Ss; Mem[Rr]^.Hh.Lh_Mem[R]^.Hh.Lh;R_Mem[R]^.Hh.Rh; END ENDLOOP ;Mem[Rr]^.Hh.Rh_R; Mem[ INT[Pp]+1]^.Hh.Lh_Mem[49999]^.Hh.Rh--:335--; ENDLOOP; IF Mem[P]^.Hh.Rh=CurEdges--:341-- THEN EXIT; ENDLOOP;Mem[ INT[CurEdges]+4]^.Int_0; END; END; --:340----342:-- XScaleEdges: PROCEDURE[S: PascalInteger] = BEGIN P, Q:Halfword; T:PascalInteger[0..65535];W:PascalInteger[0..7];Delta:PascalInteger; IF(S*( INT[Mem[ INT[CurEdges]+2]^.Hh.Rh]-4096)>=4096)OR (S*( INT[Mem[ INT[CurEdges]+2]^.Hh .Lh]-4096)<=-4096) THEN BEGIN BEGIN IF Interaction=3 THEN NULL;PrintNl[133]; Print[403]; END;BEGIN HelpPtr_3;HelpLine^[2]_407;HelpLine^[1]_405; HelpLine^[0]_406; END;PutGetError[]; END ELSE IF(Mem[ INT[CurEdges]+2]^.Hh.Rh#4096)OR (Mem[ INT[CurEdges]+2]^.Hh.Lh#4096 ) THEN BEGIN Mem[ INT[CurEdges]+2]^.Hh.Rh_S*( INT[Mem[ INT[CurEdges]+2]^.Hh.Rh]-4096)+4096 ;Mem[ INT[CurEdges]+2]^.Hh.Lh_S*( INT[Mem[ INT[CurEdges]+2]^.Hh.Lh]-4096)+4096; Delta_8*(4096-S*Mem[ INT[CurEdges]+3]^.Hh.Lh)+0;Mem[ INT[CurEdges]+3]^.Hh.Lh_4096; --343:--Q_Mem[CurEdges]^.Hh.Rh;DO P_Mem[ INT[Q]+1]^.Hh.Rh; WHILE P#50000 DO BEGIN T_Mem[P]^.Hh.Lh;W_ PascalMODPower2Mask[T ,7]; Mem[P]^.Hh.Lh_( INT[T]-W)*S+W+Delta;P_Mem[P]^.Hh.Rh; END ENDLOOP ;P_Mem[ INT[Q]+1]^.Hh.Lh; WHILE INT[P]>1 DO BEGIN T_Mem[P]^.Hh.Lh;W_ PascalMODPower2Mask[T ,7]; Mem[P]^.Hh.Lh_( INT[T]-W)*S+W+Delta;P_Mem[P]^.Hh.Rh; END ENDLOOP ;Q_Mem[Q]^.Hh.Rh; IF Q=CurEdges--:343-- THEN EXIT; ENDLOOP;Mem[ INT[CurEdges]+4]^.Int_0; END; END;--:342----344: XySwapEdges: PROCEDURE = BEGIN MMagic, NMagic:PascalInteger; P, Q, R, S:Halfword;--357:--MSpread:PascalInteger;J, Jj:PascalInteger[0..MoveSize];M, Mm:PascalInteger; Pd, Rd:PascalInteger;Pm, Rm:PascalInteger;W:PascalInteger;Ww:PascalInteger;Dw:PascalInteger;--:357----363: Extras:PascalInteger;Xw:PascalInteger[-3..3];K:PascalInteger;--:363----356: --365: MSpread_ INT[Mem[ INT[CurEdges]+2]^.Hh.Rh]-Mem[ INT[CurEdges]+2]^.Hh.Lh; IF MSpread>MoveSize THEN Overflow[408,MoveSize]; FOR i:INT IN [ INT[0 ].. INT[MSpread ]] DO J _ i; Move^[J]_50000--:356-- ENDLOOP;--355:--P_GetNode[2]; Mem[ INT[P]+1]^.Hh.Rh_50000;Mem[ INT[P]+1]^.Hh.Lh_0;Mem[P]^.Hh.Lh_CurEdges; Mem[Mem[CurEdges]^.Hh.Rh]^.Hh.Lh_P;P_GetNode[2];Mem[ INT[P]+1]^.Hh.Rh_50000; Mem[P]^.Hh.Lh_Mem[CurEdges]^.Hh.Lh;--:355--MMagic_ INT[Mem[ INT[CurEdges]+2]^.Hh.Lh]+Mem[ INT[CurEdges]+3]^.Hh.Lh-4096; NMagic_ INT[8]*Mem[ INT[CurEdges]+1]^.Hh.Rh+12--:365--;DO Q_Mem[P]^.Hh.Lh; IF INT[Mem[ INT[Q]+1]^.Hh.Lh]>1 THEN SortEdges[Q];--358:--R_Mem[ INT[P]+1]^.Hh.Rh; FreeNode[P,2];P_R;Pd_Mem[P]^.Hh.Lh;Pm_ PascalDIVPower2[Pd ,3];R_Mem[ INT[Q]+1]^.Hh.Rh; Rd_Mem[R]^.Hh.Lh;Rm_ PascalDIVPower2[Rd ,3];W_0; {WHILE TRUE DO BEGIN IF Pm=MoveSize THEN Confusion[378]; Extras_ (ABS[W]-1)/3; IF Extras>0 THEN BEGIN IF W>0 THEN Xw_3 ELSE Xw_-3;Ww_W-Extras*Xw; END ELSE Ww_W;DO J_M-MMagic; FOR i:INT IN [ INT[1 ].. INT[Extras ]] DO K _ i; S_GetAvail[];Mem[S]^.Hh.Lh_NMagic+Xw; Mem[S]^.Hh.Rh_Move^[J];Move^[J]_S; ENDLOOP;S_GetAvail[]; Mem[S]^.Hh.Lh_NMagic+Ww;Mem[S]^.Hh.Rh_Move^[J];Move^[J]_S;M_M+1; IF M=Mm THEN EXIT; ENDLOOP; END--:362--;IF Pd NULL};--:358--P_Q;NMagic_NMagic-8; IF Mem[P]^.Hh.Lh=CurEdges THEN EXIT; ENDLOOP; FreeNode[P,2];--364:--Move^[MSpread]_0;J_0; WHILE Move^[J]=50000 DO J_J+1 ENDLOOP ; IF J=MSpread THEN InitEdges[CurEdges] ELSE BEGIN Mm_Mem[ INT[CurEdges]+2]^. Hh.Lh;Mem[ INT[CurEdges]+2]^.Hh.Lh_Mem[ INT[CurEdges]+1]^.Hh.Lh; Mem[ INT[CurEdges]+2]^.Hh.Rh_ INT[Mem[ INT[CurEdges]+1]^.Hh.Rh]+1; Mem[ INT[CurEdges]+3]^.Hh.Lh_4096;Jj_MSpread-1; WHILE Move^[Jj]=50000 DO Jj_Jj-1 ENDLOOP ;Mem[ INT[CurEdges]+1]^.Hh.Lh_J+Mm; Mem[ INT[CurEdges]+1]^.Hh.Rh_Jj+Mm;Q_CurEdges;DO P_GetNode[2]; Mem[Q]^.Hh.Rh_P;Mem[P]^.Hh.Lh_Q;Mem[ INT[P]+1]^.Hh.Rh_Move^[J]; Mem[ INT[P]+1]^.Hh.Lh_0;J_J+1;Q_P; IF INT[J]>Jj THEN EXIT; ENDLOOP;Mem[Q]^.Hh.Rh_CurEdges; Mem[CurEdges]^.Hh.Lh_Q; Mem[ INT[CurEdges]+5]^.Hh.Lh_ INT[Mem[ INT[CurEdges]+1]^.Hh.Rh]+1; Mem[ INT[CurEdges]+5]^.Hh.Rh_CurEdges;Mem[ INT[CurEdges]+4]^.Int_0; END;--:364-- END;--:354----366:-- END.