(* -------------------------------------------------------------------------
  :Program.       Coords
  :Contents.      shows the position of the mouse
  :Author.        Holger Bolay
  :Address.       Hoffmannstraße 168
  :Address.       D-7250 Leonberg 1
  :History.       v1.0 Holger 21-Mar-92
  :Copyright.     Public Domain
  :Language.      Oberon
  :Translator.    AMIGA OBERON v2.42d
------------------------------------------------------------------------- *)
MODULE Coords;

IMPORT y:  SYSTEM,
       ol: OberonLib,
       g:  Graphics,
       d:  Dos,
       e:  Exec,
       I:  Intuition,
       u:  Utility,
       so: StringOps;

VAR mywin:  I.WindowPtr;
    nw:     I.NewWindow;
    title:  ARRAY 40 OF CHAR;
    tmp:    ARRAY 5 OF CHAR;
    msg:    I.IntuiMessagePtr;
    time:   d.Date;
    gad:    I.GadgetPtr;
    type:   SET;
    Depth:  INTEGER;

CONST SysSet = y.VAL (SET, I.sysGadget);
      CloseSet = y.VAL (SET, I.close) + SysSet;
      wUpSet = y.VAL (SET, I.wUpFront) + SysSet;
      wDownSet = y.VAL (SET, I.wDownBack) + SysSet;
      TitleTemplate = "x: 0000  y: 0000\o$VER: Coords 1.0 (21-Mar-92)\n\r";

PROCEDURE OverWriteInt(li: LONGINT; l, p: INTEGER; z: BOOLEAN);
BEGIN
  so.IntToStr(li, tmp);
  IF z THEN
    so.LeftInsertZeroes(tmp, l);
  ELSE
    so.RightAdjust(tmp, l);
  END; (* IF *)
  so.OverWrite(title, tmp, p);
END OverWriteInt;

BEGIN
  IF d.dos.lib.version<37 THEN HALT(20) END;
  mywin := I.OpenWindowTagsA(NIL,
               I.waLeft,          0,
               I.waTop,           0,
               I.waWidth,         1,
               I.waHeight,        1,
               I.waIDCMP,         y.VAL(LONGINT, LONGSET{I.closeWindow}),
               I.waCloseGadget,   I.LTRUE,
               I.waDepthGadget,   I.LTRUE,
               I.waDragBar,       I.LTRUE,
               I.waSimpleRefresh, I.LTRUE,
               I.waNoCareRefresh, I.LTRUE,
               I.waRMBTrap,       I.LTRUE,
             u.done);

  IF mywin = NIL THEN HALT(20) END;
  nw.height := mywin^.wScreen.barHeight;

  title := TitleTemplate;
  nw.width := g.TextLength(y.ADR(mywin^.wScreen^.rastPort),
                           title, 17);
  gad := mywin^.firstGadget;
  Depth := 0;
  WHILE gad#NIL DO
    type := y.VAL (SET, gad^.gadgetType);
    IF (type*CloseSet = CloseSet) OR (type*wUpSet = wUpSet) OR
       (type*wDownSet = wDownSet) THEN
      INC(nw.width, gad.width);
    END;
    IF (type*wUpSet = wUpSet) OR (type*wDownSet = wDownSet) THEN
      INC(Depth, gad.width);
    END;
    gad := gad^.nextGadget;
  END;
  I.MoveWindow(mywin, mywin^.wScreen^.width-Depth-nw.width, 0);
  I.SizeWindow(mywin, nw.width, nw.height);
  LOOP
    d.Delay(5);
    OverWriteInt(mywin^.mouseX+mywin^.leftEdge, 4, 3, TRUE);
    OverWriteInt(mywin^.mouseY+mywin^.topEdge, 4, 12, TRUE);
    I.SetWindowTitles(mywin, y.ADR(title), -1);
    msg := e.GetMsg(mywin^.userPort);
    IF msg#NIL THEN
      IF I.closeWindow IN msg^.class THEN
         e.ReplyMsg(msg);
         EXIT;
      END;
      e.ReplyMsg(msg);
    END;
  END; (* LOOP *)
CLOSE
  IF mywin#NIL THEN I.CloseWindow(mywin); mywin := NIL END;
END Coords.
