;
;     $VER: rtgsublibs.i 1.006 (08 Jun 1996)
;

        IFND    RTGSUBLIBS_I
RTGSUBLIBS_I    SET     1

        IFND    UTILITY_TAGITEM_I
        Include "utility/tagitem.i"
        ENDC

        IFND    EXEC_TYPES_I
        Include "exec/types.i"
        ENDC

        IFND    EXEC_NODES_I
        Include "exec/nodes.i"
        ENDC

* The TagItem ID's (ti_Tag values) for OpenRtgScreen()
*
* Information like width, height, screenmode to use, depth and overscan
* information is located in the ScreenReq structure which must be passed
* to OpenRtgScreen().  The RtgScreenModeReq() function creates these
* ScreenReq structures for you.

    ENUM TAG_USER+1           ;rtg_Tags (OpenRtgScreen)

    EITEM rtg_Buffers       ;[1] You can use this tag to specify the number
                            ;of screen buffers for your screen.  Setting this
                            ;to 2 or 3 will allow you to do Double or Triple
                            ;buffering.  Valid values are 1, 2 or 3.
    EITEM rtg_Interleaved   ;[FALSE] Specifying TRUE will cause bitmaps to
                            ;be allocated interleaved.  OpenRtgScreen will
                            ;fail if bitplanes cannot be allocated that way
                            ;unlike Intuition/OpenScreenTagList().
    EITEM rtg_Draggable     ;[TRUE] Specifying FALSE will make the screen
                            ;non-draggable.  Do not use without good reason!
    EITEM rtg_Exclusive     ;[FALSE] Allows screens which won't share the
                            ;display with other screens.  Use sparingly!

;    EITEM rtg_ChunkySupport ;[0] This LONG is used to indicate which
;                            ;Chunky modes this application supports.  A
;                            ;set bit means the mode is supported:
;    ;     
;    ;    | Pixels  | Pixel|Color| Pixel 
;    ; Bit|represent| size |space| layout
;    ;------------------------------------------------------------------
;    ;  0  TrueColor  LONG   RGB   %00000000 rrrrrrrr gggggggg bbbbbbbb  ARGB32
;    ;  1  TrueColor 3 BYTE  RGB   %rrrrrrrr gggggggg bbbbbbbb           RGB24
;    ;  2  TrueColor  WORD   RGB   %rrrrrggg gggbbbbb                    RGB16
;    ;  3  TrueColor  WORD   RGB   %0rrrrrgg gggbbbbb                    RGB15
;    ;  4  TrueColor  LONG   BGR   %00000000 bbbbbbbb gggggggg rrrrrrrr  ABGR32
;    ;  5  TrueColor 3 BYTE  BGR   %bbbbbbbb gggggggg rrrrrrrr           BGR24
;    ;  6  TrueColor  WORD   BGR   %bbbbbggg gggrrrrr                    BGR16
;    ;  7  TrueColor  WORD   BGR   %0bbbbbgg gggrrrrr                    BGR15
;    ;  8  TrueColor  LONG   RGB   %rrrrrrrr gggggggg bbbbbbbb 00000000  RGBA32
;    ;  9  ColorMap   BYTE   -     -                                     LUT8
;    ; 10  Graffiti   BYTE   -     - (Graffiti style chunky, very special)
;    ; 11  TrueColor  WORD   RGB   %gggbbbbb 0rrrrrgg                    RGB15PC
;    ; 12  TrueColor  WORD   BGR   %gggrrrrr 0bbbbbgg                    BGR15PC
;    ; 13  TrueColor  WORD   RGB   %gggbbbbb rrrrrggg                    RGB16PC
;    ; 14  TrueColor  WORD   BGR   %gggrrrrr bbbbbggg                    BGR16PC
;    ; 15  TrueColor  LONG   BGR   %bbbbbbbb gggggggg rrrrrrrr 00000000  BGRA32
;
;    ; This table is by no means complete.  There are probably more modes
;    ; available on common Amiga graphic cards, but I have no information
;    ; on them yet.  If you know about such modes please contact me.
;
;    ; Setting this LONG to zero means your application doesn't support
;    ; any Chunky orientated display modes.
;
;    EITEM rtg_PlanarSupport ;[0] This LONG is used to indicate which
;                            ;Planar modes this application supports.  A
;                            ;set bit means the mode is supported:
;    ; Bit 0: Indicates it supports 1 bitplane non-interleaved
;    ; Bit 1: Indicates it supports 2 bitplanes non-interleaved
;    ; (...)
;    ; Bit 7: Indicates it supports 8 bitplanes non-interleaved
;
;    ; Bit 16: Indicates it supports 1 bitplane interleaved
;    ; Bit 17: Indicates it supports 2 bitplanes interleaved
;    ; (...)
;    ; Bit 23: Indicates it supports 8 bitplanes interleaved
;
;    ; Bit 15: Indicates it supports EHB mode (6 bitplanes) non-interleaved
;    ; Bit 31: Indicates it supports EHB mode (6 bitplanes) interleaved
;
;    ; Note that all planar modes are color-mapped.  Bits 8-14 and 24-30
;    ; are unused for now, but could be used later to support planar modes
;    ; with even higher number of bitplanes.
;
;    ; Setting this LONG to zero means your application doesn't support
;    ; any Planar orientated display modes.

*** End of OpenRtgScreenTagList() enumeration ***


* This structure is private and for the internal use of RtgMaster.library
* and its sub-libraries ONLY.  This structure will change in the future.

 STRUCTURE RtgDimensionInfo,0
  ULONG rdi_Width    ; in pixels
  ULONG rdi_Height   ; in pixels
  LABEL rdi_SIZEOF

* This structure is private and for the internal use of RtgMaster.library
* and its sub-libraries ONLY.  This structure will change in the future.
  
 STRUCTURE ScreenMode,0
  STRUCT sm_ScrNode,8     ; ln_Succ and ln_Pred from ListNode structure

  APTR  sm_Name
  APTR  sm_Description    ; Description of the graphics board this mode
                          ; requires.  For example: "Standard Amiga Chipset".
                          ; Description should not be longer than 31
                          ; characters including terminating NULL-byte.  This
                          ; pointer might be zero so watch out.
  ULONG sm_GraphicsBoard  ; The graphics board this mode requires
  ULONG sm_ModeID         ; ModeID (depends on sm_GraphicsBoard)
  STRUCT sm_Reserved,8    ; 8 bytes reserved space for use of the sub-library
                          ; who creates this ScreenMode structure.  This is
                          ; PRIVATE to the sub-library!

  ULONG sm_MinWidth       ; minimum width in pixels
  ULONG sm_MaxWidth       ; maximum width in pixels
  ULONG sm_MinHeight      ; minimum height in pixels
  ULONG sm_MaxHeight      ; maximum height in pixels

  STRUCT sm_Default,rdi_SIZEOF  ; Standard width and height of this ScreenMode
  STRUCT sm_TextOverscan,rdi_SIZEOF  ; Settable via preferences
  STRUCT sm_StandardOverscan,rdi_SIZEOF  ; Standard overscan size
  STRUCT sm_MaxOverscan,rdi_SIZEOF  ; Maximum width and height (without the
                                    ; need for AutoScrolling).  Hardware
                                    ; dependant.

  ULONG sm_ChunkySupport  ; This LONG is used to indicate which Chunky
                          ; modes this ScreenMode supports.  A set bit
                          ; means the mode is available.  See the
                          ; rtg_ChunkySupport tag for more information.
                          ; Note that the same ScreenMode may never
                          ; use two different layouts (for example BGR
                          ; and RGB)

  ULONG sm_PlanarSupport  ; This LONG is used to indicate which Planar
                          ; modes this ScreenMode supports.  A set bit
                          ; means the mode is available.  See the
                          ; rtg_PlanarSupport tag for more information.
                          ; Note that the same ScreenMode may never
                          ; use both interleaved and non-interleaved
                          ; layouts.

  ULONG sm_PixelAspect    ; For a PAL 320x256 screen you have to write
                          ; this value here:  sm_PixelAspect =
                          ; (320/4)/(256/3) * 65536
                          ;
                          ; This tells the relation between the height and
                          ; the width of a single pixel on 4:3 screen.  For
                          ; a 640x480 screen this value is 1*65536.

  ULONG sm_VertScan       ; Vertical scan rate of this screenmode
                          ; (in Hz)
  ULONG sm_HorScan        ; Horizontal scan rate of this screenmode
                          ; (in Hz)
  ULONG sm_PixelClock     ; Pixelclock rate (in Hz)
  ULONG sm_VertBlank      ; Vertical blank rate of this screenmode
                          ; (in Hz)  (How often the VBlank interupt
                          ; is triggered)
  ULONG sm_Buffers        ; The number of buffers this ScreenMode can
                          ; can handle.  This should always be atleast
                          ; 1, 2 if the Screen can do double-buffering
                          ; and 3 if it can do triple-buffering.

  UWORD sm_BitsRed        ; The number of bits per gun for Red
  UWORD sm_BitsGreen      ; The number of bits per gun for Green
  UWORD sm_BitsBlue       ; The number of bits per gun for Blue

  LABEL sm_SIZEOF

* The TagItem ID's (ti_Tag values) for GetRtgScreenData()
*
* These tags are used to return data to the user about the RtgScreen
* structure in a future compatible way.

    ENUM TAG_USER+1

    EITEM grd_Width         ;Gets you the Width in pixels of the screen
    EITEM grd_Height        ;Gets you the Height in pixels of the screen
    EITEM grd_PixelLayout   ;Gets you the pixellayout of the screen, see
                            ;defines below.  This also tells you whether
                            ;the screen is Chunky or Planar
    EITEM grd_ColorSpace    ;Gets you the colorspace of the screen, see
                            ;defines below
    EITEM grd_Depth         ;The number of colors LOG 2.  For Planar modes
                            ;this also tells you the number of bitplanes.
                            ;Don't rely on this number except to get the
                            ;number of colors for Chunky modes.
    EITEM grd_PlaneSize     ;Tells you the number of bytes to skip to get
                            ;to the next (bit)plane.  You can use this to
                            ;find the start addresses of the other (bit)planes
                            ;in Planar and in (BytePlane) Chunky modes
    EITEM grd_BytesPerRow   ;The number of bytes taken up by a row.  This
                            ;refers to one (bit/byte)plane only for modes
                            ;working with planes.
    EITEM grd_MouseX        ; The X coordinate of the mouse pointer
    EITEM grd_MouseY        ; The Y coordinate of the mouse pointer
    EITEM grd_BusSystem     ; To which Bussystem is the Board connected ?

grd_Z3 EQU 1 ; Zorro III
grd_Z2 EQU 2 ; Zorro II
grd_Custom EQU 3 ; Custom Chipset
grd_RGBPort EQU 4 ; connected to RGB Port
grd_GVP EQU 5 ; EGS 110 is connected to "special" bus of GVP Turbo Board
grd_DDirect EQU 6 ; DraCo Direct Bus

* defines for grd_PixelLayout

grd_PLANAR     EQU 0    ; Non interleaved planar layout [X bitplanes/pixel]
grd_PLANARI    EQU 1    ; Interleaved planar layout     [X bitplanes/pixel] 
grd_CHUNKY     EQU 2    ; 8-bit Chunky layout           [BYTE/pixel]
grd_HICOL15    EQU 3    ; 15-bit Chunky layout          [WORD/pixel]
grd_HICOL16    EQU 4    ; 16-bit Chunky layout          [WORD/pixel]
grd_TRUECOL24  EQU 5    ; 24-bit Chunky layout          [3 BYTES/pixel]
grd_TRUECOL24P EQU 6    ; 24-bit Chunky layout          [3 BYTEPLANES/pixel]
grd_TRUECOL32  EQU 7    ; 24-bit Chunky layout          [LONG/pixel] (RGBx or BGRx)
grd_GRAFFITI   EQU 8    ; 8-bit Graffiti-type Chunky layout (very special...)
grd_TRUECOL32B EQU 9    ; 24-bit Chunky layout          [LONG/pixel] (xRGB or xBGR)

* defines for grd_ColorSpace

grd_Palette    EQU 0    ; Mode uses a Color Look-Up Table (CLUT)
grd_RGB        EQU 1    ; standard RGB color space
grd_BGR        EQU 2    ; high-endian RGB color space, BGR
grd_RGBPC      EQU 3    ; RGB with lowbyte and highbyte swapped
grd_BGRPC      EQU 4    ; BGR with lowbyte and highbyte swapped

*** End of GetRtgScreenData() enumeration ***


* Information about the RtgScreenModeReq tags:
*
* Each tag specified for the RtgScreenModeReq() function limits in some
* way the number of ScreenModes available to the user.  Sometimes this
* means a screenmode is completely ommited, and sometimes this means
* certain screenmodes can only be used if the user selects them to
* be wide enough.  So for example, a ScreenMode which supports screens
* of 300 to 400 pixels in width, could be filtered out completely by
* setting smr_MinWidth to 401.  But if the smr_MinWidth is set to for
* example 320 then the user is allowed to select a width of 320-400
* pixels (for this ScreenMode, and if the smr_MaxWidth allows this).
* If smr_MinWidth is 200 pixels then the ScreenMode is the limiting
* factor which means the user can't select ScreenModes smaller than
* 300 pixels.
*
* The PlanarSupport and ChunkySupport tags determine which ScreenModes
* are available to the user depending on their layout and number of
* colors.

* This structure is private and for the internal use of RtgMaster.library
* and its sub-libraries ONLY.  This structure will change in the future.

 STRUCTURE ScreenReq,0
  ULONG sq_ScreenMode ; Ptr to ScreenMode structure
  ULONG sq_Width      ; Must be within Tag specified limits
  ULONG sq_Height     ; The width and height which the user selected
  UWORD sq_Depth      ; Number of colors log2 which the user selected
  UWORD sq_Overscan   ; 0 = No Overscan.  See defines below.
  UBYTE sq_Flags      ; Bit 0 set: EHB selected (sq_Depth = 6)
                      ; Bit 1 set: Chunky mode
                      ; Bit 2 set: Default X gadget selected
                      ; Bit 3 set: Default Y gadget selected
                      ; Bit 4 set: Autoscroll gadget selected
                      ; Bit 5 set: B&W gadget selected
  LABEL sq_SIZEOF

* Bits set in sq_Flags

sq_EHB          EQU 1 ; EHB selected (sq_Depth = 6)
sq_CHUNKYMODE   EQU 2 ; Chunky Mode selected
sq_DEFAULTX     EQU 4 ; Default Width selected
sq_DEFAULTY     EQU 8 ; Default Height selected


* defines for sq_Overscan

sq_NOOVERSCAN        EQU 0
sq_TEXTOVERSCAN      EQU 1   ; User setable, should be entirely visible
sq_STANDARDOVERSCAN  EQU 2   ; Standard overscan (just past edges)
sq_MAXOVERSCAN       EQU 3   ; Maximum overscan (as much as possible)

* This structure is private and for the internal use of RtgMaster.library
* and its sub-libraries ONLY.  This structure will change in the future.

 STRUCTURE RtgScreen,0
  ULONG rs_LibBase        ; Sub-library base for this ID
  UWORD rs_LibVersion     ; Sub-library version for this ID
  UWORD rs_Pad1
  ULONG rs_GraphicsBoard  ; ID
  STRUCT rs_Reserved,20
  ULONG rs_MouseX
  ULONG rs_MouseY
  APTR  rs_c2pcode
  APTR rs_c2pdata
  ULONG rs_c2pcurr
  STRUCT rs_c2pname,30
  ; This structure is just a fixed-size header for the real sub library's
  ; and graphics board's specific RtgScreen structure.  These are stored
  ; in the rtgXXXX.i files
  LABEL rs_SIZEOF

        ENDC
