/* * A value for pseudo-void functions to return */ #define UNUSED -999 /* * default location for font library */ #ifndef FONTLIB #define FONTLIB "/usr/local/lib/hershey/" #endif /* * standard colour indices */ #define BLACK 0 #define RED 1 #define GREEN 2 #define YELLOW 3 #define BLUE 4 #define MAGENTA 5 #define CYAN 6 #define WHITE 7 /* * Hershey text justification */ #define V_XCENTERED 1 #define V_YCENTERED 2 #define V_LEFT 4 /* The default */ #define V_RIGHT 8 #define V_TOP 16 #define V_BOTTOM 32 /* The default */ /* * Line thickness */ #define THIN 0 #define THICK 1 /* * when (if ever) we need the precision */ #ifdef DOUBLE #define float double #endif /* * How to convert degrees to radians */ #ifndef PI #define PI 3.14159265358979 #endif #define D2R (PI / 180.0) /* * miscellaneous typedefs and type defines */ typedef float Vector[4]; typedef float Matrix[4][4]; typedef float Tensor[4][4][4]; /* * when register variables get us into trouble */ #ifdef NOREGISTER #define register #endif /* * max number of vertices in a polygon */ #define MAXVERTS 9999 /* * max number of characters in a font name */ #define FONTNAMELEN 256 /* * object definitions */ #define MAXENTS 10100 /* size of object table */ #define MAXTOKS 1000 /* num. of tokens alloced at once in an object */ /* * data types for object tokens */ typedef union tk { int i; float f; } Token; typedef struct tls { int count; Token *toks; struct tls *next; } TokList; /* * attributes */ typedef struct { unsigned char *style, *dashp, fill, hatch, backface, justify, backbuf, exvp, fixedwidth; int color; int softtext; float fontheight; float fontwidth; float hatchcos, hatchsin, hatchpitch; float textcos, textsin; float dash, adist; char font[FONTNAMELEN]; } Attribute; /* * viewport */ typedef struct vp { float left; float right; float bottom; float top; } Viewport; /* * stacks */ typedef struct ms { /* Matrix stack entries */ Matrix m; struct ms *back; } Mstack; typedef struct as { /* Attribute stack entries */ Attribute a; struct as *back; } Astack; typedef struct vs { /* Viewport stack entries */ Viewport v; struct vs *back; } Vstack; /* * vogle device structures */ typedef struct dev { char *devname; /* name of device */ char *large, /* name of large font */ *small; /* name of small font */ int (*Vbackb)(), /* Set drawing in back buffer */ (*Vchar)(), /* Draw a hardware character */ (*Vcheckkey)(), /* Check if a key was hit */ (*Vclear)(), /* Clear the screen to current color */ (*Vcolor)(), /* Set current color */ (*Vdraw)(), /* Draw a line */ (*Vexit)(), /* Exit graphics */ (*Vfill)(), /* Fill a polygon */ (*Vfont)(), /* Set hardware font */ (*Vfrontb)(), /* Set drawing in front buffer */ (*Vgetkey)(), /* Wait for and get the next key hit */ (*Vinit)(), /* Initialise the device */ (*Vlocator)(), /* Get mouse/cross hair position */ (*Vmapcolor)(), /* Set color indices */ (*Vsetlw)(), /* Set line thickness */ (*Vstring)(), /* Draw a hardware string */ (*Vswapb)(), /* Swap front and back buffers */ (*Vsync)(); /* Syncronise the display */ } DevEntry; typedef struct vdev { char initialised, clipoff, inobject, inpolygon, upset, /* is up vector set */ cpVvalid, /* is the current device position valid */ sync, /* Do we syncronise the display */ inbackbuffer, /* are we in the backbuffer */ clipplanes; /* active clipping planes */ FILE *output_file; /* output file */ void (*pmove)(), /* Polygon moves */ (*pdraw)(); /* Polygon draws */ TokList *tokens; /* ptr to list of tokens for current object */ Mstack *transmat; /* top of transformation stack */ Astack *attr; /* top of attribute stack */ Vstack *viewport; /* top of viewport stack */ float hheight, hwidth; /* hardware character height, width */ float hheightd, hwidthd; /* desired hardware character height, width */ Vector cpW, /* current position in world coords */ cpWtrans, /* current world coords transformed */ upvector; /* world up */ int depth, /* # bit planes on screen */ maxVx, minVx, maxVy, minVy, sizeX, sizeY, /* size of square on screen */ sizeSx, sizeSy, /* side in x, side in y (# pixels) */ cpVx, cpVy; DevEntry dev; } Device; extern Device vdevice; /* device structure */ #define V_X 0 /* x axis in cpW */ #define V_Y 1 /* y axis in cpW */ #define V_Z 2 /* z axis in cpW */ #define V_W 3 /* w axis in cpW */ /* * function definitions */ /* * allocate memory */ /*extern char *vallocate(); */ extern void *vallocate(); /* * arc routines */ extern void arcprecision(); extern void arc(); extern void circle(); extern void circleprecision(); extern void sector(); /* * attr routines */ extern void popattributes(); extern void pushattributes(); /* * curve routines */ extern void curve(); extern void rcurve(); extern void curven(); extern void drcurve(); extern void curvebasis(); extern void curveprecision(); /* * draw routines */ extern void draw(); extern void draw2(); extern void rdraw(); extern void rdraw2(); extern void sdraw2(); extern void rsdraw2(); extern void dashcode(); extern void dashline(); extern void linestyle(); /* * device routines */ extern void clear(); extern void color(); extern int getdepth(); extern int getkey(); extern int checkkey(); extern int getplanes(); extern int locator(); extern int slocator(); extern void mapcolor(); extern void vinit(); extern void vexit(); extern void verror(); extern void voutput(); extern void vnewdev(); extern void pushdev(); extern void popdev(); extern char *vgetdev(); /* * mapping routines */ extern int WtoVx(); extern int WtoVy(); extern void VtoWxy(); extern void CalcW2Vcoeffs(); /* * general matrix and vector routines */ extern void mult4x4(); extern void copymatrix(); extern void identmatrix(); extern void copytranspose(); extern void multvector(); extern void copyvector(); extern void premultvector(); /* * matrix stack routines */ extern void getmatrix(); extern void popmatrix(); extern void loadmatrix(); extern void pushmatrix(); extern void multmatrix(); extern Matrix *getmstackaddress(); /* * move routines */ extern void move(); extern void move2(); extern void rmove(); extern void rmove2(); extern void smove2(); extern void rsmove2(); /* * object routines */ extern int isobj(); extern int genobj(); extern void delobj(); extern void makeobj(); extern void loadobj(); extern void saveobj(); extern void callobj(); extern void closeobj(); extern int getopenobj(); extern Token *newtokens(); /* * patch routines. */ extern void patch(); extern void rpatch(); extern void drpatch(); extern void patchbasis(); extern void patchcurves(); extern void patchprecision(); extern void transformtensor(); /* * point routines */ extern void point(); extern void point2(); extern void spoint2(); /* * polygon routines. */ extern void poly(); extern void poly2(); extern void hatchang(); extern void makepoly(); extern void polyfill(); extern void closepoly(); extern void polyhatch(); extern void hatchpitch(); extern void backface(); extern void backfacedir(); /* * rectangle routine */ extern void rect(); /* * tensor routines */ extern void multtensor(); extern void copytensor(); extern void premulttensor(); extern void copytensortrans(); /* * text routines */ extern int hershfont(); extern void font(); extern void boxfit(); extern void boxtext(); extern void drawstr(); extern void textang(); extern int numchars(); extern void drawchar(); extern void textsize(); extern float strlength(); extern float getfontdec(); extern float getfontasc(); extern float sstrlength(); extern void centertext(); extern void xcentertext(); extern void ycentertext(); extern void fixedwidth(); extern void topjustify(); extern void bottomjustify(); extern void leftjustify(); extern void rightjustify(); extern void textjustify(); extern void getcharsize(); extern void getfontsize(); extern float getfontwidth(); extern float getfontheight(); /* * transformation routines */ extern void scale(); extern void translate(); extern void rotate(); /* * window definition routines */ extern void ortho(); extern void ortho2(); extern void lookat(); extern void window(); extern void polarview(); extern void perspective(); extern void up(); /* * routines for manipulating the viewport */ extern void viewport(); extern void getviewport(); extern void popviewport(); extern void pushviewport(); /* * routines for retrieving the graphics position */ extern void getgp(); extern void getgpt(); extern void getgp2(); extern void sgetgp2(); /* * routines for retrieving the aspect details of the device */ extern float getaspect(); extern void getfactors(); extern void getdisplaysize(); extern void expandviewport(); extern void unexpandviewport(); /* * routines for handling the buffering */ extern int backbuffer(); extern void frontbuffer(); extern int swapbuffers(); /* * routines for window sizing and positioning */ extern void prefsize(); extern void prefposition(); /* * Misc control routines */ extern void clip(); extern void quickclip(); extern void clipping(); extern void vsetflush(); extern void vflush(); extern void yobbarays();