-- file: MFEdgesImpl1.mesa -- Pascal-to-Mesa translator output, translated at October 31, 1985 4:28:01 pm PST DIRECTORY PascalBasic, PascalWizardFiles, MFTypes, MFProcArray, MFInteraction, MFMemory, MFEdges; MFEdgesImpl1: PROGRAM IMPORTS PascalBasic, MFProcArray, MFInteraction, MFMemory EXPORTS MFEdges = PUBLIC BEGIN OPEN PascalBasic, PascalWizardFiles, MFTypes, MFProcArray, MFInteraction, MFMemory, MFEdges; --:309----327:-- CurEdges: Halfword; CurWt: PascalInteger; --:327----371:-- TraceX: PascalInteger; TraceY: PascalInteger; TraceYy: PascalInteger; --332:----333:-- PrintWeight: PROCEDURE[Q: Halfword,XOff: PascalInteger] = BEGIN W, M:PascalInteger;D:PascalInteger; D_Mem[Q]^.Hh.Lh;W_ PascalMODPower2Mask[D ,7]; M_( PascalDIVPower2[D ,3])-Mem[ INT[CurEdges]+3]^.Hh.Lh; IF INT[FileOffset]>MaxPrintLine-9 THEN PrintNl[32] ELSE PrintChar[32]; PrintInt[M+XOff];WHILE W>4 DO BEGIN PrintChar[43];W_W-1; END ENDLOOP ; WHILE W<4 DO BEGIN PrintChar[45];W_W+1; END ENDLOOP ; END;--:333 PrintEdges: PROCEDURE[S: StrNumber,Nuline: PascalBoolean,XOff,YOff: PascalInteger] = BEGIN P, Q, R:Halfword;N:PascalInteger; PrintDiagnostic[400,S,Nuline]; P_Mem[CurEdges]^.Hh.Lh;N_ INT[Mem[ INT[CurEdges]+1]^.Hh.Rh]-4096; WHILE P#CurEdges DO BEGIN Q_Mem[ INT[P]+1]^.Hh.Lh;R_Mem[ INT[P]+1]^.Hh.Rh; IF( INT[Q]>1)OR (R#50000) THEN BEGIN PrintNl[401];PrintInt[N+YOff]; PrintChar[58];WHILE INT[Q]>1 DO BEGIN PrintWeight[Q,XOff];Q_Mem[Q]^.Hh.Rh; END ENDLOOP ;Print[402];WHILE R#50000 DO BEGIN PrintWeight[R,XOff]; R_Mem[R]^.Hh.Rh; END ENDLOOP ; END;P_Mem[P]^.Hh.Lh;N_N-1; END ENDLOOP ;EndDiagnostic[TRUE]; END;--:332----388:-- TossEdges: PROCEDURE[H: Halfword] = BEGIN P, Q:Halfword; Q_Mem[H]^.Hh.Rh; WHILE Q#H DO BEGIN FlushList[Mem[ INT[Q]+1]^.Hh.Rh]; IF INT[Mem[ INT[Q]+1]^.Hh.Lh]>1 THEN FlushList[Mem[ INT[Q]+1]^.Hh.Lh];P_Q; Q_Mem[Q]^.Hh.Rh;FreeNode[P,2]; END ENDLOOP ;FreeNode[H,6]; END;--:385----487: InitEdges: PROCEDURE[H: Halfword] = BEGIN Mem[H]^.Hh.Lh_H; Mem[H]^.Hh.Rh_H;Mem[ INT[H]+1]^.Hh.Lh_8191;Mem[ INT[H]+1]^.Hh.Rh_1; Mem[ INT[H]+2]^.Hh.Lh_8191;Mem[ INT[H]+2]^.Hh.Rh_1;Mem[ INT[H]+3]^.Hh.Lh_4096; Mem[ INT[H]+3]^.Hh.Rh_0;Mem[ INT[H]+4]^.Int_0;Mem[ INT[H]+5]^.Hh.Rh_H;Mem[ INT[H]+5]^.Hh.Lh_0; END;--:326----328:-- FixOffset: PROCEDURE = BEGIN P, Q:Halfword;Delta:PascalInteger; Delta_8*( INT[Mem[ INT[CurEdges]+3]^.Hh.Lh]-4096); Mem[ INT[CurEdges]+3]^.Hh.Lh_4096;Q_Mem[CurEdges]^.Hh.Rh; WHILE Q#CurEdges DO BEGIN P_Mem[ INT[Q]+1]^.Hh.Rh; WHILE P#50000 DO BEGIN Mem[P]^.Hh.Lh_Mem[P]^.Hh.Lh-Delta; P_Mem[P]^.Hh.Rh; END ENDLOOP ;P_Mem[ INT[Q]+1]^.Hh.Lh; WHILE INT[P]>1 DO BEGIN Mem[P]^.Hh.Lh_Mem[P]^.Hh.Lh-Delta;P_Mem[P]^.Hh.Rh; END ENDLOOP ; Q_Mem[Q]^.Hh.Rh; END ENDLOOP ; END;--:328----329: EdgePrep: PROCEDURE[Ml,Mr,Nl,Nr: PascalInteger] = BEGIN Delta:Halfword; P, Q:Halfword; Ml_Ml+4096;Mr_Mr+4096;Nl_Nl+4096;Nr_Nr+4095; IF MlMem[ INT[CurEdges]+2]^.Hh.Rh THEN Mem[ INT[CurEdges]+2]^.Hh.Rh_Mr; IF NOT (ABS[ INT[Mem[ INT[CurEdges]+2]^.Hh.Lh]+Mem[ INT[CurEdges]+3]^.Hh.Lh-8192]<4096)OR NOT (ABS[ INT[Mem[ INT[CurEdges]+2]^.Hh.Rh]+Mem[ INT[CurEdges]+3]^.Hh.Lh-8192]<4096) THEN FixOffset[]; IF Mem[CurEdges]^.Hh.Rh=CurEdges THEN BEGIN Mem[ INT[CurEdges]+1]^.Hh.Lh_Nr +1;Mem[ INT[CurEdges]+1]^.Hh.Rh_Nr; END; IF NlMem[ INT[CurEdges]+1]^.Hh.Rh THEN--331: BEGIN Delta_Nr-Mem[ INT[CurEdges]+1]^.Hh.Rh;Mem[ INT[CurEdges]+1]^.Hh.Rh_Nr; P_Mem[CurEdges]^.Hh.Lh;DO Q_GetNode[2];Mem[ INT[Q]+1]^.Hh.Rh_50000; Mem[ INT[Q]+1]^.Hh.Lh_1;Mem[P]^.Hh.Rh_Q;Mem[Q]^.Hh.Lh_P;P_Q;Delta_ INT[Delta]-1; IF Delta=0 THEN EXIT; ENDLOOP;Mem[P]^.Hh.Rh_CurEdges;Mem[CurEdges]^.Hh.Lh_P; IF Mem[ INT[CurEdges]+5]^.Hh.Rh=CurEdges THEN Mem[ INT[CurEdges]+5]^.Hh.Lh_Nr+1; END--:331--; END;--:329----334:-- CopyEdges: PROCEDURE[H: Halfword] RETURNS[CopyEdgesResult: Halfword] = BEGIN P, R:Halfword;Hh, Pp, Qq, Rr, Ss:Halfword; Hh_GetNode[6]; Mem[ INT[Hh]+1]^_Mem[ INT[H]+1]^;Mem[ INT[Hh]+2]^_Mem[ INT[H]+2]^;Mem[ INT[Hh]+3]^_Mem[ INT[H]+3]^; Mem[ INT[Hh]+4]^_Mem[ INT[H]+4]^;Mem[ INT[Hh]+5]^.Hh.Lh_ INT[Mem[ INT[Hh]+1]^.Hh.Rh]+1; Mem[ INT[Hh]+5]^.Hh.Rh_Hh;P_Mem[H]^.Hh.Rh;Qq_Hh; WHILE P#H DO BEGIN Pp_GetNode[2];Mem[Qq]^.Hh.Rh_Pp;Mem[Pp]^.Hh.Lh_Qq; --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--;P_Mem[P]^.Hh.Rh;Qq_Pp; END ENDLOOP ; Mem[Qq]^.Hh.Rh_Hh;Mem[Hh]^.Hh.Lh_Qq;CopyEdgesResult_Hh; END;--:334----336: NegateEdges: PROCEDURE[H: Halfword] = BEGIN P, Q, R, S, T, U:Halfword; P_Mem[H]^.Hh.Rh;WHILE P#H DO BEGIN Q_Mem[ INT[P]+1]^.Hh.Lh; WHILE INT[Q]>1 DO BEGIN Mem[Q]^.Hh.Lh_8-2*( PascalMODPower2Mask[(Mem[Q]^.Hh.Lh),7])+Mem[Q]^.Hh.Lh; Q_Mem[Q]^.Hh.Rh; END ENDLOOP ;Q_Mem[ INT[P]+1]^.Hh.Rh; IF Q#50000 THEN BEGIN DO Mem[Q]^.Hh.Lh_ 8-2*( PascalMODPower2Mask[(Mem[Q]^.Hh.Lh),7])+Mem[Q]^.Hh.Lh;Q_Mem[Q]^.Hh.Rh; IF Q=50000 THEN EXIT; ENDLOOP;--345:--U_ INT[P]+1;Q_Mem[U]^.Hh.Rh; R_Q;S_Mem[R]^.Hh.Rh; {WHILE TRUE DO IF INT[Mem[S]^.Hh.Lh]>Mem[R]^.Hh.Lh THEN BEGIN Mem[U]^.Hh.Rh_Q; IF S=50000 THEN GOTO Label30;U_R;Q_S;R_Q;S_Mem[R]^.Hh.Rh; END ELSE BEGIN T_S;S_Mem[T]^.Hh.Rh;Mem[T]^.Hh.Rh_Q;Q_T; END ENDLOOP ; EXITS Label30 => NULL};Mem[R]^.Hh.Rh_50000--:345--; END;P_Mem[P]^.Hh.Rh; END ENDLOOP ;Mem[ INT[H]+4]^.Int_0; END;--:344----346:-- END.