File: [local] / OpenXM_contrib / gnuplot / term / Attic / hpljii.trm (download)
Revision 1.1.1.2 (vendor branch), Sat Jan 22 14:16:24 2000 UTC (24 years, 8 months ago) by maekawa
Branch: GNUPLOT
CVS Tags: maekawa-ipv6, VERSION_3_7_3, VERSION_3_7_1, RELEASE_20000124, RELEASE_1_2_3, RELEASE_1_2_2_KNOPPIX_b, RELEASE_1_2_2_KNOPPIX, RELEASE_1_2_2, RELEASE_1_2_1, RELEASE_1_1_3, RELEASE_1_1_2 Changes since 1.1.1.1: +1 -1
lines
Import gnuplot 3.7.1
|
/*
* $Id: hpljii.trm,v 1.9 1998/12/15 20:22:41 lhecking Exp $
*
*/
/* GNUPLOT - hpljii.trm */
/*[
* Copyright 1990 - 1993, 1998 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:
* hpljii, hpdj
*
* AUTHORS
* John Engels
* Russell Lang
* Maurice Castro
*
* send your comments or suggestions to (info-gnuplot@dartmouth.edu).
*
*/
/* The following HP laserjet series II driver uses generic bit mapped graphics
routines from bitmap.c to build up a bit map in memory. The driver
interchanges colomns and lines in order to access entire lines
easily and returns the lines to get bits in the right order :
(x,y) -> (y,XMAX-1-x). */
/* This interchange is done by calling b_makebitmap() with reversed
xmax and ymax, and then setting b_rastermode to TRUE. b_setpixel()
will then perform the interchange before each pixel is plotted */
/* by John Engels JENGELS@BNANDP51.BITNET, inspired by the hpljet driver
of Jyrki Yli-Nokari */
/*
* adapted to the new terminal layout by Stefan Bodewig (Dec. 1995)
*/
#include "driver.h"
#ifdef TERM_REGISTER
register_term(hpljii)
register_term(hpdj)
#endif
#ifdef TERM_PROTO
TERM_PUBLIC void HPLJIIoptions __PROTO((void));
TERM_PUBLIC void HPLJIIinit __PROTO((void));
TERM_PUBLIC void HPLJIIgraphics __PROTO((void));
TERM_PUBLIC void HPLJIItext __PROTO((void));
TERM_PUBLIC void HPLJIIlinetype __PROTO((int linetype));
TERM_PUBLIC void HPLJIIput_text __PROTO((unsigned int x, unsigned int y, char *str));
TERM_PUBLIC void HPLJIIreset __PROTO((void));
#define HPLJIImove b_move
#define HPLJIIvector b_vector
#define HPLJIItext_angle b_text_angle
TERM_PUBLIC void HPDJgraphics __PROTO((void));
TERM_PUBLIC void HPDJtext __PROTO((void));
#define HPDJtext_angle b_text_angle
#define HPDJput_text b_put_text
/* default values for term_tbl */
#define HPLJII_75PPI_XMAX (1920/4)
#define HPLJII_75PPI_YMAX (1920/4)
#define HPLJII_75PPI_HCHAR (1920/4/6)
#define HPLJII_75PPI_VCHAR (1920/4/10)
#define HPLJII_75PPI_VTIC 5
#define HPLJII_75PPI_HTIC 5
#endif
#ifndef TERM_PROTO_ONLY
#ifdef TERM_BODY
/* We define 4 different print qualities : 300ppi, 150ppi, 100ppi and
75ppi. (Pixel size = 1, 2, 3, 4 dots) */
#define HPLJII_DPP (hplj_dpp) /* dots per pixel */
#define HPLJII_PPI (300/HPLJII_DPP) /* pixel per inch */
/* make XMAX and YMAX a multiple of 8 */
#define HPLJII_XMAX (8*(unsigned int)(xsize*1920/HPLJII_DPP/8.0+0.9))
#define HPLJII_YMAX (8*(unsigned int)(ysize*1920/HPLJII_DPP/8.0+0.9))
/* Courier font with 6 lines per inch */
#define HPLJII_VCHAR (HPLJII_PPI/6)
/* Courier font with 10 caracters per inch */
#define HPLJII_HCHAR (HPLJII_PPI/10)
/* Save current cursor position */
#define HPLJII_PUSH_CURSOR fputs("\033&f0S",gpoutfile)
/* Restore cursor position */
#define HPLJII_POP_CURSOR fputs("\033&f1S",gpoutfile)
/* be sure to use courier font with 6lpi and 10cpi */
#define HPLJII_COURIER fputs("\033(0N\033(s0p10.0h12.0v0s0b3T\033&l6D",gpoutfile)
void HPLJIIputc __PROTO((unsigned int x, unsigned int y, char c, int ang));
static int hplj_dpp = 4;
/* bm_pattern not appropriate for 300ppi graphics */
#ifndef GOT_300_PATTERN
# define GOT_300_PATTERN
static unsigned int b_300ppi_pattern[] =
{
0xffff, 0x1111, 0xffff, 0x3333,
0x0f0f, 0x3f3f, 0x0fff, 0x00ff, 0x33ff
};
#endif
TERM_PUBLIC void HPLJIIoptions()
{
char opt[4];
int parse_error = 0;
if (END_OF_COMMAND) {
term_options[0] = NUL;
} else {
if (token[c_token].length > 3) {
parse_error = 1; /* see below */
} else {
/* almost_equals() won't accept numbers - use strcmp() instead */
capture(opt, c_token, c_token, 4);
if (!strcmp(opt, "75")) {
hplj_dpp = 4;
} else if (!strcmp(opt, "100")) {
hplj_dpp = 3;
} else if (!strcmp(opt, "150")) {
hplj_dpp = 2;
} else if (!strcmp(opt, "300")) {
hplj_dpp = 1;
} else {
/* error, but set dpi anyway, since term it already set */
parse_error = 1;
}
c_token++;
}
}
term->xmax = HPLJII_XMAX;
term->ymax = HPLJII_YMAX;
switch (hplj_dpp) {
case 1:
strcpy(term_options, "300");
term->v_tic = 15;
term->h_tic = 15;
break;
case 2:
strcpy(term_options, "150");
term->v_tic = 8;
term->h_tic = 8;
break;
case 3:
strcpy(term_options, "100");
term->v_tic = 6;
term->h_tic = 6;
break;
case 4:
strcpy(term_options, "75");
term->v_tic = 5;
term->h_tic = 5;
break;
}
if (parse_error)
int_error("expecting dots per inch size 75, 100, 150 or 300",
c_token);
}
TERM_PUBLIC void HPLJIIinit()
{
term->v_char = HPLJII_VCHAR;
term->h_char = HPLJII_HCHAR;
}
TERM_PUBLIC void HPLJIIgraphics()
{
HPLJII_COURIER;
HPLJII_PUSH_CURSOR;
/* rotate plot -90 degrees by reversing XMAX and YMAX and by
setting b_rastermode to TRUE */
b_makebitmap(HPLJII_YMAX, HPLJII_XMAX, 1);
b_rastermode = TRUE;
}
/* HPLJIItext by rjl - no compression */
TERM_PUBLIC void HPLJIItext()
{
register int x, j, row;
fprintf(gpoutfile, "\033*t%dR", HPLJII_PPI);
HPLJII_POP_CURSOR;
fputs("\033*r1A", gpoutfile);
/* dump bitmap in raster mode */
for (x = b_xsize - 1; x >= 0; x--) {
row = (b_ysize / 8) - 1;
fprintf(gpoutfile, "\033*b0m%dW", b_ysize / 8);
for (j = row; j >= 0; j--) {
(void) fputc((char) (*((*b_p)[j] + x)), gpoutfile);
}
}
fputs("\033*rB", gpoutfile);
b_freebitmap();
#ifndef VMS
/* most vms spoolers add a formfeed character */
putc('\f', gpoutfile);
#endif /* !VMS */
}
TERM_PUBLIC void HPLJIIlinetype(linetype)
int linetype;
{
if (hplj_dpp == 1) {
if (linetype >= 7)
linetype %= 7;
/* b_pattern not appropriate for 300ppi graphics */
b_linemask = b_300ppi_pattern[linetype + 2];
b_maskcount = 0;
} else {
b_setlinetype(linetype);
}
}
TERM_PUBLIC void HPLJIIput_text(x, y, str)
unsigned int x, y;
char *str;
{
switch (b_angle) {
case 0:
y -= HPLJII_VCHAR / 5;
HPLJII_POP_CURSOR;
HPLJII_PUSH_CURSOR;
/* (0,0) is the upper left point of the paper */
fprintf(gpoutfile, "\033*p%+dx%+dY", x * HPLJII_DPP
,(HPLJII_YMAX - y - 1) * HPLJII_DPP);
fputs(str, gpoutfile);
/* for (; *str; ++str, x += HPLJII_HCHAR)
HPLJIIputc (x, y, *str, b_angle);*/
break;
case 1:
y += (HPLJII_HCHAR - 2 * HPLJII_VCHAR) / 2;
y += (HPLJII_VCHAR + HPLJII_HCHAR) * strlen(str) / 2;
for (; *str; ++str, y -= HPLJII_VCHAR)
HPLJIIputc(x, y, *str, b_angle);
break;
}
}
#ifdef PROTOTYPES
void HPLJIIputc(unsigned int x, unsigned int y, char c, int ang)
#else
void HPLJIIputc(x, y, c, ang)
unsigned int x, y;
int ang;
char c;
#endif
{
HPLJII_POP_CURSOR;
HPLJII_PUSH_CURSOR;
/* (0,0) is the upper left point of the paper */
fprintf(gpoutfile, "\033*p%+dx%+dY", x * HPLJII_DPP
,(HPLJII_YMAX - y - 1) * HPLJII_DPP);
fputc(c, gpoutfile);
}
TERM_PUBLIC void HPLJIIreset()
{
#ifdef VMS
fflush_binary();
#endif /* VMS */
}
/* HP DeskJet routines */
TERM_PUBLIC void HPDJgraphics()
{
switch (hplj_dpp) {
case 1:
b_charsize(FNT13X25);
term->v_char = FNT13X25_VCHAR;
term->h_char = FNT13X25_HCHAR;
break;
case 2:
b_charsize(FNT13X25);
term->v_char = FNT13X25_VCHAR;
term->h_char = FNT13X25_HCHAR;
break;
case 3:
b_charsize(FNT9X17);
term->v_char = FNT9X17_VCHAR;
term->h_char = FNT9X17_HCHAR;
break;
case 4:
b_charsize(FNT5X9);
term->v_char = FNT5X9_VCHAR;
term->h_char = FNT5X9_HCHAR;
break;
}
/* rotate plot -90 degrees by reversing XMAX and YMAX and by
setting b_rastermode to TRUE */
b_makebitmap(HPLJII_YMAX, HPLJII_XMAX, 1);
b_rastermode = TRUE;
}
/* 0 compression raster bitmap dump. Compatible with HP DeskJet 500
hopefully compatible with other HP Deskjet printers */
TERM_PUBLIC void HPDJtext()
{
register int x, j, row;
fprintf(gpoutfile, "\
\033*b0M\
\033*t%dR\
\033*r1A",
HPLJII_PPI);
/* dump bitmap in raster mode */
for (x = b_xsize - 1; x >= 0; x--) {
row = (b_ysize / 8) - 1;
fprintf(gpoutfile, "\033*b%dW", b_ysize / 8);
for (j = row; j >= 0; j--) {
(void) fputc((char) (*((*b_p)[j] + x)), gpoutfile);
}
}
fputs("\033*rbC", gpoutfile);
b_freebitmap();
#ifndef VMS /* most vms spoolers add a formfeed character */
putc('\f', gpoutfile);
#endif /* !VMS */
}
#endif
#ifdef TERM_TABLE
TERM_TABLE_START(hpljii_driver)
"hpljii", "HP Laserjet series II, [75 100 150 300]",
HPLJII_75PPI_XMAX, HPLJII_75PPI_YMAX, HPLJII_75PPI_VCHAR,
HPLJII_75PPI_HCHAR, HPLJII_75PPI_VTIC, HPLJII_75PPI_HTIC, HPLJIIoptions,
HPLJIIinit, HPLJIIreset, HPLJIItext, null_scale,
HPLJIIgraphics, HPLJIImove, HPLJIIvector, HPLJIIlinetype,
HPLJIIput_text, HPLJIItext_angle, null_justify_text, line_and_point,
do_arrow, set_font_null, 0, TERM_BINARY
TERM_TABLE_END(hpljii_driver)
#undef LAST_TERM
#define LAST_TERM hpljii_driver
TERM_TABLE_START(hpdj_driver)
"hpdj", "HP DeskJet 500, [75 100 150 300]",
HPLJII_75PPI_XMAX, HPLJII_75PPI_YMAX, HPLJII_75PPI_VCHAR,
HPLJII_75PPI_HCHAR, HPLJII_75PPI_VTIC, HPLJII_75PPI_HTIC, HPLJIIoptions,
HPLJIIinit, HPLJIIreset, HPDJtext, null_scale,
HPDJgraphics, HPLJIImove, HPLJIIvector, HPLJIIlinetype,
HPDJput_text, HPDJtext_angle, null_justify_text, line_and_point,
do_arrow, set_font_null, 0, TERM_BINARY
TERM_TABLE_END(hpdj_driver)
#undef LAST_TERM
#define LAST_TERM hpdj_driver
#endif
#endif
#ifdef TERM_HELP
START_HELP(hpljii)
"1 hpljii",
"?commands set terminal hpljii",
"?set terminal hpljii",
"?set term hpljii",
"?terminal hpljii",
"?term hpljii",
"?hpljii",
"?commands set terminal hpdj",
"?set terminal hpdj",
"?set term hpdj",
"?terminal hpdj",
"?term hpdj",
"?hpdj",
" The `hpljii` terminal driver supports the HP Laserjet Series II printer. The",
" `hpdj` driver supports the HP DeskJet 500 printer. These drivers allow a",
" choice of resolutions.",
"",
" Syntax:",
" set terminal hpljii | hpdj {<res>}",
"",
" where `res` may be 75, 100, 150 or 300 dots per inch; the default is 75.",
" Rasterization at the higher resolutions may require a large amount of memory.",
"",
" The `hp500c` terminal is similar to `hpdj`; `hp500c` additionally supports",
" color and compression."
END_HELP(hpljii)
#endif /* TERM_HELP */