#ifndef PLOTLIB_H
#define PLOTLIB_H

/****************************************************************
*																																*
*	 Filename : PlotLib.h																					*
*																																*
*****************************************************************
*																																*
*		Comment : Includedatei für die Plotlibrary. Diese Datei			*
*							muss immer eingebunden werden, wenn eine Funktion	*
*							dieser Library verwendet wird.										*
*																																*
*				Rev : V1.0																							*
*																																*
*		History : V1.0 erstellen dieses Files							15/11/89	*
*																																*
*				Doc : Plotlibrary User's Guide													*
*																																*
*			 Bugs : keine bekannten																		*
*																																*
*			Autor : Oesch Silvano																			*
*																																*
*			Datum : 15/11/89																					*
*																																*
****************************************************************/

/****************************************************************
*																																*
*	Defines für die verschiedenen Rechner und Betriebssysteme.		*
*	Implemenationen auf den Rechnern															*
*																																*
*							- AMIGA	unter Lattice C														*
*							- MSDOS und kompatible unter Turbo C							*
*																																*
*	vorhanden.																										*
*																																*
****************************************************************/

/****************************************************************
*																																*
* Prototypendeklaration																					*
*																																*
*****************************************************************
*																																*
*	Wenn ein Compiler keine Prototypen verarbeiten kann, dann			*
*	die Variable PROTOTYPEN auf 0 definiert werden.								*
*																																*
****************************************************************/

#ifdef AMIGA
#ifdef LATTICE_50
#define PROTOTYPEN 1
#endif
#endif

#ifdef __MSDOS__
#ifdef __TURBOC__
#define PROTOTYPEN 1
#endif
#endif


#ifdef __MSDOS__
#ifdef __TURBOC__

/****************************************************************
*																																*
* Graphiktreiberdefinitionen nur für MSDOS											*
*																																*
*****************************************************************
*																																*
*	Diese Deklaration beinhaltet alle Treiber, welche gelinkt			*
*	(1) und welche nicht gelinkt (0) werden sollen. Da jeder 			*
*	Treiber ca. 6 kBytes gross ist, kann so das Programm stark		*
* verkleinert werden. Wenn der Treiber nicht definiert ist,			*
*	wird versucht, den richtigen von der Disk zu laden.						*
*																																*
****************************************************************/

#define MAXDRIVERS 6

#define ATT_DRIVER			0						/* Hier müssen die Treiber	*/
#define CGA_DRIVER			1						/* angegeben werden. Wenn		*/
#define EGAVGA_DRIVER		1						/* alle Treiber mit 0 def.	*/
#define PC3270_DRIVER		0						/* sind, dann wird auf der	*/
#define HERC_DRIVER			0						/* Disk der Graphiktreiber	*/
#define IBM8514_DRIVER	0						/* gesucht.									*/

#ifndef _PLOT_											/* Nur in Userprogramm			*/
																		/* nicht definiert.					*/

#include <dos.h>

extern unsigned _stklen = 10240;		/* 10kB Stack für qsort			*/

#if CGA_DRIVER
extern void CGA_driver(void);
#endif

#if EGAVGA_DRIVER
extern void EGAVGA_driver(void);
#endif

#if PC3270_DRIVER
extern void PC3270_driver(void);
#endif

#if HERC_DRIVER
extern void Herc_driver(void);
#endif

#if IBM8514_DRIVER
extern void IBM8414_driver(void);
#endif

#if ATT_DRIVER
extern void ATT_driver(void);
#endif

void (*DRIVERS[MAXDRIVERS])(void) =
{

#if CGA_DRIVER
	CGA_driver,
#else
	NULL,
#endif

#if EGAVGA_DRIVER
	EGAVGA_driver,
#else
	NULL,
#endif

#if PC3270_DRIVER
	PC3270_driver,
#else
	NULL,
#endif

#if HERC_DRIVER
	Herc_driver,
#else
	NULL,
#endif

#if IBM8514_DRIVER
	IBM8414_driver,
#else
	NULL,
#endif

#if ATT_DRIVER
	ATT_driver,
#else
	NULL,
#endif

};

#endif
#endif
#endif

/****************************************************************
*																																*
* Typedefinition																								*
*																																*
*****************************************************************
*																																*
*	DATA steht für den Datentyp welcher verarbeitet wird. Er kann	*
*	bei Geschwindigkeitsproblemen auf float gesetzt werden.				*
*																																*
*	GPT steht für GraphicPoint. Damit ist die Grösse gemeint,			*
*	welche verwendet wird, um in den Bildschirm mittels der				*
*	ScFillPolyLine zu zeichnen. Dieser Wert muss auf den					*
*	verschiedenen Rechnern angepasst werden.											*
*																																*
****************************************************************/

typedef double DATA;

#ifdef AMIGA
typedef short GPT;
#endif

#ifdef __MSDOS__
#ifdef __TURBOC__
typedef int GPT;
#endif
#endif


/****************************************************************
*																																*
*	allgemeine Defines																						*
*																																*
****************************************************************/

#ifndef TRUE
#define TRUE 1
#endif

#ifndef FALSE
#define FALSE 0
#endif

/****************************************************************
*																																*
* Darstellungsparameter																					*
*																																*
****************************************************************/

#define NOTYP		0										/* kein spez. Typ						*/
#define D2			1										/* Zweidimensionale Dar.		*/
#define NIV			2										/* Niveau Darstellung				*/
#define D3			3										/* Dreidimensionale Dar.		*/

/****************************************************************
*																																*
*	Clipping																											*
*																																*
****************************************************************/

#define NOCLIPP	1										/* kein Clipping						*/
#define CLIPP		2										/* Clippen									*/

/****************************************************************
*																																*
*	Übergabeparameter für Set_Autoval															*
*																																*
****************************************************************/

#define AUTOON	1										/* einschalten							*/
#define AUTOOFF	2										/* ausschalten							*/

/****************************************************************
*																																*
* Übergabeparameter für Set_Mes																	*
*																																*
****************************************************************/

#define LIN 1												/* lineare Darstellung			*/
#define LOG 2												/* log. Darstellung					*/
#define LN	3												/* natürlich log. Dar.			*/

/****************************************************************
*																																*
* Übergabeparameter für Set_Grid																*
*																																*
****************************************************************/

#define GRID		1										/* mit Gitter								*/
#define NOGRID	2										/* ohne Gitter							*/

/****************************************************************
*																																*
* Übergabeparameter für Set_Style																*
*																																*
****************************************************************/

#define STYLE		0										/* mit Füllmuster						*/
#define NOSTYLE	-1									/* ohne Füllmuster					*/

/****************************************************************
*																																*
* Übergabeparameter für Set_Value																*
*																																*
****************************************************************/

#define CLEAR			-1								/* Userwerte löschen				*/
#define XMIN			0									/* sonst die verschiedenen	*/
#define XMAX			1									/* Werte für die entsp.			*/
#define YMIN			2									/* Grenze										*/
#define YMAX			3
#define ZMIN			4
#define ZMAX			5

/****************************************************************
*																																*
* Übergabeparameter für Set_Curvecolor													*
*																																*
****************************************************************/

#define COLDET		0									/* Color detection					*/

/****************************************************************
*																																*
* Übergabeparameter für Del_Data																*
*																																*
****************************************************************/

#define DELALL	-2									/* alle Daten löschen				*/
#define DELLAST -1									/* letzte Kurve löschen			*/
#define NOID		0										/* keine ID, Namen					*/

/****************************************************************
*																																*
* Übergabeparameter der Achsen																	*
*																																*
****************************************************************/

#define XAXIS	1											/* X-Achse									*/
#define	YAXIS	2											/* Y-Achse									*/
#define	ZAXIS	3											/* Z-Achse									*/

/****************************************************************
*																																*
* Übergabeparameter für Set_PlotSize														*
*																																*
****************************************************************/

#define ROTATE			1								/* Plotausgabe drehen				*/
#define PLDATASET		2								/* Plotterdaten gesetzt			*/
#define PLLOADED		4								/* Plottertreiber geladen		*/

/****************************************************************
*																																*
* Übergabeparameter für Set_3DOptions														*
*																																*
****************************************************************/

#define CROSHON			0x01						/* Croshatching ein					*/
#define CROSHOFF		0x02						/* Croshatching aus					*/
#define HIDDENON		0x04						/* Hiddenline ein						*/
#define HIDDENOFF		0x08						/* Hiddenline aus						*/

/****************************************************************
*																																*
* Übergabeparameter für Display																	*
*																																*
****************************************************************/

#define SCREENOUT 	1								/* Bildschirmausgabe				*/
#define SCREENCLOSE	2								/* Bildschirmausgabe ende		*/
#define PRINTOUT		3								/* Ausgabe auf Matrixdr.		*/
#define PLOTOUT			4								/* Ausgabe auf Plotter			*/

#define GRAPHNOTSET	1								/* keine eigene Graphik			*/
#define GRAPHSET		2								/* eigene Graphik						*/
#define PLOTSET			4								/* Plotausgabe im gange			*/

/****************************************************************
*																																*
*	Definition der Funktionsparameter der Level 1 Funktionen			*
*																																*
****************************************************************/

#if PROTOTYPEN

int open_plot(void);
int close_plot(void);
int get_data(DATA (*)(DATA),DATA ,DATA ,int );
int load_data(char *,int );
int del_data(int ,char *);
int set_axisname(int ,char *);
int set_unit(int ,char *);
int set_titel(char *);
int set_curvename(int ,char *);
int set_value(int ,DATA );
int get_value(int ,DATA *);
int set_autoval(int );
int set_grid(int );
int set_fill(int );
int set_mes(int ,int );
int set_curvecolor(int ,char *,int );
int set_3doptions(int);
int set_plotsize(int ,int ,int ,int ,int ,char *);
int display(int ,int );
void dis_ploterror(void);
char *get_ploterror(void);

#else

int open_plot();
int close_plot();
int get_data();
int load_data();
int del_data();
int set_axisname();
int set_unit();
int set_titel();
int set_curvename();
int set_value();
int get_value();
int set_autoval();
int set_grid();
int set_fill();
int set_mes();
int set_curvecolor();
int set_3doptions();
int set_plotsize();
int display();
void dis_ploterror();
char *get_ploterror();

#endif

#endif
