	IFND	INTUITION_SCREENS_I
INTUITION_SCREENS_I	EQU	1
**
**	$Filename: intuition/screens.i $
**	$Release: 2.04 Includes, V37.4 $
**	$Revision: 36.18 $
**	$Date: 91/10/07 $
**
**	The Screen and NewScreen structures and attributes
**
**	(C) Copyright 1985-1991 Commodore-Amiga, Inc.
**	    All Rights Reserved
**
	IFND	EXEC_TYPES_I
	INCLUDE	"exec/types.i"
	ENDC

	IFND	GRAPHICS_GFX_I
	INCLUDE	"graphics/gfx.i"
	ENDC

	IFND	GRAPHICS_CLIP_I
	INCLUDE	"graphics/clip.i"
	ENDC

	IFND	GRAPHICS_VIEW_I
	INCLUDE	"graphics/view.i"
	ENDC

	IFND	GRAPHICS_RASTPORT_I
	INCLUDE	"graphics/rastport.i"
	ENDC

	IFND	GRAPHICS_LAYERS_I
	INCLUDE	"graphics/layers.i"
	ENDC

	IFND	UTILITY_TAGITEM_I
	INCLUDE	"utility/tagitem.i"
	ENDC

*
* NOTE:  intuition/iobsolete.i 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 );

* If you find dri_Version >= DRI_VERSION, you know this structure
* has at least the fields defined in this version of the include file

DRI_VERSION	EQU	1

	STRUCTURE	DrawInfo,0
	UWORD	dri_Version	 ; will be  DRI_VERSION
	UWORD	dri_NumPens	 ; guaranteed to be >= NUMDRIPENS
	APTR	dri_Pens	 ; pointer to pen array
	APTR	dri_Font	 ; screen default font
	UWORD	dri_Depth	 ; (initial) depth of screen bitmap
	; from DisplayInfo database for initial display mode
	UWORD	dri_ResolutionX
	UWORD	dri_ResolutionY
	ULONG	dri_Flags
	STRUCT	dri_longreserved,28

DRIF_NEWLOOK	EQU	$00000001 ; specified SA_Pens, full treatment
DRIB_NEWLOOK	EQU	0

	; rendering pen number indexes into DrawInfo.dri_Pens[]
	ENUM
	EITEM	DETAILPEN	; compatible Intuition rendering pens
	EITEM	BLOCKPEN,
	EITEM	TEXTPEN		; text on background (pen = 0)
	EITEM	SHINEPEN	; bright edge on bas-relief
	EITEM	SHADOWPEN	; dark edge
	EITEM	FILLPEN		; active window fill
	EITEM	FILLTEXTPEN	; text over FILLPEN
	EITEM	BACKGROUNDPEN	; always color 0
	EITEM	HIGHLIGHTTEXTPEN  ; highlighted text, against BACKGROUNDPEN
	EITEM	NUMDRIPENS


; ========================================================================
; === Screen =============================================================
; ========================================================================
	STRUCTURE	Screen,0

	APTR	sc_NextScreen		; linked list of screens
	APTR	sc_FirstWindow		; linked list Screen's Windows

	WORD	sc_LeftEdge		; parameters of the screen
	WORD	sc_TopEdge		; parameters of the screen

	WORD	sc_Width		; null-terminated Title text
	WORD	sc_Height		; for Windows without ScreenTitle

	WORD	sc_MouseY		; position relative to upper-left
	WORD	sc_MouseX		; position relative to upper-left

	WORD	sc_Flags		; see definitions below

	APTR	sc_Title
	APTR	sc_DefaultTitle

	; Bar sizes for this Screen and all Window's in this Screen
	BYTE	sc_BarHeight
	BYTE	sc_BarVBorder
	BYTE	sc_BarHBorder
	BYTE	sc_MenuVBorder
	BYTE	sc_MenuHBorder
	BYTE	sc_WBorTop
	BYTE	sc_WBorLeft
	BYTE	sc_WBorRight
	BYTE	sc_WBorBottom

	BYTE	sc_KludgeFill00	; This is strictly for word-alignment

	; the display data structures for this Screen
	APTR	sc_Font			; this screen's default font
	STRUCT	sc_ViewPort,vp_SIZEOF	; describing the Screen's display
	STRUCT	sc_RastPort,rp_SIZEOF	; describing Screen rendering
	STRUCT	sc_BitMap,bm_SIZEOF		; auxiliary graphexcess baggage
	STRUCT	sc_LayerInfo,li_SIZEOF	; each screen gets a LayerInfo

	APTR	sc_FirstGadget

	BYTE	sc_DetailPen		; for bar/border/gadget rendering
	BYTE	sc_BlockPen		; for bar/border/gadget rendering

	; the following variable(s) are maintained by Intuition to support the
	; DisplayBeep() color flashing technique
	WORD	sc_SaveColor0

	; This layer is for the Screen and Menu bars
	APTR	sc_BarLayer		; was "BarLayer"

	APTR	sc_ExtData

	APTR	sc_UserData		; general-purpose pointer to User data

	LABEL	sc_SIZEOF	; actually, you have no business talking about
	; or relying on the size of a screen structure


; --- FLAGS SET BY INTUITION -------------------------------------------------
; The SCREENTYPE bits are reserved for describing various Screen types
; available under Intuition.
SCREENTYPE	EQU	$000F	; all the screens types available
; --- the definitions for the Screen Type ------------------------------------
WBENCHSCREEN	EQU	$0001	; identifies the Workbench screen
PUBLICSCREEN	EQU	$0002	; public shared (custom) screen
CUSTOMSCREEN	EQU	$000F	; for that special look

SHOWTITLE	EQU	$0010	; this gets set by a call to ShowTitle()

BEEPING	EQU	$0020	; set when Screen is beeping

CUSTOMBITMAP	EQU	$0040	; if you are supplying your own BitMap

SCREENBEHIND	EQU	$0080	; if you want your screen to open behind
	; already open screens

SCREENQUIET	EQU	$0100	; if you do not want Intuition to render
	; into your screen (gadgets, title)

SCREENHIRES	EQU	$0200	; do not use lowres gadgets (set by intuition)

STDSCREENHEIGHT	EQU	-1	; supply in NewScreen.Height
STDSCREENWIDTH	EQU	-1	; supply in NewScreen.Width

NS_EXTENDED	EQU	$1000	; means ns_Extenion is valid
AUTOSCROLL	EQU	$4000	; automatic scrolling of large raster

* 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.

	ENUM	TAG_USER+33
* 
*   these items specify items equivalent to fields in NewScreen
	EITEM	SA_Left	; traditional screen positions	and dimensions
	EITEM	SA_Top
	EITEM	SA_Width
	EITEM	SA_Height
	EITEM	SA_Depth	; screen bitmap depth
	EITEM	SA_DetailPen	; serves as default for windows, too
	EITEM	SA_BlockPen
	EITEM	SA_Title	; default screen title

	EITEM	SA_Colors	; ti_Data is an array of struct ColorSpec, 
	; terminated by ColorIndex = -1.  Specifies 
	; initial screen palette colors.

	EITEM	SA_ErrorCode	; ti_Data points to LONG error code (values below)
	EITEM	SA_Font	; equiv. to NewScreen.Font
	EITEM	SA_SysFont	; Selects one of the preferences system fonts:
	;	0 - old DefaultFont, fixed-width
	;	1 - WB Screen preferred font


	EITEM	SA_Type	; equiv. to NewScreen.Type
	EITEM	SA_BitMap	; ti_Data is pointer to custom BitMap.  This
	; implies type of CUSTOMBITMAP	

	EITEM	SA_PubName	; presence of this tag means that the screen
	; is to be a public screen.  Please specify
	; BEFORE the two tags below

	EITEM	SA_PubSig
	EITEM	SA_PubTask	; Task ID and signal for being notified that
	; the last window has closed on a public screen.


	EITEM	SA_DisplayID	; ti_Data is new extended display ID from 
	; <graphics/displayinfo.h>.

	EITEM	SA_DClip	; ti_Data points to a rectangle which defines
	; screen display clip region

	EITEM	SA_Overscan	; was S_STDDCLIP.  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).

	EITEM	SA_Obsolete1	; obsolete S_MONITORNAME

*   booleans *
	EITEM	SA_ShowTitle	; boolean equivalent to flag SHOWTITLE
	EITEM	SA_Behind	; boolean equivalent to flag SCREENBEHIND
	EITEM	SA_Quiet	; boolean equivalent to flag SCREENQUIET
	EITEM	SA_AutoScroll	; boolean equivalent to flag AUTOSCROLL
	EITEM	SA_Pens	; array as in DrawInfo, terminated by -1
	EITEM	SA_FullPalette ; 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()


* OpenScreen error codes, which are returned in the (optional) LONG
* pointed to by ti_Data for the SA_ErrorCode tag item

OSERR_NOMONITOR	EQU	(1)	; named monitor spec not available
OSERR_NOCHIPS	EQU	(2)	; you need newer custom chips	
OSERR_NOMEM	EQU	(3)	; couldn't get normal memory
OSERR_NOCHIPMEM	EQU	(4)	; couldn't get chipmem
OSERR_PUBNOTUNIQUE	EQU	(5)	; public screen name already used
OSERR_UNKNOWNMODE	EQU	(6)	; don't recognize mode asked for

; ========================================================================
; === NewScreen ==========================================================
; ========================================================================
; NOTE: to use Extension field, you need to use ExtNewScreen, below
	STRUCTURE	NewScreen,0

	WORD	ns_LeftEdge		; initial Screen dimensions
	WORD	ns_TopEdge		; initial Screen dimensions
	WORD	ns_Width		; initial Screen dimensions
	WORD	ns_Height		; initial Screen dimensions
	WORD	ns_Depth		; initial Screen dimensions

	BYTE	ns_DetailPen		; default rendering pens (for Windows too)
	BYTE	ns_BlockPen		; default rendering pens (for Windows too)

	WORD	ns_ViewModes		; display "modes" for this Screen

	WORD	ns_Type		; Intuition Screen Type specifier

	APTR	ns_Font		; default font for Screen and Windows

	APTR	ns_DefaultTitle	; Title when Window doesn't care

	APTR	ns_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 Types variable 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
	APTR	ns_CustomBitMap
	LABEL	ns_SIZEOF

; For compatibility reasons, we need a new structure for extending
; NewScreen.  Use this structure is you need to use the new Extension
; field.
; NOTE WELL: this structure may be extended again in the future.
;Writing code which depends on its size is not allowed.

	STRUCTURE	ExtNewScreen,ns_SIZEOF

	APTR	ens_Extension		; struct TagItem *
	; more specification data, scanned if
	; NS_EXTENDED is set in ns_Type

	LABEL	ens_SIZEOF

* === Overscan Types ===
OSCAN_TEXT	EQU	1	; entirely visible
OSCAN_STANDARD	EQU	2	; just past edges
OSCAN_MAX	EQU	3	; as much as possible
OSCAN_VIDEO	EQU	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.

	STRUCTURE	PubScreenNode,LN_SIZE
	APTR	psn_Screen	; pointer to screen itself
	UWORD	psn_Flags	; below
	WORD	psn_Size	; includes name buffer size
	WORD	psn_VisitorCount ; how many visitor windows
	APTR	psn_SigTask	; who to signal when visitors gone
	UBYTE	psn_SigBit	; which signal
	UBYTE	psn_Pad1	; word align
	LABEL	psn_SIZEOF

* psn_Flags values
PSNF_PRIVATE	EQU	$0001

* NOTE: Due to a bug in NextPubScreen(), make sure your buffer
* actually has MAXPUBSCREENNAME+1 characters in it!

MAXPUBSCREENNAME	EQU	139	; names no longer, please

; pub screen modes
SHANGHAI	EQU	$0001	; put workbench windows on pub screen
POPPUBSCREEN	EQU	$0002	; pop pub screen to front when visitor opens

* Include obsolete identifiers:
	IFND	INTUITION_IOBSOLETE_I
	INCLUDE	"intuition/iobsolete.i"
	ENDC

	ENDC
