home *** CD-ROM | disk | FTP | other *** search
/ gondwana.ecr.mu.oz.au/pub/ / Graphics.tar / Graphics / fermiVogle.tar.Z / fermiVogle.tar / devel / src / vogle.h < prev    next >
C/C++ Source or Header  |  1996-02-07  |  6KB  |  274 lines

  1. #ifndef VOGLEH
  2. #define VOGLEH 1
  3. /*
  4.  * default location for font library
  5.  */
  6. #ifdef PC    /* Stupid pox head crap */
  7. #define    FONTLIB    "c:\\lib\\hershey\\"
  8.  #ifndef __OS2__    /* BCOS2 defines malloc as a void pointer */
  9.  char    *malloc();
  10.  #endif
  11. #endif
  12.  
  13. #ifndef FONTLIB
  14. #define FONTLIB    "/usr/local/lib/hershey/"
  15. #endif
  16.  
  17. /*
  18.  * standard colour indices
  19.  */
  20. #define    BLACK        0
  21. #define    RED        1
  22. #define    GREEN        2
  23. #define    YELLOW        3
  24. #define    BLUE        4
  25. #define    MAGENTA        5
  26. #define    CYAN        6
  27. #define    WHITE        7
  28.  
  29. /*
  30.  * Hershey text justification
  31.  */
  32. #define V_XCENTERED    1
  33. #define V_YCENTERED    2
  34. #define V_LEFT        4    /* The default */
  35. #define V_RIGHT        8
  36. #define V_TOP        16
  37. #define V_BOTTOM    32    /* The default */
  38.  
  39. /*
  40.  * Line thickness
  41.  */
  42. #define THIN        0
  43. #define THICK        1
  44.  
  45. /*
  46.  * when (if ever) we need the precision
  47.  */
  48. #ifdef DOUBLE
  49. #define    float    double
  50. #endif
  51.  
  52. /*
  53.  * How to convert degrees to radians
  54.  */
  55. #ifndef PI
  56. #define    PI    3.14159265358979
  57. #endif
  58. #define D2R    (PI / 180.0)
  59.  
  60. /*
  61.  * miscellaneous typedefs and type defines
  62.  */
  63. typedef float    Vector[4];
  64. typedef float    Matrix[4][4];
  65. typedef float    Tensor[4][4][4];
  66.  
  67. /*
  68.  * when register variables get us into trouble
  69.  */
  70. #ifdef NOREGISTER
  71. #define    register
  72. #endif
  73.  
  74. /*
  75.  * max number of vertices in a ploygon
  76.  */
  77. #define    MAXVERTS    128
  78.  
  79. /*
  80.  * max number of characters in a font name
  81.  */
  82. #define    FONTNAMELEN    256
  83.  
  84. /*
  85.  * object definitions
  86.  */
  87. #define MAXENTS        101        /* size of object table */
  88. #define    MAXTOKS        100        /* num. of tokens alloced at once in
  89.                        an object  */
  90.  
  91. /*
  92.  * functions which can appear in objects
  93.  */
  94. #define    ARC        1
  95. #define    BOXTEXT        2
  96. #define    CALLOBJ        3
  97. #define    CENTERTEXT    4
  98. #define    CIRCLE        5
  99. #define    CLEAR        6
  100. #define    COLOR        7
  101. #define    DRAW        8
  102. #define    DRAWCHAR    9
  103. #define    DRAWSTR        10
  104. #define    FIXEDWIDTH    11
  105. #define    VFONT        12
  106. #define    HATCHANG    13
  107. #define    HATCHPITCH    14
  108. #define    LOADMATRIX    15
  109. #define    MAPCOLOR    16
  110. #define    MOVE        17
  111. #define    MULTMATRIX    18
  112. #define    POLY        19
  113. #define    POLYFILL    20
  114. #define    POLYHATCH    21
  115. #define    POPATTRIBUTES    22
  116. #define    POPMATRIX    23
  117. #define    POPVIEWPORT    24
  118. #define    PUSHATTRIBUTES    25
  119. #define    PUSHMATRIX    26
  120. #define    PUSHVIEWPORT    27
  121. #define    RCURVE        28
  122. #define    RPATCH        29
  123. #define    SECTOR        30
  124. #define    TEXTANG        31
  125. #define    TEXTSIZE    32
  126. #define    VIEWPORT    33
  127. #define    BACKBUFFER    34
  128. #define    FRONTBUFFER    35
  129. #define    SWAPBUFFER    36
  130. #define    BACKFACING    37
  131. #define    TRANSLATE    38
  132. #define    ROTATE        39
  133. #define    SCALE        40
  134. #define    VFLUSH        41
  135.  
  136. /*
  137.  * data types for object tokens
  138.  */
  139. typedef union tk {
  140.     int        i;
  141.     float        f;
  142. } Token;
  143.  
  144. typedef struct tls {
  145.     int        count;
  146.     Token        *toks;
  147.     struct tls    *next;
  148. } TokList;
  149.  
  150. /*
  151.  * attributes
  152.  */
  153. typedef struct {
  154.     unsigned char    *style,
  155.             *dashp,
  156.             fill,
  157.             hatch,
  158.             backface,
  159.             justify,
  160.             backbuf,
  161.             exvp,
  162.             fixedwidth;
  163.     int        color;
  164.     int        softtext;
  165.     float        fontheight;
  166.     float        fontwidth;
  167.     float        hatchcos,
  168.             hatchsin,
  169.             hatchpitch;
  170.     float        textcos,
  171.             textsin;
  172.     float        dash,
  173.             adist;
  174.     char        font[FONTNAMELEN];
  175. } Attribute;
  176.  
  177. /*
  178.  * viewport
  179.  */
  180. typedef struct vp {
  181.     float    left;
  182.     float    right;
  183.     float    bottom;
  184.     float    top;
  185. } Viewport; 
  186.  
  187. /*
  188.  * stacks
  189.  */
  190. typedef    struct    ms {    /* Matrix stack entries    */
  191.     Matrix        m;
  192.     struct    ms    *back;
  193. } Mstack;
  194.  
  195. typedef    struct    as {    /* Attribute stack entries */
  196.     Attribute    a;
  197.     struct    as    *back;
  198. } Astack;
  199.  
  200. typedef    struct    vs {    /* Viewport stack entries */
  201.     Viewport    v;
  202.     struct    vs    *back;
  203. } Vstack;
  204.  
  205. /*
  206.  * vogle device structures
  207.  */
  208. typedef struct dev {
  209.     char    *devname;        /* name of device */
  210.     char    *large,            /* name of large font */
  211.         *small;            /* name of small font */
  212.     int    (*Vbackb)(),        /* Set drawing in back buffer */
  213.         (*Vchar)(char),        /* Draw a hardware character */
  214.         (*Vcheckkey)(),        /* Ckeck if a key was hit */
  215.         (*Vclear)(void),    /* Clear the screen to current color */
  216.         (*Vcolor)(int),        /* Set current color */
  217.         (*Vdraw)(int, int),    /* Draw a line */
  218.         (*Vexit)(void),        /* Exit graphics */
  219.         (*Vfill)(int, int[], int[]),        /* Fill a polygon */
  220.         (*Vfont)(char *),        /* Set hardware font */
  221.         (*Vfrontb)(),        /* Set drawing in front buffer */
  222.         (*Vgetkey)(),        /* Wait for and get the next key hit */
  223.         (*Vinit)(void),        /* Initialise the device */
  224.         (*Vlocator)(),        /* Get mouse/cross hair position */
  225.         (*Vmapcolor)(int, int, int, int),/* Set color indicies */
  226.         (*Vsetlw)(int),        /* Set line thickness */
  227.         (*Vstring)(char *),        /* Draw a hardware string */
  228.         (*Vswapb)(),        /* Swap front and back buffers */
  229.         (*Vsync)();        /* Syncronise the display */
  230. } DevEntry;
  231.  
  232. typedef struct vdev {
  233.     char        initialised,
  234.             clipoff,
  235.             inobject,
  236.             inpolygon,
  237.             upset,            /* is up vector set */
  238.             cpVvalid,        /* is the current device position valid */
  239.             sync,            /* Do we syncronise the display */
  240.             inbackbuffer,        /* are we in the backbuffer */
  241.             clipplanes;        /* active clipping planes */
  242.     void        (*pmove)(),        /* Polygon moves */
  243.             (*pdraw)();        /* Polygon draws */
  244.     TokList        *tokens;        /* ptr to list of tokens for current object */
  245.     Mstack        *transmat;        /* top of transformation stack */
  246.     Astack        *attr;            /* top of attribute stack */
  247.     Vstack        *viewport;        /* top of viewport stack */
  248.     float        hheight, hwidth;    /* hardware character height, width */
  249.     Vector        cpW,            /* current postion in world coords */
  250.             cpWtrans,        /* current world coords transformed */
  251.             upvector;        /* world up */
  252.     int        depth,            /* # bit planes on screen */
  253.             maxVx, minVx,
  254.             maxVy, minVy,
  255.             sizeX, sizeY,         /* size of square on screen */
  256.             sizeSx, sizeSy,        /* side in x, side in y (# pixels) */
  257.             cpVx, cpVy;
  258.     DevEntry    dev;
  259. } Device;
  260.  
  261. extern Device    vdevice;        /* device structure */
  262.  
  263. #define    V_X    0            /* x axis in cpW */
  264. #define    V_Y    1            /* y axis in cpW */
  265. #define    V_Z    2            /* z axis in cpW */
  266. #define    V_W    3            /* w axis in cpW */
  267.  
  268. /*
  269.  * ANSII prototypes
  270.  */
  271. #include "proto.h"
  272.  
  273. #endif
  274.