Page MenuHomec4science

driver.h
No OneTemporary

File Metadata

Created
Tue, May 7, 02:11

driver.h

/* RCSid $Id: driver.h,v 2.10 2011/05/20 02:06:39 greg Exp $ */
/*
* driver.h - header file for interactive device drivers.
*/
#ifndef _RAD_DRIVER_H_
#define _RAD_DRIVER_H_
#include "color.h"
#ifdef __cplusplus
extern "C" {
#endif
typedef struct driver *dr_initf_t(char *dname, char *id);
typedef int dr_getchf_t(void);
typedef void dr_newcolrf_t(int ndx, int r, int g, int b);
typedef void dr_closef_t(void);
typedef void dr_clearf_t(int, int);
typedef void dr_paintrf_t(COLOR col, int xmin, int ymin, int xmax, int ymax);
typedef int dr_getcurf_t(int*,int*);
typedef void dr_comoutf_t(char*);
typedef void dr_cominf_t(char*,char*);
typedef void dr_flushf_t(void);
struct driver { /* driver functions */
dr_closef_t *close; /* close device */
dr_clearf_t *clear; /* clear device */
dr_paintrf_t *paintr; /* paint rectangle */
dr_getcurf_t *getcur; /* get cursor position */
dr_comoutf_t *comout; /* command line output */
dr_cominf_t *comin; /* command line input */
dr_flushf_t *flush; /* flush output */
double pixaspect; /* pixel aspect ratio */
int xsiz, ysiz; /* device size */
int inpready; /* input ready on device */
};
/* magic numbers for verification */
#define COM_SENDM 0x6f37
#define COM_RECVM 0x51da
/* stream commands */
#define COM_CLEAR 0
#define COM_PAINTR 1
#define COM_GETCUR 2
#define COM_COMOUT 3
#define COM_COMIN 4
#define COM_FLUSH 5
#define NREQUESTS 6 /* number of valid requests */
extern struct device { /* interactive device */
char *name; /* device name */
char *descrip; /* description */
dr_initf_t *init; /* initialize device */
} devtable[]; /* supported devices */
extern char dev_default[]; /* default device name */
#define MB1 ('\n') /* mouse button 1 */
#define MB2 ('\r') /* mouse button 2 */
#define MB3 (' ') /* mouse button 3 */
#define ABORT ('C'-'@') /* abort key */
/*
* How to write an interactive display driver for rview.
* ----------------------------------------------------
*
* static struct driver dname_driver;
*
* extern dr_initf_t dname_init;
*
* extern struct driver *
* dname_init(
* char *name,
* char *id
* )
* {
* Initialize device and return pointer to driver
* dname_driver. Return NULL if an error occurred.
* The name string identifies the driver,
* and the id string identifies the client.
* A device can be open by at most one client.
* Be verbose in error reports; call eputs().
* If device has its own error output, set erract.
* This function then needs to be inserted into the
* device table in devtable.c.
* }
*
*
* static dr_closef_t dname_close;
*
* dname_driver.close = dname_close;
*
* static void
* dname_close(void)
* {
* Close the device. Reset error vectors.
* }
*
*
* static dr_clearf_t dname_clear;
*
* dname_driver.clear = dname_clear;
*
* static void
* dname_clear(
* int xres,
* int yres;
* )
* {
* Clear the device for xres by yres output. This call will
* be made prior to any output.
* }
*
*
* static dr_paintrf_t dname_paintr;
*
* dname_driver.paintr = dname_paintr;
*
* static void
* dname_paintr(
* COLOR col,
* int xmin,
* int ymin,
* int xmax,
* int ymax
* )
* {
* Paint a half-open rectangle from (xmin,ymin) to (xmax,ymax)
* with the color col.
* }
*
*
* static dr_getcurf_t dname_getcur;
*
* dname_driver.getcur = dname_getcur;
*
* static int
* dname_getcur(
* int *xp,
* int *yp
* )
* {
* Get the cursor position entered by the user via mouse,
* joystick, etc. Return the key hit by the user (usually
* MB1 or MB2). Return ABORT to cancel.
* Can be NULL for devices without this capability.
* }
*
*
* static dr_comoutf_t dname_comout;
*
* dname_driver.comout = dname_comout;
*
* static void
* dname_comout(
* char *out
* )
* {
* Print the string out on the device command line. If the
* string ends with '\n', the message is considered complete,
* and the next call can erase it.
* }
*
*
* static dr_cominf_t dname_comin;
*
* dname_driver.comin = dname_comin;
*
* static void
* dname_comin(
* char *in,
* char *prompt
* )
* {
* Print a prompt then read an edited input command line
* assuming the in buffer is big enough. Unless prompt is NULL,
* the driver may substitute its own rview command. This is
* the most reliable way to repaint areas of the screen.
* If the user enters an unrecognized control character,
* terminate input and return the string with only that character.
* The input string should not contain a newline. The routines in
* editline.c may be useful. Comin must work in consort with comout.
* }
*
*
* static dr_flushf_t dname_flush;
*
* dname_driver.flush = dname_flush;
*
* static void
* dname_flush(void)
* {
* Flush output to the display. This is guaranteed to be called
* frequently enough to keep the display up to date.
* This is an ideal time to check for device input.
* This function can be NULL for devices that don't need it.
* }
*
*
* dname_driver.xsiz
* dname_driver.ysiz
*
* The maximum allowable x and y dimensions. If any
* size is allowable, these should be set to MAXRES.
*
*
* dname_driver.inpready
*
* This variable should be made positive asynchronously
* when characters are ready on the input. (Often easiest
* to check for input during calls to paintr.)
*/
/* defined in editline.c */
extern void editline(char *buf, dr_getchf_t *c_get, dr_comoutf_t *s_put);
extern void tocombuf(char *b, struct driver *d);
extern int fromcombuf(char *b, struct driver *d);
/* defined in devcomm.c */
extern dr_initf_t slave_init; /* XXX should probably be in a seperate file */
extern struct driver *comm_init(char *dname, char *id);
/* defined in colortab.c */
extern int new_ctab(int ncolors);
extern int get_pixel(COLOR col, dr_newcolrf_t *newcolr);
extern void make_gmap(double gam);
extern void set_cmap(uby8 *rmap, uby8 *gmap, uby8 *bmap);
extern void map_color(uby8 rgb[3], COLOR col);
#ifdef __cplusplus
}
#endif
#endif /* _RAD_DRIVER_H_ */

Event Timeline