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.2 by greg, Thu Oct 8 16:19:30 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[] = {_XRES256COLOR, _SVRES256COLOR,
42 >                                        _MRES256COLOR, -1};
43 >        char  *ep;
44 >        register int  i;
45 >
46 >        for (i = 0; mode_pref[i] != -1; i++)
47 >                if (_setvideomode(mode_pref[i]))
48 >                        break;
49 >        if (mode_pref[i] == -1) {
50 >                _setvideomode(_DEFAULTMODE);
51 >                stderr_v(name);
52 >                stderr_v(": card not present or insufficient VGA memory\n");
53                  return(NULL);
54 +        }
55          _getvideoconfig(&config);
56          _settextwindow(config.numtextrows-2, 1,
57                          config.numtextrows, config.numtextcols);
58          vga_driver.xsiz = config.numxpixels;
59 <        vga_driver.ysiz = config.numypixels*(config.numtextrows-3)
59 >        vga_driver.ysiz = (long)config.numypixels*(config.numtextrows-3)
60                                  /config.numtextrows;
61 <        vga_driver.pixaspect = .75*config.numxpixels/config.numypixels;
61 >        switch (config.mode) {                  /* correct problems */
62 >        case _XRES256COLOR:
63 >                vga_driver.ysiz -= 16;
64 >                break;
65 >        case _MRES256COLOR:
66 >                vga_driver.pixaspect = 1.2;
67 >                break;
68 >        }
69          _setviewport(0, 0, vga_driver.xsiz, vga_driver.ysiz);
70 <        make_gmap(GAMMA);                               /* make color map */
71 <        _remappalette(1, 0x303030L);
70 >        if ((ep = getenv("GAMMA")) != NULL)     /* make gamma map */
71 >                make_gmap(atof(ep));
72 >        else
73 >                make_gmap(GAMMA);
74 >        _remappalette(1, _BRIGHTWHITE);
75          _settextcolor(1);
76 <        errvec = vga_comout;
76 >        ms_gcinit(&vga_driver);
77 >        errvec = vga_errout;
78          cmdvec = vga_comout;
79          if (wrnvec != NULL)
80                  wrnvec = vga_comout;
# Line 57 | Line 85 | char  *name, *id;
85   static
86   vga_close()                                     /* close VGA */
87   {
88 <        errvec = stderr_v;                      /* reset error vector */
88 >        _setvideomode(_DEFAULTMODE);
89 >        errvec = stderr_v;                      /* reset error vectors */
90          cmdvec = NULL;
91          if (wrnvec != NULL)
92                  wrnvec = stderr_v;
93 <        _setvideomode(_DEFAULTMODE);
93 >        if (fatalerr[0])
94 >                stderr_v(fatalerr);             /* repeat error message */
95   }
96  
97  
# Line 108 | Line 138 | register char  *s;
138                          if (*s == '\0')
139                                  break;
140                          tpos = _gettextposition();
141 <                        _settextposition(tpos.row, *s=='\r' ? 0 : tpos.col-1);
141 >                        _settextposition(tpos.row, *s=='\r' ? 1 : tpos.col-1);
142                          continue;
143                  default:
144                          *cp++ = *s;
# Line 116 | Line 146 | register char  *s;
146                  }
147                  return(0);
148          }
149 +        fatalerr[0] = '\0';
150 + }
151 +
152 +
153 + static
154 + vga_errout(msg)
155 + register char  *msg;
156 + {
157 +        static char  *fep = fatalerr;
158 +
159 +        _outtext(msg);
160 +        while (*msg)
161 +                *fep++ = *msg++;
162 +        *fep = '\0';
163 +        if (fep > fatalerr && fep[-1] == '\n')
164 +                fep = fatalerr;
165   }
166  
167  

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines