Date: 24 Jan 93 14:58:37 GMT
Newsgroups: comp.text.tex
Distribution: world
Subject: True HPLJ 4 DVI-Driver, it works !
Keywords: dvi,HPLJ4,PCL5



After searching for a Laserjet 4 dvi-driver on the net for a
while i performed the few neccessary patches in the dvi2lj package
myself ( a rather trivial task, once you have access to the
HPLJ4 technical reference manual  :-) ).

Thomas Eickermann ( ike@thphy.uni-duesseldorf.de )


Here are the patches:

*** ../dvi2lj.orig/README	Sun Apr 21 15:05:42 1991
--- ./README	Sun Jan 24 13:54:56 1993
***************
*** 12,17 ****
--- 12,20 ----
         Dviljp and dvilj are similar to dvilj2p and dvilj2  but they sup-
         port  only 128  character  fonts.  They  may be used for Laserjet
         clones which do not support 256 character fonts.
+ 
+        Dvilj4 converts TeX-output .dvi files into HP PCL5 commands using
+        600 DPI pixelfonts. The output can be printed on a HP Laserjet 4.
   
         Dvi3812 converts TeX-output .dvi files into PMP files, the native
         command language of the IBM 3812 page printer.
*** ../dvi2lj.orig/Makefile	Sun May  5 22:44:02 1991
--- ./Makefile	Sun Jan 24 14:03:16 1993
***************
*** 26,31 ****
--- 26,34 ----
  dvilj2p: dvi2xx.c ${OBJS} $(HFILES)
  	cc ${CFLAGS} -DLJ2P -o $@ dvi2xx.c ${OBJS} ${LFLAGS}
  
+ dvilj4: dvi2xx.c ${OBJS} $(HFILES)
+ 	cc ${CFLAGS} -DLJ4 -DLJ -o $@ dvi2xx.c ${OBJS} ${LFLAGS}
+ 
  dvilj: dvi2xx.c ${OBJS} $(HFILES)
  	cc ${CFLAGS} -DLJ -DSEVENBIT -o $@ dvi2xx.c ${OBJS} ${LFLAGS}
  
*** ../dvi2lj.orig/dvi2xx.c	Sun May  5 22:41:34 1991
--- ./dvi2xx.c	Sun Jan 24 14:00:39 1993
***************
*** 53,58 ****
--- 53,60 ----
   *            better positioning of rules
   * 30.1.89 (0.48) bug fixed for files containing >32 fonts (thanks A. Brosig),
   *                different font assignment heuristic
+  * 13.1.92	  -DLJ4 600dpi support added by Thomas Eickermann
+  *
   * fixes in 3812-mode:  14.juli 87  positioning of rastered characters
   *            better positioning of rules
   * general fixes
***************
*** 203,211 ****
--- 205,219 ----
  #else
  #define  PRINTER       "HP LaserJet"
  #endif LJ2P
+ #ifdef LJ4
+ #define  RESOLUTION    600
+ #define  hconvRESOLUTION   600
+ #define  vconvRESOLUTION   600
+ #else
  #define  RESOLUTION    300
  #define  hconvRESOLUTION   300
  #define  vconvRESOLUTION   300
+ #endif LJ4
  #ifdef LJ2P
  #define  CHAR_WIDTH_LARGE  16384     /* limit for loading into printer font */
  #define  CHAR_HEIGTH_LARGE 16384         /* y_offset reaches the same size! */
***************
*** 578,583 ****
--- 586,594 ----
  #ifdef LJ
      if (ResetPrinter)
          EMIT(outfp, "\033E");
+ #ifdef LJ4
+ 	EMIT(outfp, "\033&u600D\033*t600");
+ #endif
      if (Landscape)
          EMIT(outfp, "\033&l1O\033*rF");
      if (pagesize>0)
***************
*** 1645,1666 ****
  
          /* open font dict before first char, set active font */
          INT_ASCII(cnv_buffer,fontptr->plusid);
          EMIT(outfp, "\033*c%sD\033)s26W", cnv_buffer);
- /*      EMITB(20, "\0\032\0\1\0\0\0\310\0\377\0\377\0\1\1\025\0\4\0\4");*/
  #ifdef SEVENBIT
          EMITB(6, "\0\032\0\1\0\0");   
  #else
          EMITB(6, "\0\032\0\2\0\0");   
  #endif
          EMITWORD( fontptr->max_yoff);
          EMITWORD( fontptr->max_width);
          EMITWORD( fontptr->max_height);
! /*        EMITC((char)(Landscape==TRUE));  */
!         EMITC((char)0);
!         EMITB(7, "\1\1\25\0\4\0\4");
          EMITB(6, "\0\0\0\0\0\0");
!         EMIT(outfp, "\033*c4F");
  #endif
      }
      if ( fontptr != prevfont ) {   /* because this isn't done on pass 0 */
  #ifdef LJ
--- 1656,1684 ----
  
          /* open font dict before first char, set active font */
          INT_ASCII(cnv_buffer,fontptr->plusid);
+ #ifdef LJ4
+         EMIT(outfp, "\033*c%sD\033)s68W", cnv_buffer);
+         EMITB(6, "\0\104\024\2\0\0");   
+ #else
          EMIT(outfp, "\033*c%sD\033)s26W", cnv_buffer);
  #ifdef SEVENBIT
          EMITB(6, "\0\032\0\1\0\0");   
  #else
          EMITB(6, "\0\032\0\2\0\0");   
  #endif
+ #endif /* LJ 4 */
          EMITWORD( fontptr->max_yoff);
          EMITWORD( fontptr->max_width);
          EMITWORD( fontptr->max_height);
!         EMITB(8, "\0\1\1\25\0\4\0\4");
          EMITB(6, "\0\0\0\0\0\0");
! #ifdef LJ4
! 	EMITB(22,"\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\0\0\0\0\0");
! 	EMITB(16,"                ");
! 	EMITB(4 ,"\2\130\2\130"); 
  #endif
+         EMIT(outfp, "\033*c4F"); /* Make soft font temporary */
+ #endif
      }
      if ( fontptr != prevfont ) {   /* because this isn't done on pass 0 */
  #ifdef LJ
***************
*** 1905,1911 ****
--- 1923,1933 ----
  #endif
  
  #ifdef LJ
+ #ifdef LJ4
+     EMIT(outfp, "\033*t600R\033*r1A");
+ #else
      EMIT(outfp, "\033*t300R\033*r1A");
+ #endif
  #endif
  
                                              { /* read pixel from file */
Newsgroups: comp.text.tex