[Contents] [Index] [Help] [Retrace] [Browse <] [Browse >]

#ifndef INTUITION_SCREENS_H
#define INTUITION_SCREENS_H TRUE
/*
**  $VER: screens.h 38.25 (15.2.1993)
**  Includes Release 44.1
**
**  The Screen and NewScreen structures and attributes
**
**  (C) Copyright 1985-1999 Amiga, Inc.
**          All Rights Reserved
*/

#ifndef EXEC_TYPES_H
#include <exec/types.h>
#endif

#ifndef GRAPHICS_GFX_H
#include <graphics/gfx.h>
#endif

#ifndef GRAPHICS_CLIP_H
#include <graphics/clip.h>
#endif

#ifndef GRAPHICS_VIEW_H
#include <graphics/view.h>
#endif

#ifndef GRAPHICS_RASTPORT_H
#include <graphics/rastport.h>
#endif

#ifndef GRAPHICS_LAYERS_H
#include <graphics/layers.h>
#endif

#ifndef UTILITY_TAGITEM_H
#include <utility/tagitem.h>
#endif

/*
 * NOTE:  intuition/iobsolete.h is included at the END of this file!
 */

/* ======================================================================== */
/* === DrawInfo ========================================================= */
/* ======================================================================== */

/* This is a packet of information for graphics rendering.  It originates
 * with a Screen, and is gotten using GetScreenDrawInfo( screen );
 */

/* You can use the Intuition version number to tell which fields are
 * present in this structure.
 *
 * DRI_VERSION of 1 corresponds to V37 release.
 * DRI_VERSION of 2 corresponds to V39, and includes three new pens
 *      and the dri_CheckMark and dri_AmigaKey fields.
 *
 * Note that sometimes applications need to create their own DrawInfo
 * structures, in which case the DRI_VERSION won't correspond exactly
 * to the OS version!!!
 */
#define DRI_VERSION     (2)

struct DrawInfo
{
    UWORD       dri_Version;    /* will be  DRI_VERSION                 */
    UWORD       dri_NumPens;    /* guaranteed to be >= 9           */
    UWORD       *dri_Pens;      /* pointer to pen array                 */

    struct TextFont     *dri_Font;      /* screen default font          */
    UWORD       dri_Depth;      /* (initial) depth of screen bitmap     */

    struct {      /* from DisplayInfo database for initial display mode */
        UWORD   X;
        UWORD   Y;
    }           dri_Resolution;

    ULONG       dri_Flags;              /* defined below                */
/* New for V39: dri_CheckMark, dri_AmigaKey. */
    struct Image        *dri_CheckMark; /* pointer to scaled checkmark image
                                         * Will be NULL if DRI_VERSION < 2
                                         */
    struct Image        *dri_AmigaKey;  /* pointer to scaled Amiga-key image
                                         * Will be NULL if DRI_VERSION < 2
                                         */
    ULONG       dri_Reserved[5];        /* avoid recompilation ;^)      */
};

#define DRIF_NEWLOOK    0x00000001L     /* specified SA_Pens, full treatment */

/* rendering pen number indexes into DrawInfo.dri_Pens[]        */
#define DETAILPEN        (0x0000)       /* compatible Intuition rendering pens  */
#define BLOCKPEN         (0x0001)       /* compatible Intuition rendering pens  */
#define TEXTPEN          (0x0002)       /* text on background                   */
#define SHINEPEN         (0x0003)       /* bright edge on 3D objects            */
#define SHADOWPEN        (0x0004)       /* dark edge on 3D objects              */
#define FILLPEN          (0x0005)       /* active-window/selected-gadget fill   */
#define FILLTEXTPEN      (0x0006)       /* text over FILLPEN                    */
#define BACKGROUNDPEN    (0x0007)       /* may not always be color 0            */
#define HIGHLIGHTTEXTPEN (0x0008)       /* special color text, on background    */
/* New for V39, only present if DRI_VERSION >= 2: */
#define BARDETAILPEN     (0x0009)       /* text/detail in screen-bar/menus */
#define BARBLOCKPEN      (0x000A)       /* screen-bar/menus fill */
#define BARTRIMPEN       (0x000B)       /* trim under screen-bar */

#define NUMDRIPENS       (0x000C)


/* New for V39:  It is sometimes useful to specify that a pen value
 * is to be the complement of color zero to three.  The "magic" numbers
 * serve that purpose:
 */
#define PEN_C3          0xFEFC          /* Complement of color 3 */
#define PEN_C2          0xFEFD          /* Complement of color 2 */
#define PEN_C1          0xFEFE          /* Complement of color 1 */
#define PEN_C0          0xFEFF          /* Complement of color 0 */

/* ======================================================================== */
/* === Screen ============================================================= */
/* ======================================================================== */

/* VERY IMPORTANT NOTE ABOUT Screen->BitMap.  In the future, bitmaps
 * will need to grow.  The embedded instance of a bitmap in the screen
 * will no longer be large enough to hold the whole description of
 * the bitmap.
 *
 * YOU ARE STRONGLY URGED to use Screen->RastPort.BitMap in place of
 * &Screen->BitMap whenever and whereever possible.
 */

struct Screen
{
    struct Screen *NextScreen;          /* linked list of screens */
    struct Window *FirstWindow;         /* linked list Screen's Windows */

    WORD LeftEdge, TopEdge;             /* parameters of the screen */
    WORD Width, Height;                 /* parameters of the screen */

    WORD MouseY, MouseX;                /* position relative to upper-left */

    UWORD Flags;                        /* see definitions below */

    UBYTE *Title;                       /* null-terminated Title text */
    UBYTE *DefaultTitle;                /* for Windows without ScreenTitle */

    /* Bar sizes for this Screen and all Window's in this Screen */
    /* Note that BarHeight is one less than the actual menu bar
     * height.  We're going to keep this in V36 for compatibility,
     * although V36 artwork might use that extra pixel
     *
     * Also, the title bar height of a window is calculated from the
     * screen's WBorTop field, plus the font height, plus one.
     */
    BYTE BarHeight, BarVBorder, BarHBorder, MenuVBorder, MenuHBorder;
    BYTE WBorTop, WBorLeft, WBorRight, WBorBottom;

    struct TextAttr *Font;              /* this screen's default font      */

    /* the display data structures for this Screen */
    struct ViewPort ViewPort;           /* describing the Screen's display */
    struct RastPort RastPort;           /* describing Screen rendering     */
    struct BitMap BitMap;               /* SEE WARNING ABOVE!              */
    struct Layer_Info LayerInfo;        /* each screen gets a LayerInfo    */

    /* Only system gadgets may be attached to a screen.
     *  You get the standard system Screen Gadgets automatically
     */
    struct Gadget *FirstGadget;

    UBYTE DetailPen, BlockPen;          /* for bar/border/gadget rendering */

    /* the following variable(s) are maintained by Intuition to support the
     * DisplayBeep() color flashing technique
     */
    UWORD SaveColor0;

    /* This layer is for the Screen and Menu bars */
    struct Layer *BarLayer;

    UBYTE *ExtData;

    UBYTE *UserData;    /* general-purpose pointer to User data extension */

    /**** Data below this point are SYSTEM PRIVATE ****/
};


/* --- FLAGS SET BY INTUITION --------------------------------------------- */
/* The SCREENTYPE bits are reserved for describing various Screen types
 * available under Intuition.
 */
#define SCREENTYPE      0x000F  /* all the screens types available      */
/* --- the definitions for the Screen Type ------------------------------- */
#define WBENCHSCREEN    0x0001  /* identifies the Workbench screen      */
#define PUBLICSCREEN    0x0002  /* public shared (custom) screen        */
#define CUSTOMSCREEN    0x000F  /* original custom screens              */

#define SHOWTITLE       0x0010  /* this gets set by a call to ShowTitle() */

#define BEEPING         0x0020  /* set when Screen is beeping (private) */

#define CUSTOMBITMAP    0x0040  /* if you are supplying your own BitMap */

#define SCREENBEHIND    0x0080  /* if you want your screen to open behind
                                 * already open screens
                                 */
#define SCREENQUIET     0x0100  /* if you do not want Intuition to render
                                 * into your screen (gadgets, title)
                                 */
#define SCREENHIRES     0x0200  /* do not use lowres gadgets  (private) */

#define NS_EXTENDED     0x1000          /* ExtNewScreen.Extension is valid      */
/* V36 applications can use OpenScreenTagList() instead of NS_EXTENDED  */

#define AUTOSCROLL      0x4000  /* screen is to autoscoll               */

/* New for V39: */
#define PENSHARED       0x0400  /* Screen opener set {SA_SharePens,TRUE} */




#define STDSCREENHEIGHT -1      /* supply in NewScreen.Height           */
#define STDSCREENWIDTH -1       /* supply in NewScreen.Width            */

/*
 * Screen attribute tag ID's.  These are used in the ti_Tag field of
 * TagItem arrays passed to OpenScreenTagList() (or in the
 * ExtNewScreen.Extension field).
 */

/* Screen attribute tags.  Please use these versions, not those in
 * iobsolete.h.
 */

#define SA_Dummy        (TAG_USER + 32)
/*
 * these items specify items equivalent to fields in NewScreen
 */
#define SA_Left         (SA_Dummy + 0x0001)
#define SA_Top          (SA_Dummy + 0x0002)
#define SA_Width        (SA_Dummy + 0x0003)
#define SA_Height       (SA_Dummy + 0x0004)
                        /* traditional screen positions and dimensions  */
#define SA_Depth        (SA_Dummy + 0x0005)
                        /* screen bitmap depth                          */
#define SA_DetailPen    (SA_Dummy + 0x0006)
                        /* serves as default for windows, too           */
#define SA_BlockPen     (SA_Dummy + 0x0007)
#define SA_Title        (SA_Dummy + 0x0008)
                        /* default screen title                         */
#define SA_Colors       (SA_Dummy + 0x0009)
                        /* ti_Data is an array of struct ColorSpec,
                         * terminated by ColorIndex = -1.  Specifies
                         * initial screen palette colors.
                         * Also see SA_Colors32 for use under V39.
                         */
#define SA_ErrorCode    (SA_Dummy + 0x000A)
                        /* ti_Data points to LONG error code (values below)*/
#define SA_Font         (SA_Dummy + 0x000B)
                        /* equiv. to NewScreen.Font                     */
#define SA_SysFont      (SA_Dummy + 0x000C)
                        /* Selects one of the preferences system fonts:
                         *      0 - old DefaultFont, fixed-width
                         *      1 - WB Screen preferred font
                         */
#define SA_Type         (SA_Dummy + 0x000D)
                        /* ti_Data is PUBLICSCREEN or CUSTOMSCREEN.  For other
                         * fields of NewScreen.Type, see individual tags,
                         * eg. SA_Behind, SA_Quiet.
                         */
#define SA_BitMap       (SA_Dummy + 0x000E)
                        /* ti_Data is pointer to custom BitMap.  This
                         * implies type of CUSTOMBITMAP
                         */
#define SA_PubName      (SA_Dummy + 0x000F)
                        /* presence of this tag means that the screen
                         * is to be a public screen.  Please specify
                         * BEFORE the two tags below
                         */
#define SA_PubSig       (SA_Dummy + 0x0010)
#define SA_PubTask      (SA_Dummy + 0x0011)
                        /* Task ID and signal for being notified that
                         * the last window has closed on a public screen.
                         */
#define SA_DisplayID    (SA_Dummy + 0x0012)
                        /* ti_Data is new extended display ID from
                         * <graphics/displayinfo.h> (V37) or from
                         * <graphics/modeid.h> (V39 and up)
                         */
#define SA_DClip        (SA_Dummy + 0x0013)
                        /* ti_Data points to a rectangle which defines
                         * screen display clip region
                         */
#define SA_Overscan     (SA_Dummy + 0x0014)
                        /* Set to one of the OSCAN_
                         * specifiers below to get a system standard
                         * overscan region for your display clip,
                         * screen dimensions (unless otherwise specified),
                         * and automatically centered position (partial
                         * support only so far).
                         * If you use this, you shouldn't specify
                         * SA_DClip.  SA_Overscan is for "standard"
                         * overscan dimensions, SA_DClip is for
                         * your custom numeric specifications.
                         */
#define SA_Obsolete1    (SA_Dummy + 0x0015)
                        /* obsolete S_MONITORNAME                       */

/** booleans **/
#define SA_ShowTitle    (SA_Dummy + 0x0016)
                        /* boolean equivalent to flag SHOWTITLE         */
#define SA_Behind       (SA_Dummy + 0x0017)
                        /* boolean equivalent to flag SCREENBEHIND      */
#define SA_Quiet        (SA_Dummy + 0x0018)
                        /* boolean equivalent to flag SCREENQUIET       */
#define SA_AutoScroll   (SA_Dummy + 0x0019)
                        /* boolean equivalent to flag AUTOSCROLL        */
#define SA_Pens         (SA_Dummy + 0x001A)
                        /* pointer to ~0 terminated UWORD array, as
                         * found in struct DrawInfo
                         */
#define SA_FullPalette  (SA_Dummy + 0x001B)
                        /* boolean: initialize color table to entire
                         *  preferences palette (32 for V36), rather
                         * than compatible pens 0-3, 17-19, with
                         * remaining palette as returned by GetColorMap()
                         */

#define SA_ColorMapEntries (SA_Dummy + 0x001C)
                        /* New for V39:
                         * Allows you to override the number of entries
                         * in the ColorMap for your screen.  Intuition
                         * normally allocates (1<<depth) or 32, whichever
                         * is more, but you may require even more if you
                         * use certain V39 graphics.library features
                         * (eg. palette-banking).
                         */

#define SA_Parent       (SA_Dummy + 0x001D)
                        /* New for V39:
                         * ti_Data is a pointer to a "parent" screen to
                         * attach this one to.  Attached screens slide
                         * and depth-arrange together.
                         */

#define SA_Draggable    (SA_Dummy + 0x001E)
                        /* New for V39:
                         * Boolean tag allowing non-draggable screens.
                         * Do not use without good reason!
                         * (Defaults to TRUE).
                         */

#define SA_Exclusive    (SA_Dummy + 0x001F)
                        /* New for V39:
                         * Boolean tag allowing screens that won't share
                         * the display.  Use sparingly!  Starting with 3.01,
                         * attached screens may be SA_Exclusive.  Setting
                         * SA_Exclusive for each screen will produce an
                         * exclusive family.   (Defaults to FALSE).
                         */

#define SA_SharePens    (SA_Dummy + 0x0020)
                        /* New for V39:
                         * For those pens in the screen's DrawInfo->dri_Pens,
                         * Intuition obtains them in shared mode (see
                         * graphics.library/ObtainPen()).  For compatibility,
                         * Intuition obtains the other pens of a public
                         * screen as PEN_EXCLUSIVE.  Screens that wish to
                         * manage the pens themselves should generally set
                         * this tag to TRUE.  This instructs Intuition to
                         * leave the other pens unallocated.
                         */

#define SA_BackFill     (SA_Dummy + 0x0021)
                        /* New for V39:
                         * provides a "backfill hook" for your screen's
                         * Layer_Info.
                         * See layers.library/InstallLayerInfoHook()
                         */

#define SA_Interleaved  (SA_Dummy + 0x0022)
                        /* New for V39:
                         * Boolean tag requesting that the bitmap
                         * allocated for you be interleaved.
                         * (Defaults to FALSE).
                         */

#define SA_Colors32     (SA_Dummy + 0x0023)
                        /* New for V39:
                         * Tag to set the screen's initial palette colors
                         * at 32 bits-per-gun.  ti_Data is a pointer
                         * to a table to be passed to the
                         * graphics.library/LoadRGB32() function.
                         * This format supports both runs of color
                         * registers and sparse registers.  See the
                         * autodoc for that function for full details.
                         * Any color set here has precedence over
                         * the same register set by SA_Colors.
                         */

#define SA_VideoControl (SA_Dummy + 0x0024)
                        /* New for V39:
                         * ti_Data is a pointer to a taglist that Intuition
                         * will pass to graphics.library/VideoControl(),
                         * upon opening the screen.
                         */

#define SA_FrontChild   (SA_Dummy + 0x0025)
                        /* New for V39:
                         * ti_Data is a pointer to an already open screen
                         * that is to be the child of the screen being
                         * opened.  The child screen will be moved to the
                         * front of its family.
                         */

#define SA_BackChild    (SA_Dummy + 0x0026)
                        /* New for V39:
                         * ti_Data is a pointer to an already open screen
                         * that is to be the child of the screen being
                         * opened.  The child screen will be moved to the
                         * back of its family.
                         */

#define SA_LikeWorkbench        (SA_Dummy + 0x0027)
                        /* New for V39:
                         * Set ti_Data to 1 to request a screen which
                         * is just like the Workbench.  This gives
                         * you the same screen mode, depth, size,
                         * colors, etc., as the Workbench screen.
                         */

#define SA_Reserved             (SA_Dummy + 0x0028)
                        /* Reserved for private Intuition use */

#define SA_MinimizeISG          (SA_Dummy + 0x0029)
                        /* New for V40:
                         * For compatibility, Intuition always ensures
                         * that the inter-screen gap is at least three
                         * non-interlaced lines.  If your application
                         * would look best with the smallest possible
                         * inter-screen gap, set ti_Data to TRUE.
                         * If you use the new graphics VideoControl()
                         * VC_NoColorPaletteLoad tag for your screen's
                         * ViewPort, you should also set this tag.
                         */

/* this is an obsolete tag included only for compatibility with V35
 * interim release for the A2024 and Viking monitors
 */
#ifndef NSTAG_EXT_VPMODE
#define NSTAG_EXT_VPMODE (TAG_USER | 1)
#endif


/* OpenScreen error codes, which are returned in the (optional) LONG
 * pointed to by ti_Data for the SA_ErrorCode tag item
 */
#define OSERR_NOMONITOR    (1)  /* named monitor spec not available     */
#define OSERR_NOCHIPS      (2)  /* you need newer custom chips          */
#define OSERR_NOMEM        (3)  /* couldn't get normal memory           */
#define OSERR_NOCHIPMEM    (4)  /* couldn't get chipmem                 */
#define OSERR_PUBNOTUNIQUE (5)  /* public screen name already used      */
#define OSERR_UNKNOWNMODE  (6)  /* don't recognize mode asked for       */
#define OSERR_TOODEEP      (7)  /* Screen deeper than HW supports       */
#define OSERR_ATTACHFAIL   (8)  /* Failed to attach screens             */
#define OSERR_NOTAVAILABLE (9)  /* Mode not available for other reason  */

/* ======================================================================== */
/* === NewScreen ========================================================== */
/* ======================================================================== */
/* note: to use the Extended field, you must use the
 * new ExtNewScreen structure, below
 */
struct NewScreen
{
    WORD LeftEdge, TopEdge, Width, Height, Depth;  /* screen dimensions */

    UBYTE DetailPen, BlockPen;  /* for bar/border/gadget rendering      */

    UWORD ViewModes;            /* the Modes for the ViewPort (and View) */

    UWORD Type;                 /* the Screen type (see defines above)  */

    struct TextAttr *Font;      /* this Screen's default text attributes */

    UBYTE *DefaultTitle;        /* the default title for this Screen    */

    struct Gadget *Gadgets;     /* UNUSED:  Leave this NULL             */

    /* if you are opening a CUSTOMSCREEN and already have a BitMap
     * that you want used for your Screen, you set the flags CUSTOMBITMAP in
     * the Type field and you set this variable to point to your BitMap
     * structure.  The structure will be copied into your Screen structure,
     * after which you may discard your own BitMap if you want
     */
    struct BitMap *CustomBitMap;
};

/*
 * For compatibility reasons, we need a new structure for extending
 * NewScreen.  Use this structure is you need to use the new Extension
 * field.
 *
 * NOTE: V36-specific applications should use the
 * OpenScreenTagList( newscreen, tags ) version of OpenScreen().
 * Applications that want to be V34-compatible as well may safely use the
 * ExtNewScreen structure.  Its tags will be ignored by V34 Intuition.
 *
 */
struct ExtNewScreen
{
    WORD LeftEdge, TopEdge, Width, Height, Depth;
    UBYTE DetailPen, BlockPen;
    UWORD ViewModes;
    UWORD Type;
    struct TextAttr *Font;
    UBYTE *DefaultTitle;
    struct Gadget *Gadgets;
    struct BitMap *CustomBitMap;

    struct TagItem      *Extension;
                                /* more specification data, scanned if
                                 * NS_EXTENDED is set in NewScreen.Type
                                 */
};

/* === Overscan Types ===       */
#define OSCAN_TEXT      (1)     /* entirely visible     */
#define OSCAN_STANDARD  (2)     /* just past edges      */
#define OSCAN_MAX       (3)     /* as much as possible  */
#define OSCAN_VIDEO     (4)     /* even more than is possible   */


/* === Public Shared Screen Node ===    */

/* This is the representative of a public shared screen.
 * This is an internal data structure, but some functions may
 * present a copy of it to the calling application.  In that case,
 * be aware that the screen pointer of the structure can NOT be
 * used safely, since there is no guarantee that the referenced
 * screen will remain open and a valid data structure.
 *
 * Never change one of these.
 */

struct PubScreenNode    {
    struct Node         psn_Node;       /* ln_Name is screen name */
    struct Screen       *psn_Screen;
    UWORD               psn_Flags;      /* below                */
    WORD                psn_Size;       /* includes name buffer */
    WORD                psn_VisitorCount; /* how many visitor windows */
    struct Task         *psn_SigTask;   /* who to signal when visitors gone */
    UBYTE               psn_SigBit;     /* which signal */
};

#define PSNF_PRIVATE    (0x0001)

/* NOTE: Due to a bug in NextPubScreen(), make sure your buffer
 * actually has MAXPUBSCREENNAME+1 characters in it!
 */
#define MAXPUBSCREENNAME        (139)   /* names no longer, please      */

/* pub screen modes     */
#define SHANGHAI        0x0001  /* put workbench windows on pub screen */
#define POPPUBSCREEN    0x0002  /* pop pub screen to front when visitor opens */

/* New for V39:  Intuition has new screen depth-arrangement and movement
 * functions called ScreenDepth() and ScreenPosition() respectively.
 * These functions permit the old behavior of ScreenToFront(),
 * ScreenToBack(), and MoveScreen().  ScreenDepth() also allows
 * independent depth control of attached screens.  ScreenPosition()
 * optionally allows positioning screens even though they were opened
 * {SA_Draggable,FALSE}.
 */

/* For ScreenDepth(), specify one of SDEPTH_TOFRONT or SDEPTH_TOBACK,
 * and optionally also SDEPTH_INFAMILY.
 *
 * NOTE: ONLY THE OWNER OF THE SCREEN should ever specify
 * SDEPTH_INFAMILY.  Commodities, "input helper" programs,
 * or any other program that did not open a screen should never
 * use that flag.  (Note that this is a style-behavior
 * requirement;  there is no technical requirement that the
 * task calling this function need be the task which opened
 * the screen).
 */

#define SDEPTH_TOFRONT                  (0)     /* Bring screen to front */
#define SDEPTH_TOBACK           (1)     /* Send screen to back */
#define SDEPTH_INFAMILY         (2)     /* Move an attached screen with
                                         * respect to other screens of
                                         * its family
                                         */

/* Here's an obsolete name equivalent to SDEPTH_INFAMILY: */
#define SDEPTH_CHILDONLY        SDEPTH_INFAMILY


/* For ScreenPosition(), specify one of SPOS_RELATIVE, SPOS_ABSOLUTE,
 * or SPOS_MAKEVISIBLE to describe the kind of screen positioning you
 * wish to perform:
 *
 * SPOS_RELATIVE: The x1 and y1 parameters to ScreenPosition() describe
 *      the offset in coordinates you wish to move the screen by.
 * SPOS_ABSOLUTE: The x1 and y1 parameters to ScreenPosition() describe
 *      the absolute coordinates you wish to move the screen to.
 * SPOS_MAKEVISIBLE: (x1,y1)-(x2,y2) describes a rectangle on the
 *      screen which you would like autoscrolled into view.
 *
 * You may additionally set SPOS_FORCEDRAG along with any of the
 * above.  Set this if you wish to reposition an {SA_Draggable,FALSE}
 * screen that you opened.
 *
 * NOTE: ONLY THE OWNER OF THE SCREEN should ever specify
 * SPOS_FORCEDRAG.  Commodities, "input helper" programs,
 * or any other program that did not open a screen should never
 * use that flag.
 */

#define SPOS_RELATIVE           (0)     /* Coordinates are relative */

#define SPOS_ABSOLUTE           (1)     /* Coordinates are expressed as
                                         * absolutes, not relatives.
                                         */

#define SPOS_MAKEVISIBLE        (2)     /* Coordinates describe a box on
                                         * the screen you wish to be
                                         * made visible by autoscrolling
                                         */

#define SPOS_FORCEDRAG          (4)     /* Move non-draggable screen */

/* New for V39: Intuition supports double-buffering in screens,
 * with friendly interaction with menus and certain gadgets.
 * For each buffer, you need to get one of these structures
 * from the AllocScreenBuffer() call.  Never allocate your
 * own ScreenBuffer structures!
 *
 * The sb_DBufInfo field is for your use.  See the graphics.library
 * AllocDBufInfo() autodoc for details.
 */
struct ScreenBuffer
{
    struct BitMap *sb_BitMap;           /* BitMap of this buffer */
    struct DBufInfo *sb_DBufInfo;       /* DBufInfo for this buffer */
};

/* These are the flags that may be passed to AllocScreenBuffer().
 */
#define SB_SCREEN_BITMAP        1
#define SB_COPY_BITMAP          2

/* Include obsolete identifiers: */
#ifndef INTUITION_IOBSOLETE_H
#include <intuition/iobsolete.h>
#endif

#endif