/*
 * xopps.h
 *
 * $Log: xopps.h,v $
 * Revision 1.69  1995/02/01  03:19:21  kevin
 * fixed marker colors in popup
 *
 * Revision 1.68  1995/01/05  23:03:16  kevin
 * updated copyright
 *
 * Revision 1.67  1994/12/31  01:20:06  kevin
 * removed redundant file loader
 *
 * Revision 1.66  1994/08/10  22:24:01  cassie
 * changed pict and windows options to
 * single export option
 *
 * Revision 1.65  1994/06/07  16:39:42  clm
 * changed parameters of edit_plot to void
 *
 * Revision 1.64  1994/06/02  22:25:57  clm
 * added MAC Pict and Windows META files options
 *
 * Revision 1.63  1994/06/01  22:31:58  clm
 * updated init functions for dialog.c so less parameters
 *
 * Revision 1.62  1994/05/20  23:31:43  clm
 * updated with HP, SGI changes
 *
 * Revision 1.61  1994/05/04  23:37:01  clm
 * ported to ANSI C
 *
 * Revision 1.60  1994/02/09  16:23:28  clm
 * added week_monday to display weeks by Mondays by resource
 *
 * Revision 1.59  1993/03/04  17:49:44  clm
 * changed MAX_XLINES and MAX_YLINES to 5
 *
 * Revision 1.58  1993/02/08  16:35:37  clm
 *  added evt to slp to menu
 *
 * Revision 1.57  1992/12/17  22:54:25  clm
 * created V_SOLID so numbering correct for vertical grid
 *
 * Revision 1.56  1992/12/15  20:40:54  clm
 * changed MAX_MARKER to global declaration
 *
 * Revision 1.55  1992/12/11  21:31:30  clm
 * made RSRC_FONT and RSRC_POINT global
 *
 * Revision 1.54  1992/12/01  17:03:46  clm
 * added vpos to sequence.c
 *
 * Revision 1.53  1992/11/12  18:56:45  clm
 * added display date options to slip and event objects
 *
 * Revision 1.52  1992/11/09  16:33:58  clm
 * added precedence lines as objects
 * added DELETE_PLINE to menu
 *
 * Revision 1.51  1992/10/13  21:01:31  clm
 * added #include <time.h> needed for V.18
 *
 * Revision 1.50  1992/10/13  00:17:00  clm
 * added spacing to header
 *
 * Revision 1.49  1992/10/12  20:31:38  clm
 * added all_id_disp toggle
 *
 * Revision 1.48  1992/10/06  17:05:51  clm
 * removed infile variable
 *
 * Revision 1.47  1992/10/05  22:17:03  clm
 * added input file name variable for entering data file to command line
 *
 * Revision 1.46  1992/09/29  23:27:11  clm
 * added id text and toggle to all dated objects
 *
 * Revision 1.45  1992/09/22  17:19:39  clm
 * added activity object
 *
 * Revision 1.44  1992/09/17  15:13:02  clm
 * added disp to chart date object
 *
 * Revision 1.43  1992/09/15  15:59:36  clm
 * added text and text positioning to slip object
 *
 * Revision 1.42  1992/09/14  20:42:09  clm
 * added vertical position to sactivity
 *
 * Revision 1.41  1992/09/14  19:09:15  clm
 * fixed PAGE_WIDTH and PAGE_HEIGHT for expanded size of drawing area
 *
 * Revision 1.40  1992/09/14  18:07:02  clm
 * added page to text object
 *
 * Revision 1.39  1992/09/08  22:50:54  clm
 * added color and point to sequence object
 * added ADD_SEQ to menu_tok
 *
 * Revision 1.38  1992/09/01  17:45:18  clm
 * added color to all objects
 *
 * Revision 1.37  1992/08/31  17:19:25  clm
 * took out clock and box objects
 *
 * Revision 1.36  1992/08/27  16:19:52  clm
 * added vgrid option
 *
 * Revision 1.35  1992/08/25  20:08:53  clm
 * added variable modified for beware dialog box
 *
 * Revision 1.34  1992/08/25  16:24:54  clm
 * changed cdata type to enum type
 *
 * Revision 1.33  1992/08/25  15:55:51  clm
 * added xlnary and ylnary definitions and object definitions
 *
 * Revision 1.32  1992/08/20  18:06:53  clm
 * added enum fm_type
 *
 * Revision 1.31  1992/08/20  16:11:37  clm
 * changed hline grid values so that gr_routines can be used
 * added color to all objects
 *
 * Revision 1.30  1992/08/03  21:36:10  clm
 * added slip, status, page, chart date, symbol, and level objects.
 *
 * Revision 1.29  1992/07/15  19:44:26  clm
 * cosmetic changes
 *
 * Revision 1.28  1992/07/13  20:11:15  clm
 * remove clock and box objects
 * added snap_txt and snap_evt toggles
 *
 * Revision 1.27  1992/07/08  19:39:42  clm
 * added color value to chtptr
 *
 * Revision 1.26  1992/07/06  17:55:54  clm
 * added line and number display toggles to hln_menu
 *
 * Revision 1.25  1992/06/12  18:16:38  clm
 * made chart an object
 *
 * Revision 1.22  1992/05/21  19:55:07  clm
 * added #include rectlist.h
 *
 * Revision 1.21  1992/05/21  16:24:12  clm
 * changed obj struct to use rectlist functions
 *
 * Revision 1.20  1992/05/11  22:41:33  kevin
 * renamed project include file to xopps.h
 *
 * Revision 1.19  1991/10/07  00:00:00  tommy
 * added xopps specifics
 *
 * Revision 1.8  90/12/28  13:14:30  kevin
 * changed x_ routines to gr_ routines
 * 
 * Revision 1.2  90/11/29  15:27:46  ana
 * First cut with motif widgets.
 * 
 * Revision 1.1  90/11/02  08:40:28  ana
 * Initial revision
 * 
 */

/* Copyright (C) , California Institute of Technology.
   U.S. Government Sponsorship under NASA Contract NAS7-918 is acknowledged. */

#ifndef __xopps_h
#define __xopps_h

#ifndef lint
static char rcsid_xopps[] =
    "$Id: xopps.h,v 1.69 1995/02/01 03:19:21 kevin OEL $";
#endif

#define PROGRAM "OEL Project Planner / Scheduler: XOPPS"
#define COPYRIGHT "Copyright (C) 1995"

#include <limits.h>
#include <stdio.h>
#include <ctype.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>
#include <Xm/Xm.h>

#include "help.h"
#include "beware.h"
#include "shellmgmt.h"
#include "message.h"
#include "selectfile.h"
#include "gr_plot.h"
#include "rectlist.h"
#include "utc.h"
#include "dialog.h"
                              /* define TRUE, FALSE, ERROR, and QUIT */
/****************************************************************************/

#ifdef FALSE
#undef FALSE
#endif
#ifdef TRUE
#undef TRUE
#endif

#define FALSE 0
#define TRUE 1
#define ERROR 2
#define QUIT 4

                             /* subpanel positioning macros */
/****************************************************************************/

#define DASH_MARK 5
#define DASH_SPACE 3
#define DOT_MARK 1

#define SUB_X 150
#define SUB_Y 5
#define DONE_X 10
#define DONE_Y 1 
#define ON_DONE_X (DONE_X + 20)
#define ON_DONE_Y (DONE_Y + 6)
#define QUIT_X (DONE_X + 50)
#define QUIT_Y DONE_Y
#define SP_WIDTH 350
#define SPX 15 
#define SPX2 ((SPX + SP_WIDTH) / 2) 
#define SPX3 ((SPX2 + SP_WIDTH) / 2)
#define SPX4 ((SPX3 + SP_WIDTH) / 2)     /* x text and cycle positions */
#define SPXD (SPX + 21 * 7)
#define SPXH (SPX + 33 * 7)
#define spyt(k) (32 + 18 * (k))         /* y text position */
#define spyc(k) (30 + 18 * (k))         /* y cycle position */
#define phgt(k) (36 + 18 * (k))         /* subpanel height */
#define PAGE_WIDTH 1010                 /* width of canvas in pixels */
#define PAGE_HEIGHT 870                 /* height of canvas in pixels */

#define AM 0
#define NOON 1
#define PM 2


                              /* global variable definitions */
/****************************************************************************/

#ifdef MAIN_MOD
#define EXTERN
#else
#define EXTERN extern
#endif

/*************************************************************************** 
              definitions for drawing the chart 
***************************************************************************/
#define MARGIN 2
#define NUM_WIDTH 16

#define XVAL_EARLY -1
#define XVAL_LATE -2
#define XVAL_OK 0

/*
 * Types of time interval resolution : year_by_year, year_by_half_year,
 * month, half_month, month_by_2weeks, month_by_week, week_by_day
 */

enum tim_res { YEARLY, HALFYEARLY, QUARTERLY, MONTHLY, HALFMONTHLY,
               BIWEEKLY, WEEKLY, DAILY, DAYSOFWEEK };

enum when { START_OF_DAY, MIDDLE_OF_DAY, END_OF_DAY };

                     /* define structures and enumerated types */
/****************************************************************************/

enum smv { SMV_BEGIN, SMV_MOVE, SMV_FINISH, SMV_ABORT };


/* label position: L= left; R=right; C= center; A=above; B=below; E=offset */
   enum hpos  { TX_LEFT, TX_RIGHT, TX_CENTER };
   enum vpos  { TX_ABOVE, TX_BELOW, TX_VCENTER };

enum typ { OBJ_NUL, OBJ_TXT, OBJ_IMG, OBJ_SYM, OBJ_HLN, OBJ_LNX, OBJ_LNY,
           OBJ_EVT,  OBJ_ACT,  OBJ_SACT, OBJ_SLP, OBJ_PAG, OBJ_PLN, 
           OBJ_CHT, OBJ_LVL, OBJ_SEQ, OBJ_STT, OBJ_CDT, OBJ_ITEMS };

enum pmv { PMV_NONE, PMV_X, PMV_Y, PMV_ALL };

enum tds { TDS_NONE, TDS_DOY, TDS_DATE };

enum bck { BACK_NONE, BACK_ADD, BACK_MOVE, BACK_EDIT, BACK_DEL };

/* pop up menu */
enum menu_tok { ZERO, UNDO, COPY, EVT2SLP, EDIT, DELETE, DELETE_PLINE, ADD, 
		ADD_ACT, NORMAL_ACT, ADD_SEQ, ADD_IMAGE, ADD_TEXT, ADD_SACT, 
		ADD_EVENT, ADD_SLIP, ADD_STATUS, ADD_PAGE, ADD_CHDATE, 
		ADD_SYM, ADD_LEVEL, LAST_ITEM };

enum hln_menu_tok { NIL, HEDIT, HDELETE, HINSERT, HLINE, HNUMBER, HLAST_ITEM };

enum fm_type {
    FM_FILE, FM_DIR, FM_ROOT, FM_EXT
};

enum tog { TOG_OFF, TOG_ON };   /* for toggles */

enum grid_typ  { G_SOLID, G_THICK, G_DOT_LINE,
                  G_SHORT_DASH, G_LONG_DASH, G_NONE };

enum vgrid_typ { V_SOLID, V_NONE };

enum lnm { L_NONE, L_N_ON, L_NL_ON, L_N_OFF, L_NL_OFF, L_RENUM };

enum line_t { NULL_LINE, SIMPLE, DOUBLE };

enum pattern { OPEN, SOLID, LEFT_DIAG,
                RIGHT_DIAG, HORIZONTAL, VERTICAL, CROS_HATCH };


struct utc {                            /* universal time coordinate */
    int year;                           /* year */
    int day;                            /* day of year: 1 - 366 */
    int hour;                           /* on 2400 clock */
};

struct obj {                            /* structure for general object */
    enum typ type;                      /* type of object */
    struct ops *opsptr;                 /* functions on object */
    RectList *rlist;			/* list of rectangles for object */
    int layer;
    struct dynarray *precptr;		/* pointer to all precedence lines */
    union {                             /* details of object */
        struct txt *txtptr;
        struct img *imgptr;
        struct hln *hlnptr;
        struct sym *symptr;
        struct evt *evtptr;
        struct act *actptr;
        struct sact *sactptr;
        struct slp *slpptr;
        struct pag *pagptr;
        struct lvl *lvlptr;
        struct seq *seqptr;
 	struct cht *chtptr;
	struct stt *sttptr;
   	struct cdt *cdtptr;
	struct line *lnptr;
    } z;
};    

struct ops {					/* operations for objects */
    void (*dsp)(int);				/* display function */
    void (*edt)(int, int);                      /* edit function */
    void (*rem)(int, int);			/* remove/delete function */
    void (*lim)(int, int *, int *, int *, int *, int);	/* range of motion */
    void (*loc)(int, int);			/* locate object function */
    void (*mov)(int, int, int, int);		/* move function */
    void (*cpy)(struct obj *, struct obj *);	/* copy function */
    void (*msg)(int, int);			/* display message function */
    void (*sav)(int, FILE *, int);	 	/* save function */
};

struct date {				/* date in month/day/year */
    int month;
    int day;
    int year;
};

struct color {
    int index;				/* color index */
    char *name;				/* name of color */
    int gscale;				/* gray scale */
}; 

struct pln {
    RectList *rlist;			/* list of rectangles for pline */
    int obj1;
    int obj2;
};
 

/********  Object structures  ***********************/

struct hln { /* array index corresponds to line position in plot (0=ACTIVITY) */
    int our_num;                        /* actual line number */
    int input_num;                      /* user-defined line number */
    enum tog dsp_lin;                   /* display line */
    enum tog dsp_num;                   /* display line number*/
    int color;
    int font;
    int point;
    char *text;                         /* text above actual line */
    enum grid_typ grid;                 /* type of line */
    };

struct txt {
    int x, y;                           /* offset */
    int just;                           /* justification */
    int font;                           /* font */
    int point;				/* font point size */
    int color;				/* color index */
    int page;				/* 0 = all pages */
    char *text;                         /* contents */
};

struct img {
    int x, y;                           /* coordinates */
    char *file;                         /* image filename */
    int scale;				/* image scale factor */
    int color;				/* color index */
    GRBitmap *pr;			/* image pixrect */
    GRBitmap *apr;			/* aux. image (if scaled) */
};

struct act { /* complex activity structure */
    utc_val strtdate, endate;       /* gives x positions */
    utc_val update, dwndate;        /* ramp up/down dates */
    int line;                       /* gives y position */
    int strtsym, endsym;            /* start/end symbol type(same for events*/
    int color;                          /* color (except baseline) */
    utc_val pctdate;                /* percent complete date */
    int done_pct;                       /* percent complete (0-100) */
    enum pattern fill_pattern;          /* fill pattern (uncompleted portion) */
    enum tds disp;                      /* display flag for times */
    int hpos;                           /* horizontal position */
    int vpos;                           /* vertical position */
    int font;                           /* font */
    int point;                          /* point for activity text */
    char *text;                         /* text comment */
    utc_val b_strtdate, b_endate;   /* baseline start/end date */
    char *idtext;			/* id text */
    int idhpos, idvpos;			/* id vert and horiz positioning */
    int idtog;				/* toggle for displaying id */
};

struct sact { /* simple activity */
    utc_val strtdate, endate;       	/* gives x positions */
    int line;                           /* gives y position */
    int strtsym, endsym;           	/* start/end sym type(same for events)*/
    utc_val pctdate;                	/* percent complete date */
    int done_pct;                       /* percent complete (0-100) */
    enum pattern fill_pattern;          /* fill pattern (uncompleted portion) */
    enum tds disp;                      /* display flag for times */
    int hpos;                           /* horizontal position */
    int vpos;                           /* vertical position */
    int font;                           /* font */
    int point;                          /* point for sactivity text */
    char *text;                         /* text comment */
    int color;				/* color of object */
    char *idtext;			/* id text */
    int idtog;				/* toggle display for id text */
    int idhpos, idvpos;			/* positioning of id text */
};

struct seq { /* sequence */
    utc_val strtdate, endate;       	/* gives x positions */
    int line;                           /* gives y position */
    int rtc;                            /* real time change flag */
    enum tds disp;                      /* display flag for times */
    int solid;                          /* solid or dashed line option */
    int hpos, vpos;                     /* horizontal and vertical position */
    int font;                           /* font */
    int point;                          /* point */
    char *text;                         /* text comment */
    int color;				/* color of object */
    char *idtext;			/* text for id */
    int idhpos, idvpos;			/* positioning of id */
    int idtog;				/* display id toggle */
};

struct lvl {                            /* usually only notes text */
    int x, y;                           /* x, y offset */
    int page;                           /* page #: 1..7; 0==ALL_PAGES */
    int radius;                         /* circle radius */
    int font, point;                    /* font */
    char *text;                         /* contents */ 
    int color;				/* color for level object */
};

struct evt { /* event objects (only one date) */
    utc_val edate;               /* gives x position */
    int line;                           /* gives y position */
        /* Line number indexes a line object in hln_obj_array
           and the y-position of this line gives the y-value of the object.
           NOTE: when a new line is inserted this line number must be
           incremented for each schedule data object on following lines */
    int sym;                          /* pointer to symbol type */
    char *s_char;                     /* character inside symbol */
    int moffset;                      /* move offset for snap events */
    char *text;                       /* label 1 for events */
    char *text2;                      /* label 2 for events */
    int font;                         /* font for labels */
    int point;                        /* point for labels */
    int hpos1;                        /* horizontal label 1 position wrt obj */
    int vpos1;                        /* vertical label 1 position wrt obj */
    int hpos2;                        /* horizontal 2 label position wrt obj */
    int vpos2;                        /* vertical 2 label position wrt obj */
    int color;			      /* color of event object */
    int disp;			      /* date display */
    char *idtext;		      /* text for object id */
    int idhpos;			      /* horizontal position for id text */
    int idvpos;			      /* vertical position for id text */
    int idtog;			      /* toggle to display id text */
};

/* symbols text object */
struct sym {                            /* usually only in notes section */
    int x, y;                           /* x, y offset */
    int sym;                            /* pointer to symbol type */
    int page;                           /* page #: 1..7; 0==ALL_PAGES */
    int size;                           /* normal, small */
    int color;				/* symbol color */
};

struct pag {                            /* page object */
    int x, y;                           /* x, y offset */
    int font;                           /* font */
    int point;                          /* point */
    int color;				/* color value */
};

struct cdt {				/* chart date object */
    int x, y;				/* x, y offset */
    int font;				/* font */
    int point;				/* point */
    int color;				/* color value */
    int disp;				/* display utc doy or mm/dd/yy */
};

/* Slip line type: both upper and lower, upper, lower, centered */
enum slin_typ  { S_CENTER, S_LOWER_UPPER, S_LOWER, S_UPPER };

struct slp {                            /* slip lines */
    utc_val strtdate, endate;       /* start, end dates */
    int line;                           /* line number = y offset */
    int strtsym, endsym;                /* start, end symbol pointers */
    char *s_char, *e_char;              /* start/end chars inside symbols */
    enum slin_typ line_type;            /* type of slip line */
    int font, point;			/* font and point for text */
    char *text;				/* text of object */
    int hpos, vpos;			/* positioning of text */
    int color;				/* color of object */
    enum tds disp;			/* date display */
    char *idtext;			/* id text */
    int idhpos, idvpos;			/* id horiz. and vert. positioning */
    int idtog;				/* display id toggle */
};

/***************************************************************************/

struct cdata {
    int x;
    int y;
    int co;
    enum typ type;
};

/**************************************************************************/

#define NOTHING 0
 /* different object movement types */
#define OBJECT (-1)
#define LINE_X (-2)
#define LINE_Y (-3)

struct line {
    int dir;                    /* direction 0 for vert. 1 for horiz. */
    int cord;                  /* coordinate (in pixels) of line */
    int startln;                /* starting perpendicular line  */
    int endln;                  /* ending perpendicular line  */
    int start_offset;           /* start pixel offset from start line  */
    int end_offset;             /* end pixel offset from end line  */
};

#define start_x(i) (xlnary[ylnary[i].startln].z.lnptr->cord + ylnary[i].z.lnptr->start_offset)
#define end_x(i) (xlnary[ylnary[i].endln].z.lnptr->cord + ylnary[i].z.lnptr->end_offset)
#define start_y(i) (ylnary[xlnary[i].startln].z.lnptr->cord + xlnary[i].z.lnptr->start_offset)
#define end_y(i) (ylnary[xlnary[i].endln].z.lnptr->cord + xlnary[i].z.lnptr->start_offset)

#define MAX_XLINES 5
EXTERN int nxln;                           /* current number of vert. lines */
EXTERN struct obj xlnary[MAX_XLINES];     /* vertical line array */

#define x_left_margin xlnary[0].z.lnptr->cord
#define x_time_offset xlnary[1].z.lnptr->cord  /* movable line for milestones */
#define x_left_hdr xlnary[2].z.lnptr->cord
#define x_rt_hdr xlnary[3].z.lnptr->cord
#define x_right_margin xlnary[nxln-1].z.lnptr->cord

#define MAX_YLINES 5
EXTERN int nyln;                           /* current number of hor. lines */
EXTERN struct obj ylnary[MAX_YLINES];     /* horizontal line array */

#define y_top_margin ylnary[0].z.lnptr->cord
#define y_hdr_bottom ylnary[1].z.lnptr->cord
#define y_act_bottom ylnary[2].z.lnptr->cord
#define y_lines_end ylnary[3].z.lnptr->cord
#define y_bottom_margin ylnary[nyln-1].z.lnptr->cord

#define x_num_offset (x_left_margin + 17)

#define DYNARRAY_BATCH_SIZE 4

struct dynarray {
    int (*basptr)[];
    int nelems;
    int nslots;
};

/*
 * dynarray macros 
 */

#define elemof_dynarray(ptr, i) ((*((ptr)->basptr))[i])
#define sizeof_dynarray(ptr) ((ptr)->nelems)


struct cht {
    utc_val start_date;
    utc_val end_date;
    int color; 
    int font;
    int point;
    int flags;
    enum tim_res resltn;
};

struct stt {
    int x, y;
    int font;
    int point;
    int color;
};

EXTERN GRDisplay dw;                    /* drawing window parameters */

                              /* define special object indices */
/****************************************************************************/

#define BACK -1
#define TEMP -2

                              /* define global variables */
/****************************************************************************/

EXTERN int RSRC_FONT;			/* resource font values set in main */
EXTERN int RSRC_POINT;			/* resource font values set in main */
EXTERN int week_monday;			/* resource for week begins on Monday */
EXTERN XFontStruct *dxf;		/* default x font structure */
EXTERN struct ops nul_ops;		/* null functions */
EXTERN struct cdata data;		/* canvas data */
EXTERN int snap_on;			/* snap grid on/off */
EXTERN int snap_x, snap_y;		/* snap grid sizes */
EXTERN Widget menu;			/* drawing area menu */
EXTERN Widget menu_item[(int)LAST_ITEM];/* should be LAST_ITEM */
EXTERN Widget hln_menu;			/* horiz. line menu */
EXTERN Widget hln_item[(int)HLAST_ITEM]; /* should be LAST_ITEM */
#define MAX_OBJ 1024
#define MAX_PLN 20
#define MAX_COLOR 256
#define MAX_MARKER 16
EXTERN int nobj;                        /* current number of objects */
EXTERN int npln;                        /* current number of plines */
EXTERN int ncolor;
EXTERN struct obj objary[MAX_OBJ];      /* object array */
EXTERN struct pln plnary[MAX_PLN];      /* precendence line array */
EXTERN int color_index[MAX_COLOR];	
EXTERN char *color_name[MAX_COLOR];
EXTERN int color_gscale[MAX_COLOR];
#define MAX_LINE 253                    /* max 7 pages * max 36 line/page */
EXTERN int Hnobj;                        /* current number of HLN objects */
EXTERN struct obj Hobjary[MAX_LINE + 1];      /* horizontal line object array */
EXTERN int hln_objary[MAX_LINE + 1];    /* holds index of lines in Hobj array */

EXTERN enum tog auto_renum;             /* auto renumbering mode */
EXTERN enum tog auto_ereset;            /* auto resetting of event symbols */
EXTERN enum tog auto_areset;		/* auto resetting of sact symbols */
EXTERN enum tog snap_txt;		/* restricts horiz. motion of text */
EXTERN enum tog snap_evt;		/* restricts horiz. motion of events */
EXTERN enum tog utc_bar;		/* displays utc date bar */
EXTERN int num_pages;
EXTERN int current_page;

EXTERN utc_val st_date;
EXTERN enum tog st_flag;
EXTERN int pg_lines;
EXTERN int page_end;
EXTERN int page_begin;
EXTERN int y_gap;
EXTERN char filename[_POSIX_PATH_MAX];	/* for adding new lines */
EXTERN enum grid_typ all_grid_dsp;	/* grid type set for all lines */
EXTERN enum tog all_num_dsp;		/* all number display on/off */
EXTERN enum tog all_line_dsp;		/* all line display on/off */
EXTERN enum tog issue_disp;		/* display issue date */
EXTERN enum tog all_id_disp;		/* display id text strings */
EXTERN int vgrid;			/* either solid  or none */
EXTERN char issue_dt[24];		/* issue date */
EXTERN enum lnm num_mode;               /* line renumbering mode */
EXTERN struct cht chart;                /* chart dates structure */
EXTERN enum bck sbck;
EXTERN int nbck;
EXTERN struct obj objbck;
EXTERN struct obj objtmp;
EXTERN int object_change;
EXTERN int hobject_change;
EXTERN int page_width;
EXTERN int page_height;
EXTERN int modified;			/* TRUE if change has occured */
EXTERN GC hilite_gc;			/* GC to use for highlighting */
EXTERN int copying;
EXTERN int moving;
EXTERN int pline;

                              /* global procedure definitions */

extern void init_activity_object(Widget);
extern int add_activity(utc_val, utc_val, utc_val, utc_val, int, int, int, utc_val, int, utc_val, utc_val, enum pattern, int, enum tds, int, int, int, int, int, char *, char *, int, int, int);
extern GRBitmap *open_bitmap(char *);
extern GRBitmap *copy_bitmap(GRBitmap *);
extern GRBitmap *scale_bitmap(GRBitmap *, int);
extern void init_font(char *);
extern void init_point(char *);
extern int xval(struct cht *, utc_val, enum when);
extern void init_chart(void);
extern void init_chart_object(Widget);
extern int add_chart(utc_val, utc_val, utc_val, int, int, int, int, int, enum tim_res, int);
extern void dsp_chart(int);
extern void init_chdate_object(Widget);
extern int add_chdate(int, int, int, int, int, int, int);
extern int load_colors(char *);
extern void init_colors(void);
extern void init_drawing_1(Display *, Widget, int);
extern void init_drawing_2(void);
extern void draw_outline(int);
extern void AddExposeEvent(int, XRectangle *);
extern void manageEditField(int);
extern void createEditField(Widget);
extern _XFUNCPROTOEND struct dynarray *new_dynarray(void);
extern void append_dynarray(struct dynarray *, int);
extern void delete_dynarray(struct dynarray *);
extern void delete_element(int, struct dynarray *);
extern void init_event_object(Widget);
extern int add_event(utc_val, int, int, char *, int, char *, char *, int, int, int, int, int, int, int, int, enum tds, char *, int, int, int);
extern void InitExport(Widget, char *, char *, int);
extern void Export(void);
extern void init_fileio(void);
extern int register_io_obj(int, int (*)(char *));
extern int load_file(char *);
extern int record_scan(char *, char *, ...);
extern void save_file(char *);
extern int record_print(char *, char *, ...);
extern void init_file_menu(Widget, char *);
extern void init_option_menu(Widget);
extern void load_the_file(char *);
extern void exit_button(Widget, XtPointer, XmAnyCallbackStruct *);
extern void getfm_text(char *, enum fm_type);
extern void set_evt_tog(void);
extern void set_txt_tog(void);
extern void set_utc_tog(void);
extern void set_renum_tog(void);
extern void set_title_to_filename(void);
extern void init_hline_object(Widget);
extern void hline_init(void);
extern int add_hline(int, int, enum tog, enum tog, int, int, int, enum grid_typ,
 char *);
extern void ren_hline(void);
extern void mov_lines(int, int);
extern void delete_hline(int);
extern void ins_hline(int);
extern void tog_hline(int);
extern void tog_hnum(int);
extern void all_numbers(enum tog);
extern void all_lins(enum tog);
extern void all_grids(enum grid_typ);
extern void init_image_object(Widget);
extern int add_image(int, int, int, int, int, char *);
extern void init_internals(void);
extern void save_internals(FILE *);
extern void init_level_object(Widget);
extern int add_level(int, int, char *, int, int, int, int, int, int);
extern void line_init(void);
extern void init_line_object(void);
extern void add_line(int, int, int, int, int, int, int);
extern void locate_lines(void);
extern void clear_all_lines(void);
extern int find_line(int, int, int *);
extern int find_line2(int, int, int, struct obj *, struct obj *, int);
extern void check_lines(void);
extern int main(int, char *[]);
extern void set_title(char *, char *);
extern void init_markers(void);
extern void add_marker(int, char *);
extern void get_markers(Pixmap [], int *);
extern void clear_all_markers(void);
extern void dsp_marker(int, int, int, int, int);
extern void init_menu(Widget);
extern void init_hln_menu(Widget);
extern void begin_move(Widget, int, int, int, int);
extern void begin_H_move(Widget, int, int, int);
extern void finish_move(Widget, int);
extern void finish_H_move(Widget);
extern char *extract_normal_string(XmString);
extern XmString string_array_to_xmstr(char *[], int);
extern int new_index(int);
extern int new_H_index(void);
extern int new_pline(void);
extern void rem_H_object(int);
extern void rem_object(struct obj *);
extern void ins_H_object(int);
extern void clear_all_obj(void);
extern int find_object(int, int);
extern int find_H_object(int, int);
extern int find_pline(int, int);
extern int find_object_type(enum typ);
extern int store_object(int, enum bck, int);
extern void recall_object(void);
extern void init_objects(Widget, Display *, XtAppContext, Boolean);
extern int check_text(Widget, char **);
extern int check_number(Widget, int *, int, int);
extern int check_day(Widget, Widget, Widget, int *);
extern int check_list(Widget, int *, int []);
extern int check_optionmenu(int, int *);
extern int check_year(Widget, int *);
extern int check_radio_box(Widget [], int *, int);
extern int check_titletext(Widget, char *);
extern void set_text(Widget, char *);
extern void set_number(Widget, int);
extern void set_list(Widget, int, int []);
extern void set_optionmenu(Widget, Widget [], int, int []);
extern void set_radio_box(Widget);
extern void EditHObject(int, Widget);
extern void EditObject(int, Widget);
extern void init_page_object(Widget);
extern int add_page(int, int, int, int, int, int);
extern void init_pline(void);
extern void add_pline(int, int, int);
extern void dsp_pline(int);
extern void msg_pline(int, int);
extern void sav_pline(int, FILE *, int);
extern void rem_pline(int, int);
extern void loc_pline(int, int);
extern void begin_pline(Widget, int, int, int);
extern void finish_pline(Widget, int, int, int);
extern int get_object_coord(int, int *, int *);
extern void init_plot_dialog(Widget, Display *);
extern void edit_plot(void);
extern void set_dsp_size(void);
extern void init_print_dialog(Widget, Display *, XtAppContext, char *);
extern void popup_print_options(void);
extern void setBackgroundSense(int);
extern void init_resource(Display *);
extern void test_command(char *);
extern void init_sactivity_object(Widget);
extern int add_sactivity(utc_val, utc_val, int, int, int, utc_val, int, enum pattern, int, enum tds, int, int, int, int, int, char *, char *, int, int, int);
extern void init_sequence_object(Widget);
extern int add_sequence(utc_val, utc_val, int, int, int, int, int, int, int, int, int, char *, int, char *, int, int, int);
extern void init_slip_object(Widget);
extern int add_slip(utc_val, utc_val, int, int, int, char *, char *, enum slin_typ, int, int, int, char *, int, int, int, enum tds, char *, int, int, int);
extern void init_status_object(Widget);
extern int add_status(int, int, int, int, int, int);
extern void init_symbol_object(Widget);
extern int add_symbol(int, int, int, int, int, int, int);
extern void init_text_object(Widget);
extern int add_text(int, int, int, int, int, int, int, int, char *);
extern void skip_blanks(char **);
extern int get_number(char **, int *);
extern int utc_to_x(utc_val);
extern void x_to_utc(int, utc_val *);
extern void issue_date(void);

/****************************************************************************/

#endif
