Artifact 69699986bd7019758a01db9997ba3889a61f22b2679887e56501d1fcfe73bbb7:
- File
r34.1/plot/term/pbm.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: 6895) [annotate] [blame] [check-ins using] [more...]
/* * $Id: pbm.trm,v 3.24 1992/02/29 16:23:41 woo Exp woo $ * * $Log: pbm.trm,v $ * Revision 3.24 1992/02/29 16:23:41 woo * gnuplot3.2, beta 4 * * Revision 3.23 1992/02/21 20:18:16 woo * gnuplot3.2, beta 3 * */ /* GNUPLOT - pbm.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: * pbm, pgm, ppm * * AUTHORS * Russell Lang * * send your comments or suggestions to (info-gnuplot@ames.arc.nasa.gov). * */ /* The following pbmplus drivers use the 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 */ /* See Jef Poskanzer's excellent PBMplus package for more details of the Portable BitMap format and for programs to convert PBM files to other bitmap formats. */ #ifdef PBM /* make XMAX and YMAX a multiple of 8 */ #define PBM_XMAX (640) #define PBM_YMAX (480) #define PBM_VCHAR (FNT5X9_VCHAR) #define PBM_HCHAR (FNT5X9_VCHAR) #define PBM_VTIC FNT5X9_HBITS #define PBM_HTIC FNT5X9_HBITS static int pbm_font=1; /* small font */ /* 7=black, 0=white */ static int pgm_gray[]={7,1,6,5,4,3,2,1,7}; /* grays */ /* bit3=!intensify, bit2=!red, bit1=!green, bit0=!blue */ static int ppm_color[]={15,8,3,5,6,4,2,1,11,13,14}; /* colors */ PBMoptions() { if (!END_OF_COMMAND) { if (almost_equals(c_token,"s$mall")) pbm_font=1; else if (almost_equals(c_token,"m$edium")) pbm_font=2; else if (almost_equals(c_token,"l$arge")) pbm_font=3; else int_error("expecting: small, medium, large",c_token); c_token++; } } PBMinit() { #ifdef vms reopen_binary(); #endif /* vms */ #ifdef PC reopen_binary(); #endif /* PC */ } PBMreset() { #ifdef vms fflush_binary(); #endif /* vms */ } PBMsetfont() { switch(pbm_font) { case 1: b_charsize(FNT5X9); term_tbl[term].v_char = FNT5X9_VCHAR; term_tbl[term].h_char = FNT5X9_HCHAR; term_tbl[term].v_tic = FNT5X9_HBITS; term_tbl[term].h_tic = FNT5X9_HBITS; break; case 2: b_charsize(FNT9X17); term_tbl[term].v_char = FNT9X17_VCHAR; term_tbl[term].h_char = FNT9X17_HCHAR; term_tbl[term].v_tic = FNT9X17_HBITS; term_tbl[term].h_tic = FNT9X17_HBITS; break; case 3: b_charsize(FNT13X25); term_tbl[term].v_char = FNT13X25_VCHAR; term_tbl[term].h_char = FNT13X25_HCHAR; term_tbl[term].v_tic = FNT13X25_HBITS; term_tbl[term].h_tic = FNT13X25_HBITS; break; } } PBMgraphics() { PBMsetfont(); /* rotate plot -90 degrees by reversing XMAX and YMAX and by setting b_rastermode to TRUE */ b_makebitmap((unsigned int)(PBM_YMAX*ysize), (unsigned int)(PBM_XMAX*xsize),1); b_rastermode = TRUE; } PBMtext() { register int x,j,row; fprintf(outfile,"P4\n"); fprintf(outfile,"%u %u\n", b_ysize, b_xsize); /* dump bitmap in raster mode */ for (x = b_xsize-1; x >= 0; x--) { row = (b_ysize/8)-1; for (j = row; j >= 0; j--) { (void) fputc( (char)(*((*b_p)[j]+x)), outfile ); } } b_freebitmap(); } #define PBMlinetype b_setlinetype #define PBMmove b_move #define PBMvector b_vector #define PBMtext_angle b_text_angle #define PBMtext_angle b_text_angle #define PBMput_text b_put_text /* PGM functions */ PGMgraphics() { PBMsetfont(); /* rotate plot -90 degrees by reversing XMAX and YMAX and by setting b_rastermode to TRUE */ b_makebitmap((unsigned int)(PBM_YMAX*ysize), (unsigned int)(PBM_XMAX*xsize),3); b_rastermode = TRUE; b_setlinetype(0); /* solid lines */ } PGMtext() { register int x,j,row; register int i,value; int mask, plane1, plane2, plane3; fprintf(outfile,"P5\n"); fprintf(outfile,"%u %u\n", b_ysize, b_xsize); fprintf(outfile,"%u\n",7); /* dump bitmap in raster mode */ for (x = b_xsize-1; x >= 0; x--) { row = (b_ysize/8)-1; for (j = row; j >= 0; j--) { mask = 0x80; plane1=(*((*b_p)[j]+x)); plane2=(*((*b_p)[j+b_psize]+x)); plane3=(*((*b_p)[j+b_psize+b_psize]+x)); for (i=0; i<8; i++) { value=7; if (plane1 & mask) value-=1; if (plane2 & mask) value-=2; if (plane3 & mask) value-=4; (void) fputc( (char)(value), outfile ); mask>>=1; } } } b_freebitmap(); } PGMlinetype(linetype) int linetype; { if (linetype>=7) linetype %= 7; b_setvalue(pgm_gray[linetype+2]); } /* PPM functions */ PPMgraphics() { PBMsetfont(); /* rotate plot -90 degrees by reversing XMAX and YMAX and by setting b_rastermode to TRUE */ b_makebitmap((unsigned int)(PBM_YMAX*ysize), (unsigned int)(PBM_XMAX*xsize),4); b_rastermode = TRUE; b_setlinetype(0); /* solid lines */ } PPMtext() { register int x,j,row; register int i; int mask, plane1, plane2, plane3, plane4; int red, green, blue; fprintf(outfile,"P6\n"); fprintf(outfile,"%u %u\n", b_ysize, b_xsize); fprintf(outfile,"%u\n",3); /* dump bitmap in raster mode */ for (x = b_xsize-1; x >= 0; x--) { row = (b_ysize/8)-1; for (j = row; j >= 0; j--) { mask = 0x80; plane1=(*((*b_p)[j]+x)); plane2=(*((*b_p)[j+b_psize]+x)); plane3=(*((*b_p)[j+b_psize+b_psize]+x)); plane4=(*((*b_p)[j+b_psize+b_psize+b_psize]+x)); for (i=0; i<8; i++) { red = (plane3 & mask) ? 1 : 3; green = (plane2 & mask) ? 1 : 3; blue = (plane1 & mask) ? 1 : 3; if (plane4 & mask) { red--; green--; blue--; } (void) fputc( (char)(red), outfile ); (void) fputc( (char)(green), outfile ); (void) fputc( (char)(blue), outfile ); mask>>=1; } } } b_freebitmap(); } PPMlinetype(linetype) int linetype; { if (linetype>=9) linetype %= 9; b_setvalue(ppm_color[linetype+2]); } #endif /* PBM */