home *** CD-ROM | disk | FTP | other *** search
/ gondwana.ecr.mu.oz.au/pub/ / Graphics.tar / Graphics / VOGLE.ZIP / SRC / VOGLE.H < prev    next >
C/C++ Source or Header  |  2000-02-11  |  11KB  |  537 lines

  1.  
  2. #ifndef ___VOGLE_INC
  3.  
  4. #define ___VOGLE_INC 1
  5.  
  6. /*
  7.  * default location for font library
  8.  */
  9. #ifdef PC    /* Stupid pox head crap */
  10. #define    FONTLIB    "c:\\lib\\hershey\\"
  11.  #ifndef __OS2__    /* BCOS2 defines malloc as a void pointer */
  12.  char    *malloc();
  13.  #endif
  14. #endif
  15.  
  16. extern    char    *vallocate();
  17.  
  18. #ifndef FONTLIB
  19. #define FONTLIB    "/usr/local/lib/hershey/"
  20. #endif
  21.  
  22. /*
  23.  * standard colour indices
  24.  */
  25. #define    BLACK        0
  26. #define    RED        1
  27. #define    GREEN        2
  28. #define    YELLOW        3
  29. #define    BLUE        4
  30. #define    MAGENTA        5
  31. #define    CYAN        6
  32. #define    WHITE        7
  33.  
  34. /*
  35.  * Hershey text justification
  36.  */
  37. #define V_XCENTERED    1
  38. #define V_YCENTERED    2
  39. #define V_LEFT        4    /* The default */
  40. #define V_RIGHT        8
  41. #define V_TOP        16
  42. #define V_BOTTOM    32    /* The default */
  43.  
  44. /*
  45.  * Line thickness
  46.  */
  47. #define THIN        0
  48. #define THICK        1
  49.  
  50. /*
  51.  * when (if ever) we need the precision
  52.  */
  53. #ifdef DOUBLE
  54. #define    float    double
  55. #endif
  56.  
  57. /*
  58.  * How to convert degrees to radians
  59.  */
  60. #ifndef PI
  61. #define    PI    3.14159265358979
  62. #endif
  63. #define D2R    (PI / 180.0)
  64.  
  65. /*
  66.  * miscellaneous typedefs and type defines
  67.  */
  68. typedef float    Vector[4];
  69. typedef float    Matrix[4][4];
  70. typedef float    Tensor[4][4][4];
  71.  
  72. /*
  73.  * when register variables get us into trouble
  74.  */
  75. #ifdef NOREGISTER
  76. #define    register
  77. #endif
  78.  
  79. /*
  80.  * max number of vertices in a ploygon
  81.  */
  82. #define    MAXVERTS    255
  83.  
  84. /*
  85.  * max number of characters in a font name
  86.  */
  87. #define    FONTNAMELEN    256
  88.  
  89. /*
  90.  * object definitions
  91.  */
  92. #define MAXENTS        101        /* size of object table */
  93. #define    MAXTOKS        100        /* num. of tokens alloced at once in
  94.                        an object  */
  95.  
  96. /*
  97.  * functions which can appear in objects
  98.  */
  99. #define    ARC        1
  100. #define    BOXTEXT        2
  101. #define    CALLOBJ        3
  102. #define    CENTERTEXT    4
  103. #define    CIRCLE        5
  104. #define    CLEAR        6
  105. #define    COLOR        7
  106. #define    DRAW        8
  107. #define    DRAWCHAR    9
  108. #define    DRAWSTR        10
  109. #define    FIXEDWIDTH    11
  110. #define    VFONT        12
  111. #define    HATCHANG    13
  112. #define    HATCHPITCH    14
  113. #define    LOADMATRIX    15
  114. #define    MAPCOLOR    16
  115. #define    MOVE        17
  116. #define    MULTMATRIX    18
  117. #define    POLY        19
  118. #define    POLYFILL    20
  119. #define    POLYHATCH    21
  120. #define    POPATTRIBUTES    22
  121. #define    POPMATRIX    23
  122. #define    POPVIEWPORT    24
  123. #define    PUSHATTRIBUTES    25
  124. #define    PUSHMATRIX    26
  125. #define    PUSHVIEWPORT    27
  126. #define    RCURVE        28
  127. #define    RPATCH        29
  128. #define    SECTOR        30
  129. #define    TEXTANG        31
  130. #define    TEXTSIZE    32
  131. #define    VIEWPORT    33
  132. #define    BACKBUFFER    34
  133. #define    FRONTBUFFER    35
  134. #define    SWAPBUFFER    36
  135. #define    BACKFACING    37
  136. #define    TRANSLATE    38
  137. #define    ROTATE        39
  138. #define    SCALE        40
  139. #define    VFLUSH        41
  140.  
  141. /*
  142.  * data types for object tokens
  143.  */
  144. typedef union tk {
  145.     int        i;
  146.     float        f;
  147. } Token;
  148.  
  149. typedef struct tls {
  150.     int        count;
  151.     Token        *toks;
  152.     struct tls    *next;
  153. } TokList;
  154.  
  155. /*
  156.  * attributes
  157.  */
  158. typedef struct {
  159.     unsigned char    *style,
  160.             *dashp,
  161.             lw,
  162.             fill,
  163.             hatch,
  164.             backface,
  165.             justify,
  166.             backbuf,
  167.             exvp,
  168.             fixedwidth;
  169.     int        color;
  170.     int        softtext;
  171.     float        fontheight;
  172.     float        fontwidth;
  173.     float        hatchcos,
  174.             hatchsin,
  175.             hatchpitch;
  176.     float        textcos,
  177.             textsin;
  178.     float        dash,
  179.             adist;
  180.     char        font[FONTNAMELEN];
  181. } Attribute;
  182.  
  183. /*
  184.  * viewport
  185.  */
  186. typedef struct vp {
  187.     float    left;
  188.     float    right;
  189.     float    bottom;
  190.     float    top;
  191. } Viewport; 
  192.  
  193. /*
  194.  * stacks
  195.  */
  196. typedef    struct    ms {    /* Matrix stack entries    */
  197.     Matrix        m;
  198.     struct    ms    *back;
  199. } Mstack;
  200.  
  201. typedef    struct    as {    /* Attribute stack entries */
  202.     Attribute    a;
  203.     struct    as    *back;
  204. } Astack;
  205.  
  206. typedef    struct    vs {    /* Viewport stack entries */
  207.     Viewport    v;
  208.     struct    vs    *back;
  209. } Vstack;
  210.  
  211. /*
  212.  * vogle device structures
  213.  */
  214. typedef struct dev {
  215.     char    *devname;        /* name of device */
  216.     char    *large,            /* name of large font */
  217.         *small;            /* name of small font */
  218.     int    (*Vbackb)(),        /* Set drawing in back buffer */
  219.         (*Vchar)(),        /* Draw a hardware character */
  220.         (*Vcheckkey)(),        /* Ckeck if a key was hit */
  221.         (*Vclear)(),        /* Clear the screen to current color */
  222.         (*Vcolor)(),        /* Set current color */
  223.         (*Vdraw)(),        /* Draw a line */
  224.         (*Vexit)(),        /* Exit graphics */
  225.         (*Vfill)(),        /* Fill a polygon */
  226.         (*Vfont)(),        /* Set hardware font */
  227.         (*Vfrontb)(),        /* Set drawing in front buffer */
  228.         (*Vgetkey)(),        /* Wait for and get the next key hit */
  229.         (*Vinit)(),        /* Initialise the device */
  230.         (*Vlocator)(),        /* Get mouse/cross hair position */
  231.         (*Vmapcolor)(),        /* Set color indicies */
  232.         (*Vsetlw)(),        /* Set line thickness */
  233.         (*Vstring)(),        /* Draw a hardware string */
  234.         (*Vswapb)(),        /* Swap front and back buffers */
  235.         (*Vsync)();        /* Syncronise the display */
  236. } DevEntry;
  237.  
  238. typedef struct vdev {
  239.     char        initialised,
  240.             clipoff,
  241.             inobject,
  242.             inpolygon,
  243.             upset,            /* is up vector set */
  244.             cpVvalid,        /* is the current device position valid */
  245.             sync,            /* Do we syncronise the display */
  246.             inbackbuffer,        /* are we in the backbuffer */
  247.             clipplanes;        /* active clipping planes */
  248.     void        (*pmove)(),        /* Polygon moves */
  249.             (*pdraw)();        /* Polygon draws */
  250.     TokList        *tokens;        /* ptr to list of tokens for current object */
  251.     Mstack        *transmat;        /* top of transformation stack */
  252.     Astack        *attr;            /* top of attribute stack */
  253.     Vstack        *viewport;        /* top of viewport stack */
  254.     float        hheight, hwidth;    /* hardware character height, width */
  255.     Vector        cpW,            /* current postion in world coords */
  256.             cpWtrans,        /* current world coords transformed */
  257.             upvector;        /* world up */
  258.     int        depth,            /* # bit planes on screen */
  259.             maxVx, minVx,
  260.             maxVy, minVy,
  261.             sizeX, sizeY,         /* size of square on screen */
  262.             sizeSx, sizeSy,        /* side in x, side in y (# pixels) */
  263.             cpVx, cpVy;
  264.     DevEntry    dev;
  265. } Device;
  266.  
  267. extern Device    vdevice;        /* device structure */
  268.  
  269. #define    V_X    0            /* x axis in cpW */
  270. #define    V_Y    1            /* y axis in cpW */
  271. #define    V_Z    2            /* z axis in cpW */
  272. #define    V_W    3            /* w axis in cpW */
  273.  
  274. /*
  275.  * function definitions
  276.  */
  277.  
  278. /*
  279.  * allocate memory
  280.  */
  281. extern    char    *vallocate();
  282.  
  283. /*
  284.  * arc routines
  285.  */
  286. extern void    arcprecision();
  287. extern void    arc();
  288. extern void    circle();
  289. extern void    circleprecision();
  290. extern void    sector();
  291.  
  292. /*
  293.  * attr routines
  294.  */
  295. extern void    popattributes();
  296. extern void    pushattributes();
  297.  
  298. /*
  299.  * curve routines
  300.  */
  301. extern void    curve();
  302. extern void    rcurve();
  303. extern void    curven();
  304. extern void    drcurve();
  305. extern void    curvebasis();
  306. extern void    curveprecision();
  307.  
  308. /*
  309.  * draw routines
  310.  */
  311. extern void    draw();
  312. extern void    draw2();
  313. extern void    rdraw();
  314. extern void    rdraw2();
  315. extern void    sdraw2();
  316. extern void    rsdraw2();
  317. extern void    setdash();
  318. extern void    dashline();
  319. extern void    linestyle();
  320.  
  321. /*
  322.  * device routines
  323.  */
  324. extern void    clear();
  325. extern void    color();
  326. extern int    getdepth();
  327. extern int    getkey();
  328. extern int    checkkey();
  329. extern int    getplanes();
  330. extern int    locator();
  331. extern int    slocator();
  332. extern void    mapcolor();
  333.  
  334. extern void    vinit();
  335. extern void    vexit();
  336. extern void    verror();
  337. extern void    voutput();
  338. extern void    vnewdev();
  339. extern void    pushdev();
  340. extern void    popdev();
  341. extern char    *vgetdev();
  342.  
  343. /*
  344.  * mapping routines
  345.  */
  346. extern int    WtoVx();
  347. extern int    WtoVy();
  348. extern void    VtoWxy();
  349. extern void    CalcW2Vcoeffs();
  350.  
  351. /*
  352.  * general matrix and vector routines
  353.  */
  354. extern void    mult4x4();
  355. extern void    copymatrix();
  356. extern void    identmatrix();
  357. extern void    copytranspose();
  358.  
  359. extern void    multvector();
  360. extern void    copyvector();
  361. extern void    premultvector();
  362.  
  363. /*
  364.  * matrix stack routines
  365.  */
  366. extern void    getmatrix();
  367. extern void    popmatrix();
  368. extern void    loadmatrix();
  369. extern void    pushmatrix();
  370. extern void    multmatrix();
  371. extern Matrix    *getmstackaddress();
  372.  
  373. /*
  374.  * move routines
  375.  */
  376. extern void    move();
  377. extern void    move2();
  378. extern void    rmove();
  379. extern void    rmove2();
  380. extern void    smove2();
  381. extern void    rsmove2();
  382.  
  383. /*
  384.  * object routines
  385.  */
  386. extern int    isobj();
  387. extern int    genobj();
  388. extern void    delobj();
  389. extern void    makeobj();
  390. extern void    loadobj();
  391. extern void    saveobj();
  392. extern void    callobj();
  393. extern void    closeobj();
  394. extern int    getopenobj();
  395. extern Token    *newtokens();
  396.  
  397. /*
  398.  * patch routines.
  399.  */
  400. extern void    patch();
  401. extern void    rpatch();
  402. extern void    drpatch();
  403. extern void    patchbasis();
  404. extern void    patchcurves();
  405. extern void    patchprecision();
  406. extern void    transformtensor();
  407.  
  408. /*
  409.  * point routines
  410.  */
  411. extern void    point();
  412. extern void    point2();
  413. extern void    spoint2();
  414.  
  415. /*
  416.  * polygon routines.
  417.  */
  418. extern void    poly();
  419. extern void    poly2();
  420. extern void     hatchang();
  421. extern void    makepoly();
  422. extern void    polyfill();
  423. extern void    closepoly();
  424. extern void    polyhatch();
  425. extern void     hatchpitch();
  426. extern void    backface();
  427. extern void    backfacedir();
  428.  
  429. /*
  430.  * rectangle routine
  431.  */
  432. extern void    rect();
  433.  
  434. /*
  435.  * tensor routines
  436.  */
  437. extern void multtensor();
  438. extern void copytensor();
  439. extern void premulttensor();
  440. extern void copytensortrans();
  441.  
  442. /*
  443.  * text routines
  444.  */
  445. extern int    hershfont();
  446. extern void    font();
  447. extern void    boxfit();
  448. extern void    boxtext();
  449. extern void    drawstr();
  450. extern void    textang();
  451. extern int    numchars();
  452. extern void    drawchar();
  453. extern void    textsize();
  454. extern float    strlength();
  455. extern float    sstrlength();
  456. extern void    centertext();
  457. extern void    xcentertext();
  458. extern void    ycentertext();
  459. extern void    fixedwidth();
  460. extern void    topjustify();
  461. extern void    bottomjustify();
  462. extern void    leftjustify();
  463. extern void    rightjustify();
  464. extern void    textjustify();
  465. extern void    getcharsize();
  466. extern void    getfontsize();
  467. extern float    getfontwidth();
  468. extern float    getfontheight();
  469.  
  470. /*
  471.  * transformation routines
  472.  */
  473. extern void    scale();
  474. extern void    translate();
  475. extern void    rotate();
  476.  
  477. /*
  478.  * window definition routines
  479.  */
  480. extern void    ortho();
  481. extern void    ortho2();
  482. extern void    lookat();
  483. extern void    window();
  484. extern void    polarview();
  485. extern void    perspective();
  486. extern void    up();
  487.  
  488. /*
  489.  * routines for manipulating the viewport
  490.  */
  491. extern void    viewport();
  492. extern void    getviewport();
  493. extern void    popviewport();
  494. extern void    pushviewport();
  495.  
  496. /*
  497.  * routines for retrieving the graphics position
  498.  */
  499. extern void    getgp();
  500. extern void    getgpt();
  501. extern void    getgp2();
  502. extern void    sgetgp2();
  503.  
  504. /*
  505.  * routines for retrieving the aspect details of the device
  506.  */
  507. extern float    getaspect();
  508. extern void    getfactors();
  509. extern void    getdisplaysize();
  510. extern void    expandviewport();
  511. extern void    unexpandviewport();
  512.  
  513. /*
  514.  * routines for handling the buffering
  515.  */
  516. extern int    backbuffer();
  517. extern void    frontbuffer();
  518. extern int    swapbuffers();
  519.  
  520. /*
  521.  * routines for window sizing and positioning
  522.  */
  523. extern void    prefsize();
  524. extern void    prefposition();
  525.  
  526. /* 
  527.  * Misc control routines
  528.  */
  529. extern void    clip();
  530. extern void    quickclip();
  531. extern void    clipping();
  532. extern void    vsetflush();
  533. extern void    vflush();
  534. extern void    yobbarays();
  535.  
  536. #endif
  537.