#define dprintf if(dbg)printf
#define HEAD12 (HEAD1+HEAD2)
#define CW_ARC 8 /* clockwise arc */
#define CENTER 01 /* text attributes */
#define SCALE 1.0 /* default scale: units/inch */
#define WID 0.75 /* default width for boxes and ellipses */
#define HT 0.5 /* default height and line length */
#define HT2 0.25 /* because no floating init exprs! */
/* these have to be like so, so that we can write */
/* things like R & V, etc. */
#define ishor(n) (((n) & V) == 0)
#define isvert(n) (((n) & V) != 0)
#define isright(n) ((n) == R_DIR)
#define isleft(n) ((n) == L_DIR)
#define isdown(n) ((n) == D_DIR)
#define isup(n) ((n) == U_DIR)
typedef struct obj
{ /* stores various things in variable length */
int o_count
; /* number of things */
int o_nobj
; /* index in objlist */
int o_mode
; /* hor or vert */
float o_x
; /* coord of "center" */
int o_nt1
; /* 1st index in text[] for this object */
int o_nt2
; /* 2nd; difference is #text strings */
int o_attr
; /* HEAD, CW, INVIS go here */
int o_size
; /* linesize */
int o_nhead
; /* arrowhead style */
struct symtab
*o_symtab
; /* symtab for [...] */
float o_ddval
; /* value of dot/dash expression */
float o_val
[1]; /* actually this will be > 1 in general */
/* type is not always FLOAT!!!! */
typedef union { /* the yacc stack type */
extern YYSTYPE yylval
, yyval
;
typedef struct { /* attribute of an object */
int t_type
; /* CENTER, LJUST, etc. */
char t_op
; /* optional sign for size changes */
char t_size
; /* size, abs or rel */
typedef struct { /* input source */
int type
; /* Macro, String, File */
char *sp
; /* if String or Macro */
extern Src src
[], *srcp
; /* input source stack */
extern Infile infile
[], *curfile
;
typedef struct { /* argument stack */
char *argstk
[MAXARGS
]; /* pointers to args */
char *argval
; /* points to space containing args */
extern int nobj
, nobjlist
;
extern int nattr
, nattrlist
;
extern char *malloc(), *realloc(), *tostring(), *grow();
extern float getfval(), getcomp(), getblkvar();
extern struct symtab
*lookup(), *makevar();
extern char *ifstat(), *delimstr(), *sprintgen();
extern float deltx
, delty
;
extern float xmin
, ymin
, xmax
, ymax
;
extern obj
*leftthing(), *boxgen(), *circgen(), *arcgen();
extern obj
*linegen(), *splinegen(), *movegen(), *textgen(), *plotgen();
extern obj
*troffgen(), *rightthing(), *blockgen();
extern obj
*makenode(), *makepos(), *fixpos(), *addpos(), *subpos(), *makebetween();
extern obj
*getpos(), *gethere(), *getfirst(), *getlast(), *getblock();
extern struct pushstack stack
[];
extern double errcheck();
#define Log10(x) errcheck(log10(x), "log")
#define Exp(x) errcheck(exp(x), "exp")
#define Sqrt(x) errcheck(sqrt(x), "sqrt")