www.pudn.com > supermary.rar > XLIB.H


/*---------------------------------------------------------------------- 
; 
; 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