-- file: MFEdgesImpl4.mesa -- Pascal-to-Mesa translator output, translated at October 31, 1985 4:28:01 pm PST DIRECTORY PascalBasic, PascalWizardFiles, MFTypes, MFProcArray, MFMemory, MFEdges; MFEdgesImpl4: PROGRAM IMPORTS PascalBasic, MFProcArray, MFMemory, MFEdges EXPORTS MFEdges = PUBLIC BEGIN OPEN PascalBasic, PascalWizardFiles, MFTypes, MFProcArray, MFMemory, MFEdges; SortEdges: PROCEDURE[H: Halfword] = BEGIN K:Halfword;P, Q, R, S:Halfword; R_Mem[ INT[H]+1]^.Hh.Lh; Mem[ INT[H]+1]^.Hh.Lh_0;P_Mem[R]^.Hh.Rh;Mem[R]^.Hh.Rh_50000; Mem[49999]^.Hh.Rh_R;WHILE INT[P]>1 DO BEGIN K_Mem[P]^.Hh.Lh;Q_49999; DO R_Q;Q_Mem[R]^.Hh.Rh; IF INT[K]<=Mem[Q]^.Hh.Lh THEN EXIT; ENDLOOP;Mem[R]^.Hh.Rh_P; R_Mem[P]^.Hh.Rh;Mem[P]^.Hh.Rh_Q;P_R; END ENDLOOP ;--347:--BEGIN R_ INT[H]+1; Q_Mem[R]^.Hh.Rh;P_Mem[49999]^.Hh.Rh;{WHILE TRUE DO BEGIN K_Mem[P]^.Hh.Lh; WHILE INT[K]>Mem[Q]^.Hh.Lh DO BEGIN R_Q;Q_Mem[R]^.Hh.Rh; END ENDLOOP ;Mem[R]^.Hh.Rh_P; S_Mem[P]^.Hh.Rh;Mem[P]^.Hh.Rh_Q;IF S=50000 THEN GOTO Label30;R_P;P_S; END ENDLOOP ; EXITS Label30 => NULL}; END--:347--; END;--:346----348: CullEdges: PROCEDURE[WLo,WHi,WOut,WIn: PascalInteger] = BEGIN P, Q, R, S:Halfword;W:PascalInteger;D:PascalInteger;M:PascalInteger;Mm:PascalInteger; Ww:PascalInteger;PrevW:PascalInteger;N, MinN, MaxN:Halfword;MinD, MaxD:Halfword; MinD_65535;MaxD_0;MinN_65535;MaxN_0; P_Mem[CurEdges]^.Hh.Rh;N_Mem[ INT[CurEdges]+1]^.Hh.Lh; WHILE P#CurEdges DO BEGIN IF INT[Mem[ INT[P]+1]^.Hh.Lh]>1 THEN SortEdges[P]; IF Mem[ INT[P]+1]^.Hh.Rh#50000 THEN--349:--BEGIN R_49999;Q_Mem[ INT[P]+1]^.Hh.Rh; Ww_0;M_1000000;PrevW_0; {WHILE TRUE DO BEGIN IF Q=50000 THEN Mm_1000000 ELSE BEGIN D_Mem[Q]^.Hh. Lh;Mm_ PascalDIVPower2[D ,3];Ww_Ww+( PascalMODPower2Mask[D ,7])-4; END;IF Mm>M THEN BEGIN--350: IF W#PrevW THEN BEGIN S_GetAvail[];Mem[R]^.Hh.Rh_S; Mem[S]^.Hh.Lh_8*M+4+W-PrevW;R_S;PrevW_W; END--:350--; IF Q=50000 THEN GOTO Label30; END;M_Mm; IF Ww>=WLo THEN IF Ww<=WHi THEN W_WIn ELSE W_WOut ELSE W_WOut; S_Mem[Q]^.Hh.Rh;BEGIN Mem[Q]^.Hh.Rh_Avail;Avail_Q;DynUsed_DynUsed-1; END;Q_S; END ENDLOOP ;EXITS Label30 => NULL};Mem[R]^.Hh.Rh_50000;Mem[ INT[P]+1]^.Hh.Rh_Mem[49999]^.Hh.Rh; IF R#49999 THEN--351:--BEGIN IF MinN=65535 THEN MinN_N;MaxN_N; IF INT[MinD]>Mem[Mem[49999]^.Hh.Rh]^.Hh.Lh THEN MinD_Mem[Mem[49999]^.Hh.Rh]^. Hh.Lh;IF INT[MaxD]MaxN THEN--353: BEGIN P_Mem[CurEdges]^.Hh.Rh; WHILE P#CurEdges DO BEGIN Q_Mem[P]^.Hh.Rh;FreeNode[P,2];P_Q; END ENDLOOP ; InitEdges[CurEdges]; END--:353-- ELSE BEGIN N_Mem[ INT[CurEdges]+1]^.Hh.Lh; Mem[ INT[CurEdges]+1]^.Hh.Lh_MinN; WHILE INT[MinN]>N DO BEGIN P_Mem[CurEdges]^.Hh.Rh; Mem[CurEdges]^.Hh.Rh_Mem[P]^.Hh.Rh;Mem[Mem[P]^.Hh.Rh]^.Hh.Lh_CurEdges; FreeNode[P,2];N_ INT[N]+1; END ENDLOOP ;N_Mem[ INT[CurEdges]+1]^.Hh.Rh; Mem[ INT[CurEdges]+1]^.Hh.Rh_MaxN;Mem[ INT[CurEdges]+5]^.Hh.Lh_ INT[MaxN]+1; Mem[ INT[CurEdges]+5]^.Hh.Rh_CurEdges; WHILE INT[MaxN]Mem[ INT[CurEdges]+2]^.Hh.Rh)OR ( INT[Mem[ INT[H]+1]^.Hh.Lh]Mem[ INT[CurEdges]+1]^.Hh.Rh) THEN EdgePrep[ INT[Mem[ INT[H]+2]^.Hh.Lh]-4096, INT[Mem[ INT[H]+2]^.Hh.Rh]-4096, INT[Mem[ INT[H]+1]^.Hh.Lh]-4096, INT[Mem[ INT[H]+1]^.Hh.Rh]-4095]; IF Mem[ INT[H]+3]^.Hh.Lh#Mem[ INT[CurEdges]+3]^.Hh.Lh THEN--367: BEGIN Pp_Mem[H]^.Hh.Rh;Delta_8*( INT[Mem[ INT[CurEdges]+3]^.Hh.Lh]-Mem[ INT[H]+3]^.Hh.Lh); DO Qq_Mem[ INT[Pp]+1]^.Hh.Rh; WHILE Qq#50000 DO BEGIN Mem[Qq]^.Hh.Lh_Mem[Qq]^.Hh.Lh+Delta; Qq_Mem[Qq]^.Hh.Rh; END ENDLOOP ;Qq_Mem[ INT[Pp]+1]^.Hh.Lh; WHILE INT[Qq]>1 DO BEGIN Mem[Qq]^.Hh.Lh_Mem[Qq]^.Hh.Lh+Delta; Qq_Mem[Qq]^.Hh.Rh; END ENDLOOP ;Pp_Mem[Pp]^.Hh.Rh; IF Pp=H THEN EXIT; ENDLOOP; END--:367--; N_Mem[ INT[CurEdges]+1]^.Hh.Lh;P_Mem[CurEdges]^.Hh.Rh;Pp_Mem[H]^.Hh.Rh; WHILE N1 THEN IF INT[Mem[ INT[P]+1]^.Hh.Lh]<=1 THEN Mem[ INT[P]+1]^.Hh.Lh_Qq ELSE BEGIN WHILE INT[Mem[Qq]^.Hh.Rh]>1 DO Qq_Mem[Qq]^.Hh.Rh ENDLOOP ; Mem[Qq]^.Hh.Rh_Mem[ INT[P]+1]^.Hh.Lh;Mem[ INT[P]+1]^.Hh.Lh_Mem[ INT[Pp]+1]^.Hh.Lh; END; Mem[ INT[Pp]+1]^.Hh.Lh_0;Qq_Mem[ INT[Pp]+1]^.Hh.Rh; {IF Qq#50000 THEN BEGIN IF Mem[ INT[P]+1]^.Hh.Lh=1 THEN Mem[ INT[P]+1]^.Hh.Lh_0; Mem[ INT[Pp]+1]^.Hh.Rh_50000;R_ INT[P]+1;Q_Mem[R]^.Hh.Rh; IF Q=50000 THEN Mem[ INT[P]+1]^.Hh.Rh_Qq ELSE WHILE TRUE DO BEGIN K_Mem[Qq]^. Hh.Lh;WHILE INT[K]>Mem[Q]^.Hh.Lh DO BEGIN R_Q;Q_Mem[R]^.Hh.Rh; END ENDLOOP ; Mem[R]^.Hh.Rh_Qq;Rr_Mem[Qq]^.Hh.Rh;Mem[Qq]^.Hh.Rh_Q; IF Rr=50000 THEN GOTO Label30;R_Qq;Qq_Rr; END ENDLOOP ; END;EXITS Label30 => NULL};--:368--Pp_Mem[Pp]^.Hh.Rh;P_Mem[P]^.Hh.Rh; IF Pp=H THEN EXIT; ENDLOOP; END; END;--:366----369: TotalWeight: PROCEDURE[H: Halfword] RETURNS[TotalWeightResult: PascalInteger] = BEGIN P, Q:Halfword;N:PascalInteger; M:PascalInteger[0..65535]; N_0;P_Mem[H]^.Hh.Rh; WHILE P#H DO BEGIN Q_Mem[ INT[P]+1]^.Hh.Rh;WHILE Q#50000 DO--370: BEGIN M_Mem[Q]^.Hh.Lh;N_N-(( PascalMODPower2Mask[M ,7])-4)*( PascalDIVPower2[M ,3]);Q_Mem[Q]^.Hh.Rh; END--:370-- ENDLOOP ;Q_Mem[ INT[P]+1]^.Hh.Lh;WHILE INT[Q]>1 DO--370:--BEGIN M_Mem[Q]^.Hh.Lh; N_N-(( PascalMODPower2Mask[M ,7])-4)*( PascalDIVPower2[M ,3]);Q_Mem[Q]^.Hh.Rh; END--:370-- ENDLOOP ;P_Mem[P]^.Hh.Rh; END ENDLOOP ;TotalWeightResult_N; END;--:369----372:-- END.