/*
* $Id: qms.trm,v 3.26 92/03/24 22:35:41 woo Exp Locker: woo $
*/
/* GNUPLOT - qms.trm */
/*
* Copyright (C) 1990, 1991, 1992
*
* 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 modified code. Modifications are to be distributed
* as patches to released version.
*
* This software is provided "as is" without express or implied warranty.
*
* 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 (info-gnuplot@ames.arc.nasa.gov).
*
*/
#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
int qms_line = 0; /* to remember current line type */
QMS_init()
{
/* This was just ^IOL, but at Rutgers at least we need some more stuff */
fprintf(outfile,"^PY^-\n^IOL\n^ISYNTAX00000^F^IB11000^IJ00000^IT00000\n");
/* ^ 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 */
}
QMS_graphics()
{
fprintf(outfile,"^IGV\n");
/* ^enter graphics vector mode */
}
QMS_text()
{
/* added ^-, because ^, after an ^I command doesn't actually print a page */
/* Did anybody try this code out? [uhh...-cdk] */
fprintf(outfile,"^IGE\n^-^,");
/* ^exit graphics vector mode
^pass terminator
^print page */
}
QMS_linetype(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(outfile,"^PW%02d\n",width[linetype+2]);
/* ^width in dots */
switch (type[linetype+2]) {
case 1 : /* short dash */
fprintf(outfile,"^PV102025^G\n^V1\n");
/* ^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 */
fprintf(outfile,"^PV202050^G\n^V2\n");
break;
case 3 : /* long dash */
fprintf(outfile,"^PV302100^G\n^V3\n");
break;
default:
case 0 :
fprintf(outfile,"^V0\n");
break;
}
}
QMS_move(x,y)
int x,y;
{
fprintf(outfile,"^U%05d:%05d\n", 1000 + x, QMS_YLAST + 1000 - y);
/* ^pen up vector*/
}
QMS_vector(x2,y2)
int x2,y2;
{
fprintf(outfile,"^D%05d:%05d\n", 1000 + x2, QMS_YLAST + 1000 - y2);
/* ^pen down vector*/
}
QMS_put_text(x,y,str)
unsigned int x,y;
char str[];
{
char ch;
QMS_move(x,y + QMS_VCHAR/3);
fputs("^IGE\n",outfile);
ch = *str++;
while(ch!='\0') {
if (ch=='^')
putc('^',outfile);
putc(ch,outfile);
ch = *str++;
}
fputs("\n^IGV\n",outfile);
QMS_linetype(qms_line); /* restore line type */
}
QMS_reset()
{
fprintf(outfile,"^PN^-\n");
/* ^QUIC off*/
}