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

# User Rev Content
1 greg 2.4 /* RCSid: $Id$ */
2 greg 1.1 /*
3     * driver.h - header file for interactive device drivers.
4 greg 2.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 greg 1.1 *
24 greg 2.4 * 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 greg 1.1 */
62    
63     struct driver { /* driver functions */
64 greg 2.4 void (*close)(); /* close device */
65     void (*clear)(); /* clear device */
66     void (*paintr)(); /* paint rectangle */
67 greg 1.1 int (*getcur)(); /* get cursor position */
68 greg 2.4 void (*comout)(); /* command line output */
69     void (*comin)(); /* command line input */
70     void (*flush)(); /* flush output */
71 greg 1.4 double pixaspect; /* pixel aspect ratio */
72 greg 1.1 int xsiz, ysiz; /* device size */
73     int inpready; /* input ready on device */
74     };
75 greg 1.3 /* magic numbers for verification */
76     #define COM_SENDM 0x6f37
77     #define COM_RECVM 0x51da
78 greg 1.1 /* 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 greg 1.6 #define COM_FLUSH 5
85     #define NREQUESTS 6 /* number of valid requests */
86 greg 1.1
87 greg 1.4 extern struct device { /* interactive device */
88 greg 1.1 char *name; /* device name */
89     char *descrip; /* description */
90     struct driver *(*init)(); /* initialize device */
91 greg 1.4 } devtable[]; /* supported devices */
92 greg 1.1
93 greg 1.8 extern char dev_default[]; /* default device name */
94    
95 greg 1.1 #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 greg 1.3 * dname_init(name, id)
103     * char *name, *id;
104 greg 1.1 * {
105     * Initialize device and return pointer to driver
106     * functions. Returns NULL if an error occurred.
107 greg 1.3 * The name string identifies the driver,
108     * and the id string identifies the client.
109 greg 1.1 * A device can be open by at most one client.
110 gregl 2.3 * Be verbose in error reports; call eputs().
111     * If device has its own error output, set erract.
112 greg 1.1 * }
113     * (*dev->close)()
114     * {
115 greg 1.2 * Close the device. Reset error vectors.
116 greg 1.1 * }
117     * (*dev->clear)(xres, yres)
118     * int xres, yres;
119     * {
120 greg 1.2 * Clear the device for xres by yres output. This call will
121 greg 1.1 * 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 greg 1.6 * with the color col.
129 greg 1.1 * }
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 greg 1.5 * (*dev->comin)(in, prompt)
146     * char *in, *prompt;
147 greg 1.1 * {
148 greg 1.5 * 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 greg 1.7 * If the user enters an unrecognized control character,
153 greg 1.5 * 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 greg 1.6 * }
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 greg 1.1 * }
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 greg 1.2 * 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 greg 1.1 */
172 greg 2.4
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