home *** CD-ROM | disk | FTP | other *** search
/ Club Amiga de Montreal - CAM / CAM_CD_1.iso / files / 199.lha / GimmeLib / graph.h < prev    next >
C/C++ Source or Header  |  1988-12-27  |  6KB  |  131 lines

  1. #ifndef GIMMELIB_GRAPH_H
  2. #define GIMMELIB_GRAPH_H
  3.  
  4. #include "gimmelib/postext.h"
  5.  
  6.  
  7. typedef struct _gim_nax {
  8.     SHORT origin, size;     /* offset of origin and axis size in pixels */
  9.     SHORT low;            /* coord corresponding to origin */
  10.     SHORT amt;            /* modified by newgraph flags */
  11.     SHORT initpt;        /* coord of initial point (see newgraph flags) */
  12.     SHORT step;         /* step size for even labelling, 0 for fancy */
  13.     SHORT labnum, labdenom; /* fraction for label scaling */
  14. } NEWAXIS;
  15.  
  16. typedef struct _gim_axis {
  17.     SHORT origin, size;     /* offset of origin and axis size in pixels */
  18.     SHORT low;            /* coord corresponding to origin */
  19.     SHORT high;         /* coord corresponding to high end of axis */
  20.     SHORT scale;        /* scale of axis: -ve means coords per pixel */
  21.     SHORT usesize;        /* actual size of axis used in pixels */
  22.     SHORT lastdata;        /* last coord added to graph */
  23.     SHORT lastoff;        /* offset of last coord in pixels */
  24.     SHORT step;         /* step size for even labelling, 0 for fancy */
  25.     SHORT labnum, labdenom; /* fraction for label scaling */
  26.     SHORT flow, fhigh;        /* first low and high - for graph reinit */
  27.     SHORT fdata, foff;        /* first coord and offset - for graph reinit */
  28. } AXIS;
  29.  
  30. typedef struct _gim_newgr {
  31.     UBYTE   *title, *xtitle, *ytitle;        /* graph and axes titles */
  32.     struct TextAttr *titleta, *xta, *yta;   /* text attributes for titles */
  33.     BYTE    FPen, BPen, AxesPen, TitlePen;  /* colours for primary parts */
  34.     ULONG   flags, ctlflags;            /* all-important flags */
  35.     NEWAXIS X, Y;                /* actual new-axis structs */
  36.     struct RastPort *rp;            /* RastPort to be copied, or NULL */
  37. } NEWGRAPH;
  38.  
  39.  
  40. /* flags for NEWGRAPH.flags (and GRAPH.flags) */
  41. #define GGR_DELTAX        (1L << 0)
  42. #define GGR_LINETOX        (1L << 1)
  43. #define GGR_FILLTOX        (1L << 2)
  44. #define GGR_BLACKTOX        (1L << 3)
  45. #define GGR_X_MAX        (1L << 8)   /* default */
  46. #define GGR_X_INTERVALS     (1L << 9)
  47. #define GGR_X_SPACING        (1L << 10)  /* auto-spacing based on size */
  48. #define GGR_X_INTEGRAL        (1L << 11)
  49. #define GGR_X_FLAGS        0x0000FFFFL
  50.  
  51. #define GGR_DELTAY        (1L << 16)
  52. #define GGR_LINETOY        (1L << 17)
  53. #define GGR_FILLTOY        (1L << 18)
  54. #define GGR_BLACKTOY        (1L << 19)
  55. #define GGR_Y_MAX        (1L << 24)  /* default */
  56. #define GGR_Y_INTERVALS     (1L << 25)
  57. #define GGR_Y_SPACING        (1L << 26)
  58. #define GGR_Y_INTEGRAL        (1L << 27)
  59. #define GGR_Y_FLAGS        0xFFFF0000L
  60.  
  61. #define GGR_DEFAULT        0L
  62.  
  63. /* control flags for NEWGRAPH.ctlflags (and GRAPH.ctlflags) */
  64. #define GGR_INITORIGIN        (1L << 0)
  65. #define GGR_INITPOINT        (1L << 1)
  66. #define GGR_NOCLEARSTART    (1L << 8)
  67. #define GGR_NOCONNECTLINE   (1L << 9)
  68. #define GGR_NOLABELS        (1L << 10)
  69. #define GGR_CLEARONEND        (1L << 15)
  70. #define GGR_HIRES        (1L << 24)
  71. #define GGR_INTERLACE        (1L << 25)
  72.  
  73. #define GGR_CTL_DEFAULT     0L
  74.  
  75. /* explanation of drawing flags:
  76.  * DELTA:    coord of new point is relative to coord of previous point
  77.  * LINETO:    draw a line from the point to the respective axis
  78.  * FILLTO:    area fill the trapezoid from previous point to resp. axis
  79.  * BLACKTO:    like LINETO but using background colour (useful with FILLTO)
  80.  
  81. /* explanation of newaxis-specific flags:
  82.  * MAX:     newaxis.amt specifies max coord on initial graph
  83.  * INTERVALS:    newaxis.amt specifies difference between low and high coords
  84.  * SPACING:    newaxis.amt specifies the scale to be applied (+ve or -ve)
  85.  * INTEGRAL:    force integer number of pixels/coord or coords/pixel
  86.  
  87. /* explanation of control flags:
  88.  * INITORIGIN:        use origin as initial point
  89.  * INITPOINT:        use point specified in nexaxes as initial point
  90.  *            (otherwise newaxis.initpt is ignored)
  91.  * NOCLEARSTART:    don't clear the rastport when initializing graph
  92.  *            (useful if several graphs on same "rastport")
  93.  * NOLABELS:        don't draw titles, axes and labels for me ever (I'll do it)
  94.  * NOCONNECTLINE:   don't connect points in graph by a line
  95.  * CLEARONEND:        clear the graph when doing getRidOfGraph
  96.  * HIRES:        graph to be displayed on HIRES screen
  97.  * INTERLACE:        graph to be displayed on INTERLACE screen
  98.  *            (these two are useful for determining aspect ratios)
  99.  
  100.  
  101. typedef struct _gim_graph {
  102.     struct RastPort rp;         /* actual RastPort struct */
  103.     ULONG   flags;            /* flags, as in newgraph */
  104.     ULONG   ctlflags;            /* control flags, as in newgraph */
  105.     UBYTE   *title, *xtitle, *ytitle;    /* graph and axes titles */
  106.     struct TextFont *titletf, *xtf, *ytf;   /* fonts for titles */
  107.     struct TextFont *xlabtf, *ylabtf;        /* fonts for axes' labels */
  108.     BYTE    FPen, BPen, AxesPen, TitlePen;  /* colours for primary parts */
  109.     BYTE    XlabPen, YlabPen, XtitlePen, YtitlePen;   /* secondary colours */
  110.     SHORT   points;            /* number of points added so far */
  111.     AXIS    X, Y;            /* actual axis structs */
  112.     void    *memhead;            /* memory-chain for this graph */
  113.     struct _gim_graph *next;         /* link to next graph (future use) */
  114. } GRAPH;
  115.  
  116.  
  117. /* INTERNAL scaling factor used by graph routines for intermediate results */
  118. #define SCALE        6
  119.  
  120.  
  121. /* flags for graphWriteLabel() */
  122. #define GWL_XAXIS    (1L << 20)      /* label the x-axis (don't set yaxis) */
  123. #define GWL_YAXIS    (1L << 21)      /* label the y-axis (don't set xaxis) */
  124. #define GWL_CLEAR_ONLY    (1L << 22)      /* clear the previous labels only! */
  125. #define GWL_CLEAR_OLD    (1L << 23)      /* clear previous then draw labels */
  126. #define GWL_RESERVED    (0x000fffffL)   /* reserved for internal use only!! */
  127. #define GWL_DEFAULT    (AWL_YAXIS)
  128.  
  129.  
  130. #endif !GIMMELIB_GRAPH_H
  131.