grap.h 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236
  1. extern char errbuf[200];
  2. #define ERROR sprintf(errbuf,
  3. #define FATAL ), yyerror(errbuf), exit(1)
  4. #define WARNING ), yyerror(errbuf)
  5. #define dprintf if(dbg)printf
  6. #define String 01
  7. #define Macro 02
  8. #define File 04
  9. #define Char 010
  10. #define Thru 020
  11. #define Free 040
  12. #define MARGIN 0.07 /* default margin around data */
  13. #define SLOP 1.001 /* slop for limits of for loops */
  14. #define FRAMEWID 3 /* default width for boxes and ellipses */
  15. #define FRAMEHT 2 /* default height and line length */
  16. #define TICKLEN 0.1
  17. #define MAXNUM 200
  18. #define XFLAG 01
  19. #define YFLAG 02
  20. #define INTICK 01
  21. #define OUTICK 02
  22. #define BOT 01
  23. #define TOP 02
  24. #define RIGHT 04
  25. #define LEFT 010
  26. #define RJUST 01
  27. #define LJUST 02
  28. #define ABOVE 04
  29. #define BELOW 010
  30. typedef struct infile {
  31. FILE *fin;
  32. char *fname;
  33. int lineno;
  34. } Infile;
  35. typedef struct { /* input source */
  36. int type; /* Macro, String, File */
  37. char *sp; /* if String or Macro */
  38. } Src;
  39. extern Src src[], *srcp; /* input source stack */
  40. #define MAXARGS 100
  41. typedef struct { /* argument stack */
  42. char *argstk[MAXARGS]; /* pointers to args */
  43. char *argval; /* points to space containing args */
  44. } Arg;
  45. extern Infile infile[10];
  46. extern Infile *curfile;
  47. typedef struct {
  48. struct obj *obj;
  49. double x, y;
  50. } Point;
  51. typedef struct attr { /* e.g., DASH 1.1 or "..." rjust size *.5 */
  52. int type;
  53. double fval;
  54. char *sval;
  55. int just; /* justification, for STRING type */
  56. int op; /* optional operator, ditto */
  57. struct attr *next;
  58. } Attr;
  59. typedef struct obj { /* a name and its properties */
  60. char *name;
  61. char *val; /* body of define, etc. */
  62. double fval; /* if a numeric variable */
  63. Point pt; /* usually for max and min */
  64. Point pt1;
  65. int type; /* NAME, DEFNAME, ... */
  66. int first; /* 1 after 1st item seen */
  67. int coord; /* 1 if coord system specified for this name */
  68. int log; /* x, y, or z (= x+y) */
  69. Attr *attr; /* DASH, etc., for now */
  70. struct obj *next;
  71. } Obj;
  72. typedef union { /* the yacc stack type */
  73. int i;
  74. char *p;
  75. double f;
  76. Point pt;
  77. Obj *op;
  78. Attr *ap;
  79. } YYSTYPE;
  80. extern YYSTYPE yylval, yyval;
  81. extern int dbg;
  82. extern int ntext;
  83. extern double num[MAXNUM];
  84. extern int nnum;
  85. extern int ntick, tside;
  86. extern char *tostring(char *);
  87. extern char *grow(char *, char *, int, int);
  88. extern int lineno;
  89. extern int synerr;
  90. extern int codegen;
  91. extern char tempfile[];
  92. extern FILE *tfd;
  93. extern Point ptmin, ptmax;
  94. extern char *dflt_coord;
  95. extern char *curr_coord;
  96. extern int ncoord;
  97. extern int auto_x;
  98. extern double margin;
  99. extern int autoticks;
  100. extern int pointsize, ps_set;
  101. #define logit(x) (x) = log10(x)
  102. #define Log10(x) errcheck(log10(x), "log")
  103. #define Exp(x) errcheck(exp(x), "exp")
  104. #define Sqrt(x) errcheck(sqrt(x), "sqrt")
  105. #define min(x,y) (((x) <= (y)) ? (x) : (y))
  106. #define max(x,y) (((x) >= (y)) ? (x) : (y))
  107. extern void yyerror(char *);
  108. extern void coord_x(Point);
  109. extern void coord_y(Point);
  110. extern void coordlog(int);
  111. extern void coord(Obj *);
  112. extern void resetcoord(Obj *);
  113. extern void savenum(int, double);
  114. extern void setjust(int);
  115. extern void setsize(int, double);
  116. extern void range(Point);
  117. extern void halfrange(Obj *, int, double);
  118. extern Obj *lookup(char *, int);
  119. extern double getvar(Obj *);
  120. extern double setvar(Obj *, double);
  121. extern Point makepoint(Obj *, double, double);
  122. extern Attr *makefattr(int, double);
  123. extern Attr *makesattr(char *);
  124. extern Attr *makeattr(int, double, char *, int, int);
  125. extern Attr *addattr(Attr *, Attr *);
  126. extern void freeattr(Attr *);
  127. extern char *slprint(Attr *);
  128. extern char *juststr(int);
  129. extern char *sprntf(char *, Attr *);
  130. extern void forloop(Obj *, double, double, int, double, char *);
  131. extern void nextfor(void);
  132. extern void endfor(void);
  133. extern char *ifstat(double, char *, char *);
  134. extern void frame(void);
  135. extern void frameht(double);
  136. extern void framewid(double);
  137. extern void frameside(int, Attr *);
  138. extern void pushsrc(int, char *);
  139. extern void popsrc(void);
  140. extern void definition(char *);
  141. extern char *delimstr(char *);
  142. extern int baldelim(int, char *);
  143. extern void dodef(Obj *);
  144. extern int getarg(char *);
  145. extern int input(void);
  146. extern int nextchar(void);
  147. extern void do_thru(void);
  148. extern int unput(int);
  149. extern void pbstr(char *);
  150. extern double errcheck(double, char *);
  151. extern void yyerror(char *);
  152. extern void eprint(void);
  153. extern int yywrap(void);
  154. extern void copyfile(char *);
  155. extern void copydef(Obj *);
  156. extern Obj *copythru(char *);
  157. extern char *addnewline(char *);
  158. extern void copyuntil(char *);
  159. extern void copy(void);
  160. extern void shell_init(void);
  161. extern void shell_text(char *);
  162. extern void shell_exec(void);
  163. extern void labelwid(double);
  164. extern void labelmove(int, double);
  165. extern void label(int, Attr *);
  166. extern void lab_adjust(void);
  167. extern char *sizeit(Attr *);
  168. extern void line(int, Point, Point, Attr *);
  169. extern void circle(double, Point);
  170. extern char *xyname(Point);
  171. extern void pic(char *);
  172. extern void numlist(void);
  173. extern void plot(Attr *, Point);
  174. extern void plotnum(double, char *, Point);
  175. extern void drawdesc(int, Obj *, Attr *, char *);
  176. extern void next(Obj *, Point, Attr *);
  177. extern void print(void);
  178. extern void endstat(void);
  179. extern void graph(char *);
  180. extern void setup(void);
  181. extern void do_first(void);
  182. extern void reset(void);
  183. extern void opentemp(void);
  184. extern void savetick(double, char *);
  185. extern void dflt_tick(double);
  186. extern void tickside(int);
  187. extern void tickoff(int);
  188. extern void gridtickoff(void);
  189. extern void setlist(void);
  190. extern void tickdir(int, double, int);
  191. extern void ticks(void);
  192. extern double modfloor(double, double);
  193. extern double modceil(double, double);
  194. extern void do_autoticks(Obj *);
  195. extern void logtick(double, double, double);
  196. extern Obj *setauto(void);
  197. extern void autoside(Obj *, int);
  198. extern void autolog(Obj *, int);
  199. extern void iterator(double, double, int, double, char *);
  200. extern void ticklist(Obj *, int);
  201. extern void print_ticks(int, int, Obj *, char *, char *);
  202. extern void maketick(int, char *, int, int, double, char *, char *, char *);
  203. extern void griddesc(Attr *);
  204. extern void gridlist(Obj *);
  205. extern char *desc_str(Attr *);
  206. extern int sidelog(int, int);
  207. extern Obj *objlist;