/* GNUPLOT - mgr.trm */
/*
 * This file is included by ../term.c.
 *
 * This terminal driver supports:
 *  Mgr window system, color display
 *
 * AUTHOR
 *  Vincent Broman, broman@nosc.mil
 */
/*
 * adapted to the new terminal layout by Stefan Bodewig (Dec. 1995)
 */

#ifndef GOT_DRIVER_H
#include "driver.h"
#endif

#ifdef TERM_REGISTER
register_term(mgr)
#endif

#ifdef TERM_PROTO
TERM_PUBLIC void MGR_init __P((void));
TERM_PUBLIC void MGR_graphics __P((void));
TERM_PUBLIC void MGR_text __P((void));
TERM_PUBLIC void MGR_linetype __P((int linetype));
TERM_PUBLIC void MGR_move __P((unsigned int x, unsigned int y));
TERM_PUBLIC void MGR_vector __P((unsigned int x, unsigned int y));
TERM_PUBLIC void MGR_put_text __P((unsigned int x, unsigned int y, char *str));
TERM_PUBLIC void MGR_reset __P((void));
#define MGR_XMAX 640
#define MGR_YMAX 400
#define MGR_VCHAR 16
#define MGR_HCHAR 8
#define MGR_VTIC 4
#define MGR_HTIC 4
#endif /* TERM_PROTO */

#ifndef TERM_PROTO_ONLY
#ifdef TERM_BODY
#undef ESC
#include <term.h>	/* from Mgr, not gnuplot */



static int MGR_border = 5;
static int MGR_winnbr = 0;

static int MGR_rowcount = 24;
static int MGR_winwidth = MGR_XMAX;
static int MGR_winheight = MGR_YMAX;
static int MGR_vchar = MGR_VCHAR;
static int MGR_hchar = MGR_HCHAR;


TERM_PUBLIC void MGR_init()
{
char res[300];
int winnbr;
int w, h, bor;

	m_setup( 0);
	m_ttyset();

	m_getinfo( G_SYSTEM);
	if( m_gets( res) && sscanf( res, "%*s%d%d%d", &w, &h, &bor) == 3)
		MGR_border = bor;

	m_newwin( 0, 0, MGR_winwidth+2*MGR_border, MGR_winheight+2*MGR_border);
	if( m_gets( res) && sscanf( res, "%d", &winnbr) == 1)
		MGR_winnbr = winnbr;
		/* if no alt window is created, then the main window is used */
		/* and if size is different, term_tbl updated later */
	m_selectwin( MGR_winnbr);
	m_setmode( M_ABS);

	m_getinfo( G_FONT);
	if( m_gets( res) && sscanf( res, "%d %d", &w, &h) == 2) {
		MGR_vchar = h;
		MGR_hchar = w;
	}
	m_ttyreset();

	term->v_char = MGR_vchar;
	term->h_char = MGR_hchar;
	term->v_tic = MGR_vchar / 4;
	term->h_tic = MGR_hchar / 2;

	m_selectwin( 0);
	m_flush();
}


TERM_PUBLIC void MGR_graphics()
{
char res[32];
int c, r, w, h;

	m_selectwin( MGR_winnbr);
	m_setmode( M_ACTIVATE);
	m_clear();

	/* we permit the user to reshape the window arbitrarily.
	   do_plot calls boundary to recheck the term_tbl for each plot */
	m_ttyset();
	m_getinfo( G_WINSIZE);
	if( m_gets( res) && sscanf( res, "%d %d", &c, &r) == 2)
		MGR_rowcount = r;
	m_getinfo( G_COORDS);
	if( m_gets( res) && sscanf( res, "%d %d %d %d", &c, &r, &w, &h) == 4) {
		term->xmax = MGR_winwidth = w;
		term->ymax = MGR_winheight = h;
	}
	m_ttyreset();
	m_flush();
}


TERM_PUBLIC void MGR_text()
{
	m_go( 0, 0);
	m_aligntext();
	if( MGR_winnbr == 0)
		m_move( 0, MGR_rowcount - 1);
	m_selectwin( 0);
	m_flush();
}


TERM_PUBLIC void MGR_linetype( linetype)
int     linetype;
{
/*
 * this mapping of colors is intended for a color sun on which
 * colors 0-23 are defined, 0 is white, 1 is black.
 */
	m_linecolor( B_SRC, (linetype < 0)? 1: (2 + (linetype % 22)));
}


TERM_PUBLIC void MGR_move( x, y)
unsigned int x, y;
{
	m_go( x, MGR_winheight - 1 - y);
}


TERM_PUBLIC void MGR_vector( x, y)
unsigned int x, y;
{
	m_draw( x, MGR_winheight - 1 - y);
}


TERM_PUBLIC void MGR_put_text( x, y, str)
unsigned int x, y;
char *str;
{
	MGR_move( x, y - MGR_vchar/2);
	m_aligntext();
	m_printstr( str);
}


TERM_PUBLIC void MGR_reset()
{
	m_destroywin( MGR_winnbr);
	MGR_winnbr = 0;
	m_setmode( M_ACTIVATE);
	m_flush();
}

#endif /* TERM_BODY */

#ifdef TERM_TABLE

TERM_TABLE_START(mgr_driver)
    "mgr", "Mgr window system",
	/* dimensions nominal, replaced during MGR_graphics call */
	   MGR_XMAX, MGR_YMAX, MGR_VCHAR, MGR_HCHAR, 
	   MGR_VTIC, MGR_HTIC, options_null, MGR_init, MGR_reset, 
	   MGR_text, null_scale, MGR_graphics, MGR_move, MGR_vector,
	   MGR_linetype, MGR_put_text, null_text_angle, 
	   null_justify_text, do_point, do_arrow, set_font_null
TERM_TABLE_END(mgr_driver)

#undef LAST_TERM
#define LAST_TERM mgr_driver

#endif /* TERM_TABLE */
#endif /* TERM_PROTO_ONLY */

/*
 * NAME: mgr
 *
 * OPTIONS: none
 *
 * SUPPORTS: Mgr Window system
 *
 * Further Info: don't even now this system
 *
 */