|
|
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: #define DEFAULT 0
11:
12: #define HEAD1 1
13: #define HEAD2 2
14: #define HEAD12 (HEAD1+HEAD2)
15: #define INVIS 4
16: #define CW_ARC 8 /* clockwise arc */
17: #define DOTBIT 16
18: #define DASHBIT 32
19:
20: #define CENTER 01 /* text attributes */
21: #define LJUST 02
22: #define RJUST 04
23: #define ABOVE 010
24: #define BELOW 020
25: #define SPREAD 040
26: #define FILL 0100
27:
28: #define SCALE 1.0 /* default scale: units/inch */
29: #define WID 0.75 /* default width for boxes and ellipses */
30: #define WID2 0.375
31: #define HT 0.5 /* default height and line length */
32: #define HT2 0.25 /* because no floating init exprs! */
33: #define HT5 0.1
34: #define HT10 0.05
35:
36: /* these have to be like so, so that we can write */
37: /* things like R & V, etc. */
38: #define H 0
39: #define V 1
40: #define R_DIR 0
41: #define U_DIR 1
42: #define L_DIR 2
43: #define D_DIR 3
44: #define ishor(n) (((n) & V) == 0)
45: #define isvert(n) (((n) & V) != 0)
46: #define isright(n) ((n) == R_DIR)
47: #define isleft(n) ((n) == L_DIR)
48: #define isdown(n) ((n) == D_DIR)
49: #define isup(n) ((n) == U_DIR)
50:
51: typedef struct Point {
52: float x;
53: float y;
54: };
55:
56: typedef struct obj { /* stores various things in variable length */
57: int o_type;
58: int o_count; /* number of things */
59: int o_nobj; /* index in objlist */
60: int o_mode; /* hor or vert */
61: float o_x; /* coord of "center" */
62: float o_y;
63: int o_nt1; /* 1st index in text[] for this object */
64: int o_nt2; /* 2nd; difference is #text strings */
65: int o_attr; /* HEAD, CW, INVIS go here */
66: int o_size; /* linesize */
67: int o_nhead; /* arrowhead style */
68: struct symtab *o_symtab; /* symtab for [...] */
69: float o_ddval; /* value of dot/dash expression */
70: float o_val[1]; /* actually this will be > 1 in general */
71: /* type is not always FLOAT!!!! */
72: } obj;
73:
74: typedef union { /* the yacc stack type */
75: int i;
76: char *p;
77: obj *o;
78: float f;
79: } YYSTYPE;
80:
81: extern YYSTYPE yylval, yyval;
82:
83: struct symtab {
84: char *s_name;
85: int s_type;
86: YYSTYPE s_val;
87: struct symtab *s_next;
88: };
89:
90: typedef struct { /* attribute of an object */
91: int a_type;
92: int a_sub;
93: YYSTYPE a_val;
94: } Attr;
95:
96: typedef struct {
97: int t_type; /* CENTER, LJUST, etc. */
98: char t_op; /* optional sign for size changes */
99: char t_size; /* size, abs or rel */
100: char *t_val;
101: } Text;
102:
103: #define String 01
104: #define Macro 02
105: #define File 04
106: #define Char 010
107: #define Thru 020
108: #define Free 040
109:
110: typedef struct { /* input source */
111: int type; /* Macro, String, File */
112: char *sp; /* if String or Macro */
113: } Src;
114:
115: extern Src src[], *srcp; /* input source stack */
116:
117: typedef struct {
118: FILE *fin;
119: char *fname;
120: int lineno;
121: } Infile;
122:
123: extern Infile infile[], *curfile;
124:
125: #define MAXARGS 20
126: typedef struct { /* argument stack */
127: char *argstk[MAXARGS]; /* pointers to args */
128: char *argval; /* points to space containing args */
129: } Arg;
130:
131: extern int dbg;
132: extern obj **objlist;
133: extern int nobj, nobjlist;
134: extern Attr *attr;
135: extern int nattr, nattrlist;
136: extern Text *text;
137: extern int ntextlist;
138: extern int ntext;
139: extern int ntext1;
140: extern float curx, cury;
141: extern int hvmode;
142: extern int codegen;
143: extern int PEseen;
144: extern char *malloc(), *realloc(), *tostring(), *grow();
145: extern double getfval(), getcomp(), getblkvar();
146: extern YYSTYPE getvar();
147: extern struct symtab *lookup(), *makevar();
148: extern char *ifstat(), *delimstr(), *sprintgen();
149:
150: extern float deltx, delty;
151: extern int lineno;
152: extern int synerr;
153:
154: extern float xmin, ymin, xmax, ymax;
155: extern obj *leftthing(), *boxgen(), *circgen(), *arcgen();
156: extern obj *linegen(), *splinegen(), *movegen(), *textgen(), *plotgen();
157: extern obj *troffgen(), *rightthing(), *blockgen();
158: extern obj *makenode(), *makepos(), *fixpos(), *addpos(), *subpos(), *makebetween();
159: extern obj *getpos(), *gethere(), *getfirst(), *getlast(), *getblock();
160:
161: struct pushstack {
162: float p_x;
163: float p_y;
164: int p_hvmode;
165: float p_xmin;
166: float p_ymin;
167: float p_xmax;
168: float p_ymax;
169: struct symtab *p_symtab;
170: };
171: extern struct pushstack stack[];
172: extern int nstack;
173: extern int cw;
174:
175: extern double errcheck();
176: #define Log10(x) errcheck(log10(x), "log")
177: #define Exp(x) errcheck(exp(x), "exp")
178: #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.