|
|
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.