ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/radiance/ray/src/rt/driver.h
Revision: 2.8
Committed: Wed Aug 20 10:00:09 2003 UTC (20 years, 8 months ago) by schorsch
Content type: text/plain
Branch: MAIN
Changes since 2.7: +9 -6 lines
Log Message:
Continued ansification (though aed.c depends on tty.c, which doesn't work on Linux).

File Contents

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