/****************************************************************
*																																*
*	 Filename : OpClL2.c																					*
*																																*
*****************************************************************
*																																*
*		Comment : Level 2 Funktionen von der Plotlibrary.						*
*							Unterstützt das öffnen und das schliessen der			*
*							der Library.																			*
*																																*
*			                    Funktionen														*
*	                        ==========														*
*																																*
*				createplot()			alloziert Speicher für Plotstruktur		*
*				initplot()				setzt die Plotstrukur auf default			*
*				closeplot()				gibt alle Resourcen frei							*
*				datainit()				setzte default Grenzwerte							*
*																																*
*			                 globale Variablen												*
*	                     =================												*
*																																*
*							plot				Plotstrukturpointer										*
*																																*
*				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																					*
*																																*
****************************************************************/

/****************************************************************
*																																*
*	Plotlibrary Includedateien																		*
*																																*
****************************************************************/

#include "Plot.h"
#include "PlotL2.h"
#include "DispL2.h"
#include "OpClL2.h"

/****************************************************************
*																																*
*	globale Variablen																							*
*																																*
****************************************************************/

struct Plot *plot = NULL;

/****************************************************************
*																																*
*	externe Variablen																							*
*																																*
****************************************************************/

extern int plerr;

/****************************************************************
*																																*
*	Function : createplot()																				*
*																																*
*****************************************************************
*																																*
*		 Input : void																								*
*																																*
*		Output : int returnset																			*
*							!= FALSE				Speicher bekommen									*
*							== FALSE				Fehler bei Speicherallozierung		*
*																																*
*****************************************************************
*																																*
*	 Comment : alloziert Speicher für die Plotstruktur. Durch			*
*						 das löschen des Speichers sind die folgenden				*
*						 Standardwerte eingestellt:													*
*																																*
*							Dimension : D2																		*
*									 	Typ :	RID																		*
*								Masstab : LIN																		*
*						 Grenzwerte	:	AUTOON																*
*																																*
****************************************************************/

int createplot()
{
	int plotsize,											/* Grösse der Plotstruktur	*/
			returnset;										/* Globaler Rückgabewert		*/

	plotsize = sizeof(struct Plot);		/* Grösse bestimmen					*/
	plot = (struct Plot *)calloc(1,plotsize);
																		/* hole Speicher						*/
	if (plot == NULL)									/* Fehler ?									*/
	{
		seterror(MEMOPPLOT);						/* Ja												*/
		setreturn(FALSE);
	}
	else
	{
		initplot();											/* initialisiere plot				*/
		setreturn(TRUE);
	}
	return (returnset);								/* und zurück								*/
}

/****************************************************************
*																																*
*	Function : initplot()																					*
*																																*
*****************************************************************
*																																*
*		 Input : void																								*
*																																*
*		Output : void																								*
*																																*
*****************************************************************
*																																*
*	 Comment : Defaultwerte setzten der Plotstruktur soweit sie		*
*						 notwendig sind																			*
*																																*
*																																*
****************************************************************/

void initplot()
{
	plot->typ			= D2;								/* Darstellungstyp					*/
	plot->grid		= GRID;							/* Gitterdarstellung				*/
	plot->clipp		= NOCLIPP;					/* kein Clipping						*/
	plot->autoval	= AUTOON;						/* automatisches minmax			*/
	plot->xmes		= LIN;							/* alle Achsen linear				*/
	plot->ymes		= LIN;
	plot->zmes		= LIN;
	plot->count		= NULL;							/* Kurvencount auf NULL			*/
	plot->currid	= NULL;							/* und neue ID verteilen		*/
	plot->d3opt		= HIDDEN|CROSH;			/* Hiddenline, Crosshatch.	*/
																		/* einschalten							*/
	datainit();
}

/****************************************************************
*																																*
*	Function : datainit()																					*
*																																*
*****************************************************************
*																																*
*		 Input : void																								*
*																																*
*		Output : void																								*
*																																*
*****************************************************************
*																																*
*	 Comment : Alle minimalen und maximalen Grenzwerte der Plot-	*
*						 struktur auf +-5 setzten. Wenn AUTOVAL vor laden		*
*						 der ersten Kurve auseschaltet wird, dann gelten		*
*						 doiese Grenzen.																		*
*																																*
****************************************************************/

static void datainit()
{
	plot->xmin		= (DATA)-5.0;				/* alle Werte löschen				*/
	plot->xmax		= (DATA)5.0;
	plot->ymin		= (DATA)-5.0;
	plot->ymax		= (DATA)5.0;
	plot->zmin		= (DATA)-5.0;
	plot->zmax		= (DATA)5.0;
}

/****************************************************************
*																																*
*	Function : closeplot()																				*
*																																*
*****************************************************************
*																																*
*		 Input : void																								*
*																																*
*		Output : void																								*
*																																*
*****************************************************************
*																																*
*	 Comment : Der Graphikbildschirm wird geschlossen, wenn er		*
*						 geöffnet ist. Alle Kurvenstrukturen und die				*
*						 Plotstruktur werden an das System zurückgegeben.		*
*																																*
****************************************************************/

void closeplot()
{
	char **name;											/* Zeiger auf Charpointer		*/
	int i;														/* Schleifenzähler					*/

	(void)deldata(DELALL,NULL);				/* alle Kurven freigeben		*/

	name = &plot->titel;							/* startend ab Titel				*/
	for (i=0;i<MAXNAMES;i++)					/* alle freigeben						*/
	{
		if (*name)											/* aber nur wenn vorhanden	*/
			free(*name);									/* Name löschen							*/
		name++;													/* nächster Name						*/
	}

	free(plot);												/* plotstruktur freigeben		*/
	plot = NULL;											/* setzte zurück auf NULL		*/
}

