X-Git-Url: https://vcs.maemo.org/git/?a=blobdiff_plain;f=term%2Fhppj.trm;fp=term%2Fhppj.trm;h=41c77aaeb3d13716dacaaab4d6b1ac922e4fbe0b;hb=39ec1247a71f61152a4a7f502a30f06a3896c5da;hp=0000000000000000000000000000000000000000;hpb=06be459be4f5f6a7c6ff878e84f355fb2575caa8;p=gnuplot diff --git a/term/hppj.trm b/term/hppj.trm new file mode 100644 index 0000000..41c77aa --- /dev/null +++ b/term/hppj.trm @@ -0,0 +1,291 @@ +/* Hello, Emacs, this is -*-C-*- + * $Id: hppj.trm,v 1.15 2006/07/21 02:35:47 sfeam Exp $ + * + */ + +/* GNUPLOT - hppj.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: + * hppj + * + * AUTHORS + * Dan Merget (danm@sr.hp.com) + * + * This file was based on the hpljii file by: + * John Engels + * Russell Lang + * Maurice Castro + * + * send your comments or suggestions to (gnuplot-info@lists.sourceforge.net). + * + */ + +/* The following HP laserjet series II driver uses generic bit mapped graphics + * routines from bitmap.c to build up a bit map in memory. + */ + +/* + * adapted to the new terminal layout by Stefan Bodewig (Dec. 1995) + */ + +#include "driver.h" + +#ifdef TERM_REGISTER +register_term(hppj) +#endif + +#ifdef TERM_PROTO +TERM_PUBLIC void HPPJ_options __PROTO((void)); +TERM_PUBLIC void HPPJ_init __PROTO((void)); +TERM_PUBLIC void HPPJ_reset __PROTO((void)); +TERM_PUBLIC void HPPJ_graphics __PROTO((void)); +TERM_PUBLIC void HPPJ_text __PROTO((void)); +TERM_PUBLIC void HPPJ_linetype __PROTO((int linetype)); + +/* We define 3 different font sizes: 5x9, 9x17, and 13x25 */ + +#define HPPJ_DPI 180 /* dots per inch */ +#define HPPJ_PLANES 3 /* color planes */ +#define HPPJ_COLORS (1 << HPPJ_PLANES) +/* make XMAX and YMAX a multiple of 8 */ +#define HPPJ_XMAX (8*(unsigned int)(9.5 * HPPJ_DPI / 8.0 + 0.9)) +#define HPPJ_YMAX (8 * HPPJ_DPI) + +/* default values for term_tbl */ +#define HPPJ_9x17_VCHAR FNT9X17_VCHAR +#define HPPJ_9x17_HCHAR FNT9X17_HCHAR +#define HPPJ_9x17_VTIC (FNT9X17_VCHAR / 2) +#define HPPJ_9x17_HTIC (FNT9X17_HCHAR / 2) +#endif /* TERM_PROTO */ + +#ifndef TERM_PROTO_ONLY +#ifdef TERM_BODY +static int hppj_font = FNT9X17; + +TERM_PUBLIC void +HPPJ_options() +{ + char opt[10]; +#define HPPJERROR "expecting font size FNT5X9, FNT9X17, or FNT13X25" + + term_options[0] = NUL; /* default to empty string and 9x17 font */ + hppj_font = FNT9X17; /* in case of error or empty options */ + + if (!END_OF_COMMAND) { + if (token[c_token].length > 8) { + int_error(c_token, HPPJERROR); + } + capture(opt, c_token, c_token, /*4 */ 9); /* HBB 980226 */ + if (!strcmp(opt, "FNT5X9")) { + hppj_font = FNT5X9; + strcpy(term_options, "FNT5X9"); + } else if (!strcmp(opt, "FNT9X17")) { + hppj_font = FNT9X17; + strcpy(term_options, "FNT9X17"); + } else if (!strcmp(opt, "FNT13X25")) { + hppj_font = FNT13X25; + strcpy(term_options, "FNT13X25"); + } else { + int_error(c_token, HPPJERROR); + } + c_token++; + } +} + + +TERM_PUBLIC void +HPPJ_init() +{ + /* HBB 980226: moved this here, from graphics(): only init() may + * change fields of *term ! */ + switch (hppj_font) { + case FNT5X9: + term->v_char = FNT5X9_VCHAR; + term->h_char = FNT5X9_HCHAR; + term->v_tic = FNT5X9_VCHAR / 2; + term->h_tic = FNT5X9_HCHAR / 2; + break; + case FNT9X17: + term->v_char = FNT9X17_VCHAR; + term->h_char = FNT9X17_HCHAR; + term->v_tic = FNT9X17_VCHAR / 2; + term->h_tic = FNT9X17_HCHAR / 2; + break; + case FNT13X25: + term->v_char = FNT13X25_VCHAR; + term->h_char = FNT13X25_HCHAR; + term->v_tic = FNT13X25_VCHAR / 2; + term->h_tic = FNT13X25_HCHAR / 2; + break; + } +} + + +TERM_PUBLIC void +HPPJ_reset() +{ +#ifdef VMS + fflush_binary(); +#endif /* VMS */ +} + + +TERM_PUBLIC void +HPPJ_graphics() +{ + /* HBB 980226: move a block of code from here to init() */ + b_charsize(hppj_font); + + b_makebitmap(HPPJ_XMAX, HPPJ_YMAX, HPPJ_PLANES); +} + + +TERM_PUBLIC void +HPPJ_text() +{ + int x, plane, y; /* loop indexes */ + int minRow, maxRow; /* loop bounds */ + int numBytes; /* Number of run-length coded bytes to output */ + int numReps; /* Number of times the current byte is repeated */ + + fprintf(gpoutfile, "\ +\033E\033*t%dR\033*r%dS\ +\033*b0X\033*b0Y\033*r%dU\ +\033*v%dA\033*v%dB\033*v%dC\033*v%dI\ +\033*v%dA\033*v%dB\033*v%dC\033*v%dI\ +\033*v%dA\033*v%dB\033*v%dC\033*v%dI\ +\033*v%dA\033*v%dB\033*v%dC\033*v%dI\ +\033*v%dA\033*v%dB\033*v%dC\033*v%dI\ +\033*v%dA\033*v%dB\033*v%dC\033*v%dI\ +\033*v%dA\033*v%dB\033*v%dC\033*v%dI\ +\033*v%dA\033*v%dB\033*v%dC\033*v%dI\ +\033*b1M\033*r1A", + HPPJ_DPI, HPPJ_YMAX, + HPPJ_PLANES, + 90, 88, 85, 0, + 53, 8, 14, 1, + 3, 26, 22, 2, + 4, 4, 29, 3, + 53, 5, 25, 4, + 2, 22, 64, 5, + 89, 83, 13, 6, + 4, 4, 6, 7); + + /* dump bitmap in raster mode using run-length encoding */ + for (x = HPPJ_XMAX - 1; x >= 0; --x) { + for (plane = 0; plane < HPPJ_PLANES; plane++) { + minRow = b_psize * plane; + maxRow = b_psize * plane + b_psize - 1; + + /* Print column header */ + numBytes = 0; + for (y = maxRow; y >= minRow; --y) { + if (y == minRow || *((*b_p)[y] + x) != *((*b_p)[y - 1] + x)) { + numBytes += 2; + } + } + fprintf(gpoutfile, "\033*b%d", numBytes); + (void) fputc((char) (plane < HPPJ_PLANES - 1 ? 'V' : 'W'), gpoutfile); + + /* Print remainder of column */ + numReps = 0; + for (y = maxRow; y >= minRow; --y) { + if (y == minRow || *((*b_p)[y] + x) != *((*b_p)[y - 1] + x)) { + (void) fputc((char) (numReps), gpoutfile); + (void) fputc((char) (*((*b_p)[y] + x)), gpoutfile); + numReps = 0; + } else { + numReps++; + } + } + } + } + fputs("\033*r1B\033E", gpoutfile); + + b_freebitmap(); +} + + +TERM_PUBLIC void +HPPJ_linetype(int linetype) +{ + if (linetype >= 0) { + b_setlinetype(0); + b_setvalue((linetype % (HPPJ_COLORS - 1)) + 1); + } else { + b_setlinetype(linetype + 2); + b_setvalue(HPPJ_COLORS - 1); + } +} + +#endif /* TERM_BODY */ + +#ifdef TERM_TABLE + +TERM_TABLE_START(hppj_driver) + "hppj", "HP PaintJet and HP3630 [FNT5X9 FNT9X17 FNT13X25]", + HPPJ_XMAX, HPPJ_YMAX, + HPPJ_9x17_VCHAR, HPPJ_9x17_HCHAR, HPPJ_9x17_VTIC, HPPJ_9x17_HTIC, + HPPJ_options, HPPJ_init, HPPJ_reset, HPPJ_text, null_scale, HPPJ_graphics, + b_move, b_vector, HPPJ_linetype, b_put_text, b_text_angle, + null_justify_text, do_point, do_arrow, set_font_null, 0, TERM_BINARY, + 0, 0, b_boxfill +TERM_TABLE_END(hppj_driver) + +#undef LAST_TERM +#define LAST_TERM hppj_driver + +#endif /* TERM_TABLE */ +#endif /* TERM_PROTO_ONLY */ + +#ifdef TERM_HELP +START_HELP(hppj) +"1 hppj", +"?commands set terminal hppj", +"?set terminal hppj", +"?set term hppj", +"?terminal hppj", +"?term hppj", +"?hppj", +" The `hppj` terminal driver supports the HP PaintJet and HP3630 printers. The", +" only option is the choice of font.", +"", +" Syntax:", +" set terminal hppj {FNT5X9 | FNT9X17 | FNT13X25}", +"", +" with the middle-sized font (FNT9X17) being the default." +END_HELP(hppj) +#endif