- /*----------------------------------------------------------------------
- ;
- ; XLIB - header file
- ;
- ;
- ;
- ; ****** XLIB - Mode X graphics library ****************
- ; ****** ****************
- ; ****** Written By Themie Gouthas ****************
- ;
- ; egg@dstos3.dsto.gov.au
- ; teg@bart.dsto.gov.au
- ;
- ; Header file contributed by Darren Lyon (darren@nicky.DIALix.oz.au)
- ;
- ;
- ; Terminology & notes:
- ; VRAM == Video RAM
- ; SRAM == System RAM
- ; X coordinates are in pixels unless explicitly stated
- ;
- ;----------------------------------------------------------------------*/
- #ifndef _XLIB_H_
- #define _XLIB_H_
- #define BYTER unsigned char
- #define WORD unsigned int
- #define X_MODE_320x200 0
- #define X_MODE_320x240 1
- #define X_MODE_360x200 2
- #define X_MODE_360x240 3
- #define X_MODE_376x282 4
- #define X_MODE_320x400 5
- #define X_MODE_320x480 6
- #define X_MODE_360x400 7
- #define X_MODE_360x480 8
- #define X_MODE_360x360 9
- #define X_MODE_376x308 10
- #define X_MODE_376x564 11
- #define X_MODE_256x400 12
- #define X_MODE_256x480 13
- #define BACKWARD 0
- #define FORWARD 1
- #define X_MODE_INVALID -1
- #define ERROR 1
- #define OK 0
- /* FUNCTIONS =========================================================== */
- #ifdef __cplusplus
- extern "C" {
- #endif
- WORD x_set_mode(
- WORD mode, /* Initialize x mode */
- WORD WidthInPixels);
- void x_select_default_plane( /*Enables Read/Write access to a */
- BYTER plane); /* a specified plane */
- void x_set_splitscreen( /* set the split screen start */
- WORD line); /*scan line (initialize) */
- void x_set_start_addr(
- WORD X, /* Set the screen start */
- WORD Y); /* address in video ram */
- void x_hide_splitscreen(void); /* Disable the split screen (Split */
- /* Screen RAM remains reserved) */
- void x_show_splitscreen(void); /* Enable the split screen (given it */
- /* was previously "hidden") */
- void x_adjust_splitscreen( /* Adjust the start scan line of the */
- WORD line); /* split screen */
- WORD x_set_doublebuffer( /* Enable double buffering with a */
- WORD PageHeight); /* specified page height */
- WORD x_set_tripplebuffer( /* Enable tripple buffering with a */
- WORD PageHeight); /* specified page height */
- void x_page_flip( /* Swap visible page (only when double */
- WORD X, /* buffering is active) & sets virt start*/
- WORD Y);
- void x_set_cliprect( /* Define the clipping rectangle */
- WORD left, /* NOTE: left and right are in bytes */
- WORD top,
- WORD righ,
- WORD bottom);
- void x_text_mode(void); /* return to text mode */
- void x_wait_vsync(void); /* wait for vsync */
- #ifdef __cplusplus
- }
- #endif
- /* VARIABLES =========================================================== */
- extern BYTER InGraphics; /* non zero if in X graphics mode */
- extern WORD CurrXMode; /* contains current X graphics mode id */
- extern WORD ScrnPhysicalByteWidth; /* Physical screen width in bytes */
- extern WORD ScrnPhysicalPixelWidth; /* Physical screen width in pixels */
- extern WORD ScrnPhysicalHeight; /* Physical screen height in pixels */
- extern WORD ErrorValue; /* Error return value */
- extern WORD SplitScrnOffs; /* Offset in VRAM of split screen */
- extern WORD SplitScrnScanLine; /* Scan line split screen starts at */
- /* initially. Resizing the split scrn */
- /* using the other functions does not */
- /* change this value */
- extern WORD SplitScrnVisibleHeight; /* Height of the visible portion of the*/
- /* split screen. */
- extern WORD Page0_Offs; /* Offset in VRAM of main virt. screen */
- extern WORD Page1_Offs; /* Offset in VRAM of 2nd virt. screen */
- extern WORD Page2_Offs; /* Offset in VRAM of 3rd virt. screen */
- extern WORD ScrnLogicalByteWidth; /* Virtual screen width in bytes */
- extern WORD ScrnLogicalPixelWidth; /* Virtual screen width in pixels */
- extern WORD ScrnLogicalHeight; /* Virtual screen height in pixels */
- extern WORD MaxScrollX; /* Max X position of physical screen */
- /* within virtual screen */
- extern WORD MaxScrollY; /* Max Y position of physical screen */
- /* within virtual screen */
- extern WORD DoubleBufferActive; /* Indicates whether double buffering */
- /* is active */
- extern WORD TrippleBufferActive; /* Indicates whether tripple */
- /* buffering is active */
- extern WORD VisiblePageIdx; /* Index number of visible page 0 or 1 */
- extern WORD HiddenPageOffs; /* Offset of Hidden Pg | only valid */
- extern WORD VisiblePageOffs; /* Offset of Visible Pg| for D.B. mode */
- extern WORD WaitingPageOffs; /* Offset of Waiting Pg| for T.B. mode */
- extern WORD NonVisual_Offs; /* Offset of first non-visible VRAM */
- extern WORD StartAddressFlag;
- extern WORD TopClip; /* Clipping rectangle */
- extern WORD BottomClip;
- extern WORD LeftClip;
- extern WORD RightClip;
- extern WORD PhysicalStartPixelX; /* Coordinates of physical (visible) */
- extern WORD PhysicalStartByteX; /* screen relative to the virtual */
- extern WORD PhysicalStartY; /* screen's U.L. corner */
- extern char* VsyncPaletteBuffer;
- #endif