/*
	rubyinit.c		derived and compiled from `stuff\rgemhndl.c'

	Copyright (C) 1987, 1992 Markus M. Nick

	---------------------------------------------------------------

	This program is distributed in the hope that it will be useful, 
	but WITHOUT ANY WARRANTY; without even the implied warranty of 
	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the 
	documentation `docs\ruby.tex' for more details.

	---------------------------------------------------------------

	Initialisierung, Bereitstellung und Bereinigung der von Ruby 
	ben”tigten globalen Variablen, die auch sonst von allgemeinem 
	Interesse sind.
		
	Da die Variablen oft auch von anderen Libraries schon bereit-
	gestellt werden, kann man sich diesen Source durch bedingte 
	Compilierung sehr leicht anpassen.
		
	Anpassung (via Commandline-Parameter beim Compilieren):
		-DNO_xywhdesk		kein xdesk, ydesk, wdesk, hdesk n”tig
		-DNO_lib_handle		kein lib_handle n”tig
		-DNO_std_fdb		kein std_fdb n”tig
		
	Verwendung:
	ruby_init()
		irgendwo zwischen appl_init() und dem ersten Aufruf 
		einer Ruby-Funktion aufrufen.  ruby_init() liefert im 
		Fehlerfall FALSE (Workstation kann nicht ge”ffnet werden 
		o.„.) und TRUE, wenn alles ok ist.
	ruby_exit()
		vor appl_exit() aufrufen, um die lib_handle-Workstation 
		zu schliežen.  Bitte auch aufrufen, wenn die Funktion 
		evtl. leer ist.  ruby_exit() k”nnte irgendwann mal 
		unverhofft Code enthalten, den Sie nicht erwarten.
	
	Nutzungsbedingungen:
	Es gelten die in der Dokumentation `docs\ruby.tex' aufgefhrten 
	Bedingungen.
	Bringen Sie bitte kein individuell abge„ndertes rubyinit.c ohne 
	deutliche Hinweise auf die Žnderungen in Umlauf.  Achten Sie 
	bitte darauf, daž dieser Source zusammen mit Ruby unver„ndert 
	weitergegeben werden muž.  Ihr individuelles rubyinit.c k”nnen 
	Sie zusammen mit Ruby gerne zus„tzlich weitergeben, wenn Sie 
	deutlich darauf hinweisen, was Original und was Ihre Fassung ist.

	Autoren:		Markus M. Nick
		
	History:
	04.04.92 mmn v1.0	got started...
*/

#define __RUBY_INIT__	1
#include <stddef.h>
#include <stdlib.h>
#include <aes.h>
#include <vdi.h>
#include <tos.h>
#include "portab.h"


#ifndef NO_xywhdesk
WORD xdesk, ydesk, wdesk, hdesk;
#endif

#ifndef NO_std_fdb
MFDB std_fdb;	/* standard FDB */
#endif


#ifndef NO_lib_handle
int lib_handle;
#endif


BOOLEAN ruby_init()
{
	int work_out[57];
	int dum;
	
	/* Handle der physikalischen Screen-Workstation von AES besorgen */
	int phys_handle = graf_handle(&dum, &dum, &dum, &dum);

#ifndef NO_lib_handle
	static int work_in[] = {
		1,					/* Bildschirmtreiber */
		1, BLACK,			/* Linientyp, -farbe */
		1, BLACK,			/* Markertyp, -farbe */
		1, BLACK,			/* Textstil, -farbe */
		FIS_SOLID, 1, WHITE,/* Fuelltyp, Fuellmusterindex, -farbe */
		2					/* Koordinatenflag */
	};
	
	work_in[0] = Getrez()+2;

	lib_handle = phys_handle;
	v_opnvwk(work_in, &lib_handle, work_out);

	if (lib_handle <= 0)
		return FALSE;
#endif

#ifndef NO_std_fdb
	std_fdb.fd_w = work_out[0]+1;
	std_fdb.fd_h = work_out[1]+1;
	std_fdb.fd_wdwidth = std_fdb.fd_w / 16 /* * std_fdb.fd_nplanes*/ ;
	
	std_fdb.fd_addr = NULL;
	std_fdb.fd_stand = 0;	/* Rasterkoordinatensystem */

	vq_extnd(phys_handle, TRUE, work_out);
	std_fdb.fd_nplanes = work_out[4];
#endif

#ifndef NO_xywhdesk
	wind_get(0, WF_WORKXYWH, &xdesk,&ydesk,&wdesk,&hdesk);
#endif

	return TRUE;
}


void ruby_exit()
{
#ifndef NO_lib_handle
	v_clsvwk(lib_handle);
#endif
}

/* -eof- */
