Annotation of researchv10no/cmd/ideal/ideal.h, revision 1.1.1.1

1.1       root        1: #include <stdio.h>
                      2: #include "stdas.h"
                      3: #include <math.h>
                      4: 
                      5: extern double modf();
                      6: 
                      7: #define TRUE   1
                      8: #define FALSE  0
                      9: typedef int    boolean;
                     10: 
                     11: #define EPSILON 0.0001
                     12: #define        INFINITY        1e30
                     13: #define INTERSIZE      20
                     14: #define        POSSINTER       2
                     15: 
                     16: #define        MAXX    0
                     17: #define        MAXY    1
                     18: #define        MINX    2
                     19: #define        MINY    3
                     20: 
                     21: #define known(x) (!(((DEPPTR)x->left)->var || ((DEPPTR)x->right)->var))
                     22: #define fabs(z)        ((z>0)?z:-(z))
                     23: #define        iabs(z) ((z>0)?z:-(z))
                     24: #define max(x,y) (((x)>(y))?(x):(y))
                     25: #define min(x,y) (((x)<(y))?(x):(y))
                     26: #define Re(z)  ((DEPPTR)z->left)->coeff
                     27: #define Im(z)  ((DEPPTR)z->right)->coeff
                     28: #define        ISREAL(z)       (z->re_name > 0)
                     29: #define        THENAME(z)      (iabs(z->re_name))
                     30: #define        arecollinear(a,b,c,d,e,f)       (fabs((f-b)*(c-a)-(e-a)*(d-b))<EPSILON)
                     31: #define        between(ax,ay,bx,by,cx,cy)      ((ax-bx)*(bx-cx) > 0 || (ay-by)*(by-cy) > 0)
                     32: 
                     33: extern int when_bug;
                     34: extern boolean dbg;
                     35: #define bug_on dbg = TRUE
                     36: #define bug_off        dbg = FALSE
                     37: #define dprintf        if (dbg) fprintf(stderr,
                     38: 
                     39: extern char *filename;
                     40: extern int lineno;
                     41: #define        LIBFIL  1
                     42: #define        SILENT  2
                     43: #define        CHATTY  3
                     44: 
                     45: extern boolean radflag;
                     46: extern boolean wantout;
                     47: #define dtor(x)        x *= PI/180
                     48: #define rtod(x)        x *= 180/PI
                     49: 
                     50: /* these are codes for classification of intersection points */
                     51: #define        UNUSED          0
                     52: #define        SIMPLE          1
                     53: #define        AT0             2
                     54: #define        AT1             3
                     55: #define        COLLINEAR       4
                     56: #define        ON0             5
                     57: #define        ON1             6
                     58: #define        TANGENT         7
                     59: 
                     60: /* these are codes for setting up the list of intersections */
                     61: #define        INHERIT         0
                     62: /*
                     63: #define        SIMPLE          1
                     64: */
                     65: #define        EXTREMUM        2
                     66: #define        INFLECTION      3
                     67: #define        EXT0            4
                     68: #define        EXT1            5
                     69: #define        INFL0           6
                     70: #define        INFL1           7
                     71: #define        IGNORE          8
                     72: 
                     73: #define        INBEGIN         0
                     74: #define        OUTBEGIN        1
                     75: #define        ONBEGIN         2
                     76: 
                     77: /* structure definitions for data structures */
                     78: typedef char *EXPR;
                     79: #define        tryfree(doomed) free((char *)doomed)
                     80: 
                     81: typedef struct stmtnode {      /* hooks together stmts in bodies */
                     82:        struct stmtnode *next;
                     83:        EXPR stmt;
                     84:        int kind;
                     85:        } STMTNODE, *STMTPTR;
                     86: 
                     87: typedef struct boxnode {       /* hooks together box definitions */
                     88:        struct boxnode *next;
                     89:        int name;
                     90:        STMTPTR stmtlist;
                     91:        } BOXNODE, *BOXPTR;
                     92: 
                     93: typedef struct namenode {      /* holds var lists and path names */
                     94:        struct namenode *next;
                     95:        int name;
                     96:        } NAMENODE, *NAMEPTR;
                     97: 
                     98: typedef struct exprnode {      /* points to equations and bdlists */
                     99:        struct exprnode *next;
                    100:        EXPR expr;
                    101:        } EXPRNODE, *EXPRPTR;
                    102: 
                    103: typedef struct putnode {       /* put statements */
                    104:        int name;
                    105:        BOXPTR parm;
                    106:        int p_or_c;
                    107:        } PUTNODE, *PUTPTR;
                    108: 
                    109: typedef struct pen_node {      /* conn ... using statements */
                    110:        EXPR from,
                    111:                to,
                    112:                copies,
                    113:                start,
                    114:                end;
                    115:        BOXPTR pen;
                    116:        } PEN_NODE, *PENPTR;
                    117: 
                    118: typedef struct miscnode {      /* opaque, draw handling */
                    119:        int info;
                    120:        } MISCNODE, *MISCPTR;
                    121: 
                    122: typedef struct strnode {       /* strings */
                    123:        int command;
                    124:        char *string;
                    125:        EXPR at;
                    126:        } STRNODE, *STRPTR;
                    127: 
                    128: typedef struct exprintl {      /* internal node of expr tree */
                    129:        boolean leaf;   /* always FALSE */
                    130:        boolean used;
                    131:        int oper;
                    132:        EXPR left;
                    133:        EXPR right;
                    134:        } EXPRINTL, *INTLPTR;
                    135: 
                    136: typedef struct exprextl {      /* external node of expr tree */
                    137:        boolean leaf;   /* always TRUE */
                    138:        boolean used;
                    139:        union u {
                    140:                struct namenode *path;
                    141:                float const;
                    142:        } info;
                    143:        int kind;       /* should be one of PATH, CONST */
                    144:        } EXPREXTL, *EXTLPTR;
                    145: 
                    146: typedef struct noad {  /* linked structures in which variables reside */
                    147:        PUTPTR defnode;
                    148:        struct varnode *edgevarlist;
                    149:        struct varnode *boxvarlist;
                    150:        struct linenode *linelist;
                    151:        struct noad *father;
                    152:        struct noad *brother;
                    153:        struct noad *son;
                    154:        } NOAD, *NOADPTR;
                    155: 
                    156: typedef struct varnode {       /* where ONE variable--the real or imag part of a var--lives */
                    157:        struct varnode *next;
                    158:        int re_name;    /* positive for real part, negative for imag part */
                    159:        struct depnode *deplist;
                    160:        } VARNODE, *VARPTR;
                    161: 
                    162: typedef struct depnode {       /* a term in the dependency list representation of a variable */
                    163:        struct depnode *next;
                    164:        VARPTR var;
                    165:        float coeff;
                    166:        } DEPNODE, *DEPPTR;
                    167: 
                    168: typedef struct linenode {      /* a line segment on linelist */
                    169:        struct linenode *next;
                    170:        int kind;       /* always LINE */
                    171:        float x0,
                    172:                y0,
                    173:                x1,
                    174:                y1;
                    175:        } LINENODE, *LINEPTR;
                    176: 
                    177: typedef struct edgenode {      /* an edge of an opaque polygon */
                    178:        struct edgenode *next,
                    179:                *prev;
                    180:        struct arcnode *fax;
                    181:        boolean flipped;
                    182:        float sx, sy,           /* start point */
                    183:                ex, ey,         /* end point */
                    184:                stx, sty,       /* coords of endpt of a tan vector at start */
                    185:                etx, ety;       /* coords of endpt of a tan vector at end */
                    186:        int code[POSSINTER];
                    187:        float alpha[POSSINTER];
                    188:        } EDGENODE, *EDGEPTR;
                    189: 
                    190: typedef struct circnode {      /* a circle on linelist */
                    191:        struct linenode *next;
                    192:        int kind;       /* always CIRCLE */
                    193:        float x0,
                    194:                y0,
                    195:                r;
                    196:        } CIRCNODE, *CIRCPTR;
                    197: 
                    198: typedef struct arcnode {       /* an arc on linelist */
                    199:        struct linenode *next;
                    200:        int kind;       /* always ARC */
                    201:        float x0,
                    202:                y0,
                    203:                x1,
                    204:                y1,
                    205:                x2,
                    206:                y2,
                    207:                theta1,
                    208:                theta2,
                    209:                radius; /* TROFF figures out the center depending on sign of radius */
                    210:        } ARCNODE, *ARCPTR;
                    211: 
                    212: typedef struct textnode {      /* a string on linelist */
                    213:        struct linenode *next;
                    214:        int kind,       /* always STRING */
                    215:                command;
                    216:        char *string;
                    217:        float x0,
                    218:                y0;
                    219:        } TEXTNODE, *TEXTPTR;
                    220: 
                    221: typedef struct splnode {       /* a spline on linelist */
                    222:        struct linenode *next;
                    223:        int kind;       /* always SPLINE */
                    224:        EXPRPTR knotlist;
                    225:        } SPLNODE, *SPLPTR;
                    226: 
                    227: typedef struct eqnnode {       /* a non-linear equation residing on list */
                    228:        struct eqnnode *next;
                    229:        EXPR eqn;
                    230:        NOADPTR noad;
                    231:        } EQNNODE, *EQNPTR;
                    232: 
                    233: typedef struct opqnode {       /* an alpha or theta of intersection */
                    234:        struct opqnode *next;
                    235:        int code;
                    236:        float alpha;
                    237:        } OPQNODE, *OPQPTR;
                    238: 
                    239: /* routines in memut.c */
                    240: extern STMTPTR stmtgen ();
                    241: extern BOXPTR boxgen ();
                    242: extern NAMEPTR namegen ();
                    243: extern EXPRPTR exprgen ();
                    244: extern PUTPTR putgen ();
                    245: extern PENPTR pengen ();
                    246: extern MISCPTR miscgen ();
                    247: extern INTLPTR intlgen ();
                    248: extern INTLPTR commagen ();
                    249: extern EXTLPTR extlgen ();
                    250: extern EXTLPTR fextlgen ();
                    251: extern NOADPTR noadgen ();
                    252: extern VARPTR vargen ();
                    253: extern DEPPTR depgen ();
                    254: extern LINEPTR linegen ();
                    255: extern EDGEPTR edgeline ();
                    256: extern LINEPTR circgen ();
                    257: extern LINEPTR arcgen ();
                    258: extern LINEPTR angularc ();
                    259: extern LINEPTR pointarc ();
                    260: extern EDGEPTR edgearc ();
                    261: extern LINEPTR textgen ();
                    262: extern LINEPTR splgen ();
                    263: extern STRPTR strgen ();
                    264: extern EQNPTR eqngen ();
                    265: extern OPQPTR opqgen ();
                    266: extern void nextfree ();
                    267: extern void depfree ();
                    268: extern void namefree ();
                    269: extern void exprlsfree ();
                    270: extern void linefree ();
                    271: extern void intlfree ();
                    272: extern void noadfree ();
                    273: extern void varfree ();
                    274: extern void exprfree ();
                    275: extern void boxfree ();
                    276: extern void emergency ();
                    277: 
                    278: /* routines in util.c */
                    279: extern int lookup();
                    280: extern char* idprint();
                    281: extern BOXPTR findbox();
                    282: extern INTLPTR varfind();
                    283: extern INTLPTR pathfind();
                    284: extern BOXPTR tail ();
                    285: extern void forget ();
                    286: extern void exprprint ();
                    287: extern STMTPTR nextstmt ();
                    288: extern EXPR bracket ();
                    289: extern void depprint ();
                    290: extern void dexch();
                    291: extern void fexch();
                    292: extern float rprin();
                    293: extern float dprin();
                    294: extern void angorder();
                    295: extern STMTPTR reverse ();
                    296: extern void impossible ();
                    297: 
                    298: /* routines in bldds.c */
                    299: extern NOADPTR buildnoadtree();
                    300: extern VARPTR buildvarlist();
                    301: extern NOADPTR walkputlist();
                    302: 
                    303: /* routines in simul.c */
                    304: extern DEPPTR depadd();
                    305: extern DEPPTR depsubst();
                    306: 
                    307: /* routines in exprn.c */
                    308: extern INTLPTR expreval();
                    309: extern void eqndo();
                    310: extern void depvarclean();
                    311: extern void depvarkill();
                    312: extern void eqneval();
                    313: extern void nl_eval();
                    314: 
                    315: /* routines in action.c */
                    316: extern LINEPTR build();
                    317: extern LINEPTR connact();
                    318: extern LINEPTR penact();
                    319: extern LINEPTR drawact();
                    320: extern LINEPTR stract();
                    321: extern LINEPTR circact();
                    322: extern LINEPTR arcact();
                    323: extern LINEPTR splact();
                    324: 
                    325: /* routines in piece.c */
                    326: extern void linecall ();
                    327: extern void circcall ();
                    328: extern void arccall ();
                    329: extern void textcall ();
                    330: extern void splcall ();
                    331: extern void boundscall ();
                    332: extern void bbline ();
                    333: extern void bbcirc ();
                    334: 
                    335: /* routines in opaque.c */
                    336: extern LINEPTR opqact();
                    337: extern void opqinsert();
                    338: extern LINEPTR lineclean();
                    339: extern void halfplane();
                    340: extern void triangle();
                    341: 
                    342: /* routines in inter.c */
                    343: extern boolean llinter();
                    344: extern boolean lcinter();
                    345: extern boolean ccinter();
                    346: 
                    347: /* routines in opqpoly.c */
                    348: extern void opqpoly();
                    349: extern void polyline();
                    350: extern void polyarc();
                    351: extern void linetest();
                    352: extern void arctest();
                    353: 
                    354: /* routines in opqcirc.c */
                    355: extern void opqcirc();
                    356: extern void circline();
                    357: extern void circarc();
                    358: 
                    359: /* routines in opqsect.c */
                    360: extern void opqsect();
                    361: 
                    362: /* routines in opqseg.c */
                    363: extern void opqseg();
                    364: 
                    365: /* lexical analyzer routines */
                    366: extern void filepush ();
                    367: extern void filepop ();

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.