|
|
1.1 ! root 1: #ifndef PI ! 2: #define PI 3.1415926535897932384626433832795028841971693993751 ! 3: #endif ! 4: ! 5: #define MAXWID 8.5 /* default limits max picture to 8.5 x 11; */ ! 6: #define MAXHT 11 /* change to taste without peril */ ! 7: ! 8: #define dprintf if(dbg)printf ! 9: ! 10: extern void yyerror(char *); ! 11: ! 12: extern char errbuf[200]; ! 13: #define ERROR sprintf(errbuf, ! 14: #define FATAL ), yyerror(errbuf), exit(1) ! 15: #define WARNING ), yyerror(errbuf) ! 16: ! 17: #define DEFAULT 0 ! 18: ! 19: #define HEAD1 1 ! 20: #define HEAD2 2 ! 21: #define HEAD12 (HEAD1+HEAD2) ! 22: #define INVIS 4 ! 23: #define CW_ARC 8 /* clockwise arc */ ! 24: #define DOTBIT 16 /* line styles */ ! 25: #define DASHBIT 32 ! 26: #define FILLBIT 64 /* gray-fill on boxes, etc. */ ! 27: #define NOEDGEBIT 128 /* no edge on filled object */ ! 28: ! 29: #define CENTER 01 /* text attributes */ ! 30: #define LJUST 02 ! 31: #define RJUST 04 ! 32: #define ABOVE 010 ! 33: #define BELOW 020 ! 34: #define SPREAD 040 ! 35: ! 36: #define SCALE 1.0 /* default scale: units/inch */ ! 37: #define WID 0.75 /* default width for boxes and ellipses */ ! 38: #define WID2 0.375 ! 39: #define HT 0.5 /* default height and line length */ ! 40: #define HT2 (HT/2) ! 41: #define HT5 (HT/5) ! 42: #define HT10 (HT/10) ! 43: ! 44: /* these have to be like so, so that we can write */ ! 45: /* things like R & V, etc. */ ! 46: #define H 0 ! 47: #define V 1 ! 48: #define R_DIR 0 ! 49: #define U_DIR 1 ! 50: #define L_DIR 2 ! 51: #define D_DIR 3 ! 52: #define ishor(n) (((n) & V) == 0) ! 53: #define isvert(n) (((n) & V) != 0) ! 54: #define isright(n) ((n) == R_DIR) ! 55: #define isleft(n) ((n) == L_DIR) ! 56: #define isdown(n) ((n) == D_DIR) ! 57: #define isup(n) ((n) == U_DIR) ! 58: ! 59: typedef float ofloat; /* for o_val[] in obj; could be double */ ! 60: ! 61: typedef struct obj { /* stores various things in variable length */ ! 62: int o_type; ! 63: int o_count; /* number of things */ ! 64: int o_nobj; /* index in objlist */ ! 65: int o_mode; /* hor or vert */ ! 66: float o_x; /* coord of "center" */ ! 67: float o_y; ! 68: int o_nt1; /* 1st index in text[] for this object */ ! 69: int o_nt2; /* 2nd; difference is #text strings */ ! 70: int o_attr; /* HEAD, CW, INVIS, etc., go here */ ! 71: int o_size; /* linesize */ ! 72: int o_nhead; /* arrowhead style */ ! 73: struct symtab *o_symtab; /* symtab for [...] */ ! 74: float o_ddval; /* value of dot/dash expression */ ! 75: float o_fillval; /* gray scale value */ ! 76: ofloat o_val[1]; /* actually this will be > 1 in general */ ! 77: /* type is not always FLOAT!!!! */ ! 78: } obj; ! 79: ! 80: typedef union { /* the yacc stack type */ ! 81: int i; ! 82: char *p; ! 83: obj *o; ! 84: double f; ! 85: struct symtab *st; ! 86: } YYSTYPE; ! 87: ! 88: extern YYSTYPE yylval, yyval; ! 89: ! 90: struct symtab { ! 91: char *s_name; ! 92: int s_type; ! 93: YYSTYPE s_val; ! 94: struct symtab *s_next; ! 95: }; ! 96: ! 97: typedef struct { /* attribute of an object */ ! 98: int a_type; ! 99: int a_sub; ! 100: YYSTYPE a_val; ! 101: } Attr; ! 102: ! 103: typedef struct { ! 104: int t_type; /* CENTER, LJUST, etc. */ ! 105: char t_op; /* optional sign for size changes */ ! 106: char t_size; /* size, abs or rel */ ! 107: char *t_val; ! 108: } Text; ! 109: ! 110: #define String 01 ! 111: #define Macro 02 ! 112: #define File 04 ! 113: #define Char 010 ! 114: #define Thru 020 ! 115: #define Free 040 ! 116: ! 117: typedef struct { /* input source */ ! 118: int type; /* Macro, String, File */ ! 119: char *sp; /* if String or Macro */ ! 120: } Src; ! 121: ! 122: extern Src src[], *srcp; /* input source stack */ ! 123: ! 124: typedef struct { ! 125: FILE *fin; ! 126: char *fname; ! 127: int lineno; ! 128: } Infile; ! 129: ! 130: extern Infile infile[], *curfile; ! 131: ! 132: #define MAXARGS 20 ! 133: typedef struct { /* argument stack */ ! 134: char *argstk[MAXARGS]; /* pointers to args */ ! 135: char *argval; /* points to space containing args */ ! 136: } Arg; ! 137: ! 138: extern int dbg; ! 139: extern obj **objlist; ! 140: extern int nobj, nobjlist; ! 141: extern Attr *attr; ! 142: extern int nattr, nattrlist; ! 143: extern Text *text; ! 144: extern int ntextlist; ! 145: extern int ntext; ! 146: extern int ntext1; ! 147: extern double curx, cury; ! 148: extern int hvmode; ! 149: extern int codegen; ! 150: extern int PEseen; ! 151: ! 152: char *tostring(char *); ! 153: char *grow(char *, char *, int, int); ! 154: double getfval(char *), getcomp(obj *, int), getblkvar(obj *, char *); ! 155: YYSTYPE getvar(char *); ! 156: struct symtab *lookup(char *), *makevar(char *, int, YYSTYPE); ! 157: char *ifstat(double, char *, char *), *delimstr(char *), *sprintgen(char *); ! 158: void forloop(char *var, double from, double to, int op, double by, char *_str); ! 159: int setdir(int), curdir(void); ! 160: void resetvar(void); ! 161: void checkscale(char *); ! 162: void pushsrc(int, char *); ! 163: void copy(void); ! 164: void copyuntil(char *); ! 165: void copyfile(char *); ! 166: void copydef(struct symtab *); ! 167: void definition(char *); ! 168: struct symtab *copythru(char *); ! 169: int input(void); ! 170: int unput(int); ! 171: void extreme(double, double); ! 172: ! 173: extern double deltx, delty; ! 174: extern int lineno; ! 175: extern int synerr; ! 176: ! 177: extern double xmin, ymin, xmax, ymax; ! 178: ! 179: obj *leftthing(int), *boxgen(void), *circgen(int), *arcgen(int); ! 180: obj *linegen(int), *splinegen(void), *movegen(void); ! 181: obj *textgen(void), *plotgen(void); ! 182: obj *troffgen(char *), *rightthing(obj *, int), *blockgen(obj *, obj *); ! 183: obj *makenode(int, int), *makepos(double, double); ! 184: obj *fixpos(obj *, double, double); ! 185: obj *addpos(obj *, obj *), *subpos(obj *, obj *); ! 186: obj *makebetween(double, obj *, obj *); ! 187: obj *getpos(obj *, int), *gethere(void), *getfirst(int, int); ! 188: obj *getlast(int, int), *getblock(obj *, char *); ! 189: void savetext(int, char *); ! 190: void makeiattr(int, int); ! 191: void makevattr(char *); ! 192: void makefattr(int type, int sub, double f); ! 193: void maketattr(int, char *); ! 194: void makeoattr(int, obj *); ! 195: void makeattr(int type, int sub, YYSTYPE val); ! 196: void printexpr(double); ! 197: void printpos(obj *); ! 198: void exprsave(double); ! 199: void addtattr(int); ! 200: void printlf(int, char *); ! 201: ! 202: struct pushstack { ! 203: double p_x; ! 204: double p_y; ! 205: int p_hvmode; ! 206: double p_xmin; ! 207: double p_ymin; ! 208: double p_xmax; ! 209: double p_ymax; ! 210: struct symtab *p_symtab; ! 211: }; ! 212: extern struct pushstack stack[]; ! 213: extern int nstack; ! 214: extern int cw; ! 215: ! 216: extern double errcheck(double, char *); ! 217: #define Log10(x) errcheck(log10(x), "log") ! 218: #define Exp(x) errcheck(exp(x), "exp") ! 219: #define Sqrt(x) errcheck(sqrt(x), "sqrt")
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.