home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga Elysian Archive
/
AmigaElysianArchive.iso
/
printer
/
dvi2pcl.lha
/
doodevpages.c
< prev
next >
Wrap
C/C++ Source or Header
|
1992-11-25
|
5KB
|
195 lines
/* $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 <stdio.h>
#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");
}