#ifndef	GRAPHICS_DISPLAYINFO_H
#define	GRAPHICS_DISPLAYINFO_H
/*
**	$VER: displayinfo.h 37.6 (08.11.91)
**	Includes Release 38.56
**
**	include define file for displayinfo database
**
**	(C) Copyright 1985-1992 Commodore-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 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

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;	/* distinguishable shades available    */
	Point	SpriteResolution; /* std sprite ticks-per-pixel X/Y    */
	UBYTE	pad[4];
	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_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

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 dependant    */
	struct	Rectangle VideoOScan; /* fixed, hardware dependant    */
	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 dependant */
	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[36];
		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 */
};

/* DisplayInfoRecord identifiers */

#define INVALID_ID		~0

/* normal identifiers */

#define MONITOR_ID_MASK		0xFFFF1000

#define DEFAULT_MONITOR_ID		0x00000000
#define NTSC_MONITOR_ID		0x00011000
#define PAL_MONITOR_ID			0x00021000

/* the following 20 composite keys are for Modes on the default Monitor */
/* ntsc & pal "flavors" of these particular keys may be made by or'ing	*/
/* the ntsc or pal MONITOR_ID with the desired MODE_KEY... */

#define LORES_KEY			0x00000000
#define HIRES_KEY			0x00008000
#define SUPER_KEY			0x00008020
#define HAM_KEY			0x00000800
#define LORESLACE_KEY			0x00000004
#define HIRESLACE_KEY			0x00008004
#define SUPERLACE_KEY			0x00008024
#define HAMLACE_KEY			0x00000804
#define LORESDPF_KEY			0x00000400
#define HIRESDPF_KEY			0x00008400
#define SUPERDPF_KEY			0x00008420
#define LORESLACEDPF_KEY		0x00000404
#define HIRESLACEDPF_KEY		0x00008404
#define SUPERLACEDPF_KEY		0x00008424
#define LORESDPF2_KEY			0x00000440
#define HIRESDPF2_KEY			0x00008440
#define SUPERDPF2_KEY			0x00008460
#define LORESLACEDPF2_KEY		0x00000444
#define HIRESLACEDPF2_KEY		0x00008444
#define SUPERLACEDPF2_KEY		0x00008464
#define EXTRAHALFBRITE_KEY		0x00000080
#define EXTRAHALFBRITELACE_KEY		0x00000084

/* vga identifiers */

#define VGA_MONITOR_ID			0x00031000

#define VGAEXTRALORES_KEY		0x00031004
#define VGALORES_KEY			0x00039004
#define VGAPRODUCT_KEY			0x00039024
#define VGAHAM_KEY			0x00031804
#define VGAEXTRALORESLACE_KEY		0x00031005
#define VGALORESLACE_KEY		0x00039005
#define VGAPRODUCTLACE_KEY		0x00039025
#define VGAHAMLACE_KEY			0x00031805
#define VGAEXTRALORESDPF_KEY		0x00031404
#define VGALORESDPF_KEY		0x00039404
#define VGAPRODUCTDPF_KEY		0x00039424
#define VGAEXTRALORESLACEDPF_KEY	0x00031405
#define VGALORESLACEDPF_KEY		0x00039405
#define VGAPRODUCTLACEDPF_KEY		0x00039425
#define VGAEXTRALORESDPF2_KEY		0x00031444
#define VGALORESDPF2_KEY		0x00039444
#define VGAPRODUCTDPF2_KEY		0x00039464
#define VGAEXTRALORESLACEDPF2_KEY	0x00031445
#define VGALORESLACEDPF2_KEY		0x00039445
#define VGAPRODUCTLACEDPF2_KEY		0x00039465
#define VGAEXTRAHALFBRITE_KEY		0x00031084
#define VGAEXTRAHALFBRITELACE_KEY	0x00031085

/* a2024 identifiers */

#define A2024_MONITOR_ID		0x00041000

#define A2024TENHERTZ_KEY		0x00041000
#define A2024FIFTEENHERTZ_KEY		0x00049000

/* prototype identifiers */

#define PROTO_MONITOR_ID		0x00051000

#endif	/* GRAPHICS_DISPLAYINFO_H */
