/*************************************************************************
* Global definitions of	GraphGen.c for all the world...			 *
*************************************************************************/

#ifndef	GRAPH_GEN_H	/* Define only once */
#define	GRAPH_GEN_H

#ifndef __MSDOS__
#define FULL_LINE_STYLE		1
#define DOTTED_LINE_STYLE	2
#endif /* __MSDOS__ */

/* The following conditional compilation flags are also in GraphGen.c!       */
/* #define NOGRAPHICS	  /* If no graphics to perform (only routine calls). */
/* #define NOWINDOWS		   /* If no windows routines to be included. */
#define NOMENUS			     /* If no menus routines to be included. */
#define NOHELP			/* If no print help routines to be included. */
/* #define DEBUG		   /* Print graphics driver info and dies... */
#define SINGLEPAGE	      /* If more than one pages should be supported. */

#define	MENU_MAX_ITEMS 14		 /* Maximum number of items in menu. */
#define	MENU_MAX_LEN   20		  /* Maximum length of string entry. */

typedef struct MenuItem	{
   int color;
   char	string[MENU_MAX_LEN];
} MenuItem;

extern	int    GGGraphMode;			 /* The Graphics mode value. */
extern	double GGAspectRatio;	   /* Aspect ratio of a pixel in the screen. */
extern	int    GGScreenMaxX, GGScreenMaxY;/* The maximum res. of the screen. */
extern	int    GGScreenMaxColors;      /* The maximum # of colors available. */
extern	int    GGScreenMaxPages;	/* The maximum # of pages available. */
extern	int    GGScreenErrorCode;	     /* Reports any graphics errors. */
extern	struct palettetype palette;	       /* Used to read palette info. */
extern	int    GGCurrentCursorX, GGCurrentCursorY;/* Cursor current position.*/
extern	int    GGScreenGraphicMode;	 /* TRUE if current mode is graphic. */

#ifndef	TRUE
#define	TRUE	-1
#define	FALSE	0
#endif

#define	MSG_AREA_X      1.25		    /* General notes goes to here... */
#define	MSG_AREA_Y     -0.9
#define	MSG_AREA_WIDTH  0.7

#define MAX_HELP_MENU_CHAR 20		  /* Maximum of chars per help line. */

#define MENU_FRAME_COLOR	RED
#define HELP_COLOR		CYAN
#define HELP_COLOR_HEADER	YELLOW

#ifndef	NOWINDOWS

#define SW_MIN_X	1.2			       /* The STATUS window. */
#define SW_MAX_X	2.0
#define SW_MIN_Y	-0.97
#define	SW_MAX_Y	0.97
#define SW_FRAME_COLOR	LIGHTRED
#define SW_LINE_COLOR	MAGENTA


#define VW_MIN_X	-0.97				 /* The VIEW window. */
#define VW_MAX_X	1.1
#define VW_MIN_Y	-0.97
#define	VW_MAX_Y	0.97
#define VW_FRAME_COLOR	LIGHTGREEN
#define VW_LINE_COLOR	GREEN

#endif	NOWINDOWS

/* And finally the external routine prototypes: */

void GGMyMove(double x, double y);
void GGMyDraw(double x, double y);
void GGMySetColor(int color);
#ifdef __MSDOS__
void GGInitGraph(void);
#else
void GGInitGraph(int argc, char **argv);
void GGMySetLineStyle(int Style);
#endif /* __MSDOS__ */
void GGCloseGraph(void);
void GGGetPoint(double *x, double *y);
void GGDrawPoint(double p[], char title[], int PointColor);

#ifndef NOMENUS
int GGMenuDraw(int n, struct MenuItem m[], int erase);
int GGMenuPick(void);
int GGConfirm(char *s);
#endif	NOMENUS

#ifndef NOHELP
void GGPrintHelpMenu(char *FileName, char *MenuName);
#endif	NOHELP

void GGClearMenuArea(void);
void GGClearViewArea(void);
void GGClearAllScreen(void);
void GGViewPortMenuArea(void);
void GGViewPortViewArea(void);
void GGViewPortAllScreen(void);
void GGPutErrorMsg(char *s);
void GGPutMsgXY(char *s, double x, double y);
void GGGetGraphicLine(double x, double y, char s[], int color);
void GGTone(int Frequency, int Duration);

#define GGXYPutStr(x, y, s) GGPutMsgXY(s, x, y)/* Same duty - different name.*/

#endif	GRAPH_GEN_H

