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.5 by greg, Mon Nov 2 16:01:05 1992 UTC

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

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines