ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/radiance/ray/src/rt/driver.h
Revision: 2.4
Committed: Sat Feb 22 02:07:28 2003 UTC (21 years, 2 months ago) by greg
Content type: text/plain
Branch: MAIN
Changes since 2.3: +93 -13 lines
Log Message:
Changes and check-in for 3.5 release
Includes new source files and modifications not recorded for many years
See ray/doc/notes/ReleaseNotes for notes between 3.1 and 3.5 release

File Contents

# Content
1 /* RCSid: $Id$ */
2 /*
3 * driver.h - header file for interactive device drivers.
4 */
5
6 /* ====================================================================
7 * The Radiance Software License, Version 1.0
8 *
9 * Copyright (c) 1990 - 2002 The Regents of the University of California,
10 * through Lawrence Berkeley National Laboratory. All rights reserved.
11 *
12 * Redistribution and use in source and binary forms, with or without
13 * modification, are permitted provided that the following conditions
14 * are met:
15 *
16 * 1. Redistributions of source code must retain the above copyright
17 * notice, this list of conditions and the following disclaimer.
18 *
19 * 2. Redistributions in binary form must reproduce the above copyright
20 * notice, this list of conditions and the following disclaimer in
21 * the documentation and/or other materials provided with the
22 * distribution.
23 *
24 * 3. The end-user documentation included with the redistribution,
25 * if any, must include the following acknowledgment:
26 * "This product includes Radiance software
27 * (http://radsite.lbl.gov/)
28 * developed by the Lawrence Berkeley National Laboratory
29 * (http://www.lbl.gov/)."
30 * Alternately, this acknowledgment may appear in the software itself,
31 * if and wherever such third-party acknowledgments normally appear.
32 *
33 * 4. The names "Radiance," "Lawrence Berkeley National Laboratory"
34 * and "The Regents of the University of California" must
35 * not be used to endorse or promote products derived from this
36 * software without prior written permission. For written
37 * permission, please contact [email protected].
38 *
39 * 5. Products derived from this software may not be called "Radiance",
40 * nor may "Radiance" appear in their name, without prior written
41 * permission of Lawrence Berkeley National Laboratory.
42 *
43 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
44 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
45 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
46 * DISCLAIMED. IN NO EVENT SHALL Lawrence Berkeley National Laboratory OR
47 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
48 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
49 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
50 * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
51 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
52 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
53 * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
54 * SUCH DAMAGE.
55 * ====================================================================
56 *
57 * This software consists of voluntary contributions made by many
58 * individuals on behalf of Lawrence Berkeley National Laboratory. For more
59 * information on Lawrence Berkeley National Laboratory, please see
60 * <http://www.lbl.gov/>.
61 */
62
63 struct driver { /* driver functions */
64 void (*close)(); /* close device */
65 void (*clear)(); /* clear device */
66 void (*paintr)(); /* paint rectangle */
67 int (*getcur)(); /* get cursor position */
68 void (*comout)(); /* command line output */
69 void (*comin)(); /* command line input */
70 void (*flush)(); /* flush output */
71 double pixaspect; /* pixel aspect ratio */
72 int xsiz, ysiz; /* device size */
73 int inpready; /* input ready on device */
74 };
75 /* magic numbers for verification */
76 #define COM_SENDM 0x6f37
77 #define COM_RECVM 0x51da
78 /* stream commands */
79 #define COM_CLEAR 0
80 #define COM_PAINTR 1
81 #define COM_GETCUR 2
82 #define COM_COMOUT 3
83 #define COM_COMIN 4
84 #define COM_FLUSH 5
85 #define NREQUESTS 6 /* number of valid requests */
86
87 extern struct device { /* interactive device */
88 char *name; /* device name */
89 char *descrip; /* description */
90 struct driver *(*init)(); /* initialize device */
91 } devtable[]; /* supported devices */
92
93 extern char dev_default[]; /* default device name */
94
95 #define MB1 ('\n') /* mouse button 1 */
96 #define MB2 ('\r') /* mouse button 2 */
97 #define MB3 (' ') /* mouse button 3 */
98 #define ABORT ('C'-'@') /* abort key */
99
100 /*
101 * struct driver *
102 * dname_init(name, id)
103 * char *name, *id;
104 * {
105 * Initialize device and return pointer to driver
106 * functions. Returns NULL if an error occurred.
107 * The name string identifies the driver,
108 * and the id string identifies the client.
109 * A device can be open by at most one client.
110 * Be verbose in error reports; call eputs().
111 * If device has its own error output, set erract.
112 * }
113 * (*dev->close)()
114 * {
115 * Close the device. Reset error vectors.
116 * }
117 * (*dev->clear)(xres, yres)
118 * int xres, yres;
119 * {
120 * Clear the device for xres by yres output. This call will
121 * be made prior to any output.
122 * }
123 * (*dev->paintr)(col, xmin, ymin, xmax, ymax)
124 * COLOR col;
125 * int xmin, ymin, xmax, ymax;
126 * {
127 * Paint a half-open rectangle from (xmin,ymin) to (xmax,ymax)
128 * with the color col.
129 * }
130 * (*dev->getcur)(xp, yp)
131 * int *xp, *yp;
132 * {
133 * Get the cursor position entered by the user via mouse,
134 * joystick, etc. Return the key hit by the user (usually
135 * MB1 or MB2). Return ABORT to cancel.
136 * Can be NULL for devices without this capability.
137 * }
138 * (*dev->comout)(out)
139 * char *out;
140 * {
141 * Print the string out on the device command line. If the
142 * string ends with '\n', the message is considered complete,
143 * and the next call can erase it.
144 * }
145 * (*dev->comin)(in, prompt)
146 * char *in, *prompt;
147 * {
148 * Print a prompt then read an edited input command line
149 * assuming the in buffer is big enough. Unless prompt is NULL,
150 * the driver may substitute its own rview command. This is
151 * the most reliable way to repaint areas of the screen.
152 * If the user enters an unrecognized control character,
153 * terminate input and return the string with only that character.
154 * The input string should not contain a newline. The routines in
155 * editline.c may be useful. Comin must work in consort with comout.
156 * }
157 * (*dev->flush)()
158 * {
159 * Flush output to the display. This is guaranteed to be called
160 * frequently enough to keep the display up to date.
161 * This is an ideal time to check for device input.
162 * This function can be NULL for devices that don't need it.
163 * }
164 * xsiz, ysiz
165 * The maximum allowable x and y dimensions. If any
166 * size is allowable, these should be set to MAXRES.
167 * inpready
168 * This variable should be made positive asynchronously
169 * when characters are ready on the input. (Often easiest
170 * to check for input during calls to paintr.)
171 */
172
173 #ifdef NOPROTO
174
175 extern void editline();
176 extern void tocombuf();
177 extern int fromcombuf();
178 extern struct driver *slave_init();
179 extern struct driver *comm_init();
180 extern int new_ctab();
181 extern int get_pixel();
182 extern void make_gmap();
183 extern void set_cmap();
184 extern void map_color();
185
186 #else
187 /* defined in editline.c */
188 extern void editline(char *buf, int (*c_get)(), void (*s_put)());
189 extern void tocombuf(char *b, struct driver *d);
190 extern int fromcombuf(char *b, struct driver *d);
191 /* defined in devcomm.c */
192 extern struct driver *slave_init(char *dname, char *id);
193 extern struct driver *comm_init(char *dname, char *id);
194 /* defined in colortab.c */
195 extern int new_ctab(int ncolors);
196 extern int get_pixel(COLOR col, void (*set_pixel)());
197 extern void make_gmap(double gam);
198 extern void set_cmap(BYTE *rmap, BYTE *gmap, BYTE *bmap);
199 extern void map_color(BYTE rgb[3], COLOR col);
200
201 #endif