MODULE BUTTEST;

FROM GSXMAIN  IMPORT OpenStation, CRT, CloseStation, VECTOR, DrawMode, replace;
FROM GSXIN    IMPORT Locator, Mouse, CursorX, CursorY;
FROM GSXFILL  IMPORT FillBar, FillPie, FillStyle, FillIndex, hatch, pattern, xxx;
FROM GSXLINE  IMPORT PolyLine, LineType, solid, dot;
FROM GSXBUTON IMPORT BUTTON, CreateButton, CursorAtButton, FlipButtonArea, ExecuteButton;

VAR
  X, Y : CARDINAL;
  C    : CHAR;
  Moved, Terminated : BOOLEAN;
  line : ARRAY [1..2] OF VECTOR;
  i    : CARDINAL;
  Break : BOOLEAN;
  B1,B2,B3 : BUTTON;

PROCEDURE Pie ( c : CHAR );
BEGIN
  FillStyle ( hatch );
  FillIndex ( xxx );
  DrawMode ( replace );
  CASE c OF
  ' ' : FillPie ( 16384, 16384, 2000, 0, 1800 );
| '!' : FillPie ( 16384, 16384, 2000, 0, 1900 );
| '"' : FillPie ( 16384, 16384, 2000, 0 ,2000 );
  END;
END Pie;

PROCEDURE Bar ( c : CHAR );
BEGIN
  FillStyle ( pattern );
  FillIndex ( 5 );
  DrawMode ( replace );
  CASE c OF
  ' ' : FillBar ( 16384, 16384, 2048, 2048 );
| '!' : FillBar ( 16384, 16384, 3072, 3072 );
| '"' : FillBar ( 16384, 16384, 4096, 4096 );
  END;
END Bar;

PROCEDURE Ende ( c : CHAR );
BEGIN
  Break := TRUE;
END Ende;

BEGIN
  OpenStation ( CRT );
  LineType ( dot );
  FOR i := 0 TO 32 DO
    Y := i * 1024;
    IF Y > 32767 THEN Y := 32767; END;
    line[1].X := 0;     line[1].Y := Y;
    line[2].X := 32767; line[2].Y := Y;
    PolyLine ( 2, line );
  END;
  LineType ( solid );
  FOR i := 0 TO 32 DO
    X := i * 1024;
    IF X > 32767 THEN X := 32767; END;
    line[1].X := X;     line[1].Y := 0;
    line[2].X := X;     line[2].Y := 32767;
    PolyLine ( 2, line );
  END;
  B1 := CreateButton ( 1000, 1000, 2000, 2000, Pie );
  B2 := CreateButton ( 10000,10000,2000, 2000, Bar );
  B3 := CreateButton ( 1000, 30000,2000, 2000, Ende );
  FillStyle ( pattern );
  FillIndex ( 1 ); FillBar ( 1000, 1000, 2000, 2000 );
  FillIndex ( 2 ); FillBar ( 10000,10000,2000, 2000 );
  FillIndex ( 3 ); FillBar ( 1000, 30000,2000, 2000 );
  REPEAT
    Break := FALSE;
    Locator ( Mouse, C, Moved, Terminated );
    IF CursorAtButton ( B1 ) THEN
      FlipButtonArea ( B1 ); ExecuteButton ( B1, C ); FlipButtonArea ( B1 );
    END;
    IF CursorAtButton ( B2 ) THEN
      FlipButtonArea ( B2 ); ExecuteButton ( B2, C ); FlipButtonArea ( B2 );
    END;
    IF CursorAtButton ( B3 ) THEN
      FlipButtonArea ( B3 ); ExecuteButton ( B3, C );
    END;
  UNTIL Break;
  CloseStation;
END BUTTEST.
                                                      