📄 pic.h
字号:
#ifndef PI#define PI 3.1415926535897932384626433832795028841971693993751#endif#define MAXWID 8.5 /* default limits max picture to 8.5 x 11; */#define MAXHT 11 /* change to taste without peril */#define dprintf if(dbg)printfextern void yyerror(char *);extern char errbuf[200];#define ERROR sprintf(errbuf,#define FATAL ), yyerror(errbuf), exit(1)#define WARNING ), yyerror(errbuf)#define DEFAULT 0#define HEAD1 1#define HEAD2 2#define HEAD12 (HEAD1+HEAD2)#define INVIS 4#define CW_ARC 8 /* clockwise arc */#define DOTBIT 16 /* line styles */#define DASHBIT 32#define FILLBIT 64 /* gray-fill on boxes, etc. */#define NOEDGEBIT 128 /* no edge on filled object */#define CENTER 01 /* text attributes */#define LJUST 02#define RJUST 04#define ABOVE 010#define BELOW 020#define SPREAD 040#define SCALE 1.0 /* default scale: units/inch */#define WID 0.75 /* default width for boxes and ellipses */#define WID2 0.375#define HT 0.5 /* default height and line length */#define HT2 (HT/2)#define HT5 (HT/5)#define HT10 (HT/10)/* these have to be like so, so that we can write *//* things like R & V, etc. */#define H 0#define V 1#define R_DIR 0#define U_DIR 1#define L_DIR 2#define D_DIR 3#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 float ofloat; /* for o_val[] in obj; could be double */typedef struct obj { /* stores various things in variable length */ int o_type; int o_count; /* number of things */ int o_nobj; /* index in objlist */ int o_mode; /* hor or vert */ float o_x; /* coord of "center" */ float o_y; int o_nt1; /* 1st index in text[] for this object */ int o_nt2; /* 2nd; difference is #text strings */ int o_attr; /* HEAD, CW, INVIS, etc., 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_fillval; /* gray scale value */ ofloat o_val[1]; /* actually this will be > 1 in general */ /* type is not always FLOAT!!!! */} obj;typedef union { /* the yacc stack type */ int i; char *p; obj *o; double f; struct symtab *st;} YYSTYPE;extern YYSTYPE yylval, yyval;struct symtab { char *s_name; int s_type; YYSTYPE s_val; struct symtab *s_next;};typedef struct { /* attribute of an object */ int a_type; int a_sub; YYSTYPE a_val;} Attr;typedef struct { int t_type; /* CENTER, LJUST, etc. */ char t_op; /* optional sign for size changes */ char t_size; /* size, abs or rel */ char *t_val;} Text;#define String 01#define Macro 02#define File 04#define Char 010#define Thru 020#define Free 040typedef struct { /* input source */ int type; /* Macro, String, File */ char *sp; /* if String or Macro */} Src;extern Src src[], *srcp; /* input source stack */typedef struct { FILE *fin; char *fname; int lineno;} Infile;extern Infile infile[], *curfile;#define MAXARGS 20typedef struct { /* argument stack */ char *argstk[MAXARGS]; /* pointers to args */ char *argval; /* points to space containing args */} Arg;extern int dbg;extern obj **objlist;extern int nobj, nobjlist;extern Attr *attr;extern int nattr, nattrlist;extern Text *text;extern int ntextlist;extern int ntext;extern int ntext1;extern double curx, cury;extern int hvmode;extern int codegen;extern char *PEstring;char *tostring(char *);char *grow(char *, char *, int, int);double getfval(char *), getcomp(obj *, int), getblkvar(obj *, char *);YYSTYPE getvar(char *);struct symtab *lookup(char *), *makevar(char *, int, YYSTYPE);char *ifstat(double, char *, char *), *delimstr(char *), *sprintgen(char *);void forloop(char *var, double from, double to, int op, double by, char *_str);int setdir(int), curdir(void);void resetvar(void);void checkscale(char *);void pushsrc(int, char *);void copy(void);void copyuntil(char *);void copyfile(char *);void copydef(struct symtab *);void definition(char *);struct symtab *copythru(char *);int input(void);int unput(int);void extreme(double, double);extern double deltx, delty;extern int lineno;extern int synerr;extern double xmin, ymin, xmax, ymax;obj *leftthing(int), *boxgen(void), *circgen(int), *arcgen(int);obj *linegen(int), *splinegen(void), *movegen(void);obj *textgen(void), *plotgen(void);obj *troffgen(char *), *rightthing(obj *, int), *blockgen(obj *, obj *);obj *makenode(int, int), *makepos(double, double);obj *fixpos(obj *, double, double);obj *addpos(obj *, obj *), *subpos(obj *, obj *);obj *makebetween(double, obj *, obj *);obj *getpos(obj *, int), *gethere(void), *getfirst(int, int);obj *getlast(int, int), *getblock(obj *, char *);void savetext(int, char *);void makeiattr(int, int);void makevattr(char *);void makefattr(int type, int sub, double f);void maketattr(int, char *);void makeoattr(int, obj *);void makeattr(int type, int sub, YYSTYPE val);void printexpr(double);void printpos(obj *);void exprsave(double);void addtattr(int);void printlf(int, char *);struct pushstack { double p_x; double p_y; int p_hvmode; double p_xmin; double p_ymin; double p_xmax; double p_ymax; struct symtab *p_symtab;};extern struct pushstack stack[];extern int nstack;extern int cw;extern double errcheck(double, char *);#define Log10(x) errcheck(log10(x), "log")#define Exp(x) errcheck(exp(x), "exp")#define Sqrt(x) errcheck(sqrt(x), "sqrt")
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -