/* aascreen.h  Copyright 1990 Dancing Flame, San Francisco */

#ifndef AASCREEN_H
#define AASCREEN_H

#ifndef AATYPES_H
#include "aatypes.h"
#endif /* AATYPES_H */


/* Graphics types */
typedef unsigned char Cmap;
typedef unsigned char Pixel;
typedef unsigned char Bitplane;

/* Constants pertaining to 320x200 256 color mode mostly */
#define AA_VGA_SCREEN ((Pixel *)0xa0000000)
#define AA_XMAX 320
#define AA_YMAX 200
#define AA_BPR 320
#define AA_COLORS 256

/* This structure is something we can draw on.  A superset of Vcel
   (and keep it that way or things break!)  */
struct vscreen
	{
	int x, y;	/* upper left corner in screen coordinates */
	unsigned w, h;	/* width, height */
	unsigned bpr;	/* bytes per row of image p */
	Pixel *p;	/* Starts on segment boundary */
	Cmap *cmap;
	long psize;	/* size of pixels */
	Pixel *allocedp;	/* for memory based screens only */
	};
typedef struct vscreen Vscreen;
extern Vscreen aa_screen;
extern Cmap aa_colors[];	/* software echo of color map */
Boolean aa_open_vga_screen(void);	/* opens 256 color screen */
void aa_close_vga_screen(void);
/* Open a screen can draw on but not see */
Vscreen *aa_alloc_mem_screen(void);	
/* For screens not full size */
Vscreen *aa_alloc_mem_cel(int x, int y, int w, int h); 
void aa_free_mem_screen(Vscreen *ms);	/* dispose of a memory screen */
void aa_copy_screen(Vscreen *source, Vscreen *dest);
void aa_clear_screen(Vscreen *vs);

/* Get the current video mode */
int dos_get_vmode(void);
/* Set video mode.  Mode 0x13 is 320x200 256 color */
void dos_set_vmode(int mode);
/* Set the VGA color map. */
void aa_set_colors(int start, int count, Cmap *cmap);	
/* Wait until in vertical blank */
void aa_wait_vblank(void);
/* Wait until out of vertical blank */
void aa_wait_no_vblank(void);

#endif /* AASCREEN_H */
