home *** CD-ROM | disk | FTP | other *** search
- /*
- * FIG : Facility for Interactive Generation of figures
- *
- * (c) copy right 1985 by Supoj Sutanthavibul (supoj@sally.utexas.edu)
- * January 1985.
- * 1st revision : Aug 1985.
- * 2nd revision : Feb 1988.
- *
- * %W% %G%
- */
- #define DEFAULT -1
-
- typedef struct f_pattern {
- int w, h;
- int *p;
- }
- F_pattern;
-
- typedef struct f_pen {
- int x, y;
- int *p;
- }
- F_pen;
-
- typedef struct f_point {
- int x, y;
- struct f_point *next;
- }
- F_point;
-
- typedef struct f_pos {
- int x, y;
- }
- F_pos;
-
- typedef struct f_arrow {
- int type;
- int style;
- float thickness;
- float wid;
- float ht;
- }
- F_arrow;
-
- typedef struct f_ellipse {
- int type;
- #define T_ELLIPSE_BY_RAD 1
- #define T_ELLIPSE_BY_DIA 2
- #define T_CIRCLE_BY_RAD 3
- #define T_CIRCLE_BY_DIA 4
- int style;
- int thickness;
- int color;
- #define BLACK 0
- int depth;
- int direction;
- float style_val;
- float angle;
- struct f_pen *pen;
- struct f_pattern *area_fill;
- #define UNFILLED (F_pattern *)0
- #define BLACK_FILL (F_pattern *)1
- #define DARK_GRAY_FILL (F_pattern *)2
- #define MED_GRAY_FILL (F_pattern *)3
- #define LIGHT_GRAY_FILL (F_pattern *)4
- #define WHITE_FILL (F_pattern *)4
- struct f_pos center;
- struct f_pos radiuses;
- struct f_pos start;
- struct f_pos end;
- struct f_ellipse *next;
- }
- F_ellipse;
-
- typedef struct f_arc {
- int type;
- #define T_3_POINTS_ARC 1
- int style;
- int thickness;
- int color;
- int depth;
- struct f_pen *pen;
- struct f_pattern *area_fill;
- float style_val;
- int direction;
- struct f_arrow *for_arrow;
- struct f_arrow *back_arrow;
- struct {float x, y;} center;
- struct f_pos point[3];
- struct f_arc *next;
- }
- F_arc;
-
- typedef struct f_line {
- int type;
- #define T_POLYLINE 1
- #define T_BOX 2
- #define T_POLYGON 3
- int style;
- int thickness;
- int color;
- int depth;
- float style_val;
- struct f_pen *pen;
- struct f_pattern *area_fill;
- struct f_arrow *for_arrow;
- struct f_arrow *back_arrow;
- struct f_point *points;
- struct f_line *next;
- }
- F_line;
-
- typedef struct f_text {
- int type;
- #define T_LEFT_JUSTIFIED 0
- #define T_CENTER_JUSTIFIED 1
- #define T_RIGHT_JUSTIFIED 2
- int font;
- #define DEFAULT_FONT 0
- #define ROMAN_FONT 1
- #define BOLD_FONT 2
- #define ITALIC_FONT 3
- #define MODERN_FONT 4
- #define TYPEWRITER_FONT 5
- int size; /* point size */
- int color;
- int depth;
- float angle; /* in radian */
- int style;
- #define PLAIN 1
- #define ITALIC 2
- #define BOLD 4
- #define OUTLINE 8
- #define SHADOW 16
- int height; /* pixels */
- int length; /* pixels */
- int base_x;
- int base_y;
- struct f_pen *pen;
- char *cstring;
- struct f_text *next;
- }
- F_text;
-
- typedef struct f_control {
- float lx, ly, rx, ry;
- struct f_control *next;
- }
- F_control;
-
- #define int_spline(s) (s->type & 0x2)
- #define normal_spline(s) (!(s->type & 0x2))
- #define closed_spline(s) (s->type & 0x1)
- #define open_spline(s) (!(s->type & 0x1))
-
- typedef struct f_spline {
- int type;
- #define T_OPEN_NORMAL 0
- #define T_CLOSED_NORMAL 1
- #define T_OPEN_INTERPOLATED 2
- #define T_CLOSED_INTERPOLATED 3
- int style;
- int thickness;
- int color;
- int depth;
- float style_val;
- struct f_pen *pen;
- struct f_pattern *area_fill;
- struct f_arrow *for_arrow;
- struct f_arrow *back_arrow;
- /*
- For T_OPEN_NORMAL and T_CLOSED_NORMAL points
- are control points while they are knots for
- T_OPEN_INTERPOLATED and T_CLOSED_INTERPOLTED
- whose control points are stored in controls.
- */
- struct f_point *points;
- struct f_control *controls;
- struct f_spline *next;
- }
- F_spline;
-
- typedef struct f_compound {
- struct f_pos nwcorner;
- struct f_pos secorner;
- struct f_line *lines;
- struct f_ellipse *ellipses;
- struct f_spline *splines;
- struct f_text *texts;
- struct f_arc *arcs;
- struct f_compound *compounds;
- struct f_compound *next;
- }
- F_compound;
-
- #define ARROW_SIZE sizeof(struct f_arrow)
- #define POINT_SIZE sizeof(struct f_point)
- #define CONTROL_SIZE sizeof(struct f_control)
- #define ELLOBJ_SIZE sizeof(struct f_ellipse)
- #define ARCOBJ_SIZE sizeof(struct f_arc)
- #define LINOBJ_SIZE sizeof(struct f_line)
- #define TEXOBJ_SIZE sizeof(struct f_text)
- #define SPLOBJ_SIZE sizeof(struct f_spline)
- #define COMOBJ_SIZE sizeof(struct f_compound)
-
- /********************** object codes **********************/
-
- #define O_ELLIPSE 1
- #define O_POLYLINE 2
- #define O_SPLINE 3
- #define O_TEXT 4
- #define O_ARC 5
- #define O_COMPOUND 6
- #define O_END_COMPOUND -O_COMPOUND
- #define O_ALL_OBJECT 99
-
- /************ object styles (except for f_text) ************/
-
- #define SOLID_LINE 0
- #define DASH_LINE 1
- #define DOTTED_LINE 2
-
- #define CLOSED_PATH 0
- #define OPEN_PATH 1