summaryrefslogtreecommitdiff
path: root/dviware/dvi2pcl/doodevpages.c
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /dviware/dvi2pcl/doodevpages.c
Initial commit
Diffstat (limited to 'dviware/dvi2pcl/doodevpages.c')
-rw-r--r--dviware/dvi2pcl/doodevpages.c194
1 files changed, 194 insertions, 0 deletions
diff --git a/dviware/dvi2pcl/doodevpages.c b/dviware/dvi2pcl/doodevpages.c
new file mode 100644
index 0000000000..240e0bb298
--- /dev/null
+++ b/dviware/dvi2pcl/doodevpages.c
@@ -0,0 +1,194 @@
+/* $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");
+}