(* ------------------------------------------------------------------------
  :Program.       PubWinTest
  :Contents.      Opens centered test window on visible area of DefPubScr
  :Author.        Stefan Hellwig
  :Address.       Oberer Kirchweg 12
  :Address.       3501 Schauenburg 1
  :Address.       Federal Republic of Germany
  :EMail.         Z-Netz : STEFAN_HELLWIG@URANUS.ZER
  :History.       V37.1 30-Aug-92
  :Copyright.     (c) 1992 by Stefan Hellwig. Public Domain.
  :Copyright.     For non-commercial use only !
  :Language.      Oberon
  :Translator.    AMIGA OBERON v2.14d
  :Remark.        AmigaOS 2.04 and above only !
  :Remark.        USES ScreenSupport !
  ------------------------------------------------------------------------ *)

MODULE PubWinTest;

IMPORT
     OS2ChkSmall,
     E : Exec,
     S : SYSTEM,
     I : Intuition,
     RQ: Requests,
     SS: ScreenSupport,     (* ScreenSupport - Modul *)
     G : Graphics,
     U : Utility;

VAR
     IDCMPMsg: I.IntuiMessagePtr;
     NewWin  : I.NewWindow;
     WinPtr  : I.WindowPtr;
     Ret     : LONGSET;
     Req     : I.RequesterPtr;

     PubScreen : I.ScreenPtr;

     VisArea   : SS.VisibleAreaPtr;
     WinArea   : SS.VisibleAreaPtr;

     done      : BOOLEAN;

CONST
     MinWinHeight = 50;
     MinWinWidth  = 100;

     StdWidth = 200;
     StdHeight = 100;

BEGIN
     PubScreen := I.LockPubScreen(NIL);
     RQ.Assert(PubScreen#NIL, "Unable to lock public screen !");

     VisArea := SS.GetVisibleArea(PubScreen, MinWinHeight, MinWinWidth);
     RQ.Assert(VisArea#NIL, "No visible Area !");

     WinArea := SS.CenterWindow(VisArea, StdHeight, StdWidth);
     RQ.Assert(WinArea#NIL, "No window visible Area !");

     WinPtr := I.OpenWindowTags(NewWin, I.waTop, WinArea.top,
                                        I.waLeft, WinArea.left,
                                        I.waHeight, StdHeight,
                                        I.waWidth, StdWidth,
                                        I.waDetailPen, I.autoFrontPen,
                                        I.waBlockPen, I.autoBackPen,
                                        I.waCloseGadget, I.LTRUE,
                                        I.waDragBar, I.LTRUE,
                                        I.waActivate, I.LTRUE,
                                        I.waTitle, S.ADR("= PubWinTest ="),
                                        I.waIDCMP, S.VAL(LONGINT,
                                                   LONGSET{I.closeWindow}),
                                        I.waPubScreen, PubScreen,
                                        I.waPubScreenFallBack, I.LTRUE,
                                        U.done);

     RQ.Assert(WinPtr#NIL, "PubWinTest: OpenWindowTags() failed !");
     I.UnlockPubScreen(NIL, PubScreen);

     (* Abfrage des IDCMP des Windows -> CloseWindow *)

     WHILE NOT done DO
         done := FALSE;
         Ret := E.Wait(LONGSET{WinPtr.userPort.sigBit});
         IF WinPtr.userPort.sigBit IN Ret THEN done := TRUE END;
         LOOP
            IDCMPMsg := E.GetMsg(WinPtr.userPort);
            IF IDCMPMsg = NIL THEN EXIT END;
            E.ReplyMsg(IDCMPMsg);
         END;
     END;

CLOSE
     SS.FreeVisibleArea(VisArea);  (* sicherer Call bei NIL *)
     SS.FreeVisibleArea(WinArea);
     IF WinPtr#NIL THEN I.CloseWindow(WinPtr) END;
END PubWinTest.


