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

#ifndef GRAPHICS_DISPLAYINFO_H
#define GRAPHICS_DISPLAYINFO_H
/*
**      $VER: displayinfo.h 39.13 (31.5.1993)
**      Includes Release 44.1
**
**      include define file for displayinfo database
**
**      (C) Copyright 1985-1999 Amiga, Inc.
**          All Rights Reserved
*/

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

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

#ifndef GRAPHICS_MONITOR_H
#include <graphics/monitor.h>
#endif /* GRAPHICS_MONITOR_H */

#ifndef GRAPHICS_MODEID_H
#include <graphics/modeid.h>
#endif /* GRAPHICS_MODEID_H */

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

/* the "public" handle to a DisplayInfoRecord */

typedef APTR DisplayInfoHandle;

/* datachunk type identifiers */

#define DTAG_DISP               0x80000000
#define DTAG_DIMS               0x80001000
#define DTAG_MNTR               0x80002000
#define DTAG_NAME               0x80003000
#define DTAG_VEC                0x80004000      /* internal use only */

struct QueryHeader
{
        ULONG   StructID;       /* datachunk type identifier */
        ULONG   DisplayID;      /* copy of display record key   */
        ULONG   SkipID;         /* TAG_SKIP -- see tagitems.h */
        ULONG   Length;         /* length of local data in double-longwords */
};

struct DisplayInfo
{
        struct  QueryHeader Header;
        UWORD   NotAvailable;   /* if NULL available, else see defines */
        ULONG   PropertyFlags;  /* Properties of this mode see defines */
        Point   Resolution;     /* ticks-per-pixel X/Y                 */
        UWORD   PixelSpeed;     /* aproximation in nanoseconds         */
        UWORD   NumStdSprites;  /* number of standard amiga sprites    */
        UWORD   PaletteRange;   /* OBSOLETE - use Red/Green/Blue bits instead */
        Point   SpriteResolution; /* std sprite ticks-per-pixel X/Y    */
        UBYTE   pad[4];         /* used internally */
        UBYTE   RedBits;        /* number of Red bits this display supports (V39) */
        UBYTE   GreenBits;      /* number of Green bits this display supports (V39) */
        UBYTE   BlueBits;       /* number of Blue bits this display supports (V39) */
        UBYTE   pad2[5];        /* find some use for this. */
        ULONG   reserved[2];    /* terminator */
};

/* availability */

#define DI_AVAIL_NOCHIPS        0x0001
#define DI_AVAIL_NOMONITOR      0x0002
#define DI_AVAIL_NOTWITHGENLOCK 0x0004

/* mode properties */

#define DIPF_IS_LACE            0x00000001
#define DIPF_IS_DUALPF          0x00000002
#define DIPF_IS_PF2PRI          0x00000004
#define DIPF_IS_HAM             0x00000008

#define DIPF_IS_ECS             0x00000010      /* note: ECS modes (SHIRES, VGA, and **
                                                                                        ** PRODUCTIVITY) do not support      **
                                                                                        ** attached sprites.                 **
                                                                                        */
#define DIPF_IS_AA              0x00010000      /* AA modes - may only be available
                                                ** if machine has correct memory
                                                ** type to support required
                                                ** bandwidth - check availability.
                                                ** (V39)
                                                */
#define DIPF_IS_PAL             0x00000020
#define DIPF_IS_SPRITES         0x00000040
#define DIPF_IS_GENLOCK         0x00000080

#define DIPF_IS_WB              0x00000100
#define DIPF_IS_DRAGGABLE       0x00000200
#define DIPF_IS_PANELLED        0x00000400
#define DIPF_IS_BEAMSYNC        0x00000800

#define DIPF_IS_EXTRAHALFBRITE  0x00001000

/* The following DIPF_IS_... flags are new for V39 */
#define DIPF_IS_SPRITES_ATT             0x00002000      /* supports attached sprites */
#define DIPF_IS_SPRITES_CHNG_RES        0x00004000      /* supports variable sprite resolution */
#define DIPF_IS_SPRITES_BORDER          0x00008000      /* sprite can be displayed in the border */
#define DIPF_IS_SCANDBL                 0x00020000      /* scan doubled */
#define DIPF_IS_SPRITES_CHNG_BASE       0x00040000
                                                                                        /* can change the sprite base colour */
#define DIPF_IS_SPRITES_CHNG_PRI        0x00080000
                                                                                        /* can change the sprite priority
                                                                                        ** with respect to the playfield(s).
                                                                                        */
#define DIPF_IS_DBUFFER         0x00100000      /* can support double buffering */
#define DIPF_IS_PROGBEAM        0x00200000      /* is a programmed beam-sync mode */
#define DIPF_IS_FOREIGN         0x80000000      /* this mode is not native to the Amiga */


struct DimensionInfo
{
        struct  QueryHeader Header;
        UWORD   MaxDepth;             /* log2( max number of colors ) */
        UWORD   MinRasterWidth;       /* minimum width in pixels      */
        UWORD   MinRasterHeight;      /* minimum height in pixels     */
        UWORD   MaxRasterWidth;       /* maximum width in pixels      */
        UWORD   MaxRasterHeight;      /* maximum height in pixels     */
        struct  Rectangle   Nominal;  /* "standard" dimensions              */
        struct  Rectangle   MaxOScan; /* fixed, hardware dependent    */
        struct  Rectangle VideoOScan; /* fixed, hardware dependent    */
        struct  Rectangle   TxtOScan; /* editable via preferences     */
        struct  Rectangle   StdOScan; /* editable via preferences     */
        UBYTE   pad[14];
        ULONG   reserved[2];          /* terminator */
};

struct MonitorInfo
{
        struct  QueryHeader Header;
        struct  MonitorSpec  *Mspc;   /* pointer to monitor specification  */
        Point   ViewPosition;         /* editable via preferences          */
        Point   ViewResolution;       /* standard monitor ticks-per-pixel  */
        struct  Rectangle ViewPositionRange;  /* fixed, hardware dependent */
        UWORD   TotalRows;            /* display height in scanlines       */
        UWORD   TotalColorClocks;     /* scanline width in 280 ns units    */
        UWORD   MinRow;       /* absolute minimum active scanline  */
        WORD    Compatibility;        /* how this coexists with others     */
        UBYTE   pad[32];
        Point   MouseTicks;
        Point   DefaultViewPosition;  /* original, never changes */
        ULONG   PreferredModeID;      /* for Preferences */
        ULONG   reserved[2];          /* terminator */
};

/* monitor compatibility */

#define MCOMPAT_MIXED   0       /* can share display with other MCOMPAT_MIXED */
#define MCOMPAT_SELF    1       /* can share only within same monitor */
#define MCOMPAT_NOBODY -1       /* only one viewport at a time */

#define DISPLAYNAMELEN 32

struct NameInfo
{
        struct  QueryHeader Header;
        UBYTE   Name[DISPLAYNAMELEN];
        ULONG   reserved[2];          /* terminator */
};

/******************************************************************************/

/* The following VecInfo structure is PRIVATE, for our use only
 * Touch these, and burn! (V39)
 */

struct VecInfo
{
        struct  QueryHeader   Header;
        APTR    Vec;
        APTR    Data;
        UWORD   Type;
        UWORD   pad[3];
        ULONG   reserved[2];
};

#endif  /* GRAPHICS_DISPLAYINFO_H */