|
|
researchv10 Norman
/* Copyright (c) 1984 AT&T */
/* All Rights Reserved */
/* THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF AT&T */
/* The copyright notice above does not evidence any */
/* actual or intended publication of such source code. */
/* @(#)picasso:picasso.h 1.0 */
#include <stdio.h>
#include <math.h>
/* Research hack */
#define M_PI PI
#define M_PI_2 PI/2.0
#define M_1_PI 1.0/PI
#define M_SQRT2 1.41421
#define M_SQRT1_2 .7071085
/* End of Research hack */
#define DEFAULT 0
#define MINRAD 3/pgscale /* slop for box corners, ellipse major/minor */
/* (should probably be a predefined variable)*/
#define HEAD1 1
#define HEAD2 2
#define HEAD12 (HEAD1+HEAD2)
#define HEADFILL 4
#define CW_ARC 8 /* clockwise arc */
#define DOTBIT 16
#define DASHBIT 32
#define DOTDASH (DOTBIT+DASHBIT) /* i.e., PostScript dash pattern */
/* (implementation not yet done) */
#define EDGED 64
#define FILLED 128
#define LINECAP 256
#define JOIN 1024
#define MITER 4096
#define CENTER 1 /* text types */
#define LJUST 2
#define RJUST 4
#define ABOVE 8
#define BELOW 16
#define EQNTXT 32
#define GSCALE 1.0 /* default global 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 0.25 /* because no floating init exprs! */
#define HT5 0.1
#define HT10 0.05
/* 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 union {
long i;
float f;
float *a; /* array of values; dimension kept in symtab */
char *p;
struct obj *o;
struct symtab *s;
} valtype;
typedef struct obj { /* stores various things in variable length */
struct obj *o_next; /* forward link in object list */
struct obj *o_prev; /* back link */
struct obj *o_parent; /* parent block or place reference */
short o_layer; /* "draft" layers are < 0 */
unsigned short o_size;
unsigned short o_type;
unsigned short o_nt1; /* 1st index in text[] for object */
unsigned short o_nt2; /* 2nd; difference is #text strings */
float o_x; /* coordinates of object's "center" */
float o_y;
float o_text; /* color attribute for any labels */
valtype o_val[1]; /* actually, > 1 in general */
} obj;
#define N_VAL 14 /* base o_val size [xform, attrs] */
#define o_xform o_val
#define o_mxx o_val[ 0].f
#define o_myx o_val[ 1].f
#define o_mxy o_val[ 2].f
#define o_myy o_val[ 3].f
#define o_mxt o_val[ 4].f
#define o_myt o_val[ 5].f
#define o_wid o_val[ 7].f
#define o_ht o_val[ 8].f
#define o_attr o_val[ 9].i /* attribute flags and counts here. */
#define o_ddpat o_val[10]
#define o_weight o_val[11].f
#define o_color o_val[12].f
#define o_fill o_val[13].f
struct objattr { /* common attributes of objects */
short a_flags;
short a_layer;
float a_ht;
double a_wid;
double a_rad;
double a_weight;
double a_lcolor;
double a_pcolor;
double a_tcolor;
valtype a_dashpat;
};
typedef valtype YYSTYPE; /* the yacc stack type */
extern YYSTYPE yylval, yyval;
struct symtab {
char *s_name;
unsigned short s_type;
unsigned short s_dim; /* actually, dim-1; i.e. max index */
valtype s_val;
struct symtab *s_next;
};
typedef struct { /* attribute of an object */
int a_type;
int a_sub;
valtype a_val;
} Attr;
typedef struct {
short t_type; /* CENTER, LJUST, etc. */
short t_font;
short t_size;
short t_space;
short t_line;
float t_width;
char *t_val;
} Text;
typedef struct {
float r;
float g;
float b;
} rgb;
#define pString 01
#define Macro 02
#define File 04
#define Char 010
#define Thru 020
#define Free 040
typedef struct { /* input source */
int type; /* Macro, pString, File */
char *sp; /* if pString 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 20
typedef struct { /* argument stack */
char *argstk[MAXARGS]; /* pointers to args */
char *argval; /* points to space containing args */
} pArg;
extern obj *objhead, *objtail, *cur_block;;
extern Attr *attr;
extern int nattr, nattrlist;
extern Text *text;
extern int ntextlist;
extern int ntext, ntext1, ntextlines;
extern float *exprlist;
extern int nexpr;
extern int nexprlist;
extern rgb *rgbtable;
extern int nrgbtable;
extern int nrgb;
extern float curx, cury;
extern valtype cur_xform[6];
extern int xdelta[8], ydelta[8];
extern int hvmode;
extern int codegen;
extern int PEseen;
extern int pass_thru;
extern int verbose;
extern int batch;
extern char *cmdname;
extern char *troffname[];
extern float Gbox[4];
extern double pgscale;
extern char *malloc(), *calloc(), *realloc(), *tostring(), *grow();
extern double getsub(), getfval(), getcomp(), getblkvar();
extern struct symtab *lookup(), *findvar(), *makevar(), *newvar();
extern char *ifstat(), *delimstr(), *sprintgen();
extern YYSTYPE getvar();
extern double Xformx(), Xformy();
extern double Linx(), Liny();
extern int nosqueeze;
extern int objbuf, objcount;
extern int lineno;
extern int synerr;
extern int redo_gbox;
extern obj *leftthing(), *boxgen(), *circgen(), *arcgen();
extern obj *linegen(), *splinegen(), *movegen(), *textgen(), *plotgen(), *picgen();
extern obj *troffgen(), *rightthing(), *blockgen();
extern obj *makenode(), *makepos(), *fixpos(), *addpos(), *subpos();
extern obj *makebetween();
extern obj *getpos(), *gethere(), *getnth();
extern obj *getfirst(), *getlast(), *getblock();
extern obj *copypos(), *copyobj();
struct pushstack {
float p_x;
float p_y;
int p_hvmode;
float p_xmin;
float p_ymin;
float p_xmax;
float p_ymax;
struct symtab *p_symtab;
};
extern struct pushstack stack[];
extern int nstack;
extern int cw;
extern int draftlayer;
extern int top_layer;
extern double errcheck();
extern double Log();
extern double Log10();
extern double Exp();
extern double Pow();
extern double Sqrt();
extern double Cos();
extern double Sin();
extern double Atan2();
extern double Maxvar ();
extern double Maxlist();
extern double Minvar ();
extern double Minlist();
extern double setvar();
extern double setsize();
extern double setattr();
extern double setfont();
extern double setarray();
extern double setrgbindex();
extern double checkcolor();
extern double checkfont();
extern double getstringwidth();
extern double find_axes();
extern double *text_bounds();
extern char *parse_text();
extern obj *print_obj();
extern obj *print_xform();
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.