|
|
1.1 ! root 1: /* Copyright (c) 1984 AT&T */ ! 2: /* All Rights Reserved */ ! 3: ! 4: /* THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF AT&T */ ! 5: /* The copyright notice above does not evidence any */ ! 6: /* actual or intended publication of such source code. */ ! 7: ! 8: /* @(#)picasso:picasso.h 1.0 */ ! 9: ! 10: #include <stdio.h> ! 11: #include <math.h> ! 12: /* Research hack */ ! 13: #define M_PI PI ! 14: #define M_PI_2 PI/2.0 ! 15: #define M_1_PI 1.0/PI ! 16: #define M_SQRT2 1.41421 ! 17: #define M_SQRT1_2 .7071085 ! 18: /* End of Research hack */ ! 19: ! 20: #define DEFAULT 0 ! 21: #define MINRAD 3/pgscale /* slop for box corners, ellipse major/minor */ ! 22: /* (should probably be a predefined variable)*/ ! 23: #define HEAD1 1 ! 24: #define HEAD2 2 ! 25: #define HEAD12 (HEAD1+HEAD2) ! 26: #define HEADFILL 4 ! 27: #define CW_ARC 8 /* clockwise arc */ ! 28: #define DOTBIT 16 ! 29: #define DASHBIT 32 ! 30: #define DOTDASH (DOTBIT+DASHBIT) /* i.e., PostScript dash pattern */ ! 31: /* (implementation not yet done) */ ! 32: #define EDGED 64 ! 33: #define FILLED 128 ! 34: #define LINECAP 256 ! 35: #define JOIN 1024 ! 36: #define MITER 4096 ! 37: ! 38: #define CENTER 1 /* text types */ ! 39: #define LJUST 2 ! 40: #define RJUST 4 ! 41: #define ABOVE 8 ! 42: #define BELOW 16 ! 43: #define EQNTXT 32 ! 44: ! 45: #define GSCALE 1.0 /* default global scale: units/inch */ ! 46: #define WID 0.75 /* default width for boxes and ellipses */ ! 47: #define WID2 0.375 ! 48: #define HT 0.5 /* default height and line length */ ! 49: #define HT2 0.25 /* because no floating init exprs! */ ! 50: #define HT5 0.1 ! 51: #define HT10 0.05 ! 52: ! 53: /* these have to be like so, so that we can write */ ! 54: /* things like R & V, etc. */ ! 55: #define H 0 ! 56: #define V 1 ! 57: #define R_DIR 0 ! 58: #define U_DIR 1 ! 59: #define L_DIR 2 ! 60: #define D_DIR 3 ! 61: #define ishor(n) (((n) & V) == 0) ! 62: #define isvert(n) (((n) & V) != 0) ! 63: #define isright(n) ((n) == R_DIR) ! 64: #define isleft(n) ((n) == L_DIR) ! 65: #define isdown(n) ((n) == D_DIR) ! 66: #define isup(n) ((n) == U_DIR) ! 67: ! 68: typedef union { ! 69: long i; ! 70: float f; ! 71: float *a; /* array of values; dimension kept in symtab */ ! 72: char *p; ! 73: struct obj *o; ! 74: struct symtab *s; ! 75: } valtype; ! 76: ! 77: typedef struct obj { /* stores various things in variable length */ ! 78: struct obj *o_next; /* forward link in object list */ ! 79: struct obj *o_prev; /* back link */ ! 80: struct obj *o_parent; /* parent block or place reference */ ! 81: short o_layer; /* "draft" layers are < 0 */ ! 82: unsigned short o_size; ! 83: unsigned short o_type; ! 84: unsigned short o_nt1; /* 1st index in text[] for object */ ! 85: unsigned short o_nt2; /* 2nd; difference is #text strings */ ! 86: float o_x; /* coordinates of object's "center" */ ! 87: float o_y; ! 88: float o_text; /* color attribute for any labels */ ! 89: valtype o_val[1]; /* actually, > 1 in general */ ! 90: } obj; ! 91: ! 92: #define N_VAL 14 /* base o_val size [xform, attrs] */ ! 93: #define o_xform o_val ! 94: #define o_mxx o_val[ 0].f ! 95: #define o_myx o_val[ 1].f ! 96: #define o_mxy o_val[ 2].f ! 97: #define o_myy o_val[ 3].f ! 98: #define o_mxt o_val[ 4].f ! 99: #define o_myt o_val[ 5].f ! 100: #define o_wid o_val[ 7].f ! 101: #define o_ht o_val[ 8].f ! 102: #define o_attr o_val[ 9].i /* attribute flags and counts here. */ ! 103: #define o_ddpat o_val[10] ! 104: #define o_weight o_val[11].f ! 105: #define o_color o_val[12].f ! 106: #define o_fill o_val[13].f ! 107: ! 108: struct objattr { /* common attributes of objects */ ! 109: short a_flags; ! 110: short a_layer; ! 111: float a_ht; ! 112: double a_wid; ! 113: double a_rad; ! 114: double a_weight; ! 115: double a_lcolor; ! 116: double a_pcolor; ! 117: double a_tcolor; ! 118: valtype a_dashpat; ! 119: }; ! 120: ! 121: typedef valtype YYSTYPE; /* the yacc stack type */ ! 122: ! 123: extern YYSTYPE yylval, yyval; ! 124: ! 125: struct symtab { ! 126: char *s_name; ! 127: unsigned short s_type; ! 128: unsigned short s_dim; /* actually, dim-1; i.e. max index */ ! 129: valtype s_val; ! 130: struct symtab *s_next; ! 131: }; ! 132: ! 133: typedef struct { /* attribute of an object */ ! 134: int a_type; ! 135: int a_sub; ! 136: valtype a_val; ! 137: } Attr; ! 138: ! 139: typedef struct { ! 140: short t_type; /* CENTER, LJUST, etc. */ ! 141: short t_font; ! 142: short t_size; ! 143: short t_space; ! 144: short t_line; ! 145: float t_width; ! 146: char *t_val; ! 147: } Text; ! 148: ! 149: typedef struct { ! 150: float r; ! 151: float g; ! 152: float b; ! 153: } rgb; ! 154: ! 155: #define pString 01 ! 156: #define Macro 02 ! 157: #define File 04 ! 158: #define Char 010 ! 159: #define Thru 020 ! 160: #define Free 040 ! 161: ! 162: typedef struct { /* input source */ ! 163: int type; /* Macro, pString, File */ ! 164: char *sp; /* if pString or Macro */ ! 165: } Src; ! 166: ! 167: extern Src src[], *srcp; /* input source stack */ ! 168: ! 169: typedef struct { ! 170: FILE *fin; ! 171: char *fname; ! 172: int lineno; ! 173: } Infile; ! 174: ! 175: extern Infile infile[], *curfile; ! 176: ! 177: #define MAXARGS 20 ! 178: typedef struct { /* argument stack */ ! 179: char *argstk[MAXARGS]; /* pointers to args */ ! 180: char *argval; /* points to space containing args */ ! 181: } pArg; ! 182: ! 183: extern obj *objhead, *objtail, *cur_block;; ! 184: extern Attr *attr; ! 185: extern int nattr, nattrlist; ! 186: extern Text *text; ! 187: extern int ntextlist; ! 188: extern int ntext, ntext1, ntextlines; ! 189: extern float *exprlist; ! 190: extern int nexpr; ! 191: extern int nexprlist; ! 192: extern rgb *rgbtable; ! 193: extern int nrgbtable; ! 194: extern int nrgb; ! 195: extern float curx, cury; ! 196: extern valtype cur_xform[6]; ! 197: extern int xdelta[8], ydelta[8]; ! 198: extern int hvmode; ! 199: extern int codegen; ! 200: extern int PEseen; ! 201: extern int pass_thru; ! 202: extern int verbose; ! 203: extern int batch; ! 204: extern char *cmdname; ! 205: extern char *troffname[]; ! 206: extern float Gbox[4]; ! 207: extern double pgscale; ! 208: ! 209: extern char *malloc(), *calloc(), *realloc(), *tostring(), *grow(); ! 210: extern double getsub(), getfval(), getcomp(), getblkvar(); ! 211: extern struct symtab *lookup(), *findvar(), *makevar(), *newvar(); ! 212: extern char *ifstat(), *delimstr(), *sprintgen(); ! 213: extern YYSTYPE getvar(); ! 214: ! 215: extern double Xformx(), Xformy(); ! 216: extern double Linx(), Liny(); ! 217: ! 218: extern int nosqueeze; ! 219: extern int objbuf, objcount; ! 220: extern int lineno; ! 221: extern int synerr; ! 222: extern int redo_gbox; ! 223: ! 224: extern obj *leftthing(), *boxgen(), *circgen(), *arcgen(); ! 225: extern obj *linegen(), *splinegen(), *movegen(), *textgen(), *plotgen(), *picgen(); ! 226: extern obj *troffgen(), *rightthing(), *blockgen(); ! 227: extern obj *makenode(), *makepos(), *fixpos(), *addpos(), *subpos(); ! 228: extern obj *makebetween(); ! 229: extern obj *getpos(), *gethere(), *getnth(); ! 230: extern obj *getfirst(), *getlast(), *getblock(); ! 231: extern obj *copypos(), *copyobj(); ! 232: ! 233: struct pushstack { ! 234: float p_x; ! 235: float p_y; ! 236: int p_hvmode; ! 237: float p_xmin; ! 238: float p_ymin; ! 239: float p_xmax; ! 240: float p_ymax; ! 241: struct symtab *p_symtab; ! 242: }; ! 243: extern struct pushstack stack[]; ! 244: extern int nstack; ! 245: extern int cw; ! 246: extern int draftlayer; ! 247: extern int top_layer; ! 248: ! 249: extern double errcheck(); ! 250: ! 251: extern double Log(); ! 252: extern double Log10(); ! 253: extern double Exp(); ! 254: extern double Pow(); ! 255: extern double Sqrt(); ! 256: extern double Cos(); ! 257: extern double Sin(); ! 258: extern double Atan2(); ! 259: extern double Maxvar (); ! 260: extern double Maxlist(); ! 261: extern double Minvar (); ! 262: extern double Minlist(); ! 263: ! 264: extern double setvar(); ! 265: extern double setsize(); ! 266: extern double setattr(); ! 267: extern double setfont(); ! 268: extern double setarray(); ! 269: extern double setrgbindex(); ! 270: extern double checkcolor(); ! 271: extern double checkfont(); ! 272: extern double getstringwidth(); ! 273: extern double find_axes(); ! 274: extern double *text_bounds(); ! 275: extern char *parse_text(); ! 276: extern obj *print_obj(); ! 277: extern obj *print_xform();
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.