Initial release of Maemo 5 port of gnuplot
[gnuplot] / term / object.h
diff --git a/term/object.h b/term/object.h
new file mode 100644 (file)
index 0000000..922f118
--- /dev/null
@@ -0,0 +1,419 @@
+/*
+ * FIG : Facility for Interactive Generation of figures
+ * Copyright (c) 1985 by Supoj Sutanthavibul
+ * Parts Copyright (c) 1994 by Brian V. Smith
+ * Parts Copyright (c) 1991 by Paul King
+ *
+ * The X Consortium, and any party obtaining a copy of these files from
+ * the X Consortium, directly or indirectly, is granted, free of charge, a
+ * full and unrestricted irrevocable, world-wide, paid up, royalty-free,
+ * nonexclusive right and license to deal in this software and
+ * documentation files (the "Software"), including without limitation the
+ * rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons who receive
+ * copies from any such party to do so, with the only requirement being
+ * that this copyright notice remain intact.  This license includes without
+ * limitation a license to do the foregoing actions under any patents of
+ * the party supplying this software to the X Consortium.
+ */
+
+/* This file has been modified for use with Gnuplot 3.6 by
+ * Ian MacPhedran.
+ */
+
+/* DEFAULT is used for many things - font, color etc */
+
+#define                DEFAULT               (-1)
+#define                SOLID_LINE              0
+#define                DASH_LINE               1
+#define                DOTTED_LINE             2
+#define                RUBBER_LINE             3
+#define                PANEL_LINE              4
+
+#define                Color                   int
+
+#define                BLACK                   0
+#define                BLUE                    1
+#define                GREEN                   2
+#define                CYAN                    3
+#define                RED                     4
+#define                MAGENTA                 5
+#define                YELLOW                  6
+#define                WHITE                   7
+
+/** VERY IMPORTANT:  The f_line, f_spline and f_arc objects all must have the
+               components up to and including the arrows in the same order.
+               This is for the get/put_generic_arrows() in e_edit.c.
+**/
+
+typedef struct f_point {
+    int                    x, y;
+}
+               F_point;
+
+typedef struct f_pos {
+    int                    x, y;
+}
+               F_pos;
+
+#define DEF_ARROW_WID (4 * ZOOM_FACTOR)
+#define DEF_ARROW_HT (8 * ZOOM_FACTOR)
+
+typedef struct f_arrow {
+    int                    type;
+    int                    style;
+    float          thickness;
+    float          wid;
+    float          ht;
+}
+               F_arrow;
+
+typedef struct f_ellipse {
+    int                    tagged;
+    int                    distrib;
+    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;
+    Color          pen_color;
+    Color          fill_color;
+    int                    fill_style;
+    int                    depth;
+    float          style_val;
+    int                    pen_style;
+    float          angle;
+    int                    direction;
+#define                                        UNFILLED        -1
+    struct f_pos    center;
+    struct f_pos    radiuses;
+    struct f_pos    start;
+    struct f_pos    end;
+    struct f_ellipse *next;
+}
+               F_ellipse;
+
+/* SEE NOTE AT TOP BEFORE CHANGING ANYTHING IN THE f_arc STRUCTURE */
+
+typedef struct f_arc {
+    int                    tagged;
+    int                    distrib;
+    int                    type;
+                               /* note: these arc types are the internal values */
+                               /* in the file, they are open=1, wedge=2 */
+#define                                        T_OPEN_ARC              0
+#define                                        T_PIE_WEDGE_ARC         1
+    int                    style;
+    int                    thickness;
+    Color          pen_color;
+    Color          fill_color;
+    int                    fill_style;
+    int                    depth;
+    int                    pen_style;
+    struct f_arrow *for_arrow;
+    struct f_arrow *back_arrow;
+/* THE PRECEDING VARS MUST BE IN THE SAME ORDER IN f_arc, f_line and f_spline */
+    int                    cap_style;
+    float          style_val;
+    int                    direction;
+    struct {
+       float           x, y;
+    }              center;
+    struct f_pos    point[3];
+    struct f_arc   *next;
+}
+               F_arc;
+
+#define                CLOSED_PATH             0
+#define                OPEN_PATH               1
+#define                DEF_BOXRADIUS           7
+#define                DEF_DASHLENGTH          4
+#define                DEF_DOTGAP              3
+
+typedef struct f_pic {
+#ifndef PATH_MAX
+#define PATH_MAX 128
+#endif
+    char           file[PATH_MAX];
+    int                    subtype;
+#define T_PIC_EPS      1
+#define T_PIC_BITMAP   2
+#define T_PIC_PIXMAP   3
+#define T_PIC_GIF      4
+#define FileInvalid    -2
+    int                    flipped;
+    unsigned char   *bitmap;
+    int                    numcols;            /* number of colors in cmap */
+    float          hw_ratio;
+    int                    size_x, size_y;     /* fig units */
+    struct f_pos    bit_size;          /* pixels */
+    Color          color;              /* only used for XBM */
+    int                    pix_rotation, pix_width, pix_height, pix_flipped;
+}
+               F_pic;
+
+extern char    EMPTY_PIC[];
+
+/* SEE NOTE AT TOP BEFORE CHANGING ANYTHING IN THE f_line STRUCTURE */
+
+typedef struct f_line {
+    int                    tagged;
+    int                    distrib;
+    int                    type;
+#define                                        T_POLYLINE      1
+#define                                        T_BOX           2
+#define                                        T_POLYGON       3
+#define                                        T_ARC_BOX       4
+#define                                        T_PIC_BOX       5
+    int                    style;
+    int                    thickness;
+    Color          pen_color;
+    Color          fill_color;
+    int                    fill_style;
+    int                    depth;
+    int                    pen_style;
+    struct f_arrow *for_arrow;
+    struct f_arrow *back_arrow;
+/* THE PRECEDING VARS MUST BE IN THE SAME ORDER IN f_arc, f_line and f_spline */
+    int                    cap_style;          /* line cap style - Butt, Round, Bevel */
+#define                                        CAP_BUTT        0
+#define                                        CAP_ROUND       1
+#define                                        CAP_PROJECT     2
+    struct f_point *points;    /* this must immediately follow cap_style */
+    int                    join_style;         /* join style - Miter, Round, Bevel */
+#define                                        JOIN_MITER      0
+#define                                        JOIN_ROUND      1
+#define                                        JOIN_BEVEL      2
+    float          style_val;
+    int                    radius;             /* corner radius for T_ARC_BOX */
+    struct f_pic   *pic;
+    struct f_line  *next;
+}
+               F_line;
+
+typedef struct f_text {
+    int                    tagged;
+    int                    distrib;
+    int                    type;
+#define                                        T_LEFT_JUSTIFIED        0
+#define                                        T_CENTER_JUSTIFIED      1
+#define                                        T_RIGHT_JUSTIFIED       2
+    int                    font;
+/*    PIX_FONT     fontstruct; */
+    int                    size;       /* point size */
+    Color          color;
+    int                    depth;
+    float          angle;      /* in radians */
+
+    int                    flags;
+#define                                        RIGID_TEXT              1
+#define                                        SPECIAL_TEXT            2
+#define                                        PSFONT_TEXT             4
+#define                                        HIDDEN_TEXT             8
+
+    int                    ascent;     /* Fig units */
+    int                    length;     /* Fig units */
+    int                    descent;    /* from XTextExtents(), not in file */
+    int                    base_x;
+    int                    base_y;
+    int                    pen_style;
+    char          *cstring;
+    struct f_text  *next;
+}
+               F_text;
+
+#define MAXFONT(T) (psfont_text(T) ? NUM_FONTS : NUM_LATEX_FONTS)
+
+#define                rigid_text(t) \
+                       (t->flags == DEFAULT \
+                               || (t->flags & RIGID_TEXT))
+
+#define                special_text(t) \
+                       ((t->flags != DEFAULT \
+                               && (t->flags & SPECIAL_TEXT)))
+
+#define                psfont_text(t) \
+                       (t->flags != DEFAULT \
+                               && (t->flags & PSFONT_TEXT))
+
+#define                hidden_text(t) \
+                       (t->flags != DEFAULT \
+                               && (t->flags & HIDDEN_TEXT))
+
+#define                text_length(t) \
+                       (hidden_text(t) ? hidden_text_length : t->length)
+
+#define                using_ps        (cur_textflags & PSFONT_TEXT)
+
+typedef struct f_control {
+    float          lx, ly, rx, ry;
+    struct f_control *next;
+}
+               F_control;
+
+/* SEE NOTE AT TOP BEFORE CHANGING ANYTHING IN THE f_spline STRUCTURE */
+
+#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                    tagged;
+    int                    distrib;
+    int                    type;
+#define                                        T_OPEN_NORMAL   0
+#define                                        T_CLOSED_NORMAL 1
+#define                                        T_OPEN_INTERP   2
+#define                                        T_CLOSED_INTERP 3
+    int                    style;
+    int                    thickness;
+    Color          pen_color;
+    Color          fill_color;
+    int                    fill_style;
+    int                    depth;
+    int                    pen_style;
+    struct f_arrow *for_arrow;
+    struct f_arrow *back_arrow;
+/* THE PRECEDING VARS MUST BE IN THE SAME ORDER IN f_arc, f_line and f_spline */
+    int                    cap_style;
+    /*
+     * For T_OPEN_NORMAL and T_CLOSED_NORMAL points are control points while
+     * they are knots for T_OPEN_INTERP and T_CLOSED_INTERP whose control
+     * points are stored in controls.
+     */
+    struct f_point *points;    /* this must immediately follow cap_style */
+    float          style_val;
+    struct f_control *controls;
+    struct f_spline *next;
+}
+               F_spline;
+
+typedef struct f_compound {
+    int                    tagged;
+    int                    distrib;
+    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;
+
+typedef struct f_linkinfo {
+    struct f_line  *line;
+    struct f_point *endpt;
+    struct f_point *prevpt;
+    int                    two_pts;
+    struct f_linkinfo *next;
+}
+               F_linkinfo;
+
+/* separate the "type" and the "style" from the cur_arrowtype */
+#define                ARROW_TYPE(x)   ((x)==0? 0 : ((x)+1)/2)
+#define                ARROW_STYLE(x)  ((x)==0? 0 : ((x)+1)%2)
+
+#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)
+#define                PIC_SIZE        sizeof(struct f_pic)
+#define                LINKINFO_SIZE   sizeof(struct f_linkinfo)
+
+/**********************  object codes  **********************/
+
+#define                O_COLOR_DEF     0
+#define                O_ELLIPSE       1
+#define                O_POLYLINE      2
+#define                O_SPLINE        3
+/* HBB 990329: quick hack: 'O_TEXT' is in use by <fcntl.h> header
+ * on DOS/Windows platforms. Renamed to OBJ_TEXT */
+#define         OBJ_TEXT          4
+#define                O_ARC           5
+#define                O_COMPOUND      6
+#define                O_END_COMPOUND  -O_COMPOUND
+#define                O_ALL_OBJECT    99
+
+/********************* object masks for update  ************************/
+
+#define M_NONE                 0x000
+#define M_POLYLINE_POLYGON     0x001
+#define M_POLYLINE_LINE                0x002
+#define M_POLYLINE_BOX         0x004   /* includes ARCBOX */
+#define M_SPLINE_O_NORMAL      0x008
+#define M_SPLINE_C_NORMAL      0x010
+#define M_SPLINE_O_INTERP      0x020
+#define M_SPLINE_C_INTERP      0x040
+#define M_TEXT_NORMAL          0x080
+#define M_TEXT_HIDDEN          0x100
+#define M_ARC                  0x200
+#define M_ELLIPSE              0x400
+#define M_COMPOUND             0x800
+
+#define M_TEXT         (M_TEXT_HIDDEN | M_TEXT_NORMAL)
+#define M_SPLINE_O     (M_SPLINE_O_NORMAL | M_SPLINE_O_INTERP)
+#define M_SPLINE_C     (M_SPLINE_C_NORMAL | M_SPLINE_C_INTERP)
+#define M_SPLINE_NORMAL (M_SPLINE_O_NORMAL | M_SPLINE_C_NORMAL)
+#define M_SPLINE_INTERP (M_SPLINE_O_INTERP | M_SPLINE_C_INTERP)
+#define M_SPLINE       (M_SPLINE_NORMAL | M_SPLINE_INTERP)
+#define M_POLYLINE     (M_POLYLINE_LINE | M_POLYLINE_POLYGON | M_POLYLINE_BOX)
+#define M_VARPTS_OBJECT (M_POLYLINE_LINE | M_POLYLINE_POLYGON | M_SPLINE)
+#define M_OPEN_OBJECT  (M_POLYLINE_LINE | M_SPLINE_O | M_ARC)
+#define M_ROTATE_ANGLE (M_VARPTS_OBJECT | M_ARC | M_TEXT | M_COMPOUND | M_ELLIPSE)
+#define M_ELLTEXTANGLE (M_ELLIPSE | M_TEXT)
+#define M_OBJECT       (M_ELLIPSE | M_POLYLINE | M_SPLINE | M_TEXT | M_ARC)
+#define M_NO_TEXT      (M_ELLIPSE | M_POLYLINE | M_SPLINE | M_COMPOUND | M_ARC)
+#define M_ALL          (M_OBJECT | M_COMPOUND)
+
+/************************  Objects  **********************/
+
+extern F_compound objects;
+
+/************  global working pointers ************/
+
+extern F_line          *cur_l, *new_l, *old_l;
+extern F_arc           *cur_a, *new_a, *old_a;
+extern F_ellipse       *cur_e, *new_e, *old_e;
+extern F_text          *cur_t, *new_t, *old_t;
+extern F_spline                *cur_s, *new_s, *old_s;
+extern F_compound      *cur_c, *new_c, *old_c;
+extern F_point         *first_point, *cur_point;
+extern F_linkinfo      *cur_links;
+
+/*************** object attribute settings ***********/
+
+/*  Lines  */
+extern int     cur_linewidth;
+extern int     cur_linestyle;
+extern int     cur_joinstyle;
+extern int     cur_capstyle;
+extern float   cur_dashlength;
+extern float   cur_dotgap;
+extern float   cur_styleval;
+extern Color   cur_fillcolor, cur_pencolor;
+extern int     cur_fillstyle, cur_penstyle;
+extern int     cur_boxradius;
+extern int     cur_arrowmode;
+extern int     cur_arrowtype;
+extern int     cur_arctype;
+
+/* Text */
+extern int     cur_fontsize;   /* font size */
+extern int     cur_latex_font;
+extern int     cur_ps_font;
+extern int     cur_textjust;
+extern int     cur_textflags;
+
+/* Misc */
+extern float   cur_elltextangle;