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

     $RCSfile: IntuiSup.mod $
  Description: Interface to intuisup.library

   Created by: fjc (Frank Copeland)
    $Revision: 2.5 $
      $Author: fjc $
        $Date: 1994/08/08 16:05:28 $

  Copyright © 1994, Frank Copeland.
  This file is part of the Oberon-A Library.
  See Oberon-A.doc for conditions of use and distribution.

***************************************************************************)

MODULE IntuiSup;

(*
** $C- CaseChk       $I- IndexChk  $L+ LongAdr   $N- NilChk
** $P- PortableCode  $R- RangeChk  $S- StackChk  $T- TypeChk
** $V- OvflChk       $Z- ZeroVars
*)

IMPORT
  E := Exec, G := Graphics, DF := DiskFont, I := Intuition,
  SYS := SYSTEM;


(* $Revision Header *** Header built automatically - do not edit! ***********
 *
 *      (C) Copyright 1991 by Torsten Jürgeleit
 *
 *      Name .....: intuisup.h
 *      Created ..: Sunday 22-Dec-91 20:34:40
 *      Revision .: 14
 *
 *      Date        Author                 Comment
 *      =========   ====================   ====================
 *      08-Aug-92   Torsten Jürgeleit      new flags
 *                                         gadgetDataFlagInputCENTER/RIGHT
 *      06-Aug-92   Torsten Jürgeleit      new flag
 *                                         gadgetDataFlagListviewEntryCOLOR
 *      28-Jul-92   Torsten Jürgeleit      different centering types for
 *                                         requesters
 *      28-Jul-92   Torsten Jürgeleit      open window centered over position
 *                                         of mouse pointer
 *      11-Jul-92   Torsten Jürgeleit      use RAWKEY instead of VANILLAKEY
 *                                         for gadget hotkeys
 *      01-Jul-92   Torsten Jürgeleit      added support for custom slider
 *                                         knob image
 *      21-Jun-92   Torsten Jürgeleit      check for compiler and define
 *                                         differences
 *      03-Jun-92   Torsten Jürgeleit      alternate color for menu item texts
 *      14-Apr-92   Torsten Jürgeleit      neq flag gadgetDataFlagNoCLEAR
 *      12-May-92   Torsten Jürgeleit      text colors for IClearWindow()
 *      30-Apr-92   Torsten Jürgeleit      rasters for IClearWindow() and
 *                                         requesters
 *      01-Apr-92   Torsten Jürgeleit      changed parameter size of
 *                                         IModifyGadget() for new value of
 *                                         useCurrentValue 31
 *      31-Mar-92   Torsten Jürgeleit      changed useCurrentValue from ~0L
 *                                         to 31
 *      21-Mar-92   Torsten Jürgeleit      flags for converting numbers with
 *                                         string gadgets
 *      22-Dec-91   Torsten Jürgeleit      Created this file!
 *
 ****************************************************************************
 *
 *      Includes, defines, structures, prototypes and pragmas for IntuiSup
 *      library
 *
 * $Revision Header ********************************************************)


CONST

        (* Defines for library *)

  Name    * = "intuisup.library";
  intuisupName * = Name;
  version * = 4;

        (* Defines for render *)

  maxRenderImages = 11;

  riInnerWindow * = 0; (* use upper left corner of inner window as location (0,0) *)
  riBackFill    * = 1; (* fill window back ground with different color *)
  riAvailFonts  * = 2; (* scan available fonts and use this list for IAskFont/IOpenFont *)

TYPE

  RenderInfoPtr* = CPOINTER TO RenderInfo;
  RenderInfo* = RECORD
    id                   * : LONGINT; (* id = 'ISUP' *)
    screen               * : I.ScreenPtr;
    screenWidth          * : E.UWORD;
    screenHeight         * : E.UWORD;
    screenDepth          * : SHORTINT;
    windowBorderTop      * : SHORTINT;
    windowBorderLeft     * : SHORTINT;
    windowBorderRight    * : SHORTINT;
    windowBorderBottom   * : SHORTINT;
    highlightPen         * : SHORTINT;
    shadowPen            * : SHORTINT;
    textPen1             * : SHORTINT;
    textPen2             * : SHORTINT;
    backPen              * : SHORTINT;
    flags                * : E.WSET;
    imageDataSize        * : E.ULONG;
    imageData            * : E.APTR;
    availFontsHeaderSize * : E.ULONG;
    availFontsHeader     * : DF.AvailFontsHeaderPtr;
    textFont             * : G.TextFontPtr;
    textAttr             * : G.TextAttr;
    images               * : ARRAY maxRenderImages OF I.Image;
  END; (* RenderInfo *)

CONST

  dataEnd * = 0;          (* mark end of data arry *)

  id *      = 49535550H;  (* "ISUP" *)

        (* Defines for open window flags *)

  owCenterScreen * = 0;   (* center window on screen *)
  owRenderPens   * = 1;   (* use render pens for detail and backfill pen *)
  owCenterMouse  * = 2;   (* center window over current position of mouse pointer *)

        (* Defines for clear window flags *)

  cwCustomDrawMode * = 0; (* don't change draw mode *)
  cwCustomColor    * = 1; (* don't change background color *)
  cwNormalColor    * = 2; (* use normal background color *)
  cwUseRaster      * = 3; (* use standard raster for window background *)
  cwAbsolutePos    * = 4; (* don't add window border offset to given upper left position *)
  cwText1Color     * = 5; (* use text color 1 *)
  cwText2Color     * = 6; (* use text color 2 *)

        (* Defines for texts *)

  text           * = 1;
  numUnsignedDec * = 2;
  numSignedDec   * = 3;
  numHex         * = 4;
  numBin         * = 5;

  tdBold             * = 0;
  tdItalic           * = 1;
  tdUnderlined       * = 2;
  tdAbsolutePos      * = 3;  (* absolute text pos given - don't add border offsets *)
  tdCenter           * = 4;  (* center text with in window width *)
  tdPlaceLeft        * = 5;  (* place text left of given left edge *)
  tdColor2           * = 6;  (* use 2nd text render pen *)
  tdComplement       * = 7;  (* use complement of front and back pen *)
  tdBackFill         * = 8;  (* use draw mode JAM2 to fill text background with riBackPen *)
  tdNoPrint          * = 9;  (* don't print text - only calc width *)
  tdNumIdentifier    * = 10; (* convert number with normal (assmebler style) leading identifier `$' or `%' *)
  tdNumCStyle        * = 11; (* use C style identifier `0x' for hex numbers *)
  tdNumLeadingZeroes * = 12; (* convert number includeing leading zeroes *)
  tdNumUpperCase     * = 13; (* use upper case characters for hex number *)

  cIdentifier    * = 0; (* convert number with normal (assmebler style) leading identifier `$' or `%' *)
  cCStyle        * = 1; (* use C style identifier `0x' for hex numbers *)
  cLeadingZeroes * = 2; (* convert number includeing leading zeroes *)
  cUpperCase     * = 3; (* use upper case characters for hex number *)

TYPE

        (* Structures for texts *)

  TextDataPtr * = CPOINTER TO TextData;
  TextData * = RECORD
    type     * : E.UWORD;
    flags    * : E.WSET;
    leftEdge * : INTEGER;
    topEdge  * : INTEGER;
    text     * : E.STRPTR;
    textAttr * : G.TextAttrPtr;
  END; (* TextData *)
  TextDataListPtr * = CPOINTER TO ARRAY 32767 OF TextData;

CONST

        (* Defines for borders *)

  box1Out * = 1;
  box1In  * = 2;
  box2Out * = 3;
  box2In  * = 4;

TYPE

        (* Structures for borders *)

  BorderDataPtr * = CPOINTER TO BorderData;
  BorderData * = RECORD
    type * : E.UWORD;
    leftEdge * : INTEGER;
    topEdge * : INTEGER;
    width * : E.UWORD;
    height * : E.UWORD;
  END; (* BorderData *)
  BorderDataListPtr * = CPOINTER TO ARRAY 32767 OF BorderData;

CONST

        (* Defines for gadgets *)

  button         * = 1;  (* button gadget *)
  check          * = 2;  (* checkbox gadget *)
  mx             * = 3;  (* mutual exclude gadget *)
  string         * = 4;  (* string input gadget *)
  integer        * = 5;  (* integer input gadget *)
  slider         * = 6;  (* slider gadget *)
  scroller       * = 7;  (* scroller gadget *)
  cycle          * = 8;  (* cycle gadget *)
  count          * = 9;  (* count gadget *)
  listView       * = 10; (* list view gadget *)
  palette        * = 11; (* palette gadget *)

  gdDisabled             * = 0;  (* gadget disabled (ghosted) - default enabled *)
  gdNoBorder             * = 1;  (* no gadget border - default with border *)
  gdHighComp             * = 2;  (* highliting by complement - default by select border *)
  gdOrientationVert      * = 3;  (* vertical orientation - default horizontal *)
  gdHotKey               * = 4;  (* hotkey given - default none *)
  gdNoTextOutput         * = 5;  (* no text output, but scan gadget text for hotkey *)
  gdTextLeft             * = 6;  (* place text left of gadget *)
  gdTextRight            * = 7;  (* place text right of gadget *)
  gdTextAbove            * = 8;  (* place text above of gadget *)
  gdTextBelow            * = 9;  (* place text below of gadget *)
  gdTextColor2           * = 10; (* use 2nd text render pen for gadget text *)
  gdButtonToggle         * = 11; (* button gadgets: toggle button - default no toggle *)
  gdButtonImage          * = 12; (* button gadgets: render image - default no image *)
  gdInputAutoActivate    * = 13; (* input gadgets: acivate after GADGETUP next or previous input gadget *)
  gdStringUnsignedDec    * = 14; (* string gadgets: input default no pointer to string but an unsigned decimal number *)
  gdStringSignedDec      * = 15; (* string gadgets: input default no pointer to string but an signed decimal number *)
  gdStringHex            * = 16; (* string gadgets: input default no pointer to string but an hex number *)
  gdStringBin            * = 17; (* string gadgets: input default no pointer to string but an binary number *)
  gdScrollerNoArrows     * = 18; (* scroller gadget: no arrows - default with arrows *)
  gdCountSignedDec       * = 19; (* count gadget: signed dec - default unsigned dec *)
  gdListviewReadOnly     * = 20; (* list view gadget: read only - default selection enabled *)
  gdListviewShowSelected * = 21; (* list view gadget: show last selected entry - default no *)
  gdPaletteNoIndicator   * = 22; (* palette gadget: no current color indicator - default with indicator *)
  gdPaletteIndicatorTop  * = 23; (* palette gadget: place indicator at top - default at left *)
  gdMovePointer          * = 24; (* move mouse pointer to center of this gadget *)
  gdNoClear              * = 25; (* don't clear area occupied by this gadget before drawing *)
  gdSliderImage          * = 26; (* kludge to define image for knob of proportional gadget in gdTextAttr (if text then default TextAttr used) *)
  gdListviewEntryColor   * = 27; (* list view gadget: if first char of an entry text equals <Ctrl A> ($01) then this char will be skipped and the rest of this entry text will be printed in a different color *)
  gdInputCenter          * = 28; (* input gadgets: center input string within gadget *)
  gdInputRight           * = 29; (* input gadgets: right justify input string within gadget *)

  giButton       * = { I.idcmpGadgetUp,   I.idcmpRawKey };
  giCheck        * = { I.idcmpGadgetDown, I.idcmpRawKey };
  giMX           * = { I.idcmpGadgetDown, I.idcmpRawKey };
  giString       * = { I.idcmpGadgetUp,   I.idcmpRawKey };
  giInteger      * = { I.idcmpGadgetUp,   I.idcmpRawKey };
  giSlider       * =
    { I.idcmpGadgetUp,   I.idcmpMouseMove, I.idcmpRawKey };
  giScroller     * =
    { I.idcmpGadgetDown, I.idcmpGadgetUp,  I.idcmpMouseMove,
      I.idcmpIntuiTicks, I.idcmpRawKey };
  giCycle        * = { I.idcmpGadgetUp,   I.idcmpRawKey };
  giCount        * =
    { I.idcmpGadgetDown, I.idcmpGadgetUp,  I.idcmpMouseMove,
      I.idcmpRawKey };
  giListview     * =
    { I.idcmpGadgetDown, I.idcmpGadgetUp,  I.idcmpMouseMove,
      I.idcmpIntuiTicks, I.idcmpRawKey };
  giPalette      * = { I.idcmpGadgetUp,   I.idcmpRawKey };
  giAll          * =
    { I.idcmpGadgetDown, I.idcmpGadgetUp,  I.idcmpMouseMove,
      I.idcmpIntuiTicks, I.idcmpRawKey };

  useCurrentValue       * = 80000000H;
    (* used for setgadgetattributes() to indicate data for which to use
       the current value *)

TYPE

  GadgetList * = CPOINTER TO RECORD END;
  TextArrayPtr * = CPOINTER TO ARRAY 32767 OF E.STRPTR;

        (* Structures for gadgets *)

  GadgetDataPtr * = CPOINTER TO GadgetData;
  GadgetData * = RECORD
    type     * : E.ULONG;
    flags    * : SET;
    leftEdge * : E.UWORD;
    topEdge  * : E.UWORD;
    width    * : E.UWORD;
    height   * : E.UWORD;
    text     * : E.STRPTR;
    textAttr * : G.TextAttrPtr;
  END; (* GadgetData *)

  StandardDataPtr * = CPOINTER TO StandardData;
  StandardData * = RECORD (GadgetData) (* standard data struct *)
    data1 * : LONGINT;
    data2 * : LONGINT;
    data3 * : E.APTR;
  END; (* StandardData *)

  ButtonDataPtr * = CPOINTER TO ButtonData;
  ButtonData * = RECORD (GadgetData) (* for button gadgets *)
    selected     * : E.ULONG;    (* selection state for toggle buttons - ZERO * = unselected, non ZERO * = selected *)
    normalRender * : I.ImagePtr; (* normal render image *)
    selectRender * : I.ImagePtr; (* select render image *)
  END; (* ButtonData *)

  CheckDataPtr * = CPOINTER TO CheckData;
  CheckData * = RECORD (GadgetData) (* for check gadgets *)
    selected * : E.ULONG; (* selection state - ZERO * = unselected, non ZERO * = selected *)
    pad1     * : E.ULONG;
    pad2     * : E.ULONG;
  END; (* CheckData *)

  MXDataPtr * = CPOINTER TO MXData;
  MXData * = RECORD (GadgetData) (* for mutual exclude gadgets *)
    spacing     * : E.ULONG;      (* pixel spacing between MX gadgets *)
    activeEntry * : E.ULONG;      (* num of active entry from text array *)
    textArray   * : TextArrayPtr; (* ptr to MX text ptr array *)
  END; (* MXData *)

  InputDataPtr * = CPOINTER TO InputData;
  InputData * = RECORD (GadgetData) (* for string and integer gadgets *)
    len          * : E.ULONG; (* len of input buffer *)
    activateNext * : E.UWORD; (* num of next string/num gadget to activate *)
    activatePrev * : E.UWORD; (* num of previous string/num gadget to activate *)
    default      * : E.APTR;  (* string: default text [syntax: "text"] *)
                              (* integer: default number [syntax: (VOID * )num] *)
  END; (* InputData *)

  SliderDataPtr * = CPOINTER TO SliderData;
  SliderData * = RECORD (GadgetData) (* for slider gadgets *)
    min   * : LONGINT; (* min level *)
    max   * : LONGINT; (* max level *)
    level * : LONGINT; (* current slider level *)
  END; (* SliderData *)

  ScrollerDataPtr * = CPOINTER TO ScrollerData;
  ScrollerData * = RECORD (GadgetData) (* for scroller gadgets *)
    visible * : E.ULONG; (* visible entries *)
    total   * : E.ULONG; (* total entries *)
    top     * : E.ULONG; (* current top entry *)
  END; (* ScrollerData *)

  CycleDataPtr * = CPOINTER TO CycleData;
  CycleData * = RECORD (GadgetData) (* for cycle gadget *)
    spacing   * : E.ULONG;      (* pixel spacing between pop up cycle list entries *)
    active    * : E.ULONG;      (* num of current cycle text ptr array entry *)
    textArray * : TextArrayPtr; (* ptr to cycle text ptr array *)
  END; (* CycleData *)

  CountDataPtr * = CPOINTER TO CountData;
  CountData * = RECORD (GadgetData) (* for count gadget *)
    min   * : E.ULONG; (* min value *)
    max   * : E.ULONG; (* max value *)
    value * : E.ULONG; (* current count value *)
  END; (* CountData *)

  ListViewDataPtr * = CPOINTER TO ListViewData;
  ListViewData * = RECORD (GadgetData) (* for list view gadget *)
    spacing * : E.ULONG;   (* pixel spacing between list view entries *)
    top     * : E.ULONG;   (* current top entry *)
    list    * : E.ListPtr; (* current list ptr *)
  END; (* ListViewData *)

  PaletteDataPtr * = CPOINTER TO PaletteData;
  PaletteData * = RECORD (GadgetData) (* for palette gadget *)
    depth       * : E.ULONG; (* num of bitplanes for palette *)
    colorOffset * : E.ULONG; (* first color of palette *)
    activeColor * : E.ULONG; (* selected color *)
  END; (* SpecialData *)

CONST

        (* Defines for auto request *)

  arBackFill       * = 0;
  arRenderPens     * = 1;
  arTextCenter     * = 2;
  arTextColor2     * = 3;
  arHotKey         * = 4;
  arBeep           * = 5;
  arMovePointerPos * = 6;
  arMovePointerNeg * = 7;
  arDrawRaster     * = 8; (* draw raster around text area *)
  arCenterMouse    * = 9; (* center last gadget of auto requester over current position of mouse pointer *)

        (* Defines for requester *)

  rdBackFill     * = 0;
  rdRenderPens   * = 1;
  rdInnerWindow  * = 2;
  rdAvailFonts   * = 3;
  rdCenterScreen * = 4; (* center requester on window's screen *)
  rdDragGadget   * = 5;
  rdDepthGadget  * = 6;
  rdDrawRaster   * = 7; (* draw raster between FIRST BORDER and window border - FIRST BORDER will not be used further *)
  rdCenterWindow * = 8; (* center requester on window *)
  rdCenterMouse  * = 9; (* center requester over current position of mouse pointer *)

TYPE

        (* Structures for requester *)

  RequesterListPtr * = CPOINTER TO RequesterList;
  RequesterList * = RECORD
    renderInfo * : RenderInfoPtr;
    window     * : I.WindowPtr;   (* window requester displayed on *)
    reqWindow  * : I.WindowPtr;   (* window of requester *)
    gadgetList * : GadgetList;    (* requester gadgets *)
    id         * : LONGINT;       (* id = 'ISUP' *)
    flags      * : SET;
    mouseX     * : INTEGER;       (* saved position of mouse pointer before displaying requester *)
    mouseY     * : INTEGER;       (* saved position of mouse pointer before displaying requester *)
  END; (* RequesterList *)

  RequesterDataPtr * = CPOINTER TO RequesterData;
  RequesterData * = RECORD
    leftEdge * : INTEGER;
    topEdge  * : INTEGER;
    width    * : INTEGER;
    height   * : INTEGER;
    flags    * : SET;
    title    * : E.STRPTR;
    texts    * : TextDataPtr;
    borders  * : BorderDataPtr;
    gadgets  * : GadgetDataPtr;
  END; (* RequesterData *)

CONST

        (* Defines for menus *)

  title   * = 1;
  item    * = 2;
  subItem * = 3;

  mdDisabled   * = 0; (* disable menu or menu item *)
  mdAttribute  * = 1; (* attribute menu item *)
  mdSelected   * = 2; (* selected attribute menu item *)
  mdEmptyLine  * = 3; (* insert empty line before this item *)
  mdHighNone   * = 4; (* no highliting *)
  mdHighBox    * = 5; (* highliting with box, otherwise with complement *)
  mdTextColor2 * = 6; (* alternate color for item text *)

TYPE

  MenuList * = CPOINTER TO RECORD END;

        (* Structures for menus *)

  MenuDataPtr * = CPOINTER TO MenuData;
  MenuData * = RECORD
    type          * : E.UWORD;
    flags         * : E.WSET;
    name          * : E.STRPTR;
    commandKey    * : E.STRPTR;
    mutualExclude * : SET;
  END; (* MenuData *)
  MenuDataListPtr * = CPOINTER TO ARRAY 32767 OF MenuData;

CONST

        (* Defines for text file *)

  tfTrimLine         * = 0; (* strip leading and trailing white space *)
  tfSkipComments     * = 1; (* skip C style comments *)
  tfSkipEmptyLines   * = 2; (* skip empty lines *)
  tfLineContinuation * = 3; (* continue line with last character '\' in next line *)

  normal           * = 0;
  eof              * = 1;

  noFileData       * = -1;
  lineTooLong      * = -2;
  noCommentEnd     * = -3;
  readFailed       * = -4;

TYPE

        (* Structures for text file *)

  FileDataPtr * = CPOINTER TO FileData;
  FileData * = RECORD
    line    * : E.STRPTR;
    lineLen * : E.UWORD;
    lineNum * : E.UWORD;
  END; (* FileData *)

TYPE

  PtrData * = CPOINTER TO ARRAY 32767 OF INTEGER;

        (* Structures for mouse pointer *)

  PointerDataPtr * = CPOINTER TO PointerData;
  PointerData * = RECORD
    width   * : E.UBYTE;
    height  * : E.UBYTE;
    xOffset * : SHORTINT;
    yOffset * : SHORTINT;
    data    * : PtrData;
  END; (* PointerData *)


(* --- Library Base variable -------------------------------------------- *)

TYPE

  IntuiSupBasePtr * = CPOINTER TO IntuiSupBase;
  IntuiSupBase * = RECORD (E.Library) END;

VAR

  base *  : IntuiSupBasePtr;


(* --- Library Functions ------------------------------------------------ *)


LIBCALL (base : IntuiSupBasePtr) GetRenderInfo *
  ( screen [8] : I.ScreenPtr;
    flags  [0] : SET )
  : RenderInfoPtr;
  -30;
LIBCALL (base : IntuiSupBasePtr) FreeRenderInfo *
  ( ri [8] : RenderInfoPtr );
  -36;
LIBCALL (base : IntuiSupBasePtr) OpenWindow *
  ( ri     [8] : RenderInfoPtr;
    VAR nw [9] : I.NewWindow;
    flags  [0] : SET )
  : I.WindowPtr;
  -42;
LIBCALL (base : IntuiSupBasePtr) ClearWindow *
  ( ri       [8] : RenderInfoPtr;
    win      [9] : I.WindowPtr;
    leftedge [0] : E.UWORD;
    topedge  [1] : E.UWORD;
    width    [2] : E.UWORD;
    height   [3] : E.UWORD;
    flags    [4] : SET );
  -48;
LIBCALL (base : IntuiSupBasePtr) CloseWindow *
  ( win         [8] : I.WindowPtr;
    morewindows [0] : E.LBOOL );
  -54;
LIBCALL (base : IntuiSupBasePtr) AvailFonts *
  ( ri [8] : RenderInfoPtr )
  : DF.AvailFontsHeaderPtr;
  -60;
LIBCALL (base : IntuiSupBasePtr) AskFont *
  ( ri     [8] : RenderInfoPtr;
    VAR ta [9] : G.TextAttr )
  : G.TextAttrPtr;
  -66;
LIBCALL (base : IntuiSupBasePtr) OpenFont *
  ( ri     [8] : RenderInfoPtr;
    VAR ta [9] : G.TextAttrPtr )
  : G.TextFontPtr;
  -72;

LIBCALL (base : IntuiSupBasePtr) DisplayTextsA *
  ( ri       [8] : RenderInfoPtr;
    win      [9] : I.WindowPtr;
    td      [10] : ARRAY OF TextData;
    hoffset  [0] : INTEGER;
    voffset  [1] : INTEGER;
    lta     [11] : TextArrayPtr );
  -78;
LIBCALL (base : IntuiSupBasePtr) DisplayTextsPtr *
  ( ri       [8] : RenderInfoPtr;
    win      [9] : I.WindowPtr;
    td      [10] : TextDataListPtr;
    hoffset  [0] : INTEGER;
    voffset  [1] : INTEGER;
    lta     [11] : TextArrayPtr );
  -78;
LIBCALL (base : IntuiSupBasePtr) PrintText *
  ( ri        [8] : RenderInfoPtr;
    win       [9] : I.WindowPtr;
    text     [10] : ARRAY OF CHAR;
    leftedge  [0] : E.UWORD;
    topedge   [1] : E.UWORD;
    type      [2] : E.UWORD;
    flags     [3] : SET;
    textattr [11] : G.TextAttrPtr )
  : E.UWORD;
  -84;
LIBCALL (base : IntuiSupBasePtr) ConvertUnsignedDec *
  ( num        [0] : E.ULONG;
    VAR buffer [8] : ARRAY OF CHAR;
    flags      [1] : SET )
  : E.UWORD;
  -90;
LIBCALL (base : IntuiSupBasePtr) ConvertSignedDec *
  ( num        [0] : LONGINT;
    VAR buffer [8] : ARRAY OF CHAR;
    flags      [1] : SET )
  : E.UWORD;
  -96;
LIBCALL (base : IntuiSupBasePtr) ConvertHex *
  ( num        [0] : E.ULONG;
    VAR buffer [8] : ARRAY OF CHAR;
    flags      [1] : SET )
  : E.UWORD;
  -102;
LIBCALL (base : IntuiSupBasePtr) ConvertBin *
  ( num        [0] : E.ULONG;
    VAR buffer [8] : ARRAY OF CHAR;
    flags      [1] : SET )
  : E.UWORD;
  -108;

LIBCALL (base : IntuiSupBasePtr) DisplayBordersA *
  ( ri      [8] : RenderInfoPtr;
    win     [9] : I.WindowPtr;
    bd     [10] : ARRAY OF BorderData;
    hoffset [0] : INTEGER;
    voffset [1] : INTEGER );
  -114;
LIBCALL (base : IntuiSupBasePtr) DisplayBordersPtr *
  ( ri      [8] : RenderInfoPtr;
    win     [9] : I.WindowPtr;
    bd     [10] : BorderDataListPtr;
    hoffset [0] : INTEGER;
    voffset [1] : INTEGER );
  -114;
LIBCALL (base : IntuiSupBasePtr) DrawBorder *
  ( ri       [8] : RenderInfoPtr;
    win      [9] : I.WindowPtr;
    leftedge [0] : E.UWORD;
    topedge  [1] : E.UWORD;
    width    [2] : E.UWORD;
    height   [3] : E.UWORD;
    type     [4] : E.UWORD );
  -120;

LIBCALL (base : IntuiSupBasePtr) CreateGadgets *
  ( ri       [8] : RenderInfoPtr;
    VAR gd   [9] : GadgetData;
    hoffset  [0] : INTEGER;
    voffset  [1] : INTEGER;
    lta     [10] : TextArrayPtr )
  : GadgetList;
  -126;
LIBCALL (base : IntuiSupBasePtr) FreeGadgets *
  ( gl [8] : GadgetList );
  -132;
LIBCALL (base : IntuiSupBasePtr) DisplayGadgets *
  ( win [8] : I.WindowPtr;
    gl  [9] : GadgetList );
  -138;
LIBCALL (base : IntuiSupBasePtr) RefreshGadgets *
  ( gl [8] : GadgetList );
  -144;
LIBCALL (base : IntuiSupBasePtr) ModifyGadget *
  ( gl        [8] : GadgetList;
    dataentry [0] : E.UWORD;
    leftedge  [1] : LONGINT;
    topedge   [2] : LONGINT;
    width     [3] : E.ULONG;
    height    [4] : E.ULONG );
  -150;
LIBCALL (base : IntuiSupBasePtr) SetGadgetAttributes *
  ( gl        [8] : GadgetList;
    dataentry [0] : E.UWORD;
    flagmask  [1] : SET;
    flagbits  [2] : SET;
    data1     [3] : SYS.LONGWORD;
    data2     [4] : SYS.LONGWORD;
    data3     [9] : SYS.LONGWORD )
  : E.ULONG;
  -156;
LIBCALL (base : IntuiSupBasePtr) ActivateInputGadget *
  ( gl        [8] : GadgetList;
    dataentry [0] : E.UWORD );
  -162;
LIBCALL (base : IntuiSupBasePtr) GadgetAddress *
  ( gl        [8] : GadgetList;
    dataentry [0] : E.UWORD )
  : I.GadgetPtr;
  -168;
LIBCALL (base : IntuiSupBasePtr) RemoveGadgets *
  ( gl [8] : GadgetList )
  : I.WindowPtr;
  -174;
LIBCALL (base : IntuiSupBasePtr) GetMsg *
  ( uport [8] : E.MsgPortPtr )
  : I.IntuiMessagePtr;
  -180;
LIBCALL (base : IntuiSupBasePtr) ReplyMsg *
  ( imsg [8] : I.IntuiMessagePtr );
  -186;
LIBCALL (base : IntuiSupBasePtr) ConvertRawKeyToASCII *
  ( imsg [8] : I.IntuiMessagePtr )
  : CHAR;
  -294;

LIBCALL (base : IntuiSupBasePtr) AutoRequest *
  ( reqwin        [8] : I.WindowPtr;
    title         [9] : E.STRPTR;
    bodytext     [10] : ARRAY OF CHAR;
    postext      [11] : E.STRPTR;
    negtext       [0] : E.STRPTR;
    posidcmpflags [1] : SET;
    negidcmpflags [2] : SET;
    reqflags      [3] : SET;
    lta           [4] : TextArrayPtr )
  : BOOLEAN;
  -192;
LIBCALL (base : IntuiSupBasePtr) DisplayRequester *
  ( reqwin  [8] : I.WindowPtr;
    VAR rd  [9] : RequesterData;
    lta    [10] : TextArrayPtr )
  : RequesterListPtr;
  -198;
LIBCALL (base : IntuiSupBasePtr) RemoveRequester *
  ( rl [8] : RequesterListPtr );
  -204;

LIBCALL (base : IntuiSupBasePtr) CreateMenuA *
  ( ri   [8] : RenderInfoPtr;
    win  [9] : I.WindowPtr;
    md  [10] : ARRAY OF MenuData;
    ta  [11] : G.TextAttrPtr;
    lta  [0] : TextArrayPtr )
  : MenuList;
  -210;
LIBCALL (base : IntuiSupBasePtr) CreateMenu *
  ( ri   [8] : RenderInfoPtr;
    win  [9] : I.WindowPtr;
    md  [10] : MenuDataListPtr;
    ta  [11] : G.TextAttrPtr;
    lta  [0] : TextArrayPtr )
  : MenuList;
  -210;
LIBCALL (base : IntuiSupBasePtr) AttachMenu *
  ( win [8] : I.WindowPtr;
    ml  [9] : MenuList );
  -216;
LIBCALL (base : IntuiSupBasePtr) MenuItemAddress *
  ( ml      [8] : MenuList;
    menunum [0] : E.UWORD )
  : I.MenuItemPtr;
  -222;
LIBCALL (base : IntuiSupBasePtr) RemoveMenu *
  ( ml [8] : MenuList )
  : I.WindowPtr;
  -228;
LIBCALL (base : IntuiSupBasePtr) FreeMenu *
  ( ml [8] : MenuList );
  -234;

LIBCALL (base : IntuiSupBasePtr) OpenTextFile *
  ( name           [8] : ARRAY OF CHAR;
    readbuffersize [0] : E.UWORD;
    linebuffersize [1] : E.UWORD;
    flags          [2] : SET )
  : FileDataPtr;
  -240;
LIBCALL (base : IntuiSupBasePtr) ReadTextLine *
  ( fd [8] : FileDataPtr )
  : INTEGER;
  -246;
LIBCALL (base : IntuiSupBasePtr) CloseTextFile *
  ( fd [8] : FileDataPtr );
  -252;

LIBCALL (base : IntuiSupBasePtr) BuildLanguageTextArray *
  ( name    [8] : ARRAY OF CHAR;
    entries [0] : E.UWORD )
  : TextArrayPtr;
  -258;
LIBCALL (base : IntuiSupBasePtr) GetLanguageText *
  ( text      [8] : ARRAY OF CHAR;
    textarray [9] : TextArrayPtr )
  : E.STRPTR;
  -264;
LIBCALL (base : IntuiSupBasePtr) FreeLanguageTextArray *
  ( textarray [8] : TextArrayPtr );
  -270;

LIBCALL (base : IntuiSupBasePtr) ChangeMousePointer *
  ( win           [8] : I.WindowPtr;
    VAR pd        [9] : PointerData;
    removegadgets [0] : E.LBOOL );
  -276;
LIBCALL (base : IntuiSupBasePtr) ChangeMousePointerPtr *
  ( win           [8] : I.WindowPtr;
    pd            [9] : PointerDataPtr;
    removegadgets [0] : E.LBOOL );
  -276;
LIBCALL (base : IntuiSupBasePtr) RestoreMousePointer *
  ( win [8] : I.WindowPtr );
  -282;
LIBCALL (base : IntuiSupBasePtr) MoveMousePointer *
  ( win    [8] : I.WindowPtr;
    x      [0] : INTEGER;
    y      [1] : INTEGER;
    button [2] : E.LBOOL );
  -288;


(* --- C Macros defined as procedures ----------------------------------- *)
(* $L+ Absolute long addressing for globals *)


(*------------------------------------*)
PROCEDURE InputAutoActivate * (next, prev : E.UWORD) : E.ULONG;
(*InputAutoActivate(next,prev)  * = ((((LONG)next) << 16) | prev)   (* macro for (gdInputActivateNext | gdInpuActivatePrev) *)*)

BEGIN (* InputAutoActivate *)
  RETURN (next * 10000H) + prev
END InputAutoActivate;


(* --- Library Base variable -------------------------------------------- *)
(* $L- Address globals through A4 *)


(*------------------------------------*)
PROCEDURE* CloseLib ();

BEGIN (* CloseLib *)
  IF base # NIL THEN E.base.CloseLibrary (base) END;
END CloseLib;

(*------------------------------------*)
PROCEDURE OpenLib * (mustOpen : BOOLEAN);

BEGIN (* OpenLib *)
  IF base = NIL THEN
    base :=
      SYS.VAL
        ( IntuiSupBasePtr,
          E.base.OpenLibrary (Name, version) );
    IF base # NIL THEN SYS.SETCLEANUP (CloseLib)
    ELSIF mustOpen THEN HALT (100)
    END;
  END
END OpenLib;


BEGIN
  base := NIL
END IntuiSup.
