1 /* Graphics Library headerfile */
2 
3 #ifndef VGAGL_H
4 #define VGAGL_H
5 
6 #ifdef __cplusplus
7 extern "C"
8 {
9 #endif
10 
11 
12 /* Graphics context */
13 
14 #define CONTEXT_VIRTUAL		0x0
15 #define CONTEXT_PAGED		0x1
16 #define CONTEXT_LINEAR		0x2
17 #define CONTEXT_MODEX		0x3
18 #define CONTEXT_PLANAR16	0x4
19 
20 #define MODEFLAG_PAGEFLIPPING_CAPABLE		0x01
21 #define MODEFLAG_TRIPLEBUFFERING_CAPABLE	0x02
22 #define MODEFLAG_PAGEFLIPPING_ENABLED		0x04
23 #define MODEFLAG_TRIPLEBUFFERING_ENABLED	0x08
24 #define MODEFLAG_FLIPPAGE_BANKALIGNED		0x10
25 /*
26  * The next two can never occur together, thus we use the same flag
27  * (as svgalib does).
28  */
29 #define MODEFLAG_32BPP_SHIFT8			0x20
30 #define MODEFLAG_24BPP_REVERSED			0x20
31 
32     typedef struct {
33 	void (*driver_setpixel_func) (int, int, int);
34 	int (*driver_getpixel_func) (int, int);
35 	void (*driver_hline_func) (int, int, int, int);
36 	void (*driver_fillbox_func) (int, int, int, int, int);
37 	void (*driver_putbox_func) (int, int, int, int, void *, int);
38 	void (*driver_getbox_func) (int, int, int, int, void *, int);
39 	void (*driver_putboxmask_func) (int, int, int, int, void *);
40 	void (*driver_putboxpart_func) (int, int, int, int, int, int, void *,
41 					int, int);
42 	void (*driver_getboxpart_func) (int, int, int, int, int, int, void *,
43 					int, int);
44 	void (*driver_copybox_func) (int, int, int, int, int, int);
45     } framebufferfunctions;
46 
47     typedef struct {
48 	unsigned char modetype;	/* virtual, paged, linear, mode X */
49 	unsigned char modeflags;	/* or planar16 */
50 	unsigned char dummy;
51 	unsigned char flippage;
52 	int width;		/* width in pixels */
53 	int height;		/* height in pixels */
54 	int bytesperpixel;	/* bytes per pixel (1, 2, 3, or 4) */
55 	int colors;		/* number of colors */
56 	int bitsperpixel;	/* bits per pixel (8, 15, 16 or 24) */
57 	int bytewidth;		/* length of a scanline in bytes */
58 	char *vbuf;		/* address of framebuffer */
59 	int clip;		/* clipping enabled? */
60 	int clipx1;		/* top-left coordinate of clip window */
61 	int clipy1;
62 	int clipx2;		/* bottom-right coordinate of clip window */
63 	int clipy2;
64 	framebufferfunctions ff;
65     } GraphicsContext;
66 
67     extern GraphicsContext currentcontext;
68 
69 #define BYTESPERPIXEL (currentcontext.bytesperpixel)
70 #define BYTEWIDTH (currentcontext.bytewidth)
71 #define WIDTH (currentcontext.width)
72 #define HEIGHT (currentcontext.height)
73 #define VBUF (currentcontext.vbuf)
74 #define MODETYPE (currentcontext.modetype)
75 #define MODEFLAGS (currentcontext.modeflags)
76 #define BITSPERPIXEL (currentcontext.bitsperpixel)
77 #define COLORS (currentcontext.colors)
78 
79 #define __clip (currentcontext.clip)
80 #define __clipx1 (currentcontext.clipx1)
81 #define __clipy1 (currentcontext.clipy1)
82 #define __clipx2 (currentcontext.clipx2)
83 #define __clipy2 (currentcontext.clipy2)
84 
85 
86 /* Configuration */
87 
88     int gl_setcontextvga(int m);
89     int gl_setcontextvgavirtual(int m);
90     void gl_setcontextvirtual(int w, int h, int bpp, int bitspp, void *vbuf);
91     void gl_setcontextwidth(int w);
92     void gl_setcontextheight(int h);
93     GraphicsContext *gl_allocatecontext(void);
94     void gl_setcontext(GraphicsContext * gc);
95     void gl_getcontext(GraphicsContext * gc);
96     void gl_freecontext(GraphicsContext * gc);
97 
98 /* Line drawing */
99 
100     void gl_setpixel(int x, int y, int c);
101     void gl_setpixelrgb(int x, int y, int r, int g, int b);
102     int gl_getpixel(int x, int y);
103     void gl_getpixelrgb(int x, int y, int *r, int *g, int *b);
104     int gl_rgbcolor(int r, int g, int b);
105     void gl_hline(int x1, int y, int x2, int c);
106     void gl_line(int x1, int y1, int x2, int y2, int c);
107     void gl_circle(int x, int y, int r, int c);
108     void gl_fillcircle(int sx, int sy, int r, int c);
109     void gl_bcircle(int sx, int sy, int r, int c, int fill);
110 
111 /* Box (bitmap) functions */
112 
113     void gl_fillbox(int x, int y, int w, int h, int c);
114     void gl_getbox(int x, int y, int w, int h, void *dp);
115     void gl_putbox(int x, int y, int w, int h, void *dp);
116     void gl_putboxpart(int x, int y, int w, int h, int bw, int bh, void *b,
117 		       int xo, int yo);
118     void gl_putboxmask(int x, int y, int w, int h, void *dp);
119     void gl_copybox(int x1, int y1, int w, int h, int x2, int y2);
120     void gl_copyboxtocontext(int x1, int y1, int w, int h, GraphicsContext * gc,
121 			     int x2, int y2);
122     void gl_copyboxfromcontext(GraphicsContext * gc, int x1, int y1, int w, int h,
123 			       int x2, int y2);
124 /* The following functions only work in 256-color modes: */
125     void gl_compileboxmask(int w, int h, void *sdp, void *ddp);
126     int gl_compiledboxmasksize(int w, int h, void *sdp);
127     void gl_putboxmaskcompiled(int x, int y, int w, int h, void *dp);
128 
129 /* Miscellaneous */
130 
131     void gl_clearscreen(int c);
132     void gl_scalebox(int w1, int h1, void *sb, int w2, int h2, void *db);
133     void gl_setdisplaystart(int x, int y);
134     void gl_enableclipping(void);
135     void gl_setclippingwindow(int x1, int y1, int x2, int y2);
136     void gl_disableclipping(void);
137 
138 /* Screen buffering */
139 
140     void gl_copyscreen(GraphicsContext * gc);
141     void gl_setscreenoffset(int o);
142     int gl_enablepageflipping(GraphicsContext * gc);
143 
144 /* Text */
145 
146 /* Writemode flags. */
147 #define WRITEMODE_OVERWRITE 0
148 #define WRITEMODE_MASKED 1
149 #define FONT_EXPANDED 0
150 #define FONT_COMPRESSED 2
151 
152     void gl_expandfont(int fw, int fh, int c, void *sfdp, void *dfdp);
153     void gl_setfont(int fw, int fh, void *fdp);
154     void gl_colorfont(int fw, int fh, int c, void *fdp);
155     void gl_setwritemode(int wm);
156     void gl_write(int x, int y, char *s);
157     void gl_writen(int x, int y, int n, char *s);
158     void gl_setfontcolors(int bg, int fg);
159 
160 /* gl_printf is only available in ELF libraries!! */
161     int gl_printf(int x, int y, const char *fmt,...);
162 
163     extern unsigned char *gl_font8x8;	/* compressed 8x8 font */
164 
165 /* 256-color Palette */
166 
167     typedef struct {
168 	struct {
169 	    unsigned char red;	/* 6-bit values */
170 	    unsigned char green;
171 	    unsigned char blue;
172 	} color[256];
173     } Palette;
174 
175     void gl_setpalettecolor(int c, int r, int b, int g);
176     void gl_getpalettecolor(int c, int *r, int *b, int *g);
177     void gl_setpalettecolors(int s, int n, void *dp);
178     void gl_getpalettecolors(int s, int n, void *dp);
179     void gl_setpalette(void *p);
180     void gl_getpalette(void *p);
181     void gl_setrgbpalette(void);
182 
183 
184 #ifdef __cplusplus
185 }
186 
187 #endif
188 #endif
189