Artifact b9efe0f3a5ba9028005d520dea9a543d5cfb65c0dfe6fb2a07ebb38f8f9a9a1b:
- File
r34.1/plot/term/hpljii.trm
— part of check-in
[f2fda60abd]
at
2011-09-02 18:13:33
on branch master
— Some historical releases purely for archival purposes
git-svn-id: https://svn.code.sf.net/p/reduce-algebra/code/trunk/historical@1375 2bfe0521-f11c-4a00-b80e-6202646ff360 (user: arthurcnorman@users.sourceforge.net, size: 8191) [annotate] [blame] [check-ins using] [more...]
/* * $Id: hpljii.trm,v 3.26 92/03/24 22:34:57 woo Exp Locker: woo $ */ /* GNUPLOT - hpljii.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: * hpljii, hpdj * * AUTHORS * John Engels * Russell Lang * Maurice Castro * * send your comments or suggestions to (info-gnuplot@ames.arc.nasa.gov). * */ /* 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 */ #ifdef HPLJII /* 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)) #define HPLJII_VCHAR (HPLJII_PPI/6) /* Courier font with 6 lines per inch */ #define HPLJII_HCHAR (HPLJII_PPI/10) /* Courier font with 10 caracters per inch */ /* 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 #define HPLJII_PUSH_CURSOR fprintf(outfile,"\033&f0S") /* Save current cursor position */ #define HPLJII_POP_CURSOR fprintf(outfile,"\033&f1S") /* Restore cursor position */ #define HPLJII_COURIER fprintf(outfile,"\033(0N\033(s0p10.0h12.0v0s0b3T\033&l6D") /* be sure to use courier font with 6lpi and 10cpi */ static int hplj_dpp=4; /* bm_pattern not appropriate for 300ppi graphics */ static unsigned int b_300ppi_pattern[] = {0xffff, 0x1111, 0xffff, 0x3333, 0x0f0f, 0x3f3f, 0x0fff, 0x00ff, 0x33ff}; HPLJIIoptions() { char opt[4]; #define HPDJERROR "expecting dots per inch size 75, 100, 150 or 300" if (!END_OF_COMMAND) { if (token[c_token].length>3) int_error(HPDJERROR,c_token); /* almost_equals() won't accept numbers - use strcmp() instead */ capture(opt,c_token,c_token); 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 { int_error(HPDJERROR,c_token); } c_token++; } term_tbl[term].xmax = HPLJII_XMAX; term_tbl[term].ymax = HPLJII_YMAX; switch(hplj_dpp) { case 1: strcpy(term_options,"300"); term_tbl[term].v_tic = 15; term_tbl[term].h_tic = 15; break; case 2: strcpy(term_options,"150"); term_tbl[term].v_tic = 8; term_tbl[term].h_tic = 8; break; case 3: strcpy(term_options,"100"); term_tbl[term].v_tic = 6; term_tbl[term].h_tic = 6; break; case 4: strcpy(term_options,"75"); term_tbl[term].v_tic = 5; term_tbl[term].h_tic = 5; break; } } HPLJIIinit() { #ifdef vms reopen_binary(); #endif /* vms */ #ifdef PC reopen_binary(); #endif /* PC */ } HPLJIIgraphics() { term_tbl[term].v_char = HPLJII_VCHAR; term_tbl[term].h_char = HPLJII_HCHAR; 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 */ HPLJIItext() { register int x,j,row; fprintf(outfile,"\033*t%dR", HPLJII_PPI); HPLJII_POP_CURSOR; fprintf(outfile, "\033*r1A"); /* dump bitmap in raster mode */ for (x = b_xsize-1; x >= 0; x--) { row = (b_ysize/8)-1; fprintf(outfile, "\033*b0m%dW", b_ysize/8); for (j = row; j >= 0; j--) { (void) fputc( (char)(*((*b_p)[j]+x)), outfile ); } } fprintf(outfile, "\033*rB"); b_freebitmap(); #ifndef vms /* most vms spoolers add a formfeed character */ fprintf(outfile,"\f"); #endif /* not vms */ } 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); } } #define HPLJIImove b_move #define HPLJIIvector b_vector #define HPLJIItext_angle b_text_angle 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(outfile, "\033*p%+dx%+dY", x*HPLJII_DPP , (HPLJII_YMAX-y-1)*HPLJII_DPP ); fputs(str, outfile); /* 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; } } HPLJIIputc(x,y,c,angle) unsigned int x,y; int angle; char c; { HPLJII_POP_CURSOR; HPLJII_PUSH_CURSOR; /* (0,0) is the upper left point of the paper */ fprintf(outfile, "\033*p%+dx%+dY", x*HPLJII_DPP , (HPLJII_YMAX-y-1)*HPLJII_DPP ); fputc(c, outfile); } HPLJIIreset() { #ifdef vms fflush_binary(); #endif /* vms */ } /* HP DeskJet routines */ HPDJgraphics() { switch(hplj_dpp) { case 1: b_charsize(FNT13X25); term_tbl[term].v_char = FNT13X25_VCHAR; term_tbl[term].h_char = FNT13X25_HCHAR; break; case 2: b_charsize(FNT13X25); term_tbl[term].v_char = FNT13X25_VCHAR; term_tbl[term].h_char = FNT13X25_HCHAR; break; case 3: b_charsize(FNT9X17); term_tbl[term].v_char = FNT9X17_VCHAR; term_tbl[term].h_char = FNT9X17_HCHAR; break; case 4: b_charsize(FNT5X9); term_tbl[term].v_char = FNT5X9_VCHAR; term_tbl[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 */ HPDJtext() { register int x,j,row; fprintf(outfile,"\033*b0M"); fprintf(outfile,"\033*t%dR", HPLJII_PPI); fprintf(outfile, "\033*r0A"); /* dump bitmap in raster mode */ for (x = b_xsize-1; x >= 0; x--) { row = (b_ysize/8)-1; fprintf(outfile, "\033*b%dW", b_ysize/8); for (j = row; j >= 0; j--) { (void) fputc( (char)(*((*b_p)[j]+x)), outfile ); } } fprintf(outfile, "\033*rbC"); b_freebitmap(); #ifndef vms /* most vms spoolers add a formfeed character */ fprintf(outfile,"\f"); #endif /* not vms */ } #define HPDJtext_angle b_text_angle #define HPDJput_text b_put_text #endif /* HPLJII */