Initial release of Maemo 5 port of gnuplot
[gnuplot] / term / qms.trm
diff --git a/term/qms.trm b/term/qms.trm
new file mode 100644 (file)
index 0000000..e65ba25
--- /dev/null
@@ -0,0 +1,238 @@
+/* Hello, Emacs, this is -*-C-*-
+ * $Id: qms.trm,v 1.12 2006/07/21 02:35:48 sfeam Exp $
+ *
+ */
+
+/* GNUPLOT - qms.trm */
+
+/*[
+ * Copyright 1990 - 1993, 1998, 2004
+ *
+ * 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:
+ *  QMS laser printers
+ *
+ * AUTHORS
+ *  Colin Kelley, Thomas Williams, Russell Lang
+ *
+ * send your comments or suggestions to (gnuplot-info@lists.sourceforge.net).
+ *
+ */
+
+/*
+ * adapted to the new terminal layout by Stefan Bodewig (Dec. 1995)
+ */
+
+#include "driver.h"
+
+#ifdef TERM_REGISTER
+register_term(qms)
+#endif
+
+#ifdef TERM_PROTO
+TERM_PUBLIC void QMS_init __PROTO((void));
+TERM_PUBLIC void QMS_graphics __PROTO((void));
+TERM_PUBLIC void QMS_text __PROTO((void));
+TERM_PUBLIC void QMS_linetype __PROTO((int linetype));
+TERM_PUBLIC void QMS_move __PROTO((unsigned int x, unsigned int y));
+TERM_PUBLIC void QMS_vector __PROTO((unsigned int x2, unsigned int y2));
+TERM_PUBLIC void QMS_put_text __PROTO((unsigned int x, unsigned int y, const char str[]));
+TERM_PUBLIC void QMS_reset __PROTO((void));
+
+#define QMS_XMAX 9000
+#define QMS_YMAX 6000
+
+#define QMS_XLAST (QMS_XMAX - 1)
+#define QMS_YLAST (QMS_YMAX - 1)
+
+#define QMS_VCHAR              120
+#define QMS_HCHAR              70
+#define QMS_VTIC               70
+#define QMS_HTIC               70
+#endif /* TERM_PROTO */
+
+#ifndef TERM_PROTO_ONLY
+#ifdef TERM_BODY
+static int qms_line = 0;       /* to remember current line type */
+
+TERM_PUBLIC void
+QMS_init()
+{
+    /* This was just ^IOL, but at Rutgers at least we need some more stuff */
+    fputs("^PY^-\n^IOL\n^ISYNTAX00000^F^IB11000^IJ00000^IT00000\n", gpoutfile);
+    /*     ^ QUIC on    ^set defaults  ^ set botttom,top,left margins
+     *            ^landscape         ^free format
+     */
+
+/* set defaults are: implicit decimal point, units in inches,
+ * numbers left justified, units in 1/1000 inch, do not ignore spaces
+ * margins are in 1/1000 inch units
+ */
+}
+
+
+TERM_PUBLIC void
+QMS_graphics()
+{
+    fputs("^IGV\n", gpoutfile);
+    /*     ^enter graphics vector mode */
+}
+
+
+
+TERM_PUBLIC void
+QMS_text()
+{
+/* added ^-, because ^, after an ^I command doesn't actually print a page */
+/* Did anybody try this code out?  [uhh...-cdk] */
+    fputs("^IGE\n^-^,", gpoutfile);
+    /*     ^exit graphics vector mode
+     *           ^pass terminator
+     *             ^print page
+     */
+}
+
+
+TERM_PUBLIC void
+QMS_linetype(int linetype)
+{
+    static int width[2 + 9] = { 7, 3, 3, 3, 3, 5, 5, 5, 7, 7, 7 };
+    static int type[2 + 9] = { 0, 1, 0, 2, 3, 0, 2, 3, 0, 2, 3 };
+/*
+ * I don't know about Villanova, but on our printer, using ^V without
+ * previously setting up a pattern crashes the microcode.
+ * [nope, doesn't crash here. -cdk]
+ * [it generates a controller error here on dotted lines. - rjl]
+ */
+/* Code to define patterns added by rjl
+ * According to the manual it should work - but it doesn't
+ */
+    qms_line = linetype;
+    if (linetype >= 9)
+       linetype %= 9;
+
+    fprintf(gpoutfile, "^PW%02d\n", width[linetype + 2]);
+/*                      ^width in dots */
+
+    switch (type[linetype + 2]) {
+    case 1:                    /* short dash */
+       fputs("^PV102025^G\n^V1\n", gpoutfile);
+       /* ^PV = define pattern vector, 1 = pattern number,
+        * 02 = number of pen downs and ups, 025 = .025" length of ups/downs
+        */
+       break;
+    case 2:                    /* medium dash */
+       fputs("^PV202050^G\n^V2\n", gpoutfile);
+       break;
+    case 3:                    /* long dash */
+       fputs("^PV302100^G\n^V3\n", gpoutfile);
+       break;
+    default:
+    case 0:
+       fputs("^V0\n", gpoutfile);
+       break;
+    }
+}
+
+
+TERM_PUBLIC void
+QMS_move(unsigned int x, unsigned int y)
+{
+    fprintf(gpoutfile, "^U%05d:%05d\n", 1000 + x, QMS_YLAST + 1000 - y);
+    /*                   ^pen up vector*/
+}
+
+
+TERM_PUBLIC void
+QMS_vector(unsigned int x2, unsigned int y2)
+{
+    fprintf(gpoutfile, "^D%05d:%05d\n", 1000 + x2, QMS_YLAST + 1000 - y2);
+    /*                  ^pen down vector*/
+}
+
+
+TERM_PUBLIC void
+QMS_put_text(unsigned int x, unsigned int y, const char str[])
+{
+    char ch;
+    QMS_move(x, y + QMS_VCHAR / 3);
+    fputs("^IGE\n", gpoutfile);
+    ch = *str++;
+    while (ch != NUL) {
+       if (ch == '^')
+           putc('^', gpoutfile);
+       putc(ch, gpoutfile);
+       ch = *str++;
+    }
+    fputs("\n^IGV\n", gpoutfile);
+    QMS_linetype(qms_line);    /* restore line type */
+}
+
+
+TERM_PUBLIC void
+QMS_reset()
+{
+    fputs("^PN^-\n", gpoutfile);
+    /*     ^QUIC off */
+}
+
+#endif /* TERM_BODY */
+
+#ifdef TERM_TABLE
+TERM_TABLE_START(qms_driver)
+    "qms", "QMS/QUIC Laser printer (also Talaris 1200 and others)",
+    QMS_XMAX, QMS_YMAX, QMS_VCHAR, QMS_HCHAR,
+    QMS_VTIC, QMS_HTIC, options_null, QMS_init, QMS_reset,
+    QMS_text, null_scale, QMS_graphics, QMS_move, QMS_vector,
+    QMS_linetype, QMS_put_text, null_text_angle,
+    null_justify_text, line_and_point, do_arrow, set_font_null
+TERM_TABLE_END(qms_driver)
+
+#undef LAST_TERM
+#define LAST_TERM qms_driver
+
+#endif /* TERM_TABLE */
+#endif /* TERM_PROTO_ONLY */
+
+#ifdef TERM_HELP
+START_HELP(qms)
+"1 qms",
+"?commands set terminal qms",
+"?set terminal qms",
+"?set term qms",
+"?terminal qms",
+"?term qms",
+"?qms",
+" The `qms` terminal driver supports the QMS/QUIC Laser printer, the Talaris",
+" 1200 and others.  It has no options."
+END_HELP(qms)
+#endif