/* prototypes for this file are in epson.trm-proto */ /* GNUPLOT - epson.trm */ /* * Copyright (C) 1990 * * 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: * epson_lx800, nec_cp6c, nec_cp6d, nec_cp6b, starc, * epson_60dpi, tandy_60dpi * * AUTHORS * Russell Lang * William Wilson * * send your comments or suggestions to (pixar!info-gnuplot@sun.com). * */ /* The following epson lx800 driver uses generic bit mapped graphics routines to build up a bit map in memory. */ /* by Russell Lang, rjl@monu1.cc.monash.edu.au */ /* On PC, print using 'copy file /b lpt1:', do NOT use 'print' */ /* EPSON_init changes outfile to binary mode on PC's */ #ifdef EPSON #define EPSONXMAX 512 #define EPSONYMAX 384 #define EPSONXLAST (EPSONXMAX - 1) #define EPSONYLAST (EPSONYMAX - 1) #define EPSONVCHAR FNT5X9_VCHAR #define EPSONHCHAR FNT5X9_HCHAR #define EPSONVTIC 6 #define EPSONHTIC 6 int EPSONinit(void) { #ifdef PC reopen_binary(); #endif #ifdef vms reopen_binary(); #endif } int EPSONgraphics(void) { b_charsize(FNT5X9); b_makebitmap((int)(EPSONXMAX*xsize), (int)(EPSONYMAX*ysize), 1); } int EPSONtext(void) { epson_dump(); b_freebitmap(); } #define EPSONlinetype b_setlinetype #define EPSONmove b_move #define EPSONvector b_vector #define EPSONput_text b_put_text #define EPSON_text_angle b_text_angle int EPSONreset(void) { #ifdef vms fflush_binary(); #endif } /* output file must be binary mode for epson_dump */ int epson_dump(void) { register int x; int j; for (j=(b_ysize/8)-1; j>=0; j--) { /* select plotter graphics mode (square pixels) */ fprintf(outfile, "\033J\030"); /* line feed 8/72" = 8 dots */ fprintf(outfile, "\r\033*\005"); (void) fputc((char)(b_xsize%256), outfile); (void) fputc((char)(b_xsize/256), outfile); for (x=0; x=6) linetype %= 6; b_setvalue(neccolor[linetype+2]); } #define NECMlinetype b_setlinetype #define NECmove b_move #define NECvector b_vector #define NECput_text b_put_text #define NEC_text_angle b_text_angle int NECreset(void) { #ifdef vms fflush_binary(); #endif } /* output file must be binary mode for nec_dump */ int nec_dump(void) { int x; int plane, offset; int j; int column8; unsigned long column24; char column3, column2, column1; fprintf(outfile, "\033P\033l\005"); /* 10cpi, left margin 5 char */ for (j=(b_ysize/8)-1;j>=0;j--) { fprintf(outfile, "\033J\030"); /* 24/180" line feed */ for (plane=0; plane1) { /* select colour for plane */ fprintf(outfile, "\033r"); (void) fputc((char)necpcolor[plane], outfile); } /* select plotter graphics mode (square pixels) */ fprintf(outfile, "\r\033*\047"); (void) fputc((char)((b_xsize*3)%256), outfile); (void) fputc((char)((b_xsize*3)/256), outfile); for (x=0; x>8) & (long)0xff); column3 = (char) ((column24>>16) & (long)0xff); (void) fputc(column3, outfile); (void) fputc(column2, outfile); (void) fputc(column1, outfile); (void) fputc(column3, outfile); (void) fputc(column2, outfile); (void) fputc(column1, outfile); (void) fputc(column3, outfile); (void) fputc(column2, outfile); (void) fputc(column1, outfile); } } } fprintf(outfile, "\r\033l"); (void) fputc('\0', outfile); /* set left margin to 0 */ if (b_planes > 1) { fprintf(outfile, "\033r"); (void) fputc('\0', outfile); /* set color to black */ } #ifdef PC fprintf(stderr, "Print using: COPY /B\n"); #endif #ifdef vms fflush_binary(); #endif } /* output file must be binary mode for nec_dump */ int nec_draft_dump(void) { int x; int plane, offset; int j; fprintf(outfile, "\033P\033l\005\r"); /* 10cpi, left margin 5 char */ for (j=(b_ysize/8)-1;j>=0;j--) { fprintf(outfile, "\033J\030"); /* 24/180" line feed */ for (plane=0; plane1) { /* select colour for plane */ fprintf(outfile, "\033r"); (void) fputc((char)necpcolor[plane], outfile); } /* select plotter graphics mode (square pixels) */ fprintf(outfile, "\r\033*"); (void) fputc('\0', outfile); (void) fputc((char)(b_xsize%256), outfile); (void) fputc((char)(b_xsize/256), outfile); for (x=0; x 1) { fprintf(outfile, "\033r"); (void) fputc('\0', outfile); /* set color to black */ } #ifdef PC fprintf(stderr, "Print using: COPY /B\n"); #endif } #endif /* NEC */ #ifdef STARC /* The following Star color driver uses generic bit mapped graphics routines to build up a bit map in memory. */ /* Star Color changes made by William Wilson, wew@naucse.cse.nau.edu */ /* On PC, print using 'copy file /b lpt1:', do NOT use 'print' */ /* STARC_init changes outfile to binary mode on PC's */ #define STARCXMAX 512 #define STARCYMAX 384 #define STARCXLAST (STARCXMAX - 1) #define STARCYLAST (STARCYMAX - 1) #define STARCVCHAR FNT5X9_VCHAR #define STARCHCHAR FNT5X9_HCHAR #define STARCVTIC 6 #define STARCHTIC 6 /* plane 0=black, 1=cyan(blue), 2=magenta(red), 3=yellow */ static int STARCcolor[] = {1, 8, 4, 2, 10, 12, 6, 14}; static int STARCpcolor[]= {0, 2, 1, 4}; int STARCinit(void) { #ifdef PC reopen_binary(); #endif #ifdef vms reopen_binary(); #endif } int STARCgraphics(void) { b_charsize(FNT5X9); b_makebitmap((int)(STARCXMAX*xsize), (int)(STARCYMAX*ysize), 4); } int STARCtext(void) { STARC_dump(); b_freebitmap(); } int STARClinetype(int linetype) { if (linetype>=6) linetype %= 6; b_setvalue(STARCcolor[linetype+2]); } #define STARCmove b_move #define STARCvector b_vector #define STARCput_text b_put_text #define STARC_text_angle b_text_angle int STARCreset(void) { #ifdef vms fflush_binary(); #endif } /* output file must be binary mode for STARC_dump */ int STARC_dump(void) { int x; int plane, offset; int j; for (j=(b_ysize/8)-1;j>=0;j--) { fprintf(outfile, "\033J\030"); /* line feed 8/72" = 8 dots */ for (plane=0; plane1) { /* select colour for plane */ fprintf(outfile, "\033r"); (void) fputc((char)STARCpcolor[plane], outfile); } /* select plotter graphics mode (square pixels) */ fprintf(outfile, "\r\033*\005"); (void) fputc((char)(b_xsize%256), outfile); (void) fputc((char)(b_xsize/256), outfile); for (x=0; x 1) { fprintf(outfile, "\033r"); (void) fputc('\0', outfile); /* set color to black */ } #ifdef PC fprintf(stderr, "Print using: COPY /B\n"); #endif } #endif /* STARC */ #ifdef EPS60 /* make the total dimensions 8 inches by 5 inches */ #define EPS60XMAX 480 #define EPS60YMAX 360 #define EPS60XLAST (EPS60XMAX - 1) #define EPS60YLAST (EPS60YMAX - 1) int EPS60graphics(void) { b_charsize(FNT5X9); b_makebitmap((int)(EPS60XMAX*xsize), (int)(EPS60YMAX*ysize), 1); } int EPS60text(void) { eps60_dump(); b_freebitmap(); } /* output file must be binary mode for eps60_dump */ int eps60_dump(void) { register int x; int j; fprintf(outfile, "\033%c\030", '3'); /* set line spacing 24/216" = 8 dots */ for (j=(b_ysize/8)-1; j>=0; j--) { /* select printer graphics mode 'K' */ fprintf(outfile, "\r\n\033K"); (void) fputc((char)(b_xsize%256), outfile); (void) fputc((char)(b_xsize/256), outfile); for (x=0; x