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

Comparing ray/src/rt/aed.c (file contents):
Revision 1.2 by greg, Mon Oct 2 17:12:34 1989 UTC vs.
Revision 2.6 by schorsch, Tue Mar 30 16:13:00 2004 UTC

# Line 1 | Line 1
1 /* Copyright (c) 1987 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   *  aed.c - driver for AED 512 terminal.
9 *
10 *     2/2/87
6   */
7  
8 + #include "copyright.h"
9 +
10   #include  <stdio.h>
11  
12 + #include  "rterror.h"
13 + #include  "color.h"
14   #include  "driver.h"
15  
17 #include  "color.h"
16  
19
17          /* AED command characters */
18  
19   #define AEDFMT  "1888N" /* Format string to send to AED */
# Line 46 | Line 43 | static char SCCSid[] = "$SunId$ LBL";
43   #define string(s)       fputs(s, stdout)
44   #define flush()         fflush(stdout)
45  
46 < #define  GAMMA          2.2             /* exponent for color correction */
46 > #define  GAMMA          2.5             /* exponent for color correction */
47  
48 < #define  NCOLORS        244             /* our color table size */
48 > #define  NCOLORS        248             /* our color table size */
49   #define  MINPIX         8               /* minimum hardware color */
50  
51   #define  NCOLS          512             /* maximum # columns for output */
52 < #define  NROWS          512-COMHT       /* maximum # rows for output */
52 > #define  NROWS          483-COMHT       /* maximum # rows for output */
53   #define  COMHT          16              /* height of command line */
54   #define  COMCW          63              /* maximum chars on command line */
55  
56 < static COLR  colrmap[256];              /* our color map */
56 > static void aed_errout(char*);
57 > static void longwait(int t);
58 > static void aedgetcap(int  *xp, int *yp);
59 > static void aedsetcap(int  x, int y);
60 > static dr_newcolrf_t anewcolr;
61 > static void aedcoord(int  x, int y);
62  
63 < static COLR  colrtbl[NCOLORS];          /* our color table */
63 > static dr_closef_t aed_close;
64 > static dr_clearf_t aed_clear;
65 > static dr_paintrf_t aed_paintr;
66 > static dr_getcurf_t aed_getcur;
67 > static dr_comoutf_t comout;
68  
63 static int  colres = 64;                /* color resolution */
64
65 int  aed_close(), aed_clear(), aed_paintr(),
66                aed_getcur(), aed_comout(), aed_errout();
67
69   static struct driver  aed_driver = {
70          aed_close, aed_clear, aed_paintr, aed_getcur,
71 <        aed_comout, NULL,
72 <        NCOLS, NROWS
71 >        aed_comout, NULL, NULL,
72 >        1.0, NCOLS, NROWS
73   };
74  
75  
76   struct driver *
77 < aed_init(name)                          /* open AED */
78 < char  *name;
77 > aed_init(name, id)                      /* open AED */
78 > char  *name, *id;
79   {
80          if (ttyset(&aed_driver, fileno(stdin)) < 0) {   /* set tty driver */
81 <                stderr_v("cannot access terminal\n");
81 >                eputs("cannot access terminal\n");
82                  return(NULL);
83          }
84          command(RST);                                   /* reset AED */
# Line 92 | Line 93 | char  *name;
93          byte(BLK); byte(WHT); byte(15);
94          command(SCP);
95          byte('+'); byte(0); byte(1);
96 <        make_cmap(GAMMA);                               /* make color map */
97 <        errvec = aed_errout;                            /* set error vector */
98 <        cmdvec = aed_errout;
99 <        if (wrnvec != NULL)
100 <                wrnvec = aed_errout;
96 >        make_gmap(GAMMA);                               /* make color map */
97 >        erract[USER].pf =                               /* set error vector */
98 >        erract[SYSTEM].pf =
99 >        erract[INTERNAL].pf =
100 >        erract[CONSISTENCY].pf = aed_errout;
101 >        erract[COMMAND].pf = aed_errout;
102 >        if (erract[WARNING].pf != NULL)
103 >                erract[WARNING].pf = aed_errout;
104          return(&aed_driver);
105   }
106  
107  
108 < static
109 < aed_close()                                     /* close AED */
108 > static void
109 > aed_close(void)                                 /* close AED */
110   {
111 <        errvec = stderr_v;                      /* reset error vector */
112 <        cmdvec = NULL;
113 <        if (wrnvec != NULL)
114 <                wrnvec = stderr_v;
111 >        erract[USER].pf =                       /* reset error vector */
112 >        erract[SYSTEM].pf =
113 >        erract[INTERNAL].pf =
114 >        erract[CONSISTENCY].pf = eputs;
115 >        erract[COMMAND].pf = NULL;
116 >        if (erract[WARNING].pf != NULL)
117 >                erract[WARNING].pf = wputs;
118          aedsetcap(0, 0);                        /* go to bottom */
119          command(SEC);
120          byte(WHT);                              /* white text */
# Line 123 | Line 130 | aed_clear(x, y)                                        /* clear AED */
130   int  x, y;
131   {
132          command(FFD);
133 <        maketab();                              /* init color table */
134 <        longwait(1);
133 >        new_ctab(NCOLORS);                      /* init color table */
134 >        flush();
135   }
136  
137  
138 < static
138 > static void
139   aed_paintr(col, xmin, ymin, xmax, ymax)         /* paint a rectangle */
140   COLOR  col;
141   int  xmin, ymin, xmax, ymax;
142   {
143 <        command(SEC);                                   /* draw rectangle */
144 <        byte(get_pixel(col)+MINPIX);
143 >        int  ndx;
144 >
145 >        ndx = get_pixel(col, anewcolr);         /* calls anewcolr() */
146 >        command(SEC);                           /* draw rectangle */
147 >        byte(ndx+MINPIX);
148          aedsetcap(xmin, ymin+COMHT);
149          command(DFR);
150          aedcoord(xmax-1, ymax+(-1+COMHT));
# Line 157 | Line 167 | int  *xp, *yp;
167   }
168  
169  
170 < static
170 > static void
171   aed_comout(out)                         /* output to command line */
172   register char  *out;
173   {
# Line 200 | Line 210 | register char  *out;
210   }
211  
212  
213 < static
213 > static void
214   aed_errout(msg)                         /* print an error message */
215   char  *msg;
216   {
# Line 214 | Line 224 | char  *msg;
224   * aedsetcap - sets AED's current access pointer to (x, y).
225   */
226  
227 < static
227 > static void
228   aedsetcap(x, y)
229   register int  x, y;
230   {
# Line 226 | Line 236 | register int  x, y;
236   * aedcoord - puts out an (x, y) coordinate in AED 8 bit format.
237   */
238  
239 < static
239 > static void
240   aedcoord(x, y)
241   register int  x, y;
242   {
# Line 236 | Line 246 | register int  x, y;
246   }
247  
248  
249 < static
249 > static void
250   aedgetcap(xp, yp)               /* get cursor postion */
251   int  *xp, *yp;
252   {
# Line 252 | Line 262 | int  *xp, *yp;
262   }
263  
264  
265 < static
266 < maketab()                               /* reinitialize the color table */
265 > static void
266 > anewcolr(index, r, g, b)                /* enter a color into our table */
267 > int  index;
268 > int  r, g, b;
269   {
270 <        extern COLR  *get_ctab();
271 <        register COLR  *ctab;
272 <        register int  i;
273 <
274 <        ctab = get_ctab(NCOLORS);       /* get colors */
275 <        command(SCT);                   /* set color table */
276 <        byte(MINPIX);                   /* starting index */
265 <        byte(NCOLORS&255);              /* number of colors (0==256) */
266 <        for (i = 0; i < NCOLORS; i++) {
267 <                byte(ctab[i][RED]);
268 <                byte(ctab[i][GRN]);
269 <                byte(ctab[i][BLU]);
270 <        }
270 >        command(SCT);
271 >        byte((index+MINPIX)&255);
272 >        byte(1);
273 >        byte(r);
274 >        byte(g);
275 >        byte(b);
276 >        flush();
277   }
278  
279  
280 < static
280 > static void
281   longwait(t)             /* longer wait */
282   int  t;
283   {

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines