(****************************************************************************

$RCSfile: GUIEnvSupport.mod $

$Revision: 1.1 $
    $Date: 1994/07/19 20:20:34 $

    Some needful extra definitions and functions for GUIEnvironment

    Oberon-A Oberon-2 Compiler V4.5ß (Release 1.3)

  Copyright © 1994, Carsten Ziegeler
                    Augustin-Wibbelt-Str.7, 33106 Paderborn, Germany

****************************************************************************)
MODULE GUIEnvSupport;

(* $P- Allow non-portable code *)

IMPORT SYS := SYSTEM, E := Exec, I := Intuition, G := Graphics, U:=Utility,
       GUI:=GUIEnv;

VAR topazfont : G.TextAttr;

CONST

(* -------------- screen support: displayIDs ----------------------------- *)

  gesHiresPalID  * = G.hiresKey + G.palMonitorID;
  gesHiresID     * = G.hiresKey + G.defaultMonitorID;
  gesLoresPalID  * = G.loresKey + G.palMonitorID;
  gesLoresID     * = G.loresKey + G.defaultMonitorID;


(* --------------------------- GERequest error codes -------------------- *)

  gerCreateGUIErr * = -100;
  gerPubScreenErr * = -101;


(* -------------------------- tag data support --------------------------- *)

  gegShiftLeft   * = 256*256*256;
  gegShiftTop    * = 256*256;
  gegShiftWidth  * = 256;
  gegShiftHeight * = 1;

  PROCEDURE GADDESC * (left, top, width, height : INTEGER) : LONGINT;
  BEGIN
    RETURN gegShiftLeft * left + gegShiftTop * top + gegShiftWidth * width + gegShiftHeight * height;
  END GADDESC;

  PROCEDURE GADOBJS * (left, top, width, height : INTEGER) : LONGINT;
  BEGIN
    RETURN gegShiftLeft * left + gegShiftTop * top + gegShiftWidth * width + gegShiftHeight * height;
  END GADOBJS;

(* ------------------------------- Font support ------------------------- *)

  PROCEDURE TopazAttr * ():G.TextAttrPtr;
  BEGIN
    topazfont.name := SYS.ADR("topaz.font");
    topazfont.ySize:= 8;
    RETURN SYS.ADR(topazfont);
  END TopazAttr;

(* ----------------------------- Requester support ---------------------- *)

  PROCEDURE GERequestA * (text : E.STRPTR; kind : LONGINT;
                          tags : ARRAY OF U.TagItem) : LONGINT;
  VAR gui : GUI.GUIInfoPtr;
      scr : I.ScreenPtr;
      ret : LONGINT;
  BEGIN
    scr := I.base.LockPubScreen('');
    IF scr # NIL THEN
      E.base.Forbid;
        gui := GUI.base.CreateGUIInfoA(scr^.firstWindow, tags);
        IF gui # NIL THEN
          ret := GUI.base.GUIRequestA(gui, text, kind, tags);
          GUI.base.FreeGUIInfo(gui);
        ELSE
          ret := gerCreateGUIErr;
        END;
      E.base.Permit;
      I.base.UnlockPubScreen('', scr);
    ELSE
      ret := gerPubScreenErr;
    END;
    RETURN ret;
  END GERequestA;

END GUIEnvSupport.
