/* $Log: doodevpages.c,v $ * Revision 0.8 92/11/23 19:46:40 19:46:40 bt (Bo Thide') * Fixed resolution bug. Portable downloading. Added/changed options. PJXL color support * * Revision 0.7 92/11/13 02:41:24 02:41:24 bt (Bo Thide') * More bug fixes and improvements. Support for PaintJet XL * * Revision 0.6 92/11/10 21:47:41 21:47:41 bt (Bo Thide') * Bug fixes. Added -R option. Better font handling. * * Revision 0.5 92/11/09 16:25:27 16:25:27 bt (Bo Thide') * Rewrite of dospecial.c. Extended \special support * * Revision 0.4 92/11/08 02:45:43 02:45:43 bt (Bo Thide') * Changed to portable bit manipulations. Replaced strrstr for non-POSIX compliant C. Fixed numerous bugs. Added support for more \special's. * * Revision 0.3 92/08/24 12:45:35 12:45:35 bt (Bo Thide') * Fixed 8 bit (dc font) support. * * Revision 0.2 92/08/23 17:28:55 17:28:55 bt (Bo Thide') * Source cleaned up. Changed certain function calls. Removed globals. * * Revision 0.1 92/08/22 23:58:47 23:58:47 bt (Bo Thide') * First Release. * */ /* * This routine processes all pages in the 'two-sided' mode. * Reverse is true for LaserJet+, but false for LaserJet II. * * If reverse is true, all even pages are output first in reverse order, * then the odd pages are output in reverse order. * * Example: * First even pages are output: 6 4 2 (2 on top, printed side upwards). * Then you turn the stack of paper (6 on top, printed side downwards) and * feed in 6 4 2, and 5 3 1 are printed on the other side. * 1 is now on top of the stack, printed side upwards. * * If reverse is false, all odd pages are output first in normal order, * then the even pages are output in reverse order. * * Example: * First odd pages are output: 1 3 5 (5 on top of stack, printed side * downwards). Then you take the stack of paper and * feed in 5 3 1 (5 on top, printed side downwards), and 6 4 2 are printed on * the other side. 1 is now on top of the stack, printed side upwards. */ #include #include "globals.h" #include "pcl.h" static char rcsid[] = "$Header: doodevpages.c,v 0.8 92/11/23 19:46:40 bt Exp $"; void doodevpages(bitfile, dvifile, pcllevel, reverse, resolution, device) FILE *bitfile; FILE *dvifile; short pcllevel; bool reverse; short resolution; short device; { long backpage, startpage; short is_odd = actualpagecount % 2; if(inpostamble) backpage = lastpage + 1; else backpage = prevpage + 1; maxpages = actualpagecount; if (reverse) { /* Start with even pages. */ /* Eject an empty paper if odd number of pages */ if (is_odd) fputs(PCL4_EJECT_PAGE,bitfile); startpage = backpage; h_offset = e_offset; while(maxpages--) { fseek(dvifile , backpage , 0); scanbop(dvifile); backpage = prevpage + 1; if (! is_odd) { printbop(startvals, count); dopage(bitfile, dvifile, pcllevel, resolution, device); } if(maxpages > 0) { fseek(dvifile , backpage , 0); scanbop(dvifile); if (is_odd) { printbop(startvals, count); dopage(bitfile, dvifile, pcllevel, resolution, device); } backpage = prevpage + 1; maxpages--; } } /* then do the odd pages */ fprintf(stderr,"Reload paper cassette with output package\n"); fputs(PCL4_MANUAL_FEED,bitfile); h_offset = o_offset; maxpages = actualpagecount; backpage = startpage; while (maxpages-- > 0) { fseek(dvifile , backpage , 0); scanbop(dvifile); backpage = prevpage + 1; if (is_odd) { printbop(startvals, count); dopage(bitfile, dvifile, pcllevel, resolution, device); } if(maxpages > 0) { fseek(dvifile , backpage , 0); scanbop(dvifile); if (! is_odd) { printbop(startvals, count); dopage(bitfile, dvifile, pcllevel, resolution, device); } backpage = prevpage + 1; maxpages--; } } } else { /* Do odd pages first */ h_offset = o_offset; maxpages = actualpagecount; fseek(dvifile , firstpage-1 , 0); while(maxpages-- > 0) { if(betweenpages(dvifile, PRESCAN_OFF)) { printbop(startvals, count); dopage(bitfile, dvifile, pcllevel, resolution, device); maxpages--; skipnextpage(dvifile); } } /* Then do the even pages */ fprintf(stderr,"Reload paper cassette with output package\n"); fputs(PCL4_MANUAL_FEED,bitfile); h_offset = e_offset; maxpages = actualpagecount; if (is_odd) fputs(PCL4_EJECT_PAGE,bitfile); /* Odd number of pages */ while(maxpages--) { fseek(dvifile , backpage , 0); scanbop(dvifile); backpage = prevpage + 1; if (! is_odd) { printbop(startvals, count); dopage(bitfile, dvifile, pcllevel, resolution, device); } if(maxpages > 0) { fseek(dvifile , backpage , 0); scanbop(dvifile); if (is_odd) { printbop(startvals, count); dopage(bitfile, dvifile, pcllevel, resolution, device); } backpage = prevpage + 1; maxpages--; } } } fprintf(stderr,"\n"); }