--- /dev/null
+/* Hello, Emacs, this is -*-C-*-
+ * $Id: mgr.trm,v 1.11 2006/07/21 02:35:47 sfeam Exp $
+ */
+
+/* GNUPLOT - mgr.trm */
+
+/*[
+ * Copyright 1986 - 1993, 1998, 2004 Thomas Williams, Colin Kelley
+ *
+ * Permission to use, copy, and distribute this software and its
+ * documentation for any purpose with or without fee is hereby granted,
+ * provided that the above copyright notice appear in all copies and
+ * that both that copyright notice and this permission notice appear
+ * in supporting documentation.
+ *
+ * Permission to modify the software is granted, but not the right to
+ * distribute the complete modified source code. Modifications are to
+ * be distributed as patches to the released version. Permission to
+ * distribute binaries produced by compiling modified sources is granted,
+ * provided you
+ * 1. distribute the corresponding source modifications from the
+ * released version in the form of a patch file along with the binaries,
+ * 2. add special version identification to distinguish your version
+ * in addition to the base release version number,
+ * 3. provide your name and address as the primary contact for the
+ * support of your modified version, and
+ * 4. retain our contact information in regard to use of the base
+ * software.
+ * Permission to distribute the released version of the source code along
+ * with corresponding source modifications in the form of a patch file is
+ * granted with same provisions 2 through 4 for binary distributions.
+ *
+ * This software is provided "as is" without express or implied warranty
+ * to the extent permitted by applicable law.
+]*/
+
+/*
+ * 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)
+ */
+
+#include "driver.h"
+
+#ifdef TERM_REGISTER
+register_term(mgr)
+#endif
+
+#ifdef TERM_PROTO
+TERM_PUBLIC void MGR_init __PROTO((void));
+TERM_PUBLIC void MGR_graphics __PROTO((void));
+TERM_PUBLIC void MGR_text __PROTO((void));
+TERM_PUBLIC void MGR_linetype __PROTO((int linetype));
+TERM_PUBLIC void MGR_move __PROTO((unsigned int x, unsigned int y));
+TERM_PUBLIC void MGR_vector __PROTO((unsigned int x, unsigned int y));
+TERM_PUBLIC void MGR_put_text __PROTO((unsigned int x, unsigned int y, const char *str));
+TERM_PUBLIC void MGR_reset __PROTO((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(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(unsigned int x, unsigned int y)
+{
+ m_go(x, MGR_winheight - 1 - y);
+}
+
+
+TERM_PUBLIC void
+MGR_vector(unsigned int x, unsigned int y)
+{
+ m_draw(x, MGR_winheight - 1 - y);
+}
+
+
+TERM_PUBLIC void
+MGR_put_text(unsigned int x, unsigned int y, const 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 */
+
+#ifdef TERM_HELP
+START_HELP(mgr)
+"1 mgr",
+"?commands set terminal mgr",
+"?set terminal mgr",
+"?set term mgr",
+"?terminal mgr",
+"?term mgr",
+"?mgr",
+" The `mgr` terminal driver supports the Mgr Window system. It has no options."
+END_HELP(mgr)
+#endif