ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/radiance/ray/src/rt/vga.c
(Generate patch)

Comparing ray/src/rt/vga.c (file contents):
Revision 2.1 by greg, Tue Sep 22 11:42:17 1992 UTC vs.
Revision 2.6 by greg, Fri Jun 4 14:49:08 1993 UTC

# Line 10 | Line 10 | static char SCCSid[] = "$SunId$ LBL";
10  
11   #include  <stdio.h>
12  
13 + #include  <math.h>
14 +
15   #include  <graph.h>
16  
17   #include  "driver.h"
# Line 19 | Line 21 | static char SCCSid[] = "$SunId$ LBL";
21   #define  GAMMA          2.2             /* exponent for color correction */
22  
23  
24 < int  vga_close(), vga_clear(), vga_paintr(), vga_comout(), vga_comin();
24 > int  vga_close(), vga_clear(), vga_paintr(), vga_comout(), vga_errout(),
25 >                vga_comin();
26  
27   static struct driver  vga_driver = {
28          vga_close, vga_clear, vga_paintr, NULL,
29 <        vga_comout, vga_comin, NULL
29 >        vga_comout, vga_comin, NULL, 1.0
30   };
31  
32 + static char  fatalerr[128];
33 +
34   static struct videoconfig  config;
35  
36 + extern char  *getenv();
37  
38 +
39   struct driver *
40   vga_init(name, id)                      /* open VGA */
41   char  *name, *id;
42   {
43 <        if (_setvideomode(_MRES256COLOR) == 0)
43 >        static short  mode_pref[] = {_MRES256COLOR, -1};
44 >        static short  smode_pref[] = {_XRES256COLOR, _SVRES256COLOR,
45 >                                        _VRES256COLOR, _MRES256COLOR, -1};
46 >        char  *ep;
47 >        register short  *mp;
48 >
49 >        mp = !strcmp(name, "vga") ? mode_pref : smode_pref;
50 >        for ( ; *mp != -1; mp++)
51 >                if (_setvideomode(*mp))
52 >                        break;
53 >        if (*mp == -1) {
54 >                _setvideomode(_DEFAULTMODE);
55 >                stderr_v(name);
56 >                stderr_v(": card not present or insufficient VGA memory\n");
57                  return(NULL);
58 +        }
59          _getvideoconfig(&config);
60          _settextwindow(config.numtextrows-2, 1,
61                          config.numtextrows, config.numtextcols);
62          vga_driver.xsiz = config.numxpixels;
63 <        vga_driver.ysiz = config.numypixels*(config.numtextrows-3)
63 >        vga_driver.ysiz = (long)config.numypixels*(config.numtextrows-3)
64                                  /config.numtextrows;
65 <        vga_driver.pixaspect = .75*config.numxpixels/config.numypixels;
65 >        switch (config.mode) {                  /* correct problems */
66 >        case _XRES256COLOR:
67 >                vga_driver.ysiz -= 16;
68 >                break;
69 >        case _MRES256COLOR:
70 >                vga_driver.pixaspect = 1.2;
71 >                break;
72 >        }
73          _setviewport(0, 0, vga_driver.xsiz, vga_driver.ysiz);
74 <        make_gmap(GAMMA);                               /* make color map */
75 <        _remappalette(1, 0x303030L);
74 >        if ((ep = getenv("GAMMA")) != NULL)     /* make gamma map */
75 >                make_gmap(atof(ep));
76 >        else
77 >                make_gmap(GAMMA);
78 >        _remappalette(1, _BRIGHTWHITE);
79          _settextcolor(1);
80 <        errvec = vga_comout;
80 >        ms_gcinit(&vga_driver);
81 >        errvec = vga_errout;
82          cmdvec = vga_comout;
83          if (wrnvec != NULL)
84                  wrnvec = vga_comout;
# Line 57 | Line 89 | char  *name, *id;
89   static
90   vga_close()                                     /* close VGA */
91   {
92 <        errvec = stderr_v;                      /* reset error vector */
92 >        ms_gcdone(&vga_driver);
93 >        _setvideomode(_DEFAULTMODE);
94 >        errvec = stderr_v;                      /* reset error vectors */
95          cmdvec = NULL;
96          if (wrnvec != NULL)
97                  wrnvec = stderr_v;
98 <        _setvideomode(_DEFAULTMODE);
98 >        if (fatalerr[0])
99 >                stderr_v(fatalerr);             /* repeat error message */
100   }
101  
102  
# Line 108 | Line 143 | register char  *s;
143                          if (*s == '\0')
144                                  break;
145                          tpos = _gettextposition();
146 <                        _settextposition(tpos.row, *s=='\r' ? 0 : tpos.col-1);
146 >                        _settextposition(tpos.row, *s=='\r' ? 1 : tpos.col-1);
147                          continue;
148                  default:
149                          *cp++ = *s;
# Line 116 | Line 151 | register char  *s;
151                  }
152                  return(0);
153          }
154 +        fatalerr[0] = '\0';
155 + }
156 +
157 +
158 + static
159 + vga_errout(msg)
160 + register char  *msg;
161 + {
162 +        static char  *fep = fatalerr;
163 +
164 +        _outtext(msg);
165 +        while (*msg)
166 +                *fep++ = *msg++;
167 +        *fep = '\0';
168 +        if (fep > fatalerr && fep[-1] == '\n')
169 +                fep = fatalerr;
170   }
171  
172  

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines