Annotation of OpenXM_contrib/gnuplot/term/hppj.trm, Revision 1.1.1.1
1.1 maekawa 1: /*
2: * $Id: hppj.trm,v 1.13 1998/04/14 00:17:51 drd Exp $
3: *
4: */
5:
6: /* GNUPLOT - hppj.trm */
7:
8: /*[
9: * Copyright 1990 - 1993, 1998
10: *
11: * Permission to use, copy, and distribute this software and its
12: * documentation for any purpose with or without fee is hereby granted,
13: * provided that the above copyright notice appear in all copies and
14: * that both that copyright notice and this permission notice appear
15: * in supporting documentation.
16: *
17: * Permission to modify the software is granted, but not the right to
18: * distribute the complete modified source code. Modifications are to
19: * be distributed as patches to the released version. Permission to
20: * distribute binaries produced by compiling modified sources is granted,
21: * provided you
22: * 1. distribute the corresponding source modifications from the
23: * released version in the form of a patch file along with the binaries,
24: * 2. add special version identification to distinguish your version
25: * in addition to the base release version number,
26: * 3. provide your name and address as the primary contact for the
27: * support of your modified version, and
28: * 4. retain our contact information in regard to use of the base
29: * software.
30: * Permission to distribute the released version of the source code along
31: * with corresponding source modifications in the form of a patch file is
32: * granted with same provisions 2 through 4 for binary distributions.
33: *
34: * This software is provided "as is" without express or implied warranty
35: * to the extent permitted by applicable law.
36: ]*/
37:
38: /*
39: * This file is included by ../term.c.
40: *
41: * This terminal driver supports:
42: * hppj
43: *
44: * AUTHORS
45: * Dan Merget (danm@sr.hp.com)
46: *
47: * This file was based on the hpljii file by:
48: * John Engels
49: * Russell Lang
50: * Maurice Castro
51: *
52: * send your comments or suggestions to (info-gnuplot@dartmouth.edu).
53: *
54: */
55:
56: /* The following HP laserjet series II driver uses generic bit mapped graphics
57: * routines from bitmap.c to build up a bit map in memory.
58: */
59:
60: /*
61: * adapted to the new terminal layout by Stefan Bodewig (Dec. 1995)
62: */
63:
64: #include "driver.h"
65:
66: #ifdef TERM_REGISTER
67: register_term(hppj)
68: #endif
69:
70: #ifdef TERM_PROTO
71: TERM_PUBLIC void HPPJoptions __PROTO((void));
72: TERM_PUBLIC void HPPJinit __PROTO((void));
73: TERM_PUBLIC void HPPJreset __PROTO((void));
74: TERM_PUBLIC void HPPJgraphics __PROTO((void));
75: TERM_PUBLIC void HPPJtext __PROTO((void));
76: TERM_PUBLIC void HPPJlinetype __PROTO((int linetype));
77: #define HPPJmove b_move
78: #define HPPJvector b_vector
79: #define HPPJtext_angle b_text_angle
80: #define HPPJput_text b_put_text
81:
82: /* We define 3 different font sizes: 5x9, 9x17, and 13x25 */
83:
84: #define HPPJ_DPI 180 /* dots per inch */
85: #define HPPJ_PLANES 3 /* color planes */
86: #define HPPJ_COLORS (1 << HPPJ_PLANES)
87: /* make XMAX and YMAX a multiple of 8 */
88: #define HPPJ_XMAX (8*(unsigned int)(9.5 * HPPJ_DPI / 8.0 + 0.9))
89: #define HPPJ_YMAX (8 * HPPJ_DPI)
90:
91: /* default values for term_tbl */
92: #define HPPJ_9x17_VCHAR FNT9X17_VCHAR
93: #define HPPJ_9x17_HCHAR FNT9X17_HCHAR
94: #define HPPJ_9x17_VTIC (FNT9X17_VCHAR / 2)
95: #define HPPJ_9x17_HTIC (FNT9X17_HCHAR / 2)
96: #endif /* TERM_PROTO */
97:
98: #ifndef TERM_PROTO_ONLY
99: #ifdef TERM_BODY
100: static int hppj_font = FNT9X17;
101:
102: TERM_PUBLIC void HPPJoptions()
103: {
104: char opt[10];
105: #define HPPJERROR "expecting font size FNT5X9, FNT9X17, or FNT13X25"
106:
107: term_options[0] = NUL; /* default to empty string and 9x17 font */
108: hppj_font = FNT9X17; /* in case of error or empty options */
109:
110: if (!END_OF_COMMAND) {
111: if (token[c_token].length > 8) {
112: int_error(HPPJERROR, c_token);
113: }
114: capture(opt, c_token, c_token, /*4 */ 9); /* HBB 980226 */
115: if (!strcmp(opt, "FNT5X9")) {
116: hppj_font = FNT5X9;
117: strcpy(term_options, "FNT5X9");
118: } else if (!strcmp(opt, "FNT9X17")) {
119: hppj_font = FNT9X17;
120: strcpy(term_options, "FNT9X17");
121: } else if (!strcmp(opt, "FNT13X25")) {
122: hppj_font = FNT13X25;
123: strcpy(term_options, "FNT13X25");
124: } else {
125: int_error(HPPJERROR, c_token);
126: }
127: c_token++;
128: }
129: }
130:
131:
132: TERM_PUBLIC void HPPJinit()
133: {
134: /* HBB 980226: moved this here, from graphics(): only init() may
135: * change fields of *term ! */
136: switch (hppj_font) {
137: case FNT5X9:
138: term->v_char = FNT5X9_VCHAR;
139: term->h_char = FNT5X9_HCHAR;
140: term->v_tic = FNT5X9_VCHAR / 2;
141: term->h_tic = FNT5X9_HCHAR / 2;
142: break;
143: case FNT9X17:
144: term->v_char = FNT9X17_VCHAR;
145: term->h_char = FNT9X17_HCHAR;
146: term->v_tic = FNT9X17_VCHAR / 2;
147: term->h_tic = FNT9X17_HCHAR / 2;
148: break;
149: case FNT13X25:
150: term->v_char = FNT13X25_VCHAR;
151: term->h_char = FNT13X25_HCHAR;
152: term->v_tic = FNT13X25_VCHAR / 2;
153: term->h_tic = FNT13X25_HCHAR / 2;
154: break;
155: }
156: }
157:
158:
159: TERM_PUBLIC void HPPJreset()
160: {
161: #ifdef VMS
162: fflush_binary();
163: #endif /* VMS */
164: }
165:
166:
167: TERM_PUBLIC void HPPJgraphics()
168: {
169: /* HBB 980226: move a block of code from here to init() */
170: b_charsize(hppj_font);
171:
172: b_makebitmap(HPPJ_XMAX, HPPJ_YMAX, HPPJ_PLANES);
173: }
174:
175:
176: TERM_PUBLIC void HPPJtext()
177: {
178: int x, plane, y; /* loop indexes */
179: int minRow, maxRow; /* loop bounds */
180: int numBytes; /* Number of run-length coded bytes to output */
181: int numReps; /* Number of times the current byte is repeated */
182:
183: fprintf(gpoutfile, "\
184: \033E\033*t%dR\033*r%dS\
185: \033*b0X\033*b0Y\033*r%dU\
186: \033*v%dA\033*v%dB\033*v%dC\033*v%dI\
187: \033*v%dA\033*v%dB\033*v%dC\033*v%dI\
188: \033*v%dA\033*v%dB\033*v%dC\033*v%dI\
189: \033*v%dA\033*v%dB\033*v%dC\033*v%dI\
190: \033*v%dA\033*v%dB\033*v%dC\033*v%dI\
191: \033*v%dA\033*v%dB\033*v%dC\033*v%dI\
192: \033*v%dA\033*v%dB\033*v%dC\033*v%dI\
193: \033*v%dA\033*v%dB\033*v%dC\033*v%dI\
194: \033*b1M\033*r1A",
195: HPPJ_DPI, HPPJ_YMAX,
196: HPPJ_PLANES,
197: 90, 88, 85, 0,
198: 53, 8, 14, 1,
199: 3, 26, 22, 2,
200: 4, 4, 29, 3,
201: 53, 5, 25, 4,
202: 2, 22, 64, 5,
203: 89, 83, 13, 6,
204: 4, 4, 6, 7);
205:
206: /* dump bitmap in raster mode using run-length encoding */
207: for (x = HPPJ_XMAX - 1; x >= 0; --x) {
208: for (plane = 0; plane < HPPJ_PLANES; plane++) {
209: minRow = b_psize * plane;
210: maxRow = b_psize * plane + b_psize - 1;
211:
212: /* Print column header */
213: numBytes = 0;
214: for (y = maxRow; y >= minRow; --y) {
215: if (y == minRow || *((*b_p)[y] + x) != *((*b_p)[y - 1] + x)) {
216: numBytes += 2;
217: }
218: }
219: fprintf(gpoutfile, "\033*b%d", numBytes);
220: (void) fputc((char) (plane < HPPJ_PLANES - 1 ? 'V' : 'W'), gpoutfile);
221:
222: /* Print remainder of column */
223: numReps = 0;
224: for (y = maxRow; y >= minRow; --y) {
225: if (y == minRow || *((*b_p)[y] + x) != *((*b_p)[y - 1] + x)) {
226: (void) fputc((char) (numReps), gpoutfile);
227: (void) fputc((char) (*((*b_p)[y] + x)), gpoutfile);
228: numReps = 0;
229: } else {
230: numReps++;
231: }
232: }
233: }
234: }
235: fputs("\033*r1B\033E", gpoutfile);
236:
237: b_freebitmap();
238: }
239:
240:
241: TERM_PUBLIC void HPPJlinetype(linetype)
242: int linetype;
243: {
244: if (linetype >= 0) {
245: b_setlinetype(0);
246: b_setvalue((linetype % (HPPJ_COLORS - 1)) + 1);
247: } else {
248: b_setlinetype(linetype + 2);
249: b_setvalue(HPPJ_COLORS - 1);
250: }
251: }
252:
253: #endif /* TERM_BODY */
254:
255: #ifdef TERM_TABLE
256:
257: TERM_TABLE_START(hppj_driver)
258: "hppj", "HP PaintJet and HP3630 [FNT5X9 FNT9X17 FNT13X25]",
259: HPPJ_XMAX, HPPJ_YMAX,
260: HPPJ_9x17_VCHAR, HPPJ_9x17_HCHAR, HPPJ_9x17_VTIC, HPPJ_9x17_HTIC,
261: HPPJoptions, HPPJinit, HPPJreset, HPPJtext, null_scale, HPPJgraphics,
262: HPPJmove, HPPJvector, HPPJlinetype, HPPJput_text, HPPJtext_angle,
263: null_justify_text, do_point, do_arrow, set_font_null, 0, TERM_BINARY
264: TERM_TABLE_END(hppj_driver)
265:
266: #undef LAST_TERM
267: #define LAST_TERM hppj_driver
268:
269: #endif /* TERM_TABLE */
270: #endif /* TERM_PROTO_ONLY */
271:
272: #ifdef TERM_HELP
273: START_HELP(hppj)
274: "1 hppj",
275: "?commands set terminal hppj",
276: "?set terminal hppj",
277: "?set term hppj",
278: "?terminal hppj",
279: "?term hppj",
280: "?hppj",
281: " The `hppj` terminal driver supports the HP PaintJet and HP3630 printers. The",
282: " only option is the choice of font.",
283: "",
284: " Syntax:",
285: " set terminal hppj {FNT5X9 | FNT9X17 | FNT13X25}",
286: "",
287: " with the middle-sized font (FNT9X17) being the default."
288: END_HELP(hppj)
289: #endif
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>