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.8 by greg, Sat Feb 22 02:07:29 2003 UTC

# Line 1 | Line 1
1 /* Copyright (c) 1992 Regents of the University of California */
2
1   #ifndef lint
2 < static char SCCSid[] = "$SunId$ LBL";
2 > static const char       RCSid[] = "$Id$";
3   #endif
6
4   /*
5   *  vga.c - driver for VGA graphics adaptor under MS-DOS
6   */
7  
8 < #include  <stdio.h>
8 > /* ====================================================================
9 > * The Radiance Software License, Version 1.0
10 > *
11 > * Copyright (c) 1990 - 2002 The Regents of the University of California,
12 > * through Lawrence Berkeley National Laboratory.   All rights reserved.
13 > *
14 > * Redistribution and use in source and binary forms, with or without
15 > * modification, are permitted provided that the following conditions
16 > * are met:
17 > *
18 > * 1. Redistributions of source code must retain the above copyright
19 > *         notice, this list of conditions and the following disclaimer.
20 > *
21 > * 2. Redistributions in binary form must reproduce the above copyright
22 > *       notice, this list of conditions and the following disclaimer in
23 > *       the documentation and/or other materials provided with the
24 > *       distribution.
25 > *
26 > * 3. The end-user documentation included with the redistribution,
27 > *           if any, must include the following acknowledgment:
28 > *             "This product includes Radiance software
29 > *                 (http://radsite.lbl.gov/)
30 > *                 developed by the Lawrence Berkeley National Laboratory
31 > *               (http://www.lbl.gov/)."
32 > *       Alternately, this acknowledgment may appear in the software itself,
33 > *       if and wherever such third-party acknowledgments normally appear.
34 > *
35 > * 4. The names "Radiance," "Lawrence Berkeley National Laboratory"
36 > *       and "The Regents of the University of California" must
37 > *       not be used to endorse or promote products derived from this
38 > *       software without prior written permission. For written
39 > *       permission, please contact [email protected].
40 > *
41 > * 5. Products derived from this software may not be called "Radiance",
42 > *       nor may "Radiance" appear in their name, without prior written
43 > *       permission of Lawrence Berkeley National Laboratory.
44 > *
45 > * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
46 > * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
47 > * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
48 > * DISCLAIMED.   IN NO EVENT SHALL Lawrence Berkeley National Laboratory OR
49 > * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
50 > * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
51 > * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
52 > * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
53 > * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
54 > * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
55 > * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
56 > * SUCH DAMAGE.
57 > * ====================================================================
58 > *
59 > * This software consists of voluntary contributions made by many
60 > * individuals on behalf of Lawrence Berkeley National Laboratory.   For more
61 > * information on Lawrence Berkeley National Laboratory, please see
62 > * <http://www.lbl.gov/>.
63 > */
64  
65 + #include  "standard.h"
66 +
67   #include  <graph.h>
68  
69   #include  "driver.h"
# Line 19 | Line 73 | static char SCCSid[] = "$SunId$ LBL";
73   #define  GAMMA          2.2             /* exponent for color correction */
74  
75  
76 < int  vga_close(), vga_clear(), vga_paintr(), vga_comout(), vga_comin();
76 > int  vga_close(), vga_clear(), vga_paintr(), vga_comout(), vga_errout(),
77 >                vga_comin();
78  
79   static struct driver  vga_driver = {
80          vga_close, vga_clear, vga_paintr, NULL,
81 <        vga_comout, vga_comin, NULL
81 >        vga_comout, vga_comin, NULL, 1.0
82   };
83  
84 + static char  fatalerr[128];
85 +
86   static struct videoconfig  config;
87  
88 + extern char  *getenv();
89  
90 +
91   struct driver *
92   vga_init(name, id)                      /* open VGA */
93   char  *name, *id;
94   {
95 <        if (_setvideomode(_MRES256COLOR) == 0)
95 >        static short  mode_pref[] = {_MRES256COLOR, -1};
96 >        static short  smode_pref[] = {_XRES256COLOR, _SVRES256COLOR,
97 >                                        _VRES256COLOR, _MRES256COLOR, -1};
98 >        char  *ep;
99 >        register short  *mp;
100 >
101 >        mp = !strcmp(name, "vga") ? mode_pref : smode_pref;
102 >        for ( ; *mp != -1; mp++)
103 >                if (_setvideomode(*mp))
104 >                        break;
105 >        if (*mp == -1) {
106 >                _setvideomode(_DEFAULTMODE);
107 >                eputs(name);
108 >                eputs(": card not present or insufficient VGA memory\n");
109                  return(NULL);
110 +        }
111          _getvideoconfig(&config);
112          _settextwindow(config.numtextrows-2, 1,
113                          config.numtextrows, config.numtextcols);
114          vga_driver.xsiz = config.numxpixels;
115 <        vga_driver.ysiz = config.numypixels*(config.numtextrows-3)
115 >        vga_driver.ysiz = (long)config.numypixels*(config.numtextrows-3)
116                                  /config.numtextrows;
117 <        vga_driver.pixaspect = .75*config.numxpixels/config.numypixels;
117 >        switch (config.mode) {                  /* correct problems */
118 >        case _XRES256COLOR:
119 >                vga_driver.ysiz -= 16;
120 >                break;
121 >        case _MRES256COLOR:
122 >                vga_driver.pixaspect = 1.2;
123 >                break;
124 >        }
125          _setviewport(0, 0, vga_driver.xsiz, vga_driver.ysiz);
126 <        make_gmap(GAMMA);                               /* make color map */
127 <        _remappalette(1, 0x303030L);
126 >        if ((ep = getenv("GAMMA")) != NULL)     /* make gamma map */
127 >                make_gmap(atof(ep));
128 >        else
129 >                make_gmap(GAMMA);
130 >        _remappalette(1, _BRIGHTWHITE);
131          _settextcolor(1);
132 <        errvec = vga_comout;
133 <        cmdvec = vga_comout;
134 <        if (wrnvec != NULL)
135 <                wrnvec = vga_comout;
132 >        ms_gcinit(&vga_driver);
133 >        erract[USER].pf =
134 >        erract[SYSTEM].pf =
135 >        erract[INTERNAL].pf =
136 >        erract[CONSISTENCY].pf = vga_errout;
137 >        erract[COMMAND].pf = vga_comout;
138 >        if (erract[WARNING].pf != NULL)
139 >                erract[WARNING].pf = vga_comout;
140          return(&vga_driver);
141   }
142  
# Line 57 | Line 144 | char  *name, *id;
144   static
145   vga_close()                                     /* close VGA */
146   {
147 <        errvec = stderr_v;                      /* reset error vector */
61 <        cmdvec = NULL;
62 <        if (wrnvec != NULL)
63 <                wrnvec = stderr_v;
147 >        ms_gcdone(&vga_driver);
148          _setvideomode(_DEFAULTMODE);
149 +        erract[USER].pf =                       /* reset error vector */
150 +        erract[SYSTEM].pf =
151 +        erract[INTERNAL].pf =
152 +        erract[CONSISTENCY].pf = eputs;
153 +        erract[COMMAND].pf = NULL;
154 +        if (erract[WARNING].pf != NULL)
155 +                erract[WARNING].pf = wputs;
156 +        if (fatalerr[0])
157 +                eputs(fatalerr);                /* repeat error message */
158   }
159  
160  
# Line 108 | Line 201 | register char  *s;
201                          if (*s == '\0')
202                                  break;
203                          tpos = _gettextposition();
204 <                        _settextposition(tpos.row, *s=='\r' ? 0 : tpos.col-1);
204 >                        _settextposition(tpos.row, *s=='\r' ? 1 : tpos.col-1);
205                          continue;
206                  default:
207                          *cp++ = *s;
# Line 116 | Line 209 | register char  *s;
209                  }
210                  return(0);
211          }
212 +        fatalerr[0] = '\0';
213 + }
214 +
215 +
216 + static
217 + vga_errout(msg)
218 + register char  *msg;
219 + {
220 +        static char  *fep = fatalerr;
221 +
222 +        _outtext(msg);
223 +        while (*msg)
224 +                *fep++ = *msg++;
225 +        *fep = '\0';
226 +        if (fep > fatalerr && fep[-1] == '\n')
227 +                fep = fatalerr;
228   }
229  
230  

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines