summaryrefslogtreecommitdiff
path: root/dviware/dvipj
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/dvipj
Initial commit
Diffstat (limited to 'dviware/dvipj')
-rw-r--r--dviware/dvipj/dvipj.c409
-rw-r--r--dviware/dvipj/dvipj.patch279
-rw-r--r--dviware/dvipj/readme28
3 files changed, 716 insertions, 0 deletions
diff --git a/dviware/dvipj/dvipj.c b/dviware/dvipj/dvipj.c
new file mode 100644
index 0000000000..f3165a2e34
--- /dev/null
+++ b/dviware/dvipj/dvipj.c
@@ -0,0 +1,409 @@
+/* -*-C-*- dvipj.c */
+/*-->dvijet*/
+/**********************************************************************/
+/******************************* dvipj ********************************/
+/**********************************************************************/
+
+ /* HP PaintJet driver based on dvijet (the escape sequences are very */
+ /* similar), magnification stuff from dvitos (also 180 dpi) */
+
+ /* The changes to the included files have *only* been made for */
+ /* unsegmented-memory un*x */
+
+ /* We allow 4 colours (including black, but not including white)
+ (NPLANES =4), stored as 4 separate bitmaps. The current bitmap is
+ indexed by global variable `plane', which can be reset by \specials. To
+ make things simpler, the paintjet palette is redefined so that
+ when only one bitmap has a pixel set at the appropriate position
+ you get the right colour. At present, if more then one bitmap has
+ a given pixel set, you get a colour determined by the sequence
+ red, green, blue, black (in order of increasing precedence). This
+ should be changed by removing corresponding entries in the other
+ bitmaps when the current colour is painted.
+ There is one \special{color <red|blue|green|black>}.
+ Transparency mode is assumed -- this should be a command-line
+ switch.
+ */
+
+#include "dvihead.h"
+
+/**********************************************************************/
+/************************ Device Definitions ************************/
+/**********************************************************************/
+
+/* All output-device-specific definitions go here. This section must
+be changed when modifying a dvi driver for use on a new device */
+
+#undef HPPAINTJET
+#define HPPAINTJET 1 /* conditional compilation flag */
+
+#define VERSION_NO "2.10" /* DVI driver version number */
+
+#define DEVICE_ID "Hewlett-Packard PaintJet printer"
+ /* this string is printed at runtime */
+
+#define OUTFILE_EXT "pj"
+
+#define DEFAULT_RESOLUTION 180 /* default dots/inch on HP PaintJet */
+
+#define BYTE_SIZE 8 /* output file byte size */
+
+#undef STDRES
+#define STDRES 0 /* 0 for low-resolution devices */
+
+#define XDPI 180 /* HP Laser Jet horizontal dots/inch */
+#define XPSIZE 8 /* horizontal paper size in inches */
+
+#define XSIZE (((XDPI*XPSIZE+2*HOST_WORD_SIZE-1)/\
+ (2*HOST_WORD_SIZE))*(2*HOST_WORD_SIZE))
+ /* number of horizontal dots; */
+ /* MUST BE multiple of */
+ /* 2*HOST_WORD_SIZE */
+#define XWORDS ((XSIZE + HOST_WORD_SIZE - 1)/HOST_WORD_SIZE)
+ /* number of words in rows */
+ /* of bitmap array */
+
+#define YDPI 180 /* HP PaintJet vertical dots/inch */
+
+#define YPSIZE 11 /* vertical paper size in inches */
+#define YSIZE (YDPI*YPSIZE) /* number of vertical dots */
+#define NPLANES 4 /* number of colour planes
+ (including black) */
+/* The printer bit map (must have an even number of columns). */
+
+#define XBIT ((1+2*XWORDS)/2)
+#define YBIT YSIZE
+#if (IBM_PC_LATTICE | IBM_PC_MICROSOFT | IBM_PC_WIZARD)
+#undef SEGMEM
+#define SEGMEM 1 /* ( ((long)XBIT * (long)YBIT) > 65536L ) */
+#endif
+
+#include "bitmap.h"
+
+#include "main.h"
+#include "abortrun.h"
+#include "actfact.h"
+#include "alldone.h"
+#include "chargf.h"
+#include "charpk.h"
+#include "charpxl.h"
+#include "clrbmap.h"
+#include "clrrow.h"
+#include "dbgopen.h"
+
+/*-->devinit*/
+/**********************************************************************/
+/****************************** devinit *******************************/
+/**********************************************************************/
+
+void
+devinit(argc,argv) /* initialize device */
+int argc;
+char *argv[];
+{
+ (void)getbmap();
+ OUTF("\033E\033*t%dR",(int)hpres); /* printer reset, resolution */
+ OUTS("\033&k3W"); /* transparency mode -- should be made */
+ /* optional */
+}
+
+/*-->devterm*/
+/**********************************************************************/
+/****************************** devterm *******************************/
+/**********************************************************************/
+
+void
+devterm() /* terminate device */
+{
+}
+
+#include "dvifile.h"
+#include "dviinit.h"
+#include "dviterm.h"
+#include "dispchar.h"
+#include "f20open.h"
+#include "fatal.h"
+#include "fillrect.h"
+#include "findpost.h"
+#include "fixpos.h"
+#include "fontfile.h"
+#include "fontsub.h"
+#include "getbmap.h"
+#include "getbytes.h"
+#include "getfntdf.h"
+#include "getpgtab.h"
+#include "initglob.h"
+#include "inch.h"
+#include "loadchar.h"
+#include "movedown.h"
+#include "moveover.h"
+#include "moveto.h"
+#include "nosignex.h"
+#include "openfont.h"
+#include "option.h"
+
+/*-->outline*/
+/**********************************************************************/
+/****************************** outline *******************************/
+/**********************************************************************/
+
+void
+outline(type,pbit)
+UNSIGN32 *pbit; /* pointer to raster line */
+char type; /* 'V' or 'W' for non-last or last */
+ /* plane respectively */
+
+/*************************************************************************
+Use machine-specific coding here for efficiency. For TOPS-20, we encode
+9 bytes from every pair of 36-bit words.
+
+For each raster line on the paper, the Laser Jet expects a binary 8-bit
+byte stream of the form
+
+ <ESC>*bnnnWxxxxxxx ... xxxxxxx
+ <--- nnn bytes --->
+
+where each byte contains, in order from high to low bit, a left-to-right
+bit pattern. No end-of-line marker is required; the escape sequence
+automatically causes a new raster line to be started.
+*************************************************************************/
+
+{
+ register UNSIGN32 w_even,w_odd;
+ register UNSIGN32 *p;
+ register BYTE *pbuf;
+ BYTE buf[1+(XSIZE+7)/8]; /* space for EOS + n 8-bit bytes */
+ register INT16 i,last_word;
+
+
+#if IBM_PC_MICROSOFT
+ for (last_word = XBIT - 1;
+ (last_word >= 1) && (*(UNSIGN32*)normaddr(pbit,last_word) == 0);
+ --last_word)
+ ; /* trim white space a word at a time */
+#else
+ p = pbit + XBIT - 1; /* point to last word on line */
+ for (last_word = XBIT - 1; (last_word >= 1) && (*p == 0); --last_word)
+ --p; /* trim white space a word at a time */
+#endif
+
+ p = pbit;
+ pbuf = &buf[0];
+ for (i = 0; i <= last_word; i += 2) /* loop over trimmed raster */
+ {
+ w_even = (*p++);
+ w_odd = (*p++);
+
+#if (HOST_WORD_SIZE == 36)
+ *pbuf++ = (BYTE)( (w_even >> 28) & 0xff);
+ *pbuf++ = (BYTE)( (w_even >> 20) & 0xff);
+ *pbuf++ = (BYTE)( (w_even >> 12) & 0xff);
+ *pbuf++ = (BYTE)( (w_even >> 4) & 0xff);
+ *pbuf++ = (BYTE)( ((w_even << 4) | (w_odd >> 32)) & 0xff);
+ *pbuf++ = (BYTE)( (w_odd >> 24) & 0xff);
+ *pbuf++ = (BYTE)( (w_odd >> 16) & 0xff);
+ *pbuf++ = (BYTE)( (w_odd >> 8) & 0xff);
+ *pbuf++ = (BYTE)( (w_odd ) & 0xff);
+#else /* HOST_WORD_SIZE == 32 */
+ /* encode 8 bytes at a time on 32-bit machines */
+ *pbuf++ = (BYTE)( (w_even >> 24) & 0xff);
+ *pbuf++ = (BYTE)( (w_even >> 16) & 0xff);
+ *pbuf++ = (BYTE)( (w_even >> 8) & 0xff);
+ *pbuf++ = (BYTE)( (w_even ) & 0xff);
+ *pbuf++ = (BYTE)( (w_odd >> 24) & 0xff);
+ *pbuf++ = (BYTE)( (w_odd >> 16) & 0xff);
+ *pbuf++ = (BYTE)( (w_odd >> 8) & 0xff);
+ *pbuf++ = (BYTE)( (w_odd ) & 0xff);
+#endif
+
+ }
+
+ *pbuf = '\0'; /* trailing EOS marker */
+
+ last_word |= 1; /* make last_word ODD */
+ for (i = ((last_word+1)*HOST_WORD_SIZE)/8;
+ (*(--pbuf) == '\0') && (i > 1); --i)
+ ; /* trim trailing zero bytes, leaving at least one */
+ last_word = i;
+
+ if (type=='V')
+ OUTF("\033*b%dV",(int)last_word);
+ else if (type=='W')
+ OUTF("\033*b%dW",(int)last_word);
+ pbuf = &buf[0]; /* cannot use fprintf with %s format because of
+ NUL's in string, and it is slow anyway */
+ for (i = 0; i < last_word; ++pbuf,++i)
+ OUTC(*pbuf);
+}
+
+/*-->prtbmap*/
+/**********************************************************************/
+/****************************** prtbmap *******************************/
+/**********************************************************************/
+
+void
+prtbmap()
+
+{
+ register UNSIGN32 *p;
+ register INT16 i,j,k,ybottom,ytop;
+
+ if (DBGOPT(DBG_PAGE_DUMP))
+ {
+ INT16 k1,k2,k3;
+
+ for (k3 = 0; k3 < XBIT; (k3 += 7, ++p))
+ { /* print bitmap 7 words at a pass */
+ k1 = k3;
+ k2 = MIN(XBIT,k1+7);
+ (void)printf("prtbmap()...bitmap words %d..%d",k1,k2-1);
+ NEWLINE(stdout);
+ (void)printf(" ");
+ for (k = k1; k < k2; ++k)
+ (void)printf("%10d",k*HOST_WORD_SIZE);
+ NEWLINE(stdout);
+ for (j = YBIT-1; j >= 0; --j)
+ {
+ p = BITMAP(plane,j,0);
+ for (k = 0; k < XBIT; (++k,++p))
+ {
+ if (*p) /* print non-blank raster line */
+ {
+ p = BITMAP(plane,j,k1);
+ (void)printf("%5d:",j);
+ for (k = k1; k < k2; (++k,++p))
+ (void)printf(" %09lx",*p);
+ NEWLINE(stdout);
+ break; /* exit loop over k */
+ }
+ }
+ }
+ }
+ }
+
+ (void)clearerr(plotfp);
+
+#if ZAPTHISOUT
+ k = -1; /* find top non-zero raster */
+ for (j = YBIT-1; (j > 0) && (k < 0); --j) /* loop over raster lines */
+ {
+ p = BITMAP(plane,j,XBIT-1);
+ for (k = XBIT - 1; ((k >= 0) && (*p == 0)); --k)
+ --p; /* trim white space */
+ }
+ ytop = j;
+#else
+ ytop = YBIT-1;
+#endif
+
+ k = -1; /* find bottom non-zero raster */
+ for (j = 0; (j < ytop) && (k < 0); ++j) /* loop over raster lines */
+ {
+
+#if IBM_PC_MICROSOFT
+ for (k = XBIT - 1;((k >= 0) && (*BITMAP(plane,j,k) == 0));--k)
+ ; /* trim white space */
+#else
+ p = BITMAP(plane,j,XBIT-1);
+ for (k = XBIT - 1; ((k >= 0) && (*p == 0)); --k)
+ --p; /* trim white space */
+#endif
+
+ }
+ ybottom = MAX(0,j-1);
+
+#if ZAPTHISOUT
+ for (j = ytop; (j >= ybottom); --j)
+ {
+ OUTF("%5d:",(int)j);
+ for (k = 0; k < XBIT; ++k)
+ OUTF(" %9x",*BITMAP(plane,j,k));
+ NEWLINE(plotfp);
+ }
+#endif
+
+/* OUTF("\033&l%dX",(int)copies); *//* number of copies (not relevant)*/
+
+ OUTS("\033*r4U"); /* use 4 printer colour planes */
+ /* (distinct from bitmap */
+ /* plane) */
+ OUTS("\033*v90A\033*v88B\033*v85C\033*v0I"); /* define palette # 0 as white */
+ OUTS("\033*v53A\033*v8B\033*v14C\033*v1I"); /* define palette # 1 */
+ /* as red */
+ OUTS("\033*v3A\033*v26B\033*v22C\033*v2I"); /* define palette # 2 */
+ /* as green */
+ OUTS("\033*v3I"); /* and #3 */
+ OUTS("\033*v4A\033*v4B\033*v29C\033*v4I"); /* define palette # 4 */
+ /* as blue */
+ OUTS("\033*v5I\033*v6I\033*v7I"); /* and #5,6,7 */
+ OUTS("\033*v4A\033*v4B\033*v6C\033*v8I"); /* define palette # 8 */
+ /* as black */
+ OUTS("\033*v9I\033*v10I\033*v11I\033*v12I\033*v13I\033*v14I\033*v15I");
+ /* and other values with top bit set (i.e., including black) */
+ OUTS("\033*r1A"); /* start plot at current */
+ /* position */
+
+ for (j = ytop; (j >= ybottom) ; --j) { /* loop over raster lines */
+ for (i = 1; i<=3; i++)
+ outline('V',BITMAP(i,j,0)); /* red, green, blue in order */
+ outline('W',BITMAP(0,j,0)); /* finish with black */
+ }
+
+ /* OUTS("\033*rB"); */ /* end raster graphics */
+ OUTS("\f"); /* get to bottom of page */
+ (void)fflush(plotfp);
+ if (DISKFULL(plotfp))
+ (void)fatal("Output error -- disk storage probably full");
+}
+
+#include "outrow.h"
+#include "prtpage.h"
+#include "readfont.h"
+#include "readgf.h"
+#include "readpk.h"
+#include "readpost.h"
+#include "readpxl.h"
+#include "reldfont.h"
+#include "rulepxl.h"
+#include "setchar.h"
+#include "setfntnm.h"
+#include "setrule.h"
+#include "signex.h"
+#include "skgfspec.h"
+#include "skipfont.h"
+#include "skpkspec.h"
+/* -*-C-*- special.h */
+/*-->special*/
+/**********************************************************************/
+/****************************** special *******************************/
+/**********************************************************************/
+
+void
+special(s) /* process TeX \special{} string in s[] */
+register char *s;
+{
+
+ if (strncmp("color ",s,6)==0) {
+ if (strcmp("black",&s[6])==0) plane=0;
+ else if(strcmp("red",&s[6])==0) plane=1;
+ else if(strcmp("green",&s[6])==0) plane=2;
+ else if(strcmp("blue",&s[6])==0) plane=3;
+ else {
+ (void)sprintf(message,
+ "special(): colour %s not available -- ignored",s);
+ (void)warning(message);
+ }
+ }
+ else {
+ (void)sprintf(message,
+ "special(): TeX \\special{%s} not implemented in this driver",s);
+ (void)warning(message);
+ }
+}
+#include "strchr.h"
+#include "strcm2.h"
+#include "strid2.h"
+#include "strrchr.h"
+#include "tctos.h"
+#include "usage.h"
+#include "warning.h"
diff --git a/dviware/dvipj/dvipj.patch b/dviware/dvipj/dvipj.patch
new file mode 100644
index 0000000000..50369846dd
--- /dev/null
+++ b/dviware/dvipj/dvipj.patch
@@ -0,0 +1,279 @@
+Only in beebe: bintnx.h
+Only in beebe: bintnxvm.h
+diff -wc2 beebe/bitmap.h beebenew/bitmap.h
+*** beebe/bitmap.h Thu Mar 29 15:34:38 1990
+--- beebenew/bitmap.h Thu Aug 2 17:19:04 1990
+***************
+*** 60,64 ****
+
+ UNSIGN32* bitmap = (UNSIGN32*)NULL;
+ #define BITMAP(y,x) (bitmap + ((UNSIGN32)XBIT*(UNSIGN32)(y)) + (UNSIGN32)(x))
+!
+ #endif /* SEGMEM */
+--- 60,69 ----
+
+ UNSIGN32* bitmap = (UNSIGN32*)NULL;
++ #if HPPAINTJET
++ #define BITMAP(p,y,x) (bitmap + \
++ ((UNSIGN32)(p)*(UNSIGN32)XBIT*(UNSIGN32)YBIT) \
++ + ((UNSIGN32)XBIT*(UNSIGN32)(y)) + (UNSIGN32)(x))
++ #else
+ #define BITMAP(y,x) (bitmap + ((UNSIGN32)XBIT*(UNSIGN32)(y)) + (UNSIGN32)(x))
+! #endif /* HPPAINTJET */
+ #endif /* SEGMEM */
+diff -wc2 beebe/clrbmap.h beebenew/clrbmap.h
+*** beebe/clrbmap.h Thu Mar 29 15:34:42 1990
+--- beebenew/clrbmap.h Thu Aug 2 17:19:05 1990
+***************
+*** 42,48 ****
+ register UNSIGN32 *p; /* bitmap pointer */
+
+ p = (UNSIGN32*)BITMAP(YBIT-1,XBIT-1); /* the last element */
+
+! for (nword = (XBIT*YBIT); nword; (--nword,--p))
+ *p = (UNSIGN32)0;
+
+--- 42,53 ----
+ register UNSIGN32 *p; /* bitmap pointer */
+
++ #if HPPAINTJET
++ p = (UNSIGN32*)BITMAP(NPLANES-1,YBIT-1,XBIT-1); /* the last */
++ /* element */
++ #else
+ p = (UNSIGN32*)BITMAP(YBIT-1,XBIT-1); /* the last element */
++ #endif
+
+! for (nword = (NPLANES*XBIT*YBIT); nword; (--nword,--p))
+ *p = (UNSIGN32)0;
+
+Only in beebe: derun.h
+Only in beebenew: diffs
+diff -wc2 beebe/dispchar.h beebenew/dispchar.h
+*** beebe/dispchar.h Thu Mar 29 15:34:47 1990
+--- beebenew/dispchar.h Thu Aug 2 17:19:06 1990
+***************
+*** 127,131 ****
+--- 127,135 ----
+ { /* top to bottom */
+ x = xcorner; /* select horizontal position */
++ #if HPPAINTJET
++ p = BITMAP(plane,ycorner+j-1,x/HOST_WORD_SIZE); /* and find word on line */
++ #else
+ p = BITMAP(ycorner+j-1,x/HOST_WORD_SIZE); /* and find word on line */
++ #endif
+ ilimit = (UNSIGN16)((tcharptr->wp + 31) >> 5);
+ for (i = 0; i < ilimit; ++i)
+Only in beebe: dvi.1
+Only in beebenew: dvipj.c
+Only in beebenew: dvipj.l
+Only in beebe: dvitos.c
+diff -wc2 beebe/fillrect.h beebenew/fillrect.h
+*** beebe/fillrect.h Thu Mar 29 15:34:55 1990
+--- beebenew/fillrect.h Thu Aug 2 17:19:09 1990
+***************
+*** 31,35 ****
+--- 31,39 ----
+ if (IN(0,y+j,YBIT-1))
+ {
++ #if HPPAINTJET
++ p = BITMAP(plane,y+j,xlpart);
++ #else
+ p = BITMAP(y+j,xlpart);
++ #endif
+ if (IN(0,xlpart,XBIT-1))
+ if (xlpart < xrpart) /* set bits in left partial word */
+***************
+*** 44,49 ****
+--- 48,58 ----
+
+ /* finally, set bits in right partial word */
++ #if HPPAINTJET
+ if ((xlpart < xrpart) && IN(0,xrpart,XBIT-1))
++ *BITMAP(plane,y+j,xrpart) |= ~rightones[xroffset];
++ #else
++ if ((xlpart < xrpart) && IN(0,xrpart,XBIT-1))
+ *BITMAP(y+j,xrpart) |= ~rightones[xroffset];
++ #endif
+ }
+ }
+diff -wc2 beebe/gblprocs.h beebenew/gblprocs.h
+*** beebe/gblprocs.h Tue Mar 19 16:46:12 1991
+--- beebenew/gblprocs.h Thu Aug 2 17:19:10 1990
+***************
+*** 146,150 ****
+ void option(char *);
+
+! #if HPLASERJET
+ void outline(UNSIGN32 *);
+ #else
+--- 146,150 ----
+ void option(char *);
+
+! #if (HPLASERJET | HPPAINTJET)
+ void outline(UNSIGN32 *);
+ #else
+diff -wc2 beebe/gblvars.h beebenew/gblvars.h
+*** beebe/gblvars.h Tue Mar 19 16:46:30 1991
+--- beebenew/gblvars.h Thu Aug 2 17:19:10 1990
+***************
+*** 195,201 ****
+ COORDINATE hh; /* current horizontal position in pixels */
+
+! #if HPLASERJET
+! INT16 hpres; /* output resolution (75, 100, 150, 300 dpi) */
+ #endif /* HPLASERJET */
+
+ UNSIGN32 img_mask[32]; /* initialized at run-time so that bit k */
+--- 195,206 ----
+ COORDINATE hh; /* current horizontal position in pixels */
+
+! #if (HPLASERJET | HPPAINTJET)
+! INT16 hpres; /* output resolution (75, 100, 150, */
+! /* 300 dpi) */
+ #endif /* HPLASERJET */
++
++ #if HPPAINTJET
++ INT16 plane=0; /* colour plane */
++ #endif /* HPPAINTJET */
+
+ UNSIGN32 img_mask[32]; /* initialized at run-time so that bit k */
+diff -wc2 beebe/getbmap.h beebenew/getbmap.h
+*** beebe/getbmap.h Thu Mar 29 15:34:58 1990
+--- beebenew/getbmap.h Thu Aug 2 17:19:10 1990
+***************
+*** 25,30 ****
+--- 25,34 ----
+ if (bitmap == (UNSIGN32*)NULL)
+ {
++ #if HPPAINTJET
+ bitmap =
++ (UNSIGN32*)MALLOC(((UNSIGN32)(NPLANES))*((UNSIGN32)(XBIT))*((UNSIGN32)(YBIT))*sizeof(UNSIGN32));
++ #else
+ (UNSIGN32*)MALLOC(((UNSIGN32)(XBIT))*((UNSIGN32)(YBIT))*sizeof(UNSIGN32));
++ #endif
+ if (bitmap == (UNSIGN32*)NULL)
+ (void)fatal(
+Only in beebe: getlog.h
+diff -wc2 beebe/main.h beebenew/main.h
+*** beebe/main.h Tue Mar 19 16:47:30 1991
+--- beebenew/main.h Thu Aug 2 17:19:12 1990
+***************
+*** 104,108 ****
+ #endif /* (HPJETPLUS | POSTSCRIPT | IMPRESS | CANON_A2) */
+
+! #if TOSHIBAP1351 /* want to override STDMAG */
+ #undef STDMAG
+
+--- 104,108 ----
+ #endif /* (HPJETPLUS | POSTSCRIPT | IMPRESS | CANON_A2) */
+
+! #if (TOSHIBAP1351 | HPPAINTJET) /* want to override STDMAG */
+ #undef STDMAG
+
+diff -wc2 beebe/makefile beebenew/makefile
+*** beebe/makefile Tue Apr 10 12:06:41 1990
+--- beebenew/makefile Tue Feb 19 12:39:40 1991
+***************
+*** 17,20 ****
+--- 17,22 ----
+ # [20-Jul-87] -- added xxu and dvi.xrf
+
++ # dvipj added, Apr '90, d.love@daresbury.ac.uk
++
+ # Default C compiler
+ CC = cc
+***************
+*** 21,33 ****
+
+ # Extra compiler options
+! XCFLAGS = -g
+
+ # Set paths according to your local conventions
+! CFLAGS = -DFONTPATH="\"/usr/local/font/tex/pkb/\"" \
+ -DSUBPATH="\"/usr/local/lib/tex/inputs/\"" \
+ $(XCFLAGS)
+- #CFLAGS = -DFONTPATH="\"/home/users0/fx/beebe/pjpk/\"" \
+- # -DSUBPATH="\"/usr/local/lib/tex/inputs/\"" \
+- # $(XCFLAGS)
+
+ LINTFLAGS = -bchx
+--- 23,32 ----
+
+ # Extra compiler options
+! XCFLAGS = -O
+
+ # Set paths according to your local conventions
+! CFLAGS = -DFONTPATH="\"/usr/local/lib/tex/fonts/pkb/\"" \
+ -DSUBPATH="\"/usr/local/lib/tex/inputs/\"" \
+ $(XCFLAGS)
+
+ LINTFLAGS = -bchx
+***************
+*** 92,96 ****
+ dviimp dvijep dvijet dvil75 dvil3p dvim72\
+ dvimac dvimpi dvio72 dvioki dviprx dvitos\
+! keytst lptops texidx tosprx
+ $(RM) -f .~* .#*
+
+--- 91,95 ----
+ dviimp dvijep dvijet dvil75 dvil3p dvim72\
+ dvimac dvimpi dvio72 dvioki dviprx dvitos\
+! keytst lptops texidx tosprx dvipj
+ $(RM) -f .~* .#*
+
+Only in beebenew: makefile~
+Only in beebe: pjpk
+diff -wc2 beebe/prtpage.h beebenew/prtpage.h
+*** beebe/prtpage.h Thu Mar 29 15:35:14 1990
+--- beebenew/prtpage.h Thu Aug 2 17:19:14 1990
+***************
+*** 117,120 ****
+--- 117,123 ----
+ sp = 0;
+ fontptr = (struct font_entry*)NULL;
++ #if HPPAINTJET
++ plane = 0; /* reset colour to black */
++ #endif
+ break;
+
+Only in beebenew: shar
+diff -wc2 beebe/special.h beebenew/special.h
+*** beebe/special.h Thu Mar 29 15:35:27 1990
+--- beebenew/special.h Thu Aug 2 17:19:16 1990
+***************
+*** 1,14 ****
+- /* -*-C-*- special.h */
+- /*-->special*/
+- /**********************************************************************/
+- /****************************** special *******************************/
+- /**********************************************************************/
+-
+- void
+- special(s) /* process TeX \special{} string in s[] */
+- register char *s;
+- {
+- (void)sprintf(message,
+- "special(): TeX \\special{%s} not implemented in this driver",s);
+- (void)warning(message);
+- }
+--- 0 ----
+Only in beebenew: test.aux
+Only in beebenew: test.log
+diff -wc2 beebe/usage.h beebenew/usage.h
+*** beebe/usage.h Tue Mar 19 16:48:10 1991
+--- beebenew/usage.h Thu Aug 2 17:19:18 1990
+***************
+*** 51,54 ****
+--- 51,62 ----
+ #endif /* HPLASERJET */
+
++ #if HPPAINTJET
++ (void)sprintf(message,
++ "Usage: %s {-a} {-b} {-d#} {-eENVNAME=value} {-ffontsubfile} \
++ {-l} {-m#} {-o#:#:#} {-o#:#} {-o#} {-p} {-r#} {-x#{units}} {-y#{units}} \
++ {-z} dvifile(s)",
++ g_progname);
++ #endif /* HPPAINTJET */
++
+ #if POSTSCRIPT
+ (void)sprintf(message,
diff --git a/dviware/dvipj/readme b/dviware/dvipj/readme
new file mode 100644
index 0000000000..d5b2004639
--- /dev/null
+++ b/dviware/dvipj/readme
@@ -0,0 +1,28 @@
+This is a fairly dirty hack of Nelson Beebe's HP InkJet driver
+(dvijet) to support colour printing on the HP Paintjet referred to in
+TUGboat 11 (1990) p. 652--6; the LaTeX style file upon which the
+article is based should be available in the contributed styles
+collection. The driver assumes PaintJet transparency mode (which
+doesn't make a great deal of difference to paper output, I find). The
+output is a little faint with the materials we use, but OK for slides.
+
+You might also like to investigate the GNU Ghostscript backend for the
+PaintJet. v 2.1 will cope at least with dvips-generated PostScript,
+it seems, as long as it doesn't use virtual fonts, whereupon the
+spacing seems to go wrong. (v 2.1 doesn't have proper save and
+restore.)
+
+You will need Beebe's distribution, v 2.10. If you have the patch
+program use `patch <dvipj.patch' to patch a few files for the PaintJet
+(incuding the makefile -- be careful) and then do `make dvipj'. If
+you don't have patch, you'll have to edit the relevant files by hand
+on the basis of the `diff' output in dvipj.patch. You probably need
+to generate the 180dpi pixel files to use it.
+
+--------------------------------------------------------------------
+#include <disclaimer.h>
+Snail mail: | JANET: d.love@uk.ac.dl
+Dr. David Love, | modern BIT/INTERNET: d.love@dl.ac.uk
+SERC Daresbury Laboratory, | old UUCP: ...!ukc!daresbury!d.love
+Warrington WA4 4AD, | alternative BITNET: d.love%dl@ukacrl
+UK | alternative ARPA: d.love%dl@nsfnet-relay.ac.uk