
/**************** Graphic carries X info around ****************/
typedef struct {
  Display       *display;
  int            screen;
  int            depth;
  Window         window;
  GC             gc;
  XFontStruct   *font;
  Cursor         cursor;
  int            x,  y;
  int            dx, dy;
  Colormap       colormap;
  unsigned long  fore;
  unsigned long  back;
  unsigned long  *color;
} Graphic;

/**************** X related "widget" structures ****************/
typedef struct {
  int      x, y, dx, dy;      /* position and size */
  int      text;              /* does this have a picture or text? */
  int      width, height;
  char    *bitmap;          /* picture on button */
  int    (*function_1) (void);  /* mouse_button 1 function */
  int    (*function_2) (void);  /* mouse_button 2 function */
  int    (*function_3) (void);  /* mouse_button 3 function */
} Button;

typedef struct {
  int      x, y, dx, dy;   /* position and size */
  char    *label;          /* label on TextLine */
  char     text[1024];     /* words of TextLine */
  char     old_text[1024]; /* words of TextLine */
  int      outline;        /* draw an outline?  */ 
  int      cursor;         /* location of cursor (if selected) */
  int    (*function) (void);   /* textline function */
} TextLine;

typedef char STRING[1024];

typedef struct {
  int      x, y, dx, dy;   /* position and size */
  STRING  *text;           /* words of TextLine */
  int      Nlines;
  int      outline;        /* draw an outline?  */ 
  int      cursor_line;    /* cursor line */
  int      cursor_x;       /* location of cursor (if selected) */
  int      cursor_y;       /* location of cursor (if selected) */
  int    (*function) (void);   /* textline function */
} TextBox;

/**************** general structures ****************/
typedef struct {
  Pixmap pixmap;
  int    width;
  int    height;
  unsigned char *bits;
} Icon;

typedef struct {
  int      dx, dy, x, y;
  XImage  *pix;
  char    *data;
} Picture;

typedef struct {
  char type[10];
  double x, y;
  double dx, dy;
  double angle;
  char  *text;
} Object;

typedef struct {
  int x, y;
  int dx, dy;
  double angle;
  int  size;
  char font[64]; 
  char text[LABEL_MAXLEN];
} Label;

typedef struct {
  int Nobjects;
  unsigned long color;
  Object *objects;
} Overlay;
  
typedef struct {
  float *x, *y, *z, *dxp, *dxm, *dyp, *dym;
  int Npts;
  int style, ptype, ltype, color, etype, ebar;
  double lweight, size;
  double x0, x1, y0, y1;  /* limits for this object */
} Gobjects;

typedef struct {
  double min, max;
  char isaxis, areticks, islabel, islog;
  double fx, dfx, fy, dfy;  /* axis location on graphic */
} Axis;

/******** Here we define the Layout struct specific to this program  *******/
typedef struct {
  Axis      axis[4];    /* coordinate axes */
  Label     label[8];   /* fixed axis labels */

  Gobjects *objects;    /* graphic objects */    
  int      Nobjects;    

  Label    *ptext;      /* placed text labels */
  int      Nptext;      

  double   x, dx;      /* location of plot on window ( 0 - 1, 0 - 1 ) */
  double   y, dy; 

  char     name[LABEL_MAXLEN];  /* name of the section */

} Layout;
