-- file: MFScreenImpl.mesa -- Pascal-to-Mesa translator output, translated at October 31, 1985 4:28:02 pm PST DIRECTORY PascalBasic, PascalWizardFiles, MFTypes, MFProcArray, MFExternals, MFMath, MFEdges, MFScreen; MFScreenImpl: PROGRAM IMPORTS PascalBasic, MFProcArray, MFExternals, MFMath, MFEdges EXPORTS MFScreen = PUBLIC BEGIN OPEN PascalBasic, PascalWizardFiles, MFTypes, MFProcArray, MFExternals, MFMath, MFEdges, MFScreen; --:557----566: --SCREEN_PIXEL:ARRAY[SCREEN_ROW,SCREEN_COL]OF PIXEL_COLOR;----:566----569: ScreenStarted: PascalBoolean; ScreenOk: PascalBoolean; --:569----572: WindowOpen: LONG POINTER TO ARRAY WindowNumber OF PascalBoolean _ PascalStaticZone.NEW[ARRAY WindowNumber OF PascalBoolean]; LeftCol: LONG POINTER TO ARRAY WindowNumber OF ScreenCol _ PascalStaticZone.NEW[ARRAY WindowNumber OF ScreenCol]; RightCol: LONG POINTER TO ARRAY WindowNumber OF ScreenCol _ PascalStaticZone.NEW[ARRAY WindowNumber OF ScreenCol]; TopRow: LONG POINTER TO ARRAY WindowNumber OF ScreenRow _ PascalStaticZone.NEW[ARRAY WindowNumber OF ScreenRow]; BotRow: LONG POINTER TO ARRAY WindowNumber OF ScreenRow _ PascalStaticZone.NEW[ARRAY WindowNumber OF ScreenRow]; MWindow: LONG POINTER TO ARRAY WindowNumber OF PascalInteger _ PascalStaticZone.NEW[ARRAY WindowNumber OF PascalInteger]; NWindow: LONG POINTER TO ARRAY WindowNumber OF PascalInteger _ PascalStaticZone.NEW[ARRAY WindowNumber OF PascalInteger]; WindowTime: LONG POINTER TO ARRAY WindowNumber OF PascalInteger _ PascalStaticZone.NEW[ARRAY WindowNumber OF PascalInteger]; --:572----579: RowTransition: LONG POINTER TO TransSpec _ PascalStaticZone.NEW[TransSpec]; --:568----574: OpenAWindow: PROCEDURE[K: WindowNumber,R0,C0,R1,C1: Scaled,X,Y: Scaled] = BEGIN M, N:PascalInteger;--575: IF R0<0 THEN R0_0 ELSE R0_RoundUnscaled[R0];R1_RoundUnscaled[R1]; IF R1>ScreenDepth THEN R1_ScreenDepth; IF R1ScreenDepth THEN R0_R1 ELSE R1_R0; IF C0<0 THEN C0_0 ELSE C0_RoundUnscaled[C0];C1_RoundUnscaled[C1]; IF C1>ScreenWidth THEN C1_ScreenWidth; IF C1ScreenWidth THEN C0_C1 ELSE C1_C0--:575--; WindowOpen^[K]_TRUE;WindowTime^[K]_WindowTime^[K]+1;LeftCol^[K]_C0; RightCol^[K]_C1;TopRow^[K]_R0;BotRow^[K]_R1;--576: M_RoundUnscaled[X];N_RoundUnscaled[Y]-1;MWindow^[K]_C0-M; NWindow^[K]_R0+N--:576--; BEGIN IF NOT ScreenStarted THEN BEGIN ScreenOk_InitScreen[]; ScreenStarted_TRUE; END; END; IF ScreenOk THEN BEGIN BlankRectangle[C0,C1,R0,R1];UpdateScreen[]; END; END;--:574----577:-- DispEdges: PROCEDURE[K: WindowNumber] = BEGIN P, Q:Halfword;AlreadyThere:PascalBoolean;R:PascalInteger;--580:--N:ScreenCol; W, Ww:PascalInteger;B:PixelColor;M, Mm:PascalInteger;D:PascalInteger;MAdjustment:PascalInteger; RightEdge:PascalInteger;MinCol:ScreenCol;--:580 IF ScreenOk THEN IF INT[LeftCol^[K]]=TopRow^[K])DO BEGIN IF R1 THEN SortEdges[P] ELSE IF Mem[ INT[P]+1]^.Hh.Lh=1 THEN IF AlreadyThere THEN GOTO Label30;Mem[ INT[P]+1]^.Hh.Lh_1;--582:--N_0;Ww_0; M_-1;W_0;Q_Mem[ INT[P]+1]^.Hh.Rh;RowTransition^[0]_MinCol; {WHILE TRUE DO BEGIN IF Q=50000 THEN D_RightEdge ELSE D_Mem[Q]^.Hh.Lh; Mm_( PascalDIVPower2[D ,3])+MAdjustment;IF Mm#M THEN BEGIN--583: IF W<=0 THEN BEGIN IF Ww>0 THEN IF M>MinCol THEN BEGIN IF N=0 THEN IF AlreadyThere THEN BEGIN B_0;N_N+1; END ELSE B_1 ELSE N_N+1; RowTransition^[N]_M; END; END ELSE IF Ww<=0 THEN IF M>MinCol THEN BEGIN IF N=0 THEN B_1;N_N+1; RowTransition^[N]_M; END--:583--;M_Mm;W_Ww; END; IF D>=RightEdge THEN GOTO Label40;Ww_Ww+( PascalMODPower2Mask[D ,7])-4;Q_Mem[Q]^.Hh.Rh; END ENDLOOP ; EXITS Label40 => NULL};--584: IF AlreadyThere OR (Ww>0) THEN BEGIN IF N=0 THEN IF Ww>0 THEN B_1 ELSE B _0;N_N+1;RowTransition^[N]_RightCol^[K]; END ELSE IF N=0 THEN GOTO Label30--:584--;--:582--PaintRow[R,B,@RowTransition^,N];EXITS Label30 => NULL}; END--:578--;P_Mem[P]^.Hh.Rh;R_R-1; END ENDLOOP ; UpdateScreen[];WindowTime^[K]_WindowTime^[K]+1; Mem[ INT[CurEdges]+3]^.Hh.Rh_K;Mem[ INT[CurEdges]+4]^.Int_WindowTime^[K]; END; END; END.