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

$RCSfile: GUIEnvSupport.mod $

$Revision: 1.1 $
    $Date: 1994/07/26 18:29:41 $

    Some needful extra definitions and functions for GUIEnvironment

    M2Amiga Modula-2 Compiler V4.3

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

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

  (*$ StackParms:=FALSE Volatile:=FALSE EntryClear:=FALSE LongAlign:=TRUE *)
  (*$ NilChk:=FALSE StackChk:=FALSE ReturnChk:=FALSE RangeChk:=FALSE *)
  (*$ OverflowChk:=FALSE CaseChk:=FALSE *)

  FROM SYSTEM     IMPORT ADR, ADDRESS, CAST;
  FROM ExecL      IMPORT Forbid, Permit;
  FROM GraphicsD  IMPORT TextAttr, TextAttrPtr;
  FROM String     IMPORT Copy;
IMPORT R, D:GUIEnvD, L:GUIEnvL, Gt:GadToolsD, Id:IntuitionD, IL:IntuitionL;

TYPE STRPTR = POINTER TO ARRAY[0..255] OF CHAR;
     LINTPTR= POINTER TO LONGINT;

  PROCEDURE GADDESC(left, top, width, height : CARDINAL):LONGCARD;
  BEGIN
    RETURN LONGCARD(left)*256*256*256+LONGCARD(top)*256*256+LONGCARD(width)*256+LONGCARD(height);
  END GADDESC;

  PROCEDURE GADOBJS(left, top, width, height : CARDINAL):LONGCARD;
  BEGIN
    RETURN LONGCARD(left)*256*256*256+LONGCARD(top)*256*256+LONGCARD(width)*256+LONGCARD(height);
  END GADOBJS;

  PROCEDURE TopazAttr():TextAttrPtr;
  BEGIN
    RETURN ADR(TextAttr{name: ADR('topaz.font'), ySize: 8});
  END TopazAttr;

  PROCEDURE GEHUpdateEntryGadget(gui{R.A0} : D.GUIInfoPtr;
                                 gadget{R.A1} : Id.GadgetPtr) : BOOLEAN;
  VAR GINFO : D.GUIGadgetInfoPtr;
      VA    : ADDRESS;
  BEGIN
    GINFO := D.GUIGadgetInfoPtr(gadget^.userData);
    VA := CAST(ADDRESS, L.GetGUIGadget(gui, gadget^.gadgetID, D.gegVarAddress));
    CASE GINFO^.kind OF
      Gt.integerKind : IF VA # NIL THEN
                         LINTPTR(VA)^ := Id.StringInfoPtr(gadget^.specialInfo)^.longInt;
                         RETURN TRUE;
                       END;
    | Gt.stringKind  : IF GINFO^.string # NIL THEN
                         Copy(STRPTR(VA)^,
                              STRPTR(Id.StringInfoPtr(gadget^.specialInfo)^.buffer)^);
                         RETURN TRUE;
                       END;
    ELSE
    END;
    RETURN FALSE;
  END GEHUpdateEntryGadget;

  PROCEDURE GERequestA(text : ADDRESS; kind : LONGINT;
                       tags : ADDRESS) : LONGINT;
  VAR gui : D.GUIInfoPtr;
      scr : Id.ScreenPtr;
      ret : LONGINT;
  BEGIN
    scr := IL.LockPubScreen(NIL);
    IF scr # NIL THEN
      Forbid;
        gui := L.CreateGUIInfoA(scr^.firstWindow, tags);
        IF gui # NIL THEN
          ret := L.GUIRequestA(gui, text, kind, tags);
          L.FreeGUIInfo(gui);
        ELSE
          ret := gerCreateGUIErr;
        END;
      Permit;
      IL.UnlockPubScreen(NIL, scr);
    ELSE
      ret := gerPubScreenErr;
    END;
    RETURN ret;
  END GERequestA;

END GUIEnvSupport.
