-- file: GFtoPressImpl3.mesa -- Pascal-to-Mesa translator output, translated at October 25, 1985 5:07:13 pm PDT DIRECTORY PascalBasic, PascalWizardFiles, GFtoPressPrivate, GFtoPressVars1, GFtoPressVars2, GFtoPressVars3; GFtoPressImpl3: PROGRAM IMPORTS PascalBasic, GFtoPressPrivate, GFtoPressVars2, GFtoPressVars3 EXPORTS GFtoPressPrivate = PUBLIC BEGIN OPEN PascalBasic, PascalWizardFiles, GFtoPressPrivate, GFtoPressVars1, GFtoPressVars2, GFtoPressVars3; NLDot: PROCEDURE[P: TreePointer] = BEGIN XDot←Xx↑[P];YDot←Yy↑[P]; DDot←536870912;EvenNLDot[Root]; END;--:150----152: --150:-- EvenNLDot: PROCEDURE[P: TreePointer] = BEGIN IF P#0 THEN BEGIN IF Info↑[P]<0 THEN IF DlTie↑[P]=0 THEN IF ABS[Xx ↑[P]-XDot]<DDot THEN IF ABS[Yy↑[P]-YDot]<DDot THEN BEGIN QDot←P; DDot←ABS[Xx↑[P]-XDot]; IF DDot<ABS[Yy↑[P]-YDot] THEN DDot←ABS[Yy↑[P]-YDot]; END; OddNLDot[Mid↑[P]]; IF Xl↑[P]-DotWidth>XDot-DDot THEN OddNLDot[Left↑[P]]; IF Xr↑[P]+DotWidth<XDot+DDot THEN OddNLDot[Right↑[P]]; END; END; OddNLDot: PROCEDURE[P: TreePointer] = BEGIN IF P#0 THEN BEGIN IF Info↑[P]<0 THEN IF DlTie↑[P]=0 THEN IF ABS[Xx ↑[P]-XDot]<DDot THEN IF ABS[Yy↑[P]-YDot]<DDot THEN BEGIN QDot←P; DDot←ABS[Xx↑[P]-XDot]; IF DDot<ABS[Yy↑[P]-YDot] THEN DDot←ABS[Yy↑[P]-YDot]; END; EvenNLDot[Mid↑[P]]; IF Yt↑[P]-DotHeight>YDot-DDot THEN EvenNLDot[Left↑[P]]; IF Yb↑[P]+DotHeight<YDot+DDot THEN EvenNLDot[Right↑[P]]; END; END; --:152----168:-- Convert: PROCEDURE[X,Y: Scaled] = BEGIN X←X+XOffset; Y←Y+YOffset;DviY←-PascalROUND[YRatio*PascalFLOAT[Y]]+DeltaY; DviX←PascalROUND[XRatio*PascalFLOAT[X]+SlantRatio*PascalFLOAT[Y]]+DeltaX; END;--:168----186: TopCoords: PROCEDURE[P: TreePointer] = BEGIN Xx↑[P]←DviX-( PascalDIVPower2[BoxWidth ,1]);Xl↑[P]←Xx↑[P]-Delta; Xr↑[P]←Xx↑[P]+BoxWidth+Delta;Yb↑[P]←DviY-DotHeight; Yy↑[P]←Yb↑[P]-BoxDepth;Yt↑[P]←Yy↑[P]-BoxHeight-Delta; END;--:186----187: BotCoords: PROCEDURE[P: TreePointer] = BEGIN Xx↑[P]←DviX-( PascalDIVPower2[BoxWidth ,1]);Xl↑[P]←Xx↑[P]-Delta; Xr↑[P]←Xx↑[P]+BoxWidth+Delta;Yt↑[P]←DviY+DotHeight; Yy↑[P]←Yt↑[P]+BoxHeight;Yb↑[P]←Yy↑[P]+BoxDepth+Delta; END; RightCoords: PROCEDURE[P: TreePointer] = BEGIN Xl↑[P]←DviX+DotWidth; Xx↑[P]←Xl↑[P];Xr↑[P]←Xx↑[P]+BoxWidth+Delta;Yy↑[P]←DviY+HalfXHeight; Yb↑[P]←Yy↑[P]+BoxDepth+Delta;Yt↑[P]←Yy↑[P]-BoxHeight-Delta; END; LeftCoords: PROCEDURE[P: TreePointer] = BEGIN Xr↑[P]←DviX-DotWidth; Xx↑[P]←Xr↑[P]-BoxWidth;Xl↑[P]←Xx↑[P]-Delta;Yy↑[P]←DviY+HalfXHeight; Yb↑[P]←Yy↑[P]+BoxDepth+Delta;Yt↑[P]←Yy↑[P]-BoxHeight-Delta; END;--:187 --192:-- DoALabel: PROCEDURE[P: TreePointer] = BEGIN Q:TreePointer; Hbox[Info↑[P],2,FALSE];DviX←Xx↑[P];DviY←Yy↑[P]; SELECT Left↑[P]FROM 49,53 =>TopCoords[P];50,54 =>LeftCoords[P]; 51,55 =>RightCoords[P];52,56 =>BotCoords[P]; ENDCASE;Q←DlTie↑[P];DlTie↑[Q]←0; TreeIns[P];PressGoto[Xx↑[P],Yy↑[P]];Hbox[Info↑[P],2,TRUE]; END;--:192 --193:-- DoBLabel: PROCEDURE[P: TreePointer] = BEGIN Q:TreePointer; Hbox[Info↑[P],2,FALSE];DviX←Xx↑[P]; DviY←Yy↑[P];--195:--OvFlag←FALSE;Q←DlTie↑[P];--196: SELECT DlTie↑[Q]FROM 1,8,10,15 =>LeftCoords[P];2,3,9,12 =>BotCoords[P]; 4,5,11,14 =>RightCoords[P];6,7,13,16 =>TopCoords[P]; ENDCASE; {{IF NOT Overlap[P] THEN GOTO Label40--:196--;--197: SELECT DlTie↑[Q]FROM 1,4,13,16 =>BotCoords[P];2,7,11,14 =>LeftCoords[P]; 3,6,10,15 =>RightCoords[P];5,8,9,12 =>TopCoords[P]; ENDCASE; IF NOT Overlap[P] THEN GOTO Label40--:197--;--198: SELECT DlTie↑[Q]FROM 1,4,14,15 =>TopCoords[P];2,7,12,13 =>RightCoords[P]; 3,6,9,16 =>LeftCoords[P];5,8,10,11 =>BotCoords[P]; ENDCASE; IF NOT Overlap[P] THEN GOTO Label40--:198--;--199: SELECT DlTie↑[Q]FROM 1,8,9,16 =>RightCoords[P];2,3,10,11 =>TopCoords[P]; 4,5,12,13 =>LeftCoords[P];6,7,14,15 =>BotCoords[P]; ENDCASE; IF NOT Overlap[P] THEN GOTO Label40--:199--;Xx↑[P]←DviX;Yy↑[P]←DviY; IF Left↑[P]=48 THEN OvFlag←TRUE; GOTO Label10--:195--;EXITS Label40 => NULL};TreeIns[P]; Q←DlTie↑[P];DlTie↑[Q]←0;PressGoto[Xx↑[P],Yy↑[P]];Hbox[Info↑[P],2,TRUE]; EXITS Label10 => NULL}; END;--:193----194:-- DoDot: PROCEDURE[P: TreePointer] = BEGIN Q:TreePointer; Q←GetAvail[];IF FirstDot=0 THEN FirstDot←Q;LastDot←Q; DlTie↑[P]←Q;DlTie↑[Q]←P;Info↑[Q]←-Info↑[P];Convert[Xx↑[P],Yy↑[P]]; Xx↑[Q]←DviX;Yy↑[Q]←DviY;Xx↑[P]←Xx↑[Q];Yy↑[P]←Yy↑[Q]; Xl↑[Q]←DviX-DotWidth;Xr↑[Q]←DviX+DotWidth;Yt↑[Q]←DviY-DotHeight; Yb↑[Q]←DviY+DotHeight;TreeIns[Q];PressGoto[Xx↑[Q],Yy↑[Q]]; PressSetChar[0]; END;--:194----216:-- END.