/*
* $Id: hpgl.trm,v 3.26 92/03/24 22:34:56 woo Exp Locker: woo $
*/
/* GNUPLOT - hpgl.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:
* hpgl, hp7580b, HP Laserjet III
*
* AUTHORS
* Colin Kelley, Thomas Williams, Russell Lang
*
* send your comments or suggestions to (info-gnuplot@ames.arc.nasa.gov).
*
*/
#define HPGL_XMAX 15200
#define HPGL_YMAX 10000
#define PCL_XMAX 10000
#define PCL_YMAX 7500
#define HPGL_XLAST (HPGL_XMAX - 1)
#define HPGL_YLAST (HPGL_XMAX - 1)
/* HPGL_VCHAR, HPGL_HCHAR are not used */
#define HPGL_VCHAR (HPGL_YMAX/100*32/10) /* 3.2% */
#define HPGL_HCHAR (HPGL_XMAX/100*12/10) /* 1.2% */
#define HPGL_VTIC (HPGL_YMAX/70)
#define HPGL_HTIC (HPGL_YMAX/70)
#define PCL_VCHAR (PCL_YMAX/100*32/10) /* 3.2% */
#define PCL_HCHAR (PCL_XMAX/100*12/10) /* 1.2% */
#define PCL_VTIC (PCL_YMAX/70)
#define PCL_HTIC (PCL_YMAX/70)
int HPGL_ang = 0;
HPGL_init()
{
fputs("\033.Y\n",outfile);
/* 1
1. enable eavesdropping
*/
}
PCL_PORT_init()
{
fputs("\033E\033&l1X\033&l0O\033&2A\033%0B;PW0.15\n",outfile);
/* 1 2 3 4 5 6
1. reset the printer
2. one copy
3. portrait orientation
4. use letter paper
5. enter HP-GL/2 with old pen position
6. Pen Width
*/
}
PCL_LAND_init()
{
fputs("\033E\033&l1X\033&l1O\033%0B;PW0.15\n",outfile);
/*
1 2 3 4 5
1. reset the printer
2. one copy
3. landscape orientation
4. enter HP-GL/2 with old pen position
5. Pen Width
*/
}
PCL_graphics()
{
fprintf(outfile,
"\033%0B\nIN;\nSC0,%d,0,%d;\nSR%f,%f;\n",
PCL_XMAX,PCL_YMAX,
((double)(PCL_HCHAR)*200/3/PCL_XMAX),
((double)(PCL_VCHAR)*100/2/PCL_YMAX) );
/* 0 1 2 3
0. enter HPGL/2 mode
1. reset to power-up defaults
2. set SCaling
3. set character size
*/
HPGL_ang = 0;
}
HPGL_graphics()
{
fprintf(outfile,
"IN;\nSC0,%d,0,%d;\nSR%f,%f;\n",
HPGL_XMAX,HPGL_YMAX,
((double)(HPGL_HCHAR)*200/3/HPGL_XMAX),
((double)(HPGL_VCHAR)*100/2/HPGL_YMAX) );
/* 1 2 3
1. reset to power-up defaults
2. set SCaling
3. set character size
*/
HPGL_ang = 0;
}
PCL_text()
{
fputs("PU;\nSP0;\n\033.Z\0",outfile);
/* 1 2 3
1. pen up
2. park pen
3. disable eavesdropping
*/
fputs("\n\033%1A\n\033&l0H\0",outfile);
/* 1 2 3
1. enter PCL
2. eject page
3. reset printer
*/
}
HPGL_text()
{
fputs("PU;\nSP0;\n\033.Z\0",outfile);
/* 1 2 3
1. pen up
2. park pen
3. disable eavesdropping
*/
}
HPGL_linetype(linetype)
int linetype;
{
/* allow for 6 pens */
fprintf(outfile,"PU;\nSP%d;\n",(linetype+2)%6+1);
}
HP75_linetype(linetype)
int linetype;
{
/* allow for 4 pens */
fprintf(outfile,"PU;\nSP%d;\n",(linetype+2)%4+1);
}
/* some early HPGL plotters (e.g. HP7220C) require the
* Pen Up/Down and Pen (move) Absolute commands to be separate
*/
HPGL_move(x,y)
int x,y;
{
fprintf(outfile,"PU;PA%d,%d;\n",x,y);
}
HPGL_vector(x,y)
int x,y;
{
fprintf(outfile,"PD;PA%d,%d;\n",x,y);
}
HPGL_put_text(x,y,str)
int x, y;
char *str;
{
if (HPGL_ang == 1)
HPGL_move(x + HPGL_VCHAR/4,y);
else
HPGL_move(x,y - HPGL_VCHAR/4);
fprintf(outfile,"LB%s\003\n",str);
}
PCL_put_text(x,y,str)
int x, y;
char *str;
{
if (HPGL_ang == 1)
HPGL_move(x + PCL_VCHAR/4,y);
else
HPGL_move(x,y - PCL_VCHAR/4);
fprintf(outfile,"LB%s\003\n",str);
}
int HPGL_text_angle(ang)
int ang;
{
HPGL_ang = ang;
if (ang == 1)
/* vertical */
fprintf(outfile,"DI0,1;\n");
else
/* horizontal */
fprintf(outfile,"DI1,0;\n");
return TRUE;
}
HPGL_reset()
{
fprintf(outfile,"PG;\n");
/* This HPGL command is ignored in HPGL/2 */
}
PCL_reset()
{
fputs("\033%0A\033&l0H\033E\n",outfile);
/* PCL mode eject reset */
}