--- /dev/null
+/* Hello, Emacs, this is -*-C-*-
+ * $Id: cgi.trm,v 1.14 2006/07/21 02:35:45 sfeam Exp $
+ *
+ */
+
+/* GNUPLOT - cgi.trm */
+
+/*[
+ * Copyright (C) 1990 - 1993 Ronald Florence
+ *
+ * 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.h.
+ *
+ * This terminal driver supports SCO CGI drivers
+ *
+ * AUTHOR
+ * Ronald Florence <ron@18james.com>
+ */
+
+/*
+ * adapted to the new terminal layout by Stefan Bodewig (Dec. 1995)
+ */
+
+#include "driver.h"
+
+#ifdef TERM_REGISTER
+register_term(cgi)
+register_term(hcgi)
+#endif
+
+#ifdef TERM_PROTO
+TERM_PUBLIC void CGI_init __PROTO((void));
+TERM_PUBLIC void HCGI_init __PROTO((void));
+TERM_PUBLIC void CGI_graphics __PROTO((void));
+TERM_PUBLIC void CGI_text __PROTO((void));
+TERM_PUBLIC void CGI_reset __PROTO((void));
+TERM_PUBLIC void CGI_move __PROTO((unsigned int x, unsigned int y));
+TERM_PUBLIC void CGI_vector __PROTO((unsigned int x, unsigned int y));
+TERM_PUBLIC void CGI_linetype __PROTO((int linetype));
+TERM_PUBLIC void CGI_put_text __PROTO((unsigned int x, unsigned int y, const char *str));
+TERM_PUBLIC int CGI_text_angle __PROTO((int ang));
+TERM_PUBLIC int CGI_justify_text __PROTO((enum JUSTIFY mode));
+TERM_PUBLIC void CGI_point __PROTO((unsigned int x, unsigned int y, int num));
+#define CGI_XMAX 32767
+#define CGI_YMAX 32767
+#define CGI_VTIC (CGI_YMAX / 75)
+#define CGI_HTIC term->h_tic
+#define CGI_VCHAR term->v_char
+#define CGI_HCHAR term->h_char
+#endif
+
+#ifndef TERM_PROTO_ONLY
+#ifdef TERM_BODY
+
+#ifdef VGA_MONO
+static short rgb[16][3] =
+{
+ 0, 0, 0, /* Black */
+ 1000, 1000, 1000, /* White */
+ 800, 800, 0, /* Red */
+ 0, 600, 0, /* Green */
+ 0, 800, 800, /* Blue */
+ 1000, 1000, 400, /* Yellow */
+ 0, 600, 600, /* Cyan */
+ 600, 600, 600, /* Magenta */
+ 800, 800, 0, /* Brown */
+ 600, 600, 600, /* Lt. Grey */
+ 400, 600, 400, /* Dark Grey */
+ 400, 600, 1000, /* Lt. Blue */
+ 400, 1000, 400, /* Lt Green */
+ 400, 1000, 1000, /* Lt Cyan */
+ 1000, 600, 400, /* Lt Red */
+ 600, 600, 1000 /* Lt Magenta */
+};
+#endif
+
+#define CRT (gout[45] == 0)
+#define CGICOLORS gout[13]
+#define CGILINES gout[6]
+#define CGIROTATES gout[36]
+#define CGITEXTALIGN gout[48]
+
+static short gout[66];
+static short cgidev;
+static short vect[4];
+static short gin[19] =
+{
+ 0, /* default aspect ratio */
+ 1, /* solid line */
+ 1, /* line color */
+ 1, /* marker type . */
+ 1, /* marker color */
+ 1, /* graphics text font */
+ 1, /* graphics text color */
+ 0, /* fill interior style */
+ 0, /* fill style index */
+ 1, /* fill color index */
+ 1 /* prompt for paper changes */
+};
+
+char *cgidriver, *getenv();
+
+
+TERM_PUBLIC void
+CGI_init()
+{
+ if (getenv(cgidriver = "CGIDISP") == NULL)
+ HCGI_init();
+}
+
+
+TERM_PUBLIC void
+HCGI_init()
+{
+ if (getenv(cgidriver = "CGIPRNT") == NULL)
+ int_error(NO_CARET, "no CGI driver");
+}
+
+
+TERM_PUBLIC void
+CGI_graphics()
+{
+ int i, aspect;
+ char *s;
+ short font_cap[9];
+
+ if ((s = getenv("ASPECT")) != NULL && (aspect = atoi(s)) >= 0 && aspect <= 3)
+ gin[0] = aspect;
+ for (i = 0; cgidriver[i]; i++)
+ gin[11 + i] = cgidriver[i];
+ gin[18] = ' ';
+
+ if (v_opnwk(gin, &cgidev, gout) < 0) {
+ int_error(NO_CARET, "CGI error %d opening %s", -vq_error(), cgidriver);
+ }
+ vqt_representation(cgidev, 9, font_cap);
+ CGI_VCHAR = font_cap[8] * 3 / 2;
+ CGI_HCHAR = font_cap[7];
+ CGI_HTIC = CGI_VTIC * ((double) gout[1] / (double) gout[4]) /
+ ((double) gout[0] / (double) gout[3]);
+#ifdef VGA_MONO
+ if (CGICOLORS > 2)
+ vsc_table(cgidev, 0, CGICOLORS, rgb);
+#endif
+}
+
+
+TERM_PUBLIC void
+CGI_text()
+{
+ if (CRT) {
+ short ptin[2];
+ char strin[2];
+
+ ptin[0] = 0;
+ ptin[1] = 0;
+ vrq_string(cgidev, 1, 0, ptin, strin);
+ }
+ v_clswk(cgidev);
+}
+
+
+TERM_PUBLIC void
+CGI_reset()
+{
+}
+
+
+TERM_PUBLIC void
+CGI_move(unsigned int x, unsigned int y)
+{
+ vect[0] = x;
+ vect[1] = y;
+}
+
+TERM_PUBLIC void
+CGI_vector(unsigned int x, unsigned int y)
+{
+ vect[2] = x;
+ vect[3] = y;
+ v_pline(cgidev, 2, vect);
+ vect[0] = x;
+ vect[1] = y;
+}
+
+
+TERM_PUBLIC void
+CGI_linetype(int linetype)
+{
+ short lcolor;
+
+ if (CGICOLORS > 2) {
+ lcolor = (linetype + 2) % CGICOLORS + 1;
+ vsl_color(cgidev, lcolor);
+ vsm_color(cgidev, lcolor);
+ }
+ vsl_type(cgidev, (linetype < 1) ? 1 : (linetype % CGILINES) + 1);
+}
+
+
+TERM_PUBLIC void
+CGI_put_text(unsigned int x, unsigned int y, const char *str)
+{
+ v_gtext(cgidev, (short) x, (short) y, str);
+}
+
+
+TERM_PUBLIC int
+CGI_text_angle(int ang)
+{
+ if (!CGIROTATES)
+ return FALSE;
+ /* angles are 1/10 degree ccw */
+ vst_rotation(cgidev, (ang) ? 900 : 0);
+ return TRUE;
+}
+
+
+TERM_PUBLIC int
+CGI_justify_text(enum JUSTIFY mode)
+{
+ short hor_in, hor_out, vert_out;
+
+ if (!CGITEXTALIGN)
+ return FALSE;
+
+ switch (mode) {
+ case LEFT:
+ hor_in = 0;
+ break;
+ case CENTRE:
+ hor_in = 1;
+ break;
+ case RIGHT:
+ hor_in = 2;
+ break;
+ }
+ vst_alignment(cgidev, hor_in, 1, &hor_out, &vert_out);
+ return TRUE;
+}
+
+
+#define POINT_TYPES 6
+
+TERM_PUBLIC void
+CGI_point(unsigned int x, unsigned y, int num)
+{
+ short point[2];
+ static short cgimarker[POINT_TYPES] = { 1, 2, 6, 4, 5, 3 };
+ /* . + <> [] X * */
+ if (num < 0) {
+ CGI_move(x, y);
+ CGI_vector(x, y);
+ } else {
+ vsm_type(cgidev, cgimarker[num % POINT_TYPES]);
+ point[0] = x;
+ point[1] = y;
+ v_pmarker(cgidev, 1, point);
+ }
+}
+
+#endif /* TERM_BODY */
+
+#ifdef TERM_TABLE
+
+TERM_TABLE_START(cgi_driver)
+ "cgi", "SCO CGI drivers (requires CGIDISP or CGIPRNT env variable)",
+ CGI_XMAX, CGI_YMAX, 0, 0,
+ CGI_VTIC, 0, options_null, CGI_init, CGI_reset,
+ CGI_text, null_scale, CGI_graphics, CGI_move, CGI_vector,
+ CGI_linetype, CGI_put_text, CGI_text_angle,
+ CGI_justify_text, CGI_point, do_arrow, set_font_null
+TERM_TABLE_END(cgi_driver)
+
+#undef LAST_TERM
+#define LAST_TERM cgi_driver
+
+TERM_TABLE_START(hcgi_driver)
+ "hcgi", "SCO CGI drivers (hardcopy, requires CGIPRNT env variable)",
+ CGI_XMAX, CGI_YMAX, 0, 0,
+ CGI_VTIC, 0, options_null, HCGI_init, CGI_reset,
+ CGI_text, null_scale, CGI_graphics, CGI_move, CGI_vector,
+ CGI_linetype, CGI_put_text, CGI_text_angle,
+ CGI_justify_text, CGI_point, do_arrow, set_font_null
+TERM_TABLE_END(hcgi_driver)
+
+#undef LAST_TERM
+#define LAST_TERM hcgi_driver
+
+#endif /* TERM_TABLE */
+#endif /* TERM_PROTO_ONLY */
+
+#ifdef TERM_HELP
+START_HELP(cgi)
+"1 cgi",
+"?commands set terminal cgi",
+"?set terminal cgi",
+"?set term cgi",
+"?terminal cgi",
+"?term cgi",
+"?cgi",
+"?commands set terminal hcgi",
+"?set terminal hcgi",
+"?set term hcgi",
+"?terminal hcgi",
+"?term hcgi",
+"?hcgi",
+" The `cgi` and `hcgi` terminal drivers support SCO CGI drivers. `hcgi` is for",
+" printers; the environment variable CGIPRNT must be set. `cgi` may be used",
+" for either a display or hardcopy; if the environment variable CGIDISP is set,",
+" then that display is used. Otherwise CGIPRNT is used.",
+"",
+" These terminals have no options."
+END_HELP(cgi)
+#endif