(*-------------------------------------------------------------------------*)
(*                                                                         *)
(*  Amiga Oberon Library MODULE: XYPlane              Date: 02-Nov-92      *)
(*                                                                         *)
(*   © 1992 BY Fridtjof Siebert                                            *)
(*                                                                         *)
(*-------------------------------------------------------------------------*)

MODULE XYplane;

IMPORT      Display,
       I := Intuition,
       u := Utility,
       e := Exec;

CONST
  erase * = 0;
  draw  * = 1;

VAR
  window: Display.WindowPtr;
  X*, Y*, W*, H*: INTEGER;
  tags: POINTER TO ARRAY 3 OF LONGINT;


PROCEDURE Clear*;

BEGIN
  Display.Clear(window);
END Clear;


PROCEDURE Open *;
BEGIN
  NEW(window);
  IF ~ Display.OpenWindowTags(window,NIL,TRUE,"XY Plane",0,0,640,200,NIL,TRUE,tags) THEN HALT(20) END;
  Display.Jam1(window);
  IF ~ I.ModifyIDCMP(window.window,LONGSET{I.vanillaKey,I.closeWindow}) & (I.int.libNode.version>=36) THEN
    HALT(20)
  END;
  X := 0;
  Y := 0;
  W := window.width;
  H := window.height;
END Open;


PROCEDURE Dot * (x,y,mode: INTEGER);
BEGIN
  Display.FrontPen(window,SHORT(mode));
  Display.Dot(window,x,window.height-y);
END Dot;


PROCEDURE IsDot * (x,y: INTEGER): BOOLEAN;
BEGIN
  RETURN Display.DotColor(window,x,window.height-y)#erase;
END IsDot;


PROCEDURE Key * (): CHAR;
VAR
  msg: I.IntuiMessagePtr;
  ch : CHAR;
BEGIN
  ch := 0X;
  msg := e.GetMsg(window.window.userPort);
  WHILE msg#NIL DO
    IF I.vanillaKey IN msg.class THEN
      ch := CHR(msg.code);
    ELSIF I.closeWindow IN msg.class THEN
      ch := "Q"
    END;
    e.ReplyMsg(msg);
    msg := e.GetMsg(window.window.userPort);
  END;
  RETURN ch;
END Key;


BEGIN
  NEW(tags);
  tags[0] := I.waSizeGadget;
  tags[1] := I.LFALSE;
  tags[2] := u.done;
  Open;
END XYplane.


