[BACK]Return to hpljii.trm CVS log [TXT][DIR] Up to [local] / OpenXM_contrib / gnuplot / term

Annotation of OpenXM_contrib/gnuplot/term/hpljii.trm, Revision 1.1.1.1

1.1       maekawa     1: /*
                      2:  * $Id: hpljii.trm,v 1.20 1998/04/14 00:17:51 drd Exp $
                      3:  *
                      4:  */
                      5:
                      6: /* GNUPLOT - hpljii.trm */
                      7:
                      8: /*[
                      9:  * Copyright 1990 - 1993, 1998   Thomas Williams, Colin Kelley
                     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:  *  hpljii, hpdj
                     43:  *
                     44:  * AUTHORS
                     45:  *  John Engels
                     46:  *  Russell Lang
                     47:  *  Maurice Castro
                     48:  *
                     49:  * send your comments or suggestions to (info-gnuplot@dartmouth.edu).
                     50:  *
                     51:  */
                     52:
                     53: /* The following HP laserjet series II driver uses generic bit mapped graphics
                     54:    routines from bitmap.c to build up a bit map in memory.  The driver
                     55:    interchanges colomns and lines in order to access entire lines
                     56:    easily and returns the lines to get bits in the right order :
                     57:    (x,y) -> (y,XMAX-1-x). */
                     58: /* This interchange is done by calling b_makebitmap() with reversed
                     59:    xmax and ymax, and then setting b_rastermode to TRUE.  b_setpixel()
                     60:    will then perform the interchange before each pixel is plotted */
                     61: /* by John Engels JENGELS@BNANDP51.BITNET, inspired by the hpljet driver
                     62:    of Jyrki Yli-Nokari */
                     63:
                     64: /*
                     65:  * adapted to the new terminal layout by Stefan Bodewig (Dec. 1995)
                     66:  */
                     67:
                     68: #include "driver.h"
                     69:
                     70: #ifdef TERM_REGISTER
                     71: register_term(hpljii)
                     72: register_term(hpdj)
                     73: #endif
                     74:
                     75: #ifdef TERM_PROTO
                     76: TERM_PUBLIC void HPLJIIoptions __PROTO((void));
                     77: TERM_PUBLIC void HPLJIIinit __PROTO((void));
                     78: TERM_PUBLIC void HPLJIIgraphics __PROTO((void));
                     79: TERM_PUBLIC void HPLJIItext __PROTO((void));
                     80: TERM_PUBLIC void HPLJIIlinetype __PROTO((int linetype));
                     81: TERM_PUBLIC void HPLJIIput_text __PROTO((unsigned int x, unsigned int y, char *str));
                     82: TERM_PUBLIC void HPLJIIreset __PROTO((void));
                     83: #define HPLJIImove b_move
                     84: #define HPLJIIvector b_vector
                     85: #define HPLJIItext_angle b_text_angle
                     86: TERM_PUBLIC void HPDJgraphics __PROTO((void));
                     87: TERM_PUBLIC void HPDJtext __PROTO((void));
                     88: #define HPDJtext_angle b_text_angle
                     89: #define HPDJput_text b_put_text
                     90: /* default values for term_tbl */
                     91: #define HPLJII_75PPI_XMAX (1920/4)
                     92: #define HPLJII_75PPI_YMAX (1920/4)
                     93: #define HPLJII_75PPI_HCHAR (1920/4/6)
                     94: #define HPLJII_75PPI_VCHAR (1920/4/10)
                     95: #define HPLJII_75PPI_VTIC 5
                     96: #define HPLJII_75PPI_HTIC 5
                     97: #endif
                     98:
                     99: #ifndef TERM_PROTO_ONLY
                    100: #ifdef TERM_BODY
                    101:
                    102: /* We define 4 different print qualities : 300ppi, 150ppi, 100ppi and
                    103:    75ppi.  (Pixel size = 1, 2, 3, 4 dots) */
                    104:
                    105: #define HPLJII_DPP (hplj_dpp)  /* dots per pixel */
                    106: #define HPLJII_PPI (300/HPLJII_DPP)    /* pixel per inch */
                    107: /* make XMAX and YMAX a multiple of 8 */
                    108: #define HPLJII_XMAX (8*(unsigned int)(xsize*1920/HPLJII_DPP/8.0+0.9))
                    109: #define HPLJII_YMAX (8*(unsigned int)(ysize*1920/HPLJII_DPP/8.0+0.9))
                    110:
                    111: /* Courier font with 6 lines per inch */
                    112: #define HPLJII_VCHAR (HPLJII_PPI/6)
                    113: /* Courier font with 10 caracters per inch */
                    114: #define HPLJII_HCHAR (HPLJII_PPI/10)
                    115: /* Save current cursor position */
                    116: #define HPLJII_PUSH_CURSOR fputs("\033&f0S",gpoutfile)
                    117: /* Restore cursor position */
                    118: #define HPLJII_POP_CURSOR fputs("\033&f1S",gpoutfile)
                    119: /* be sure to use courier font with 6lpi and 10cpi */
                    120: #define HPLJII_COURIER fputs("\033(0N\033(s0p10.0h12.0v0s0b3T\033&l6D",gpoutfile)
                    121:
                    122:
                    123: void HPLJIIputc __PROTO((unsigned int x, unsigned int y, char c, int ang));
                    124: static int hplj_dpp = 4;
                    125: /* bm_pattern not appropriate for 300ppi graphics */
                    126: #ifndef GOT_300_PATTERN
                    127: # define GOT_300_PATTERN
                    128: static unsigned int b_300ppi_pattern[] =
                    129: {
                    130:     0xffff, 0x1111, 0xffff, 0x3333,
                    131:     0x0f0f, 0x3f3f, 0x0fff, 0x00ff, 0x33ff
                    132: };
                    133: #endif
                    134:
                    135: TERM_PUBLIC void HPLJIIoptions()
                    136: {
                    137:     char opt[4];
                    138:     int parse_error = 0;
                    139:
                    140:     if (END_OF_COMMAND) {
                    141:        term_options[0] = NUL;
                    142:     } else {
                    143:        if (token[c_token].length > 3) {
                    144:            parse_error = 1;    /* see below */
                    145:        } else {
                    146:            /* almost_equals() won't accept numbers - use strcmp() instead */
                    147:            capture(opt, c_token, c_token, 4);
                    148:            if (!strcmp(opt, "75")) {
                    149:                hplj_dpp = 4;
                    150:            } else if (!strcmp(opt, "100")) {
                    151:                hplj_dpp = 3;
                    152:            } else if (!strcmp(opt, "150")) {
                    153:                hplj_dpp = 2;
                    154:            } else if (!strcmp(opt, "300")) {
                    155:                hplj_dpp = 1;
                    156:            } else {
                    157:                /* error, but set dpi anyway, since term it already set */
                    158:                parse_error = 1;
                    159:            }
                    160:            c_token++;
                    161:        }
                    162:     }
                    163:
                    164:     term->xmax = HPLJII_XMAX;
                    165:     term->ymax = HPLJII_YMAX;
                    166:     switch (hplj_dpp) {
                    167:     case 1:
                    168:        strcpy(term_options, "300");
                    169:        term->v_tic = 15;
                    170:        term->h_tic = 15;
                    171:        break;
                    172:     case 2:
                    173:        strcpy(term_options, "150");
                    174:        term->v_tic = 8;
                    175:        term->h_tic = 8;
                    176:        break;
                    177:     case 3:
                    178:        strcpy(term_options, "100");
                    179:        term->v_tic = 6;
                    180:        term->h_tic = 6;
                    181:        break;
                    182:     case 4:
                    183:        strcpy(term_options, "75");
                    184:        term->v_tic = 5;
                    185:        term->h_tic = 5;
                    186:        break;
                    187:     }
                    188:
                    189:     if (parse_error)
                    190:        int_error("expecting dots per inch size 75, 100, 150 or 300",
                    191:                  c_token);
                    192: }
                    193:
                    194:
                    195: TERM_PUBLIC void HPLJIIinit()
                    196: {
                    197:     term->v_char = HPLJII_VCHAR;
                    198:     term->h_char = HPLJII_HCHAR;
                    199: }
                    200:
                    201:
                    202: TERM_PUBLIC void HPLJIIgraphics()
                    203: {
                    204:     HPLJII_COURIER;
                    205:     HPLJII_PUSH_CURSOR;
                    206:     /* rotate plot -90 degrees by reversing XMAX and YMAX and by
                    207:        setting b_rastermode to TRUE */
                    208:     b_makebitmap(HPLJII_YMAX, HPLJII_XMAX, 1);
                    209:     b_rastermode = TRUE;
                    210: }
                    211:
                    212:
                    213: /* HPLJIItext by rjl - no compression */
                    214: TERM_PUBLIC void HPLJIItext()
                    215: {
                    216:     register int x, j, row;
                    217:
                    218:     fprintf(gpoutfile, "\033*t%dR", HPLJII_PPI);
                    219:     HPLJII_POP_CURSOR;
                    220:     fputs("\033*r1A", gpoutfile);
                    221:
                    222:     /* dump bitmap in raster mode */
                    223:     for (x = b_xsize - 1; x >= 0; x--) {
                    224:        row = (b_ysize / 8) - 1;
                    225:        fprintf(gpoutfile, "\033*b0m%dW", b_ysize / 8);
                    226:        for (j = row; j >= 0; j--) {
                    227:            (void) fputc((char) (*((*b_p)[j] + x)), gpoutfile);
                    228:        }
                    229:     }
                    230:     fputs("\033*rB", gpoutfile);
                    231:
                    232:     b_freebitmap();
                    233:
                    234: #ifndef VMS
                    235:     /* most vms spoolers add a formfeed character */
                    236:     putc('\f', gpoutfile);
                    237: #endif /* !VMS */
                    238: }
                    239:
                    240:
                    241:
                    242: TERM_PUBLIC void HPLJIIlinetype(linetype)
                    243: int linetype;
                    244: {
                    245:
                    246:     if (hplj_dpp == 1) {
                    247:        if (linetype >= 7)
                    248:            linetype %= 7;
                    249:        /* b_pattern not appropriate for 300ppi graphics */
                    250:        b_linemask = b_300ppi_pattern[linetype + 2];
                    251:        b_maskcount = 0;
                    252:     } else {
                    253:        b_setlinetype(linetype);
                    254:     }
                    255: }
                    256:
                    257: TERM_PUBLIC void HPLJIIput_text(x, y, str)
                    258: unsigned int x, y;
                    259: char *str;
                    260: {
                    261:     switch (b_angle) {
                    262:     case 0:
                    263:        y -= HPLJII_VCHAR / 5;
                    264:        HPLJII_POP_CURSOR;
                    265:        HPLJII_PUSH_CURSOR;
                    266:        /* (0,0) is the upper left point of the paper */
                    267:        fprintf(gpoutfile, "\033*p%+dx%+dY", x * HPLJII_DPP
                    268:                ,(HPLJII_YMAX - y - 1) * HPLJII_DPP);
                    269:        fputs(str, gpoutfile);
                    270: /*       for (; *str; ++str, x += HPLJII_HCHAR)
                    271:             HPLJIIputc (x, y, *str, b_angle);*/
                    272:        break;
                    273:     case 1:
                    274:        y += (HPLJII_HCHAR - 2 * HPLJII_VCHAR) / 2;
                    275:        y += (HPLJII_VCHAR + HPLJII_HCHAR) * strlen(str) / 2;
                    276:        for (; *str; ++str, y -= HPLJII_VCHAR)
                    277:            HPLJIIputc(x, y, *str, b_angle);
                    278:        break;
                    279:     }
                    280: }
                    281:
                    282: #ifdef PROTOTYPES
                    283: void HPLJIIputc(unsigned int x, unsigned int y, char c, int ang)
                    284: #else
                    285: void HPLJIIputc(x, y, c, ang)
                    286: unsigned int x, y;
                    287: int ang;
                    288: char c;
                    289: #endif
                    290: {
                    291:     HPLJII_POP_CURSOR;
                    292:     HPLJII_PUSH_CURSOR;
                    293:     /* (0,0) is the upper left point of the paper */
                    294:     fprintf(gpoutfile, "\033*p%+dx%+dY", x * HPLJII_DPP
                    295:            ,(HPLJII_YMAX - y - 1) * HPLJII_DPP);
                    296:     fputc(c, gpoutfile);
                    297: }
                    298:
                    299:
                    300: TERM_PUBLIC void HPLJIIreset()
                    301: {
                    302: #ifdef VMS
                    303:     fflush_binary();
                    304: #endif /* VMS */
                    305: }
                    306:
                    307:
                    308: /* HP DeskJet routines */
                    309: TERM_PUBLIC void HPDJgraphics()
                    310: {
                    311:     switch (hplj_dpp) {
                    312:     case 1:
                    313:        b_charsize(FNT13X25);
                    314:        term->v_char = FNT13X25_VCHAR;
                    315:        term->h_char = FNT13X25_HCHAR;
                    316:        break;
                    317:     case 2:
                    318:        b_charsize(FNT13X25);
                    319:        term->v_char = FNT13X25_VCHAR;
                    320:        term->h_char = FNT13X25_HCHAR;
                    321:        break;
                    322:     case 3:
                    323:        b_charsize(FNT9X17);
                    324:        term->v_char = FNT9X17_VCHAR;
                    325:        term->h_char = FNT9X17_HCHAR;
                    326:        break;
                    327:     case 4:
                    328:        b_charsize(FNT5X9);
                    329:        term->v_char = FNT5X9_VCHAR;
                    330:        term->h_char = FNT5X9_HCHAR;
                    331:        break;
                    332:     }
                    333:     /* rotate plot -90 degrees by reversing XMAX and YMAX and by
                    334:        setting b_rastermode to TRUE */
                    335:     b_makebitmap(HPLJII_YMAX, HPLJII_XMAX, 1);
                    336:     b_rastermode = TRUE;
                    337: }
                    338:
                    339:
                    340: /* 0 compression raster bitmap dump. Compatible with HP DeskJet 500
                    341:    hopefully compatible with other HP Deskjet printers */
                    342: TERM_PUBLIC void HPDJtext()
                    343: {
                    344:     register int x, j, row;
                    345:
                    346:     fprintf(gpoutfile, "\
                    347: \033*b0M\
                    348: \033*t%dR\
                    349: \033*r1A",
                    350:            HPLJII_PPI);
                    351:
                    352:     /* dump bitmap in raster mode */
                    353:     for (x = b_xsize - 1; x >= 0; x--) {
                    354:        row = (b_ysize / 8) - 1;
                    355:        fprintf(gpoutfile, "\033*b%dW", b_ysize / 8);
                    356:        for (j = row; j >= 0; j--) {
                    357:            (void) fputc((char) (*((*b_p)[j] + x)), gpoutfile);
                    358:        }
                    359:     }
                    360:     fputs("\033*rbC", gpoutfile);
                    361:
                    362:     b_freebitmap();
                    363:
                    364: #ifndef VMS                    /* most vms spoolers add a formfeed character */
                    365:     putc('\f', gpoutfile);
                    366: #endif /* !VMS */
                    367: }
                    368:
                    369: #endif
                    370:
                    371: #ifdef TERM_TABLE
                    372:
                    373: TERM_TABLE_START(hpljii_driver)
                    374:     "hpljii", "HP Laserjet series II, [75 100 150 300]",
                    375:     HPLJII_75PPI_XMAX, HPLJII_75PPI_YMAX, HPLJII_75PPI_VCHAR,
                    376:     HPLJII_75PPI_HCHAR, HPLJII_75PPI_VTIC, HPLJII_75PPI_HTIC, HPLJIIoptions,
                    377:     HPLJIIinit, HPLJIIreset, HPLJIItext, null_scale,
                    378:     HPLJIIgraphics, HPLJIImove, HPLJIIvector, HPLJIIlinetype,
                    379:     HPLJIIput_text, HPLJIItext_angle, null_justify_text, line_and_point,
                    380:     do_arrow, set_font_null, 0, TERM_BINARY
                    381: TERM_TABLE_END(hpljii_driver)
                    382:
                    383: #undef LAST_TERM
                    384: #define LAST_TERM hpljii_driver
                    385:
                    386: TERM_TABLE_START(hpdj_driver)
                    387:     "hpdj", "HP DeskJet 500, [75 100 150 300]",
                    388:     HPLJII_75PPI_XMAX, HPLJII_75PPI_YMAX, HPLJII_75PPI_VCHAR,
                    389:     HPLJII_75PPI_HCHAR, HPLJII_75PPI_VTIC, HPLJII_75PPI_HTIC, HPLJIIoptions,
                    390:     HPLJIIinit, HPLJIIreset, HPDJtext, null_scale,
                    391:     HPDJgraphics, HPLJIImove, HPLJIIvector, HPLJIIlinetype,
                    392:     HPDJput_text, HPDJtext_angle, null_justify_text, line_and_point,
                    393:     do_arrow, set_font_null, 0, TERM_BINARY
                    394: TERM_TABLE_END(hpdj_driver)
                    395:
                    396: #undef LAST_TERM
                    397: #define LAST_TERM hpdj_driver
                    398:
                    399: #endif
                    400: #endif
                    401:
                    402: #ifdef TERM_HELP
                    403: START_HELP(hpljii)
                    404: "1 hpljii",
                    405: "?commands set terminal hpljii",
                    406: "?set terminal hpljii",
                    407: "?set term hpljii",
                    408: "?terminal hpljii",
                    409: "?term hpljii",
                    410: "?hpljii",
                    411: "?commands set terminal hpdj",
                    412: "?set terminal hpdj",
                    413: "?set term hpdj",
                    414: "?terminal hpdj",
                    415: "?term hpdj",
                    416: "?hpdj",
                    417: " The `hpljii` terminal driver supports the HP Laserjet Series II printer.  The",
                    418: " `hpdj` driver supports the HP DeskJet 500 printer.  These drivers allow a",
                    419: " choice of resolutions.",
                    420: "",
                    421: " Syntax:",
                    422: "       set terminal hpljii | hpdj {<res>}",
                    423: "",
                    424: " where `res` may be 75, 100, 150 or 300 dots per inch; the default is 75.",
                    425: " Rasterization at the higher resolutions may require a large amount of memory.",
                    426: "",
                    427: " The `hp500c` terminal is similar to `hpdj`; `hp500c` additionally supports",
                    428: " color and compression."
                    429: END_HELP(hpljii)
                    430: #endif /* TERM_HELP */

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>