8 |
|
* vga.c - driver for VGA graphics adaptor under MS-DOS |
9 |
|
*/ |
10 |
|
|
11 |
< |
#include <stdio.h> |
11 |
> |
#include "standard.h" |
12 |
|
|
13 |
|
#include <graph.h> |
14 |
|
|
38 |
|
vga_init(name, id) /* open VGA */ |
39 |
|
char *name, *id; |
40 |
|
{ |
41 |
< |
static short mode_pref[] = {_XRES256COLOR, _SVRES256COLOR, |
41 |
> |
static short mode_pref[] = {_MRES256COLOR, -1}; |
42 |
> |
static short smode_pref[] = {_XRES256COLOR, _SVRES256COLOR, |
43 |
|
_VRES256COLOR, _MRES256COLOR, -1}; |
44 |
|
char *ep; |
45 |
< |
register int i; |
45 |
> |
register short *mp; |
46 |
|
|
47 |
< |
for (i = 0; mode_pref[i] != -1; i++) |
48 |
< |
if (_setvideomode(mode_pref[i])) |
47 |
> |
mp = !strcmp(name, "vga") ? mode_pref : smode_pref; |
48 |
> |
for ( ; *mp != -1; mp++) |
49 |
> |
if (_setvideomode(*mp)) |
50 |
|
break; |
51 |
< |
if (mode_pref[i] == -1) { |
51 |
> |
if (*mp == -1) { |
52 |
|
_setvideomode(_DEFAULTMODE); |
53 |
< |
stderr_v(name); |
54 |
< |
stderr_v(": card not present or insufficient VGA memory\n"); |
53 |
> |
eputs(name); |
54 |
> |
eputs(": card not present or insufficient VGA memory\n"); |
55 |
|
return(NULL); |
56 |
|
} |
57 |
|
_getvideoconfig(&config); |
76 |
|
_remappalette(1, _BRIGHTWHITE); |
77 |
|
_settextcolor(1); |
78 |
|
ms_gcinit(&vga_driver); |
79 |
< |
errvec = vga_errout; |
80 |
< |
cmdvec = vga_comout; |
81 |
< |
if (wrnvec != NULL) |
82 |
< |
wrnvec = vga_comout; |
79 |
> |
erract[USER].pf = |
80 |
> |
erract[SYSTEM].pf = |
81 |
> |
erract[INTERNAL].pf = |
82 |
> |
erract[CONSISTENCY].pf = vga_errout; |
83 |
> |
erract[COMMAND].pf = vga_comout; |
84 |
> |
if (erract[WARNING].pf != NULL) |
85 |
> |
erract[WARNING].pf = vga_comout; |
86 |
|
return(&vga_driver); |
87 |
|
} |
88 |
|
|
90 |
|
static |
91 |
|
vga_close() /* close VGA */ |
92 |
|
{ |
93 |
+ |
ms_gcdone(&vga_driver); |
94 |
|
_setvideomode(_DEFAULTMODE); |
95 |
< |
errvec = stderr_v; /* reset error vectors */ |
96 |
< |
cmdvec = NULL; |
97 |
< |
if (wrnvec != NULL) |
98 |
< |
wrnvec = stderr_v; |
95 |
> |
erract[USER].pf = /* reset error vector */ |
96 |
> |
erract[SYSTEM].pf = |
97 |
> |
erract[INTERNAL].pf = |
98 |
> |
erract[CONSISTENCY].pf = eputs; |
99 |
> |
erract[COMMAND].pf = NULL; |
100 |
> |
if (erract[WARNING].pf != NULL) |
101 |
> |
erract[WARNING].pf = wputs; |
102 |
|
if (fatalerr[0]) |
103 |
< |
stderr_v(fatalerr); /* repeat error message */ |
103 |
> |
eputs(fatalerr); /* repeat error message */ |
104 |
|
} |
105 |
|
|
106 |
|
|