/* polygon.h */
/*************************************************************************
 ***                    POLYGON DRAWING MODULE HEADER                  ***
 *** Date begun: 22/3/89 - cut out of old polygon.c                    ***
 *** Last modified: 22/3/89.                                           ***
 *************************************************************************/

#define MIN(a,b)    (((a) < (b))? (a):(b))
#define MAX(a,b)    (((a) > (b))? (a):(b))
#define ABS(x)      (((x) < 0)? (-(x)):(x))
#define SGN(x)      (((x) < 0)? (-1):(1))

typedef short point[2];

struct edge {
    point       start,end;
    struct edge *next;};
typedef struct edge edge;

struct polygon {
    edge    *first;};
typedef struct polygon polygon;

struct ETentry {
    point          p;
    short          endy;
    short          dx,dy,c,s;
    struct ETentry *next;};
typedef struct ETentry ETentry;

struct template {                   /* Caller should init this, but */
    unsigned short  *plane;         /* storage is in polygon.c */
    short           tmodulo;        /* Word width of a template line */
    short           m1,m2;          /* Multiply by shifting - in bytes. */
    point           cliplo,cliphi;  /* Clip rect within template */
};
   /*** m1/m2 example: plane width = 40 words. Then want mults for 80 bytes.
    ***     y << m1 + y << m2 is equivalent to y * 80
    ***         so m1 = 6,  m2 = 4  (2^6 = 64, 2^4 = 16)
    ***/

#ifndef POLY_PARENT
extern void scanpoly(struct template *,struct RastPort *,polygon *);
#endif

/*** Define a struct blitter, since I've had trouble in the past with the
 *** struct custom provided.
 ***/
struct blitter {
    unsigned short  bltcon0;        /* 040 */
    unsigned short  bltcon1;        /* 042 */
    unsigned short  bltafwm;        /* 044 */
    unsigned short  bltalwm;        /* 046 */
    unsigned short  bltcpth;        /* 048 */
    unsigned short  bltcptl;        /* 04a */
    unsigned short  bltbpth;        /* 04c */
    unsigned short  bltbptl;        /* 04e */
    unsigned short  bltapth;        /* 050 */
    unsigned short  bltaptl;        /* 052 */
    unsigned short  bltdpth;        /* 054 */
    unsigned short  bltdptl;        /* 056 */
    unsigned short  bltsize;        /* 058 */
    unsigned short  pad1;           /* 05a */
    unsigned short  pad2;           /* 05c */
    unsigned short  pad3;           /* 05e */
    unsigned short  bltcmod;        /* 060 */
    unsigned short  bltbmod;        /* 062 */
    unsigned short  bltamod;        /* 064 */
    unsigned short  bltdmod;        /* 066 */
    unsigned short  pad4;           /* 068 */
    unsigned short  pad5;           /* 06a */
    unsigned short  pad6;           /* 06c */
    unsigned short  pad7;           /* 06e */
    unsigned short  bltcdat;        /* 070 */
    unsigned short  bltbdat;        /* 072 */
    unsigned short  bltadat;        /* 074 - no access to bltddat */
};
