ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/radiance/ray/src/rt/driver.h
Revision: 2.7
Committed: Fri Jun 27 06:53:22 2003 UTC (20 years, 10 months ago) by greg
Content type: text/plain
Branch: MAIN
Changes since 2.6: +1 -4 lines
Log Message:
Broke standard.h into rtio.h, rterror.h, rtmath.h, and rtmisc.h

File Contents

# Content
1 /* RCSid $Id: driver.h,v 2.6 2003/06/07 00:54:58 schorsch Exp $ */
2 /*
3 * driver.h - header file for interactive device drivers.
4 */
5 #ifndef _RAD_DRIVER_H_
6 #define _RAD_DRIVER_H_
7 #ifdef __cplusplus
8 extern "C" {
9 #endif
10
11 struct driver { /* driver functions */
12 void (*close)(); /* close device */
13 void (*clear)(); /* clear device */
14 void (*paintr)(); /* paint rectangle */
15 int (*getcur)(); /* get cursor position */
16 void (*comout)(); /* command line output */
17 void (*comin)(); /* command line input */
18 void (*flush)(); /* flush output */
19 double pixaspect; /* pixel aspect ratio */
20 int xsiz, ysiz; /* device size */
21 int inpready; /* input ready on device */
22 };
23 /* magic numbers for verification */
24 #define COM_SENDM 0x6f37
25 #define COM_RECVM 0x51da
26 /* stream commands */
27 #define COM_CLEAR 0
28 #define COM_PAINTR 1
29 #define COM_GETCUR 2
30 #define COM_COMOUT 3
31 #define COM_COMIN 4
32 #define COM_FLUSH 5
33 #define NREQUESTS 6 /* number of valid requests */
34
35 extern struct device { /* interactive device */
36 char *name; /* device name */
37 char *descrip; /* description */
38 struct driver *(*init)(); /* initialize device */
39 } devtable[]; /* supported devices */
40
41 extern char dev_default[]; /* default device name */
42
43 #define MB1 ('\n') /* mouse button 1 */
44 #define MB2 ('\r') /* mouse button 2 */
45 #define MB3 (' ') /* mouse button 3 */
46 #define ABORT ('C'-'@') /* abort key */
47
48 /*
49 * struct driver *
50 * dname_init(name, id)
51 * char *name, *id;
52 * {
53 * Initialize device and return pointer to driver
54 * functions. Returns NULL if an error occurred.
55 * The name string identifies the driver,
56 * and the id string identifies the client.
57 * A device can be open by at most one client.
58 * Be verbose in error reports; call eputs().
59 * If device has its own error output, set erract.
60 * }
61 * (*dev->close)()
62 * {
63 * Close the device. Reset error vectors.
64 * }
65 * (*dev->clear)(xres, yres)
66 * int xres, yres;
67 * {
68 * Clear the device for xres by yres output. This call will
69 * be made prior to any output.
70 * }
71 * (*dev->paintr)(col, xmin, ymin, xmax, ymax)
72 * COLOR col;
73 * int xmin, ymin, xmax, ymax;
74 * {
75 * Paint a half-open rectangle from (xmin,ymin) to (xmax,ymax)
76 * with the color col.
77 * }
78 * (*dev->getcur)(xp, yp)
79 * int *xp, *yp;
80 * {
81 * Get the cursor position entered by the user via mouse,
82 * joystick, etc. Return the key hit by the user (usually
83 * MB1 or MB2). Return ABORT to cancel.
84 * Can be NULL for devices without this capability.
85 * }
86 * (*dev->comout)(out)
87 * char *out;
88 * {
89 * Print the string out on the device command line. If the
90 * string ends with '\n', the message is considered complete,
91 * and the next call can erase it.
92 * }
93 * (*dev->comin)(in, prompt)
94 * char *in, *prompt;
95 * {
96 * Print a prompt then read an edited input command line
97 * assuming the in buffer is big enough. Unless prompt is NULL,
98 * the driver may substitute its own rview command. This is
99 * the most reliable way to repaint areas of the screen.
100 * If the user enters an unrecognized control character,
101 * terminate input and return the string with only that character.
102 * The input string should not contain a newline. The routines in
103 * editline.c may be useful. Comin must work in consort with comout.
104 * }
105 * (*dev->flush)()
106 * {
107 * Flush output to the display. This is guaranteed to be called
108 * frequently enough to keep the display up to date.
109 * This is an ideal time to check for device input.
110 * This function can be NULL for devices that don't need it.
111 * }
112 * xsiz, ysiz
113 * The maximum allowable x and y dimensions. If any
114 * size is allowable, these should be set to MAXRES.
115 * inpready
116 * This variable should be made positive asynchronously
117 * when characters are ready on the input. (Often easiest
118 * to check for input during calls to paintr.)
119 */
120
121 /* defined in editline.c */
122 extern void editline(char *buf, int (*c_get)(), void (*s_put)());
123 extern void tocombuf(char *b, struct driver *d);
124 extern int fromcombuf(char *b, struct driver *d);
125 /* defined in devcomm.c */
126 extern struct driver *slave_init(char *dname, char *id);
127 extern struct driver *comm_init(char *dname, char *id);
128 /* defined in colortab.c */
129 extern int new_ctab(int ncolors);
130 extern int get_pixel(COLOR col, void (*set_pixel)());
131 extern void make_gmap(double gam);
132 extern void set_cmap(BYTE *rmap, BYTE *gmap, BYTE *bmap);
133 extern void map_color(BYTE rgb[3], COLOR col);
134
135
136 #ifdef __cplusplus
137 }
138 #endif
139 #endif /* _RAD_DRIVER_H_ */
140