summaryrefslogtreecommitdiff
path: root/dviware/beebe/doc/00revhst.txt
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/beebe/doc/00revhst.txt
Initial commit
Diffstat (limited to 'dviware/beebe/doc/00revhst.txt')
-rw-r--r--dviware/beebe/doc/00revhst.txt2168
1 files changed, 2168 insertions, 0 deletions
diff --git a/dviware/beebe/doc/00revhst.txt b/dviware/beebe/doc/00revhst.txt
new file mode 100644
index 0000000000..3b2f0c3aab
--- /dev/null
+++ b/dviware/beebe/doc/00revhst.txt
@@ -0,0 +1,2168 @@
+<BEEBE.TEX.DVI>00REVHST.TXT.200, 17-Nov-87 20:02:40, Edit by BEEBE
+
+This file contains a reverse chronological log of changes made to
+the TeX DVI Driver family.
+
+Version history:
+ 2.10 [01-Nov-87]
+ 2.09 [23-Sep-87]
+ 2.08 [15-Aug-87]
+ 2.07 [15-Apr-87]
+ 2.06 [1986-1987]
+
+The version number does not change with minor modifications that
+affect only a few drivers, so the file write dates on the master
+directories at Utah (and recorded on distribution tapes and
+floppies) must be consulted to determine whether a particular
+distribution contains these corrections. Where feasible, this
+change log contains sufficient information to allow hand
+installation of bug fixes. Changes will generally not be logged
+at new versions, since they may be extensive.
+
+[07-Jun-88] {Thanks to Hans Irtel
+ <irtel%vax1.rz.uni-regensburg.dbp.de@RELAY.CS.NET>}
+ In initglob.h about line 51, change
+
+ size_limit = 255; /* largest character size */
+
+ to
+
+ size_limit = 128; /* largest character size */
+
+ The HP LaserJet Plus has a character cell height
+ and width range limitation of 1..255, but further
+ restricts individual character dimensions to
+ 0..128. This bug is exposed if you attempt to
+ print characters at size magstep 4 or larger,
+ such as the following test TeX file supplied by
+ William E. Anderson <anderson@cme-durer.arpa>:
+
+ \magnification=\magstep4
+ $$f(x)=\int{g(x)\over x}\,dx$$
+ \vfill\eject\bye
+
+ for which the integral sign will be lost without
+ the fix, and will appear once the fix is applied.
+
+[31-May-88]
+ Issued newsletter #17.
+
+[30-May-88] {Thanks to Jerry Leichter (LEICHTER@Venus.YCC.Yale.Edu)
+ for providing an example that exposed this bug.}
+ In dvijep.c, rules are output one dot too high.
+ According to the HP documentation, the position
+ of a rule is the upper-left corner. I took this
+ to mean that the rule would be output starting
+ just under the pixel at (x,y) in that corner.
+ What they must mean is that (x,y) is the position
+ of the pixel in the upper-left corner of the
+ filled area. Change the definitions of RULE()
+ and RULE2() about line 160 to reduce the height
+ value by 1 in the arguments to MOVETO():
+
+diff -c dvijep.c,75 dvijep.c
+*** dvijep.c,75 Wed May 18 09:42:01 1988
+--- dvijep.c Mon May 30 19:03:07 1988
+***************
+*** 162,174 ****
+ lower-left corner, while the LaserJet Plus uses the upper-left corner.
+ */
+ #define RULE(x,y,width,height) {\
+! MOVETO(x,(y)+height);PUTESC;\
+ sprintf(plotfs,"*c%da%dbP",width,height); OUTST(plotfs);\
+ }
+ /* Set rule of same size as previous one at TeX position (x,y). The
+ device coordinates will be changed on completion. */
+ #define RULE2(x,y) {\
+! MOVETO(x,(y)+rule_height);\
+ PUTESC;OUTST("*cP");\
+ }
+ /* Set the current font and character in preparation for a DOWNLOADCHAR */
+--- 162,174 ----
+ lower-left corner, while the LaserJet Plus uses the upper-left corner.
+ */
+ #define RULE(x,y,width,height) {\
+! MOVETO(x,(y)+height-1);PUTESC;\
+ sprintf(plotfs,"*c%da%dbP",width,height); OUTST(plotfs);\
+ }
+ /* Set rule of same size as previous one at TeX position (x,y). The
+ device coordinates will be changed on completion. */
+ #define RULE2(x,y) {\
+! MOVETO(x,(y)+rule_height-1);\
+ PUTESC;OUTST("*cP");\
+ }
+ /* Set the current font and character in preparation for a DOWNLOADCHAR */
+
+ The same correction must be made to dvilzr.c for
+ the DataProducts laser printer.
+
+ I had previously received reports of suspicions
+ of an error in dvijep's rule positions, but no
+ one ever was able to supply an example that I
+ could reproduce locally. Here is Jerry's
+ excellent little test file:
+
+\documentstyle[12pt]{article}
+\def\vec(#1,#2){\put(0,0){\vector(#1,#2){50}}}
+\begin{document}
+
+\setlength{\unitlength}{.01in}
+\begin{picture}(0,0)(100,100)
+\vec(-1,0)
+\vec(1,0)
+\vec(0,1)
+\vec(0,-1)
+%
+\vec(-4,1)\vec(-3,1)\vec(-2,1)\vec(-1,1)
+\vec(4,1)\vec(3,1)\vec(2,1)\vec(1,1)
+%
+\vec(-3,2)\vec(-1,2)
+\vec(3,2)\vec(1,2)
+%
+\vec(-4,3)\vec(-2,3)\vec(-1,3)
+\vec(4,3)\vec(2,3)\vec(1,3)
+%
+\vec(-3,4)\vec(-1,4)
+\vec(3,4)\vec(1,4)
+%
+\vec(-4,-1)\vec(-3,-1)\vec(-2,-1)\vec(-1,-1)
+\vec(4,-1)\vec(3,-1)\vec(2,-1)\vec(1,-1)
+%
+\vec(-3,-2)\vec(-1,-2)
+\vec(3,-2)\vec(1,-2)
+%
+\vec(-4,-3)\vec(-2,-3)\vec(-1,-3)
+\vec(4,-3)\vec(2,-3)\vec(1,-3)
+%
+\vec(-3,-4)\vec(-1,-4)
+\vec(3,-4)\vec(1,-4)
+%
+\end{picture}
+\end{document}
+
+ When printed with dvialw, the two horizontal
+ rules are printed correctly; before the above
+ correction to dvijep, they were one pixel too
+ high, (this gives a visible white streak). The
+ correction should also fix the misalignment with
+ the arrowheads.
+
+[30-May-88]
+ The following bug in dvialw.c was fixed on
+ 3-Feb-88, but unfortunately didn't make it into
+ this log.
+
+diff -c dvialw.c,78 dvialw.c,79
+*** dvialw.c,78 Sun Nov 1 11:21:38 1987
+--- dvialw.c,79 Wed Feb 3 16:38:28 1988
+***************
+*** 1080,1085 ****
+--- 1080,1086 ----
+ }
+ OUT_CHR('(');
+ OUT_XCHR(c);
++ OUT_CHR(')');
+ if (ycp != str_ycp)
+ {
+ OUT_NUM(xcp);
+
+ There was a missing ')' in the output.
+
+[26-May-88]
+ Issued newsletter #16.
+
+[18-May-88]
+ In dvijep.c about line 180, change
+ {PUTESC; sprintf(plotfs,"*c%dE",MAP_CHAR(ch)); OUTST(plotfs); }\
+ to
+ {PUTESC; sprintf(plotfs,"*cd%dE",MAP_CHAR(ch)); OUTST(plotfs); }\
+ This correction sets the font number to 0; the
+ old one works on the HP LaserJet, but might break
+ on clones.
+
+[14-Apr-88]
+ Changed system() in vaxvms.c to allow warning and
+ information status returns to be treated as
+ success. The body of system() now reads:
+
+ t.dsc$w_length = strlen(s);
+ t.dsc$a_pointer = s;
+ t.dsc$b_class = DSC$K_CLASS_S;
+ t.dsc$b_dtype = DSC$K_DTYPE_T;
+
+ /* The 3 low-order bits of stat are
+ 0 (warning),
+ 1 (success),
+ 2 (error),
+ 3 (information), or
+ 4 (severe or fatal error)
+ Consider values of 0, 1, or 3 to be success. LIB$SPAWN
+ will usually return SS$_NORMAL, independent of the value
+ of stat.
+ */
+
+ if (LIB$SPAWN(&t,0,0,0,0,0,&stat) != SS$_NORMAL)
+ return (127);
+ switch (stat & 7)
+ {
+ case 0:
+ case 1:
+ case 3:
+ return (0);
+ default:
+ return (127);
+ }
+
+
+[07-Mar-88]
+ Changed type of main() in keytst.c and lptops.c
+ from void to int, and inserted return(0) at end
+ to keep lint and VAX VMS C compiler happy. Draft
+ ANSI C (Oct-86 and Jan-88) does not specify what
+ the type of main() should be, and most compilers
+ don't care. VMS C 2.3 however produces an
+ annoying warning message if main() is not of type
+ int; I view this behavior as erroneous, because
+ main() is only a convention in C, and it is
+ possible to write C programs in many
+ implementations that do not have a main().
+
+[02-Mar-88]
+ Added code to findpost.h to ignore trailing NULs
+ in a .DVI file, borrowing code from readpxl.h and
+ readgf.h that do the same thing for font files.
+ Users (including me) have been annoyed by the
+ inability of the drivers to handle a .DVI file
+ which has passed through a VAX VMS system where
+ gratuitous NULs are appended to pad the file
+ length to a multiple of 512 bytes.
+
+ This effort revealed another problem under VAX
+ VMS, and that is that the code in FSEEK() in
+ vaxvms.c on a request to position at end-of-file
+ actually positions before the last character,
+ instead of after it. An attempt at correcting
+ this was foiled by the VMS library ftell() which
+ returns 0 when the position set by FSEEK() is
+ outside the actual file limits, and while FTELL()
+ can correct the brain-damaged value returned by
+ ftell(), it cannot distinguish a nonsensical 0
+ result from ftell() at end-of-file from one at
+ the beginning of the file. Consequently, it has
+ been necessary in findpost.h to bump the
+ postambleptr value by one.
+
+ Since this modification can be installed
+ independently in even old versions of the DVI
+ driver family, and a context difference listing
+ is larger than findpost.h, here is the complete
+ new version:
+
+/* -*-C-*- findpost.h */
+/*-->findpost*/
+/**********************************************************************/
+/****************************** findpost ******************************/
+/**********************************************************************/
+
+void
+findpost()
+
+{
+ register long postambleptr;
+ register BYTE i;
+ register UNSIGN16 the_char; /* loop index */
+
+ (void) FSEEK (dvifp, 0L, 2); /* goto end of file */
+
+ /* VAX VMS binary files are stored with NUL padding to the next
+ 512 byte multiple. We therefore search backwards to the last
+ non-NULL byte to find the real end-of-file, then move back from
+ that. Even if we are not on a VAX VMS system, the DVI file might
+ have passed through one on its way to the current host, so we
+ ignore trailing NULs on all machines. */
+
+ while (FSEEK(dvifp,-1L,1) == 0)
+ {
+ the_char = (UNSIGN16)fgetc(dvifp);
+ if (the_char)
+ break; /* exit leaving pointer PAST last non-NUL */
+ UNGETC((char)the_char,dvifp);
+ }
+
+ postambleptr = FTELL(dvifp) - 4;
+
+#if OS_VAXVMS
+ /* There is a problem with FSEEK() that I cannot fix just now. A
+ request to position to end-of-file cannot be made to work correctly,
+ so FSEEK() positions in front of the last byte, instead of past it.
+ We therefore modify postambleptr accordingly to account for this. */
+
+ postambleptr++;
+#endif
+
+ (void) FSEEK (dvifp, postambleptr, 0);
+ while (TRUE)
+ {
+ (void) FSEEK (dvifp, --(postambleptr), 0);
+ if (((i = (BYTE)nosignex(dvifp,(BYTE)1)) != 223) &&
+ (i != DVIFORMAT))
+ (void)fatal("findpost(): Bad end of DVI file");
+ if (i == DVIFORMAT)
+ break;
+ }
+ (void) FSEEK (dvifp, postambleptr - 4, 0);
+ (void) FSEEK (dvifp, (long)nosignex(dvifp,(BYTE)4), 0);
+}
+
+[06-Feb-88]
+ Revised lpt.ps to handle formfeed and tabs.
+
+[17-Nov-87] Installation of the DVI driver family under
+ Microsoft C Version 5.0 resulted in a number of
+ changes more fully described in 01README.TXT (to
+ be included in the next DVI newsletter). This is
+ the first compiler that fully conforms to draft
+ ANSI C (October 1986) in both the language and
+ the run-time library.
+
+ Added missing typecast in dvieps.c and dvie72.c.
+
+ In dvihead.h, added #include's for io.h and
+ time.h for IBM_PC_MICROSOFT.
+
+ Added two missing typecasts in dvijep.c, and
+ inserted the missing condition "(t->istoobig) ||"
+ to BIGCHAR().
+
+ In gblprocs.h, replaced ANSI flag by ANSI_LIBRARY
+ and ANSI_PROTOTYPES to distinguish between
+ library conformance, and ANSI function prototype
+ use, and adjusted many function declarations
+ accordingly.
+
+ In keybrd.c, provided alternate name for
+ interrupt(); its use otherwise causes an compiler
+ error with MSC 5.0.
+
+ In keydef.h, replaced ANSI section by
+ ANSI_LIBRARY and ANSI_PROTOTYPE sections.
+
+ In keytst.c, added some comments, and changed the
+ test to loop a maximum of five times with no
+ input. Introduced an implementation of sleep()
+ for OS_PCDOS.
+
+ In lptops.c, replaced ANSI section by
+ ANSI_LIBRARY and ANSI_PROTOTYPE sections, and
+ reset a couple of constants to type long.
+
+ In machdefs.h, replaced ANSI section by
+ ANSI_LIBRARY and ANSI_PROTOTYPE sections, and for
+ IBM_PC_MICROSOFT, defined float to be double to
+ reduce data conversion warnings.
+
+ In main.h, removed #include's of stdlib.h and
+ string.h; they are already in machdefs.h.
+
+ In option.h, removed use of ABS() for a
+ floating-point argument to remove data conversion
+ warning.
+
+ In texidx.c, changed preprocessor symbol MSC to
+ IBM_PC_MICROSOFT.
+
+ In tosprx.c, replaced ANSI section by
+ ANSI_LIBRARY and ANSI_PROTOTYPE sections.
+
+ Revised IBM PC-specific version of Make to work
+ with Microsoft C Version 5.0, eliminating some
+ severe limitations imposed by Wizard C, and
+ permitting the MAKEFILE.MSC to be completely
+ self-contained, instead of having to reference
+ MAKEFILE.1 .. MAKEFILE.4. Several new features
+ were also implemented in Make; they are described
+ in a 00README.TXT file in the PCMAKE directory.
+
+[01-Nov-87] Replaced references to (void)fprintf(..., plotfp)
+ with references to new macros OUTF(...),
+ OUTF2(...), and OUTF3(...), or existing ones
+ OUTC() and OUTS(). Replaced all instances of
+ putc(*c++,plotfp) by "OUTC(*c);c++". Since
+ putc() is usually a macro, there is a potential
+ incorrect side effect if its first argument is
+ evaluated more than once. Most C implementations
+ use it only in the two branches of a conditional
+ expression, which is safe.
+
+[01-Nov-87] Completed major overhaul of dvijep.c. The font
+ deletion mechanism was not successful, partly
+ because the font number was not subsequently
+ reset in one place, but mostly because it causes
+ a page eject. This would make it impossible to
+ print some documents. dvijep now keeps track of
+ both the number of fonts in use on the current
+ page, and the total number in use in the
+ document. When either of these limits is
+ reached, the characters in those fonts are sent
+ as bitmaps, instead of as downloaded fonts. It
+ is still possible to have a document which is too
+ complex for the LaserJet to print (raising error
+ code 21 on the printer front panel status
+ display), but that is now a limit imposed by the
+ printer, rather than the DVI driver, and cannot
+ be gotten around.
+
+ There is room for further work here, however.
+ Most documents do not require an excessively
+ large number of fonts. For example,
+ dvidriver.ltx uses 23 fonts, and weave.tex uses
+ 15, but the TeXbook uses 54.
+
+ When the DVI driver begins execution, through the
+ call chain main() -> dvifile() -> readpost() ->
+ getfntdf() -> readfont() -> reldfont() ->
+ read{pk|gf|pxl}() -> newfont(), it normally reads
+ in the font definitions from the DVI file
+ postamble and assigns font numbers in order of
+ occurrence, and builds its internal font and
+ character tables. Later, as pages are processed,
+ font changes occasioned by DVI fnt_num_0 ..
+ fnt_num_63 and fnt1 .. fnt4 commands result in
+ setting the global flag font_switched, which in
+ turn causes setchar() and setstr() to output font
+ switch commands to the device.
+
+ The implication of this for dvijep is that all
+ fonts beyond the first 32 are marked as
+ non-downloadable. In the case of the TeXbook, it
+ turns out that this includes the heavily-used
+ cmr, cmsy, and cmmi fonts at 5, 6, 7, 8, 9, and
+ 10 pt sizes, which means that almost all of the
+ characters set on a page will be sent as bitmaps,
+ instead of as downloaded characters. On my HP
+ LaserJet Plus, every page raised printer error
+ code 21. This might not happen on an HP LaserJet
+ Series II, which can have substantially more
+ memory, but I haven't one locally to try the
+ experiment.
+
+ The solution to this problem is to delay font
+ number assignment until the font is actually
+ referenced. Since a considerably smaller number
+ of fonts are needed on each page, it is then
+ possible to download most of them, and a
+ font-rich document like the TeXbook can be
+ printed successfully in sections. The change
+ involves moving the body of newfont() to a new
+ function, makefont(), and having newfont() only
+ initialize the font_number with a special
+ "undefined" value. The macro SET_CURRENT_FONT
+ has become big enough that it has been
+ transformed into a function, setfont().
+ setfont() now checks font_number for the
+ undefined value, and in such a case, calls
+ makefont() to assign the font a number and create
+ it in the printer. With this change, the TeXbook
+ can be printed successfully.
+
+[30-Oct-87] Changed vaxvms.c, gblprocs.h, openfont.h, and
+ machdefs.h to support dynamic determination of
+ the limit on the number of open files for VAX
+ VMS. This is a VMS quota parameter whose dynamic
+ value depends on the number of subprocesses.
+ Previously, a user with too small a limit would
+ find the dvi drivers could fail because the hard
+ limit on the number of open font files was too
+ large.
+
+[29-Oct-87] In LW78.C, removed typeout of final CR LF in
+ Get_Msg(), and inserted system call to dismiss
+ the process until the output buffer is empty at
+ the start of Put_Packet().
+
+ LW78 had been experiencing I/O error returns from
+ the Apple LaserWriter Plus, and when I attempted
+ to copy a PostScript file directly to the
+ printer, the same thing happened, only much
+ earlier in the job. This raised the suspicion of
+ buffer overrun in the printer. Three experiments
+ using a 100-page document with (1) a 5-second
+ sleep before outputting each buffer, (2) process
+ dismissal until the buffer was empty, and (3) the
+ Kermit TRANSMIT command (which waits for a prompt
+ from the LaserWriter after each line) all
+ resulted in successful printing, and I have
+ confidence that this change in LW78 will provide
+ superior performance.
+
+ With the new LW78, I sent dvidriver.dvi-alw with
+ the modified BOP and EOP definitions given below,
+ and printed the 100 pages at an average rate of 5
+ pages per minute. Virtual memory usage was
+ initially 2Kb to 4Kb per page while fonts were
+ being downloaded, and in later pages, dropped to
+ a low of 1105 bytes/page. Pages with that low
+ figure had only text set on them, and no fonts
+ downloaded, with the text guarded by save/restore
+ sequences. That virtual memory was still
+ consumed leads one to wonder if there is not a
+ bug in the PostScript memory allocation code
+ which causes some "seepage" loss. If one of
+ dvialw's macros were leaving unclaimable garbage
+ behind, one would expect that the garbage amount
+ would vary, but many different pages had the same
+ 1105 bytes/page consumption. Total virtual
+ memory consumed by the job was 112Kb, with 78Kb
+ remaining available at end-of-job.
+
+[27-Oct-87] Simplified beginning-of-page and end-of-page code
+ in prtpage.h by creating bopact() and eopact()
+ routines in several drivers, and removed bopact.h
+ and eopact.h (which were previously used only by
+ dvibit), including references to them in
+ makefile.*.
+
+[27-Oct-87] Numerous small editorial changes for code
+ consistency, and to reduce the number of warnings
+ from the lint utility.
+
+[27-Oct-87] {Thanks to John Pavel (mcvax!nplpsg!jrp@uunet.uu.net)
+ for urging this change}
+ On Unix only, Version 2.10 now permits input to
+ come from stdin, and output to go to stdout,
+ allowing use of the drivers as filters. This
+ choice is automatically made when no file names
+ are specified on the command line.
+
+ Use of stdout for binary files is generally
+ impossible for other operating systems, which
+ either make a distinction between text and binary
+ file formats, or use line terminators other than
+ <LF>, necessitating translation of Unix
+ end-of-line '\n' on input and output. With the
+ exception of dvialw, all the drivers produce
+ binary output files.
+
+[27-Oct-87] {Thanks to Bernhard Nebel (NEBEL@DB0TUI11.BITNET)
+ for useful suggestions}
+ Completed major overhaul of dvialw.c. A
+ fundamental problem with existing PostScript
+ interpreters is that they lack garbage
+ collection, and the PostScript programmer is
+ expected to manage storage with save/restore
+ command judiciously wrapped around throw-away
+ code. The problem this poses for a TeX
+ environment is that one does not wish to discard
+ downloaded fonts, since they will likely be
+ needed again.
+
+ In the previous version of dvialw, the -s and -v
+ options provided some user control of this, but
+ such user control is only of marginal utility.
+
+ It proved interesting to install the following
+ PostScript code segment immediately before the
+ BOJ (beginning of job) command in an output file
+ from dvialw produced from Appendix F of the
+ TeXBook. The TeXbook uses 54 fonts, and
+ therefore puts a sizeable burden on a printer
+ that has only limited font memory.
+
+% These provide alternate definitions of BOP and EOP in dvialw.ps
+% which cause CPU time and virtual memory statistics to be printed
+% at the bottom of each output page
+/BOP
+{
+clear
+Mtrx setmatrix
+25 0 translate
+vmstatus pop /VMUSED exch def pop
+usertime
+} bdf
+/EOP
+{
+/#copies exch def
+/USERTIMEIN exch def
+save
+/pt {Resolution 72 div mul} def
+/Helvetica-BoldOblique findfont 12 pt scalefont setfont
+/SP {12 pt 0 pt rmoveto} def
+/PN {SP 10 vmstr cvrs show} def
+/vmstr 15 string def
+36 pt 36 pt moveto
+([VMstatus:) show
+vmstatus PN PN PN (]) show
+SP SP ([VMpage:) show
+vmstatus pop exch pop VMUSED sub PN
+(]) show
+SP SP ([Page time:) show
+usertime USERTIMEIN sub PN ( msec]) show
+restore
+showpage
+} bdf
+
+ With this addition, each page now carries both
+ memory usage and (printer) CPU time statistics at
+ the bottom of each page. On the Apple
+ LaserWriter with paper type "note", there is
+ about 250Kb of virtual memory available at job
+ start. Here is a table of the memory
+ requirements for successive pages of Appendix F
+ of the TeXbook:
+
+ ---- ----------- -----------
+ Page DVIALW 2.09 DVIALW 2.10
+ ---- ----------- -----------
+ 431 4953
+ 432 26057
+ 433 3713
+ 434 9693
+ 435 27948 21101
+ 436 18971 13421
+ 437 15644 10109
+ 438 21764 15324
+ 439 27064 19596
+ 440 8172 6628
+ ---- ----------- -----------
+
+ Version 2.09 reached a VM error condition
+ (virtual memory exhausted) on page 434, while
+ Version 2.10 was able to proceed 4 pages beyond
+ that before hitting the same limit. Each page in
+ Version 2.10 requires about 30% less virtual
+ memory.
+
+ Initially, I wrote a short filter program that
+ moved the text strings on each page to after the
+ font download sequences, wrapping the text in a
+ save/restore pair to recover the virtual memory
+ needed to store them. This proved to be quite
+ straightforward, requiring only about 60 lines of
+ C code.
+
+ To implement the same facility in dvialw proved
+ much more complex, because I was not willing to
+ suffer the performance penalty of reading each
+ page of the DVI file twice, once to collect
+ needed fonts, and a second time to set text and
+ rules. Instead, a completely new mechanism is
+ implemented whereby output is channelled through
+ several new routines, which ultimately reach the
+ low-level textchr() routine which gets a single
+ character to process. Based on a global flag,
+ textchr() either outputs this immediately (e.g.
+ for macros, rules, and font downloading), or
+ stores it in an internal buffer (text setting).
+ On the basis of examination of .dvi-alw files for
+ the DVI driver manual, and the TeXbook, the
+ internal buffer is chosen to be large enough so
+ that it will usually only need to be dumped once
+ per page.
+
+ PostScript loop tests on the Apple LaserWriter
+ Plus (Version 38.0 PostScript) give execution
+ times of about 0.25 msec for one iteration of an
+ empty loop, determined by executing
+
+ usertime 10000 {} repeat usertime exch sub
+
+ and 55 msec for one save/restore pair:
+
+ usertime 1000 {save restore} repeat usertime exch sub
+
+ Consequently, one does NOT want to do a
+ save/restore around every string, but only around
+ large groups of strings.
+
+ Because of the use of relative coordinates in
+ most output typeset text (the T macro instead of
+ the S macro), and the use of remembered rule
+ widths (w and h in the B and Q macros), it is not
+ trivial to correctly handle the case of more than
+ one bufferful per page (since intervening
+ non-buffered output might change the font or
+ current point), and it took a considerable number
+ of iterations to get it working satisfactorily,
+ with the buffer size temporarily set artificially
+ low.
+
+ Having the output being filtered through a
+ central location, textchr(), has made it possible
+ to further economize on the output volume (e.g by
+ collapsing <letter><newline><open-paren> to
+ <letter><open-paren>, and to more closely
+ approach a constant line width (except for
+ PostScript from a \special{} command, which is
+ output verbatim). Some operating systems have
+ trouble with long lines in files, and Version
+ 2.10 should now largely remove this problem.
+
+ The line breaking algorithm implemented in
+ textchr() and textflush() is far from trivial,
+ because PostScript does not uniformly recognize
+ <backslash><newline> as a continuation sequence
+ that can be discarded; instead, it permits this
+ continuation mechanism only in parenthesized
+ strings. Otherwise, comments cannot be
+ continued, angle-bracketed strings can be
+ continued by simply inserting a bare newline, and
+ elsewhere, a newline can be used any place a
+ blank is used. Some of the comment lines
+ produced by dvialw are long; they are now split
+ automatically by placing a hyphen in the last
+ column of the line, and continuing with "%-" on
+ the next line. Any software that takes advantage
+ of the %%PageTable at the end will therefore need
+ adjusting (I doubt that any exists, so this
+ change does not concern me). It is regrettable
+ that the PostScript developers did not give line
+ continuation more thought.
+
+ Font change commands are now defined more
+ compactly as "F#" or "F##", where "#" is the
+ sequential number of the font in the document.
+ This further helps to reduce output volume. The
+ initial font definitions (the NF macro) still use
+ the full name, and carry a comment with the font
+ file name, so it is still possible to easily find
+ out what font file was used for any part of the
+ output. The problem of corrupted font files has
+ come to my attention on several occasions, so it
+ is worthwhile to maintain this connection in
+ dvialw, which is the only driver that produces
+ human-readable printer output.
+
+ On Appendix F of the TeXbook, these changes
+ reduced the output file size by about 8% compared
+ to Version 2.09, and about 9% when PS_SHORTLINES
+ was non-zero. On the DVI driver manual (99
+ pages), the file size from Version 2.10 with
+ PS_SHORTLINES defined was 15% shorter than that
+ from Version 2.09. Since a non-zero
+ PS_SHORTLINES produces marginally smaller output,
+ it is now the default for all implementations,
+ but it can be overridden by a compile-time
+ redefinition.
+
+[22-Oct-87] {Thanks to Marcus Moehrmann (marcus%fkihh@unido.uucp)}
+ Added drivers dvieps and dvie72 for Epson 9-pin
+ printers and compatibles. dvieps is for 240H x
+ 216V resolution, and dvie72 for 60H x 72V
+ resolution (same as dviprx for Printronix
+ printers).
+
+ It was necessary to make a number of changes to
+ the submitted code to bring it up-to-date with
+ the rest of the family, and to conform to my
+ coding practices. Since I do not have an Epson
+ printer on which to test this locally, the
+ version number carries the suffix
+ "[experimental]". The same suffix appears in
+ dvica2. These will be removed when the drivers
+ are considered ready for final release, based on
+ positive user feedback.
+
+[22-Oct-87] Added debug option 128 (DBG_SET_TEXT) to display
+ each piece of text set by the driver, together
+ with its page coordinates in dots, and its font
+ name. This of course produces voluminous output,
+ but is quite handy when you are trying to step a
+ long way into execution to track down a bug.
+
+[22-Oct-87] All debug options have been turned into symbolic
+ references, e.g.
+
+ if (DBGOPT(DBG_OFF_PAGE))
+
+ instead of
+
+ if (debug_code & 32)
+
+ It was clearly a mistake not to have done this in
+ the first place. I also wish that I had made
+ these options sequential numbers, instead of
+ powers of two, but it is probably too late to
+ change that now.
+
+[12-Oct-87] Edited dviman.texinfo to bring it up-to-date with
+ dvi.1l and dviman.ltx.
+
+[01-Oct-87] Created Unix-style man page file, dvi.1l.
+
+[01-Oct-87] Added support for a "-z" option (typein of
+ "DVISPOOL dvifilename") for 4.xBSD Unix systems,
+ which have imitated TOPS-20's STI% (Simulate
+ Terminal Input) JSYS facility with ioctl(fildes,
+ TIOCSTI, *char).
+
+[30-Sep-87] {Thanks to Stefan Kronberg (ZEFFI@FINABO.BITNET)}
+ Added support of font files with up to 256
+ characters. Normal TeX Computer Modern fonts use
+ only 128 characters per font, but extensions for
+ European alphabets, and Japanese fonts, will
+ require more than 128.
+
+ Unfortunately, this was not quite as trivial as I
+ had originally intended, where the values
+ LASTPXLCHAR and NPXLCHARS in gendefs.h need only
+ be increased from 127 and 128 to 255 and 256
+ respectively. The problem is that several loops
+ used code like
+
+ BYTE k;
+ ...
+ for (k = FIRSTPXLCHAR; k <= LASTPXLCHAR; ++k)
+
+ With LASTPXLCHAR = 255, the last loop iteration
+ will increment k to 256, but since it is a byte
+ value, this wraps to 0, and the loop becomes
+ infinite on a byte-oriented machine. This made
+ it necessary to retype the offending loop indices
+ as UNSIGN16.
+
+ The context diff listing for these changes is
+ rather long (about 1200 lines), so I do not
+ include it here.
+
+[30-Sep-87] Changed -d option processing in option.h to allow
+ multiple -d options to accumulate, instead of
+ requiring them to be set with one -d option. The
+ change is simple: replace
+
+ debug_code = (BYTE)atoi(optstr+2);
+
+ by
+
+ debug_code |= (BYTE)atoi(optstr+2);
+
+
+[29-Sep-87] Because of problems on record-oriented file
+ systems (VAX VMS being the worst offender), the
+ code in dvialw.c does more when PS_SHORTLINES is
+ defined; it now keeps track of output widths, and
+ will not produce output lines more than a couple
+ of characters longer than a fixed value,
+ PS_MAXWIDTH. However, no such limit is placed on
+ comments, or macros retrieved from dvialw.ps;
+ both of these are already of limited length.
+
+ Changed machdefs.h to allow PS_SHORTLINES to be
+ set at compile time.
+
+ A single experiment on a 20-page DVI file showed
+ that the .dvi-alw output was about 3% longer when
+ a version of dvialw with PS_SHORTLINES set was
+ used.
+
+[29-Sep-87] {Thanks to John Pavel (mcvax!nplpsg!jrp@seismo.css.gov)
+ and Brendan McKay (munnari!anucsd.oz!dbm@seismo.css.gov)}
+
+ The code in dvialw.c in functions setchar() and
+ setstr() emits a save/restore pair around a large
+ character font definition. On the Apple
+ LaserWriter Plus (which I only recently got as a
+ replacement for our stolen ALW), this results in
+ a "Fatal system error @ 0X2e6bec". The fix is
+ fortunately simple. Change those two instances
+ of
+
+ OUTS("save");
+
+ (but NOT the one in special()) to
+
+ OUTS("save /temporary_font NF 1 /temporary_font SF");
+
+ This will put the character in a temporary font
+ which is discarded when the restore command is
+ executed. Here is simple test file using cminch;
+ it produces a large (~400Kb) .dvi-alw file.
+
+% test for dvialw downloading of large characters
+\font\bigfont=cminch
+This file tests a DVI driver's capability to support downloading
+of large characters. The following uninteresting tables of the
+Roman alphabet are printed in font {\it cminch\/}.
+\bigfont
+\obeylines
+ABC
+DEF
+GHI
+JKL
+MNO
+PQR
+STU
+VWX
+YZ
+\vfill\eject\end
+
+
+[29-Sep-87] {Thanks to John Pavel (mcvax!nplpsg!jrp@seismo.css.gov)}
+ Removed obsolete SHORTLINES references from
+ machdefs.h; PS_SHORTLINES remains, and can now be
+ set in machdefs.h, instead of only in dvialw.c.
+ The default setting in machdefs.h now is
+
+ #define PS_SHORTLINES 0
+
+ and dvialw.c now has
+
+ #ifndef PS_SHORTLINES
+ #define PS_SHORTLINES 0 /* run with long output lines */
+ #endif
+
+[28-Sep-87] Updated all makefiles to include a generic target
+ dvi$(PGM) and an extra compilation flag value
+ XCFLAGS, so test versions can be constructed by a
+ command like "make PGM=foo XCFLAGS=-g dvifoo".
+
+[28-Sep-87] {Thanks to Ian Young (ian@latlog.uucp)}
+ At the end of readgf.h, newfont() is called
+ before the loop which retrieves character metrics
+ via chargf(). This is incorrect for HPJETPLUS,
+ where the newfont() code in dvijep.c uses some of
+ the metrics. For the other devices, newfont()
+ only sets values in the font character tables.
+ Therefore, move the newfont() call to AFTER the
+ loop, so that the code reads in readgf.H:
+
+ for (the_char = FIRSTPXLCHAR; the_char <= LASTPXLCHAR; the_char++)
+ { /* Get remaining character metrics, and ignore error returns for now. */
+ tcharptr = &(fontptr->ch[the_char]);
+ if (tcharptr->fontrp >= 0L)
+ (void)chargf(the_char,(void(*)())NULL);
+ }
+
+#if (BBNBITGRAPH | HPJETPLUS | POSTSCRIPT | IMPRESS | CANON_A2)
+ (void)newfont();
+#endif
+
+[28-Sep-87] On Unix systems, getlogin() returns (char*)NULL
+ if the process is not attached to a terminal, in
+ particular, if the process is attached to a
+ pseudo-terminal (pty), such as a window or an
+ editor shell buffer. The way to get the real
+ login name in these circumstances is to use
+ cuserid((char*)NULL) in place of getlogin(), and
+ I have according made that change in dvialw.c and
+ lptops.c, and added appropriate function
+ declarations in gblprocs.h.
+
+ This change affects only text output in a
+ PostScript comment. Both cuserid() and
+ getlogin() are defined in 4.2BSD Unix, AT&T SYS V
+ Unix, HPUX, KCC (version 4), and IEEE Posix
+ (which draft ANSI C follows). PCC and V7 Unix
+ had only getlogin(). VAX VMS C has only
+ cuserid(). KCC (version 3), Microsoft C, Lattice
+ C, and Wizard C have neither.
+
+[23-Sep-87] {Version 2.09 announcement}
+ Testing of the Free Software Foundation gcc
+ compiler has uncovered two bugs so far in the
+ compiler (they are being fixed rapidly). gcc
+ produces code for both VAX and Motorola
+ architectures, and is being used to develop the
+ GNU operating system. The testing also found a
+ serious bug in my code which unfortunately
+ impacts most of the DVI drivers, and can be the
+ cause of core dumps or other failures.
+
+ The value of XSIZE in dvi*.c is currently
+ computed as XDPI*XPSIZE, that is, the number of
+ dots across the page. Unfortunately, one or more
+ local arrays are later allocated and used with
+ the assumption that XSIZE is a multiple of the
+ machine word size, HOST_WORD_SIZE, and in dvijet,
+ it was assumed to be a multiple of
+ 2*HOST_WORD_SIZE.
+
+ This bug was never caught on the DEC-20, because
+ there stacks grow upward, so beyond-bounds
+ references to stack arrays may just be writing
+ into unused memory. However, on the VAX, Intel
+ iAPX, and Motorola architectures, stacks grow
+ downward, and such references can wipe out the
+ call history, precipitating at best an address
+ exception or illegal instruction violation when
+ the return instruction is executed. This would
+ only happen if text was set against the
+ right-hand side of the page, and since TeX
+ documents usually produce wide margins, this may
+ be unlikely to happen.
+
+ To avoid complex dimension computations, and
+ preserve uniformity of definition among the
+ family, XSIZE is now increased to a multiple of
+ 2*HOST_WORD_SIZE throughout. The fix is to
+ change
+
+#define XSIZE (XDPI*XPSIZE) /* number of horizontal dots */
+
+ to
+
+#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 */
+
+ in all the dvi*.c files. I view this bug fix to
+ be important enough to warrant a version number
+ change, so the family is now at version 2.09.
+
+ The following Unix script can be used on Unix
+ systems to automate the patch:
+
+#!/bin/csh
+foreach f (dvi*.c)
+ echo $f
+ mv $f $f-old
+ sed -f bugfix.sed <$f-old >$f
+end
+
+ Here is bugfix.sed:
+s|"2.08|"2.09|
+s|(XDPI\*XPSIZE)[ ]*/\* number of horizontal dots \*/|(((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 */|
+
+[23-Sep-87] In openfont.h, nopen is incremented when the
+ requested font is not found in the list of
+ currently open files, but the code forgets to
+ decrement it if the request font never gets
+ successfully opened, which can happen if the font
+ file cannot be found, and no substitution font is
+ provided. Change the code about line 185 to
+ decrement nopen on open failure, so that it now
+ reads:
+
+ if (fontfp == (FILE*)NULL)
+ {
+ --nopen; /* don't count this failed open */
+ (void)sprintf(message,"Font file [%s [mag %d]] could not be \
+
+
+[18-Sep-87] In LW78.C, Wait_For_Printer_Ready(), removed
+ output of Ctl-D; with the Apple LaserWriter Plus,
+ this causes the printer to respond to the
+ following Ctl-T with "printer busy", instead of
+ "idle", like the old Apple LaserWriter did.
+
+[18-Sep-87] {Thanks to Mic Kaczmarczik (CC.KCACMARCZIK@A20.CC.UTEXAS.EDU)}
+ When dvialw.ps is modified to select LANDSCAPE
+ mode instead of NOTE (portrait), the output is
+ positioned incorrectly, and character bitmaps
+ look somewhat ragged. The former is due to a
+ missing translation command, and the latter to
+ tiny non-zero transformation matrix elements
+ which introduce computed coordinates which are in
+ error by one pixel. I have also taken the
+ liberty of installing a fix for the fact that
+ NOTE is not defined on non-Apple PostScript
+ printers. It should no longer be necessary to
+ edit dvialw.ps for Texas Instruments, QMS, et al
+ PostScript printers.
+
+ There is one problem with this change, and that
+ is that the SNAP call in the CharBuilder routine
+ must now be executed for each character set on
+ the page, so the output may prove to be somewhat
+ slower. To check this, I downloaded dvialw.ps to
+ our new Apple LaserWriter Plus, then executed
+
+ TeXdict begin
+ usertime 10000 {0 0 SNAP pop pop} repeat usertime
+ exch sub pstack
+
+ which results in a time of 70844 msec for 10000
+ calls, or an extra overhead of 7 msec per
+ character. Repeating the experiment using an
+ empty procedure body gives a loop overhead time
+ of 0.2 msec. With an average of 3000 characters
+ set per page, this amounts to 21 sec per page,
+ which is definitely not negligible. You may
+ therefore wish to leave the SNAP call out of a
+ version of dvialw.ps that is used only for
+ portrait orientation output.
+
+ Similar timing loops can be used to reveal an
+ average execution time of 1 msec for any
+ arithmetic operation (+-/*); PostScript
+ interpreters badly need hardware floating-point
+ support! There is a repeatable difference of
+ about 10% increase in speed when operands are
+ floating-point instead of integer values. dvialw
+ could be changed to write floating-point values
+ instead of integer ones, with a tradeoff of
+ slightly increased output file size to be
+ balanced against slightly faster arithmetic.
+
+ At the same time, I increased XPSIZE to 14 in
+ dvialw.c so that landscape mode output is not
+ clipped. Future work should introduce a general
+ flexible solution to the problem of paper size
+ specification for all of the drivers.
+
+ Here is a context difference which records the
+ changes. Additions are flagged with a "+" in the
+ first column, and changes with a "!", with the
+ old code first, and the new second.
+
+*** dvialw.ps-old Wed Jul 29 14:35:41 1987
+--- dvialw.ps Fri Sep 18 17:48:10 1987
+***************
+*** 1,3 ****
+--- 1,10 ----
++ % <BEEBE.TEX.DVI>DVIALW.PS.17, 18-Sep-87 17:48:04, Edit by BEEBE
++ % Add test for note paper and if unknown, use letter paper instead.
++ % Non-Apple PostScript implementations do not know about note paper
++ % but its use on the Apple LaserWriter gains 92K of virtual memory
++ % <BEEBE.TEX.DVI>DVIALW.PS.16, 18-Sep-87 15:50:52, Edit by BEEBE
++ % Modify coordinate computations to remove round-off errors
++ % in landscape mode, and correct landscape page origin
+ % <BEEBE.TEX.DVI>DVIALW.PS.14, 22-Jun-87 09:55:05, Edit by BEEBE
+ % Add missing "0 900 translate Mtrx currentmatrix pop" to /LEGAL
+ % <BEEBE.TEX.DVI>DVIALW.PS.13, 7-Jan-87 17:38:51, Edit by BEEBE
+***************
+*** 110,116 ****
+ /BOJ
+ {
+ 72 Resolution div 72 Resolution div scale
+! NOTE % default page format
+ } bdf
+
+ % BOP -- beginning of page
+--- 117,126 ----
+ /BOJ
+ {
+ 72 Resolution div 72 Resolution div scale
+! userdict /note known
+! {NOTE} % default page format for ALW
+! {LETTER} % default page format for others
+! ifelse
+ } bdf
+
+ % BOP -- beginning of page
+***************
+*** 146,151 ****
+--- 156,162 ----
+ ch-xoff neg ch-yoff ch-height sub
+ ch-width ch-xoff sub ch-yoff
+ setcachedevice
++ 0 0 SNAP translate
+ ch-width ch-height true [ 1 0 0 -1 ch-xoff ch-yoff ]
+ {ch-image} imagemask
+ } if
+***************
+*** 185,190 ****
+--- 196,202 ----
+ 72 Resolution div dup scale
+ 0 3300 translate
+ -90 rotate
++ 0 -750 translate
+ Mtrx currentmatrix pop
+ } bdf
+
+***************
+*** 271,276 ****
+--- 283,292 ----
+ % SF -- set new font at scale nnn (nnn = 1 normally; 2 gives double size chars)
+ % Usage -- nnn /fontname SF
+ /SF {findfont exch scalefont setfont} bdf() pop
++
++ % SNAP -- convert coordinates to integer device coordinates and back again
++ % Usage -- xxx yyy SNAP (leave xxx' yyy' on stack)
++ /SNAP {transform 2 {floor 0.5 add exch} repeat itransform} bdf
+
+ % T -- move absolute horizontally and show string, updating horizontal position
+ % to new endpt
+
+
+[08-Sep-87]
+ In lptops.c, change
+ OUTSTR(getlogin());
+ to
+ if (getlogin() != (char*)NULL)
+ OUTSTR(getlogin());
+ because getlogin() can sometimes return a null
+ pointer, instead of a null string.
+
+[31-Aug-87] {Thanks to HUXTABLE@UKANVAX.BITNET}
+ In gblprocs.h in the ANSI type declarations for
+ dvifile and main, change "char *[0]" to "char
+ *[]". The "[0]" is an odd production of
+ Microsoft C which was used to prepare the type
+ declarations at compile time. It sneaked through
+ the editing (it is not needed for Microsoft C to
+ compile these). VAX VMS C version 2.3-024 now
+ supports ANSI function declaration prototypes; I
+ don't have it up yet.
+
+[14-Aug-87] Released Version 2.08 in time for TUG meeting.
+
+[14-Aug-87] {Thanks to Matthias Moritz (U608017@NHYKUN11.EARN)
+ for Atari support additions}
+ Merged in support for the Atari 520ST+ using the
+ Mark Williams C Compiler. makefile.ast should
+ build it. Since this involves changes in many
+ routines, I took the opportunity to introduce a
+ few other changes as well, and incremented the
+ version number of dvi*.c from 2.07 to 2.08. The
+ new versions should be functionally identical to
+ the previous ones for virtually everyone.
+
+ The Mark Williams compiler has some limitations,
+ and could not handle long macro definitions, in
+ particular DEBUG_OPEN and FONTLIST. I have
+ therefore made DEBUG_OPEN() expand to dbgopen(),
+ where the latter is defined at the end of
+ dviinit.h; this does not follow my standard
+ practice of one function per file. FONTLIST was
+ simply removed, and the two instances of its use
+ were replaced by its definition. There are about
+ 40 instances in the driver source code of macros
+ continued over multiple lines. They are written
+ that way to prevent long lines in the source code
+ (80 is the absolute limit), which is an even more
+ serious barrier to portability.
+
+ The default stacksize on the Atari is often too
+ small; for the time being, main programs have
+ been set to declare a larger stack. On PC DOS
+ (which Atari GEMDOS resembles), the Microsoft
+ EXEMOD utility can be used to change the
+ stacksize of an executable program without
+ requiring code modification. I don't know
+ whether there is something similar on the Atari.
+
+ I removed the OS_xxxx-dependent conditional code
+ in dvi*.c for output file extension selection, by
+ introduction of a new variable, DVIPREFIX, in
+ machdefs.h. This is prepended to the default
+ file extension, which is now always identical to
+ the letters following dvi in the dvi*.c files.
+ On systems which do not support long file
+ extensions, it will be a null string; otherwise,
+ it will be "dvi-".
+
+ In dvialw.c, a genuine BUG surfaced; PSDEF_PATH
+ should be #define'd to be subpath instead of
+ SUBPATH. Otherwise, it cannot be overridden by
+ an environment variable. Thanks to Matthias
+ Moritz for catching this one.
+
+ An experimental version of a Canon A2 driver has
+ been added as dvica2.c, based on work by Pekka
+ Pietilainen (TFYS-PP@FINOU.BITNET), starting from
+ dvican.c. I have merged in his changes and
+ removed Unix-isms. This driver is intentionally
+ not included in the Makefiles. Only a few sites
+ have the Canon A2 printer, and once more
+ experience is obtained, it may replace dvican.c.
+ If you have such a printer, you can easily modify
+ the appropriate Makefile to support it, or you
+ can just compile and load dvica2 manually. For
+ debugging purposes, three additional option
+ switches are accepted in option.h; they will
+ disappear as the code settles.
+
+ More experience with the drivers at many VAX VMS
+ sites has indicated that variable-length record
+ files for the output are probably undesirable
+ until DEC gets its act in gear and makes all VMS
+ utilities handle such files properly. I have
+ therefore modified the code in dviinit.h to use
+ the fixed-block binary format for all but
+ POSTSCRIPT devices (for which the output is truly
+ an ordinary text file); previously, this format
+ was only selected for IMPRESS (dviimp).
+
+ For non-Unix operating systems, it is generally
+ necessary to open binary files differently than
+ text files, since the C-runtime libraries use
+ that distinction to decide how to translate Unix
+ line terminators. Every system so far has used
+ the letter "b" in the fopen() mode string to
+ select this mode, and every Unix system ignores
+ the "b", except Ultrix, which raises a run-time
+ error, sigh... I have therefore replaced the
+ mode string by RB_OPEN and WB_OPEN, and they are
+ set in machdefs.h. For all Unix systems they
+ will be "r" and "w", and for most non-Unix
+ systems, "rb" and "wb".
+
+ Lines longer than 80 characters in *.c and *.h
+ files have been wrapped.
+
+ The header "%!PS-Adobe-1.0" in dvialw.c has been
+ shortened to "%!"; the Adobe TranScript spooler
+ software thinks it is allowed to do page reversal
+ when it sees this, but dvialw output pages cannot
+ be reordered because fonts are defined only on
+ demand. The similar header in lptops.c is all
+ right; the pages there ARE independent.
+
+ The sources have been run through 4.2BSD lint and
+ System V lint. A number of missing typecasts
+ have been supplied, and several unreferenced
+ local variables have been eliminated. lint still
+ produces many warnings, but the remaining ones
+ seem to be benign, or simply red herrings.
+
+ lint revealed numerous problems with texidx.c
+ (which came from the GNU Project). I have
+ eliminated unused variables and functions, but
+ there remain some serious errors of incorrect
+ argument lists to sort_in_core() and
+ sort_offline(). I am not proposing to fix these
+ now, because at least 3 comprehensive indexing
+ packages for TeX have appeared recently, and
+ texidx.c may rapidly become obsolete.
+
+ I have changed the handling of some preprocessor
+ symbols in several routines so as to eliminate
+ redefinition warnings, and any assumptions that
+ undefined symbols evaluate to 0. The draft ANSI
+ C standard REQUIRES that all undefined symbols
+ evaluate to 0 in preprocessor expressions, but
+ many compilers to do yet follow this rule (VAX
+ VMS C in particular).
+
+[15-Aug-87] {Thanks to Julian Perry (seismo!mcvax!zen.co.uk!jules)}
+ The code in option.h in the -o switch section
+ that forced page_begin[npage] <= page_end[npage]
+ conflicts with negative page numbers for counting
+ from the end. I have removed the code there, and
+ then in dvifile.h, before the main page loop,
+ inserted code to reset the page_begin[] and
+ page_end[] arrays to positive values (this can
+ only be done after page_count is known), and to
+ order them properly.
+
+
+[10-Aug-87] {Thanks to Gary Beihl (beihl%bell.cad.mcc.com@mcc.com)}
+ In lw78.c and dvialw.c, change instances of
+ time(0) to time((long*)NULL).
+
+
+[27-Jul-87] {Thanks to Charles Karney (Karney%ppc.mfenet@nmfecc.arpa)}
+ Here are two small changes to vaxvms.c:
+
+ In vmsexit(), we turn on a high bit on a non-zero
+ status code to suppress a useless VMS message:
+ 150,151c150,151
+ < exit((1 << 28) + 2); /* error */
+ < break; /* (suppresses %NONAME-E-NOMSG) */
+ ---
+ > exit(2); /* error */
+ > break;
+ 457d456
+
+ In system(), add a test for the status code
+ returned by LIB$SPAWN; for the MAKE utility, this
+ allows recognition of errors returned from a
+ compilation.
+
+ < int stat;
+ 463,464c462
+ < return ((LIB$SPAWN(&t,0,0,0,0,0,&stat) == SS$_NORMAL)
+ < && ((stat & 1) > 0)) ? 0 : 127;
+ ---
+ > return (LIB$SPAWN(&t) == SS$_NORMAL) ? 0 : 127;
+
+
+[20-Jul-87]
+ Updated cross-referencing awk scripts for use on
+ Sun OS 3.3 using standard cxref utility, replaced
+ old x*.awk by xref, xref1.awk, xref2.awk, and
+ xref3.awk, and replaced dvi.lrf and dvi.rby by
+ dvi.xrf.
+
+
+[20-Jul-87] {Thanks to Eric M. Carroll (Eric.M.Carroll@uunet.uu.net)}
+ In dvialw.c, getlogin() can return a NULL
+ pointer, so we need to guard against that.
+ Change
+
+ (void)fprintf(plotfp,"%%%%Creator: %s and ",getlogin());
+ to
+ (void)fprintf(plotfp,"%%%%Creator: %s and ",
+ (getlogin() == (char*)NULL) ? "" : getlogin());
+
+
+[08-Jul-87]
+ Update makefile.* to reflect new dvil3p, and
+ remove obsolete makefile.eun (for Eunice).
+
+
+[08-Jul-87]
+ Add symbol DECLN03PLUS and change SUBPATH for
+ Unix from /usr/lib/tex/inputs/ to
+ /usr/lib/tex/macros to match Washington TeX
+ distribution.
+
+
+[08-Jul-87]
+ In gblprocs.h, add OS_VAXVMS to the list of hosts
+ where sprintf() is not declared (because it is in
+ system include files).
+
+
+[08-Jul-87]
+ Change type of main() from void to int in
+ gblprocs.h and main.h to bring them into
+ conformance with the draft ANSI C Standard.
+
+
+[08-Jul-87]
+ In fontfile.h, changed VMS section to allow for
+ the possibility that TEXFONTS is a logical name
+ list (thanks for John Sauter for this).
+
+
+[08-Jul-87] {Thanks to John Sauter (Sauter@dssdev.dec.com)}
+ Add dvil3p.c for DEC LN03+ printer.
+
+
+[08-Jul-87]
+ In dvil75.c in prtbmap(), change OUTC('-') to
+ OUTS("-\n") so as to avoid long output lines.
+
+
+[10-Jun-87]
+ Fix several spelling errors:
+ machdefs.h: "you machine" -> "your machine"
+ dvi.hlp: "cmr10.300pxl" -> "cmr10.1500pxl"
+ "setenv VAR=value" -> "setenv VAR value"
+ dviman.ltx: "cmr10.300pxl" -> "cmr10.1500pxl"
+ "setenv VAR=value" -> "setenv VAR value"
+ dviman.texinfo: "cmr10.300pxl" -> "cmr10.1500pxl"
+ "setenv VAR=value" -> "setenv VAR value"
+
+
+[20-May-87] from Brendan Mackay (munnari!anucsd.oz!bdm@seismo.CSS.GOV)
+ In openfont.h, the virtual font section can erroneously
+ reference a null fontfp; change
+ if (virt_font)
+ to
+ if (virt_font && (fontfp != (FILE*)NULL))
+
+ and
+ if (virt_font && virt_save[fileno(fp)].base != (char *)NULL)
+ to
+ if (virt_font && (fp != (FILE*)NULL) &&
+ (virt_save[fileno(fp)].base != (char *)NULL))
+
+
+[15-May-87]
+ On line 127 of execute.c in the IBM PC-specific MAKE
+ utility, change
+ *str >= 'A' && *str <= 'A' ||
+ to
+ *str >= 'A' && *str <= 'Z' ||
+
+
+[29-Apr-87] from Brendan Mackay (munnari!anucsd.oz!bdm@seismo.CSS.GOV)
+ In machdefs.h, change
+ #define REWIND(fp) fseek(fp,0L,0)
+ to
+ #define REWIND(fp) FSEEK(fp,0L,0)
+ This is not necessary for the family as distributed, but
+ Brendan has implemented the virtual font changes
+ necessary for VAX VMS; they should be incorporated in a
+ future release.
+
+
+[29-Apr-87] from Brendan Mackay (munnari!anucsd.oz!bdm@seismo.CSS.GOV)
+ The code for vms_read() [in vaxvms.c] has problems. One
+ is that you don't test for end of file. The other is
+ that there is a bug in the C library which prevents you
+ asking for more than 65535 bytes at a time. It is
+ documented that no more than 65535 bytes will be
+ returned, but not that you can't ask for more. If you
+ do, it reduces your request mod 65536! Here's a
+ replacement:
+
+/**********************************************************************/
+/*-->READ*/
+int
+READ(file_desc,buffer,nbytes)
+register int file_desc;
+register char *buffer;
+register int nbytes;
+{
+ register int ngot;
+ register int left;
+
+ for (left = nbytes; left > 0; /* NOOP */)
+ {
+ ngot = read(file_desc,buffer,(left > 65024 ? 65024 : left));
+ if (ngot < 0)
+ return (-1); /* error occurred */
+ if (ngot == 0) /* eof occurred */
+ return(nbytes-left);
+ buffer += ngot;
+ left -= ngot;
+ }
+ return(nbytes-left);
+}
+
+
+[15-Apr-87] Completed version 2.07 for general release.
+
+
+[04-Apr-87] to
+[15-Apr-87]
+ Changed texidx.c to check for special characters
+ in generated \initial{} commands and suitably
+ protect them.
+
+ Changed dviinit.h to try to open output file and
+ log file in current directory if open in the
+ directory of the .dvi file fails (presumably
+ because no write access to that directory).
+
+ Adapted loadbmap() code from dvican.c to
+ dvijep.c, and added function declaration in
+ gblprocs.h, finally removing the limitation
+ dvijep had for large font characters.
+
+ Rearranged some struct members in gblvars.h to
+ ease debugging.
+
+ Added check in openfont.h for null pfontptr.
+
+ Updated Makefile's and added ones for KCC, PCC,
+ and VMS.
+
+ Rewrote 00arit.c to test short, int, and long
+ integer arithmetic.
+
+ Changed version numbers in dvi*.c from 2.06 to
+ 2.07.
+
+ Split bopact.h (beginning of page action) out of
+ eopact.h.
+
+ Rewrote eopact.h to reflect new instant keyboard
+ response and better control over page
+ positioning.
+
+ Increased value of BIGBGCHAR in dvibit.c to allow
+ large characters to be sent as fonts, rather than
+ bitmaps.
+
+ There seems to be a bug in BitGraph Version 3.10
+ which causes characters to be overwritten at the
+ right margin when the actual screen width is
+ used. Reduced value of XSIZE in dvibit.c to fix
+ the problem.
+
+ Decreased YSIZE in dvibit.c to make space for
+ larger command and status area at top of screen.
+
+ Added keybrd.c and keydef.h to handle keyboard
+ input. keybrd.c was a major effort (900 lines of
+ code and comments), but now nicely hides the
+ ugliness of instant keyboard input on all the
+ operating systems presently supported in the DVI
+ family.
+
+ Removed references to Berkeley Unix sgtty.h file
+ and tty structures in dvibit.c and gblvars.h; no
+ longer needed since keybrd.c hides those details.
+
+ Use JSok instead of JSerr in f20open.h to allow
+ jsys() calls to work for both KCC-20 and PCC-20.
+
+ Modified character screen clipping decision in
+ setchar() in dvibit.c.
+
+ Changed raster-op code from 3 to 9 in BBNDPD
+ command in setchar() in dvibit.c so that display
+ is correct with both inverse video and normal
+ video.
+
+ Split reldfont.h out of readfont.h to support
+ font unloading needed for dvibit zoom commands.
+
+ Added #include "reldfont.h" to dvi*.c.
+
+ Removed conditionals around #include statements
+ and put them in the #include'd file instead; this
+ reduces the number of changes needed in the
+ dvi*.c files as new implementations are made.
+ This affects f20open.h, strchr.h, and strrchr.h.
+
+ Added KCC support changes to dvihead.h, fatal.h,
+ f20open.h, gblprocs.h, machdefs.h, main.h,
+ strchr.h, strrchr.h, texid3.h.
+
+ Added terminal backslash to lines in multi-line
+ macro invocations in dvijep.c and getbmap.h (KCC
+ restriction).
+
+ Added new function declarations to gblprocs.h.
+
+ Changed dimension of message[] in gblvars.h from
+ MAXSTR to MAXMSG; it needs to be larger than
+ MAXSTR in order to hold error messages containing
+ strings of size MAXSTR. MAXMSG is defined in
+ gendefs.h.
+
+ Updated lptops.c and lw78.c for KCC.
+
+ Added conditionals to lptops.c to initialize all
+ unset symbols to 0 (KCC requires this), and
+ default to OS_UNIX if no host is defined.
+
+ Added KCC_20 and DECLA75 symbols to machdefs.h.
+
+ Changed major DVI command loop in prtpage.h to
+ call kbinput(), bopact(), and eopact() for BBN
+ BitGraph, and changed full screen erase to
+ partial erase to preserve command/status window.
+
+ In texid3.c, changed short name readln to rdline
+ to remove conflict with KCC library.
+
+ Added GETCHAR routine to vaxvms.c; this is not
+ needed by the DVI driver family, but the idea was
+ used in keybrd.c.
+
+
+[01-Apr-87] Begin work on Version 2.07
+ General work: major changes to support new KCC-20
+ compiler, substantially enhance DVIBIT, and add
+ DVIL75.
+
+========================================================================
+
+[01-Apr-87]
+ End work on Version 2.06:
+
+
+[04-Mar-87]
+ Added declaration of errno in dvihead.h for BSD41
+ and BSD42; they don't have it in errno.h.
+
+
+[04-Mar-87]
+ Added test for null file pointer before calls to
+ fclose() in abortrun.h and dviterm.h; failure to
+ do so causes core dumps when exit() is entered in
+ 4.1 and 4.2BSD Unix.
+
+
+[27-Feb-87]
+ option.h did not support negative magnifications,
+ like -m-0.5 and -m-1, which was advertised in the
+ documentation, dviman.ltx. Code has now been
+ added to handle that case. Without the fix, it
+ is of course still possible to get any
+ magnification value, since e.g. if -m1500 is the
+ default on a 300 dpi printer, then -m-0.5 is
+ equivalent to -m1369 (1369 = 1500/(1.2**(-0.5))).
+
+
+[26-Feb-87]
+ In dispchar.h, change the line
+ rightones[HOST_WORD_SIZE - 1 - bits_to_next] &
+ to
+ rightones[bits_to_next] &
+
+ This code is not active for non 32-bit machines,
+ or the IBM PC, and the local 32-bit Unix machines
+ running the driver family have been using only
+ the laser printer members, so the bug was not
+ caught until we actually tried DVIPRX output
+ under VAX VMS. The effect it has is that large
+ vertical white streaks appear in the output
+ bitmap; dispchar() is used by all the
+ low-resolution dot matrix printers.
+
+
+[25-Feb-87]
+ Added code to prtbmap() in dviprx.c to print
+ bitmap in hexadecimal when (debug_code & 1) is
+ non-zero.
+
+
+[21-Feb-87]
+ In prtpage.h, corrected "\special" to
+ "\\special"; this error was caught by the KCC-20
+ compiler.
+
+
+[10-Feb-87]
+ Yesterday I discovered that VAX VMS 4.4 printf()
+ wipes out the stack and kills the process if a
+ long string is printed. This turns out to be the
+ case in outline() in dvitos.c; the code has been
+ modified to use fputs() there instead.
+
+
+[10-Feb-87]
+ Several debugging sessions on VAX VMS stepping
+ through the call chain fflush() -> _flsbuf() ->
+ _flsbuf_record() -> write_record() ->
+ write_buffer() -> write_imbed() -> write_output()
+ ->signal() -> c$$translate() have made it clear
+ that the simple scheme in dvi*.c and lptops.c of
+ checking for a non-zero return value from
+ fflush() or ferror() is an unreliable way to
+ conclude a legitimate error (specifically, disk
+ storage exhausted) exists. Consequently, these
+ routines have been modified to call clearerr() at
+ the beginning of loadchar() and prtbmap(), then
+ to use a macro DISKFULL() to test for the error
+ condition. DISKFULL() is defined in machdefs.h,
+ and errno.h is now included by dvihead.h. This
+ regrettably introduces small changes in a number
+ of routines, but no other clean way of doing the
+ job appeared to be feasible.
+
+
+[02-Feb-87]
+ Changed "pagecollation on" to "pagecollation off"
+ in dviimp.c. With version 3.3 of the Imagen
+ Image Processor software, there seems to be a bug
+ in that "pagecollation on" causes page reversal.
+ I have reported this to Imagen.
+
+
+[20-Jan-87]
+ Replaced page_xxx[] arguments to sscanf() in
+ option.h with int temporaries p1,p2,p3; the
+ page_xxx[] values are of type INT16 which does
+ not match the %d format items. The use of
+ sscanf() in fontsub() is okay. The one in
+ special() in dvialw.c has the type COORDINATE for
+ the variables llx, lly, urx, ury; the type has
+ been changed to int.
+
+ This bug surfaced on an HP Unix system with the
+ FOCUS chip; it is disguised on the DEC-20 by
+ virtue of short, int, and long all being one word
+ long, and on the VAX and Intel architectures
+ which address these values by their low-order,
+ rather than high-order, byte (i.e. little Endian
+ order).
+
+
+[16-Jan-87]
+ Corrected error in tosprx.c which resulted in
+ loss of first page, and added test to avoid
+ unnecessary OR'ing zero bits into bitmap.
+
+
+[10-Jan-86]
+ In machdefs.h, reset MAXOPEN to NFILES-6 or less,
+ where NFILES is the limit on the number of open
+ files set in stdio.h. It was previously
+ NFILES-5, which can cause an abort with a message
+ "unable to open error log file" because all file
+ handles are in use.
+
+
+[07-Jan-86]
+ Finished preliminary release of DVICAN for the
+ Canon LBP-8 A2 laser printer. At present, this
+ is forced to send bitmaps for every single
+ typeset character, since the downloaded font
+ mechanism does not work reliably. Canon's
+ documentation is abysmal, and after tearing my
+ hair out staring at hex dumps of the output of
+ many test files, I received a hex dump of a file
+ from a site in Holland using a driver obtained
+ from Japan; to my surprise, they did not use the
+ download mechanism, just bitmaps, so I expect
+ they hit the same problems I did. I intend to
+ try to find out more detailed information from
+ the local Canon dealer--perhaps there is
+ something magic missing. It is indeed suspicious
+ however, when TeX input "ABABABABAB" produces
+ "ABA A A A ", and "A SHORT STORY" produces "A SH
+ RT T Y"--characters apparently randomly (though
+ reproducibly) dropped from the printed page.
+
+ The penalty for sending bitmaps instead of fonts
+ is severe--on a 15-page test file, it took 10.8
+ times as many bytes/page as DVIJEP, averaging
+ nearly 95K characters/page, for a throughput of
+ one printed page every 2 to 4 minutes, instead of
+ the 4/minute available from the LaserJet Plus.
+
+
+[20-Dec-86]
+ Updated DVIBIT, fixing several things that had
+ been broken by changes which could not be tested
+ earlier, and improving the interactive interface.
+ End-of-page action in prtpage.h has been expanded
+ and moved out to eopact.h. Warning messages are
+ suppressed for DVIBIT when quiet mode (-q) is
+ selected to avoid needlessly trashing the screen.
+
+ Default magnification for low-resolution devices
+ changed from 579 (magstep -3 in 200dpi family) to
+ 603 (magstep -5 in 300dpi family).
+
+ Added run-time selectable virtual font support
+ for performance improvement, particular on
+ networked file systems where the overhead of
+ reading small packets becomes unacceptably large.
+ With .PK fonts, most font files for normal sized
+ text are 4K to 8K bytes, and for SliTeX text, 15K
+ to 20K bytes. With up to 15 fonts open, this
+ probably requires less than 200K bytes of memory,
+ which is available for the non-bitmapped drivers
+ even on my IBM PC.
+
+
+[15-Dec-86]
+ Reorganized machdefs.h to group each set of
+ machine-specific changes inside one conditional
+ for that machine. Removed #undef's--if the
+ compiler warns of redefinitions, that is useful
+ feedback that the right set has been chosen.
+
+ Completed port to VAX VMS. VMS C has an
+ incomplete library and faulty implementations of
+ fseek(), ftell(), and ungetc(). To get around
+ these, macros FSEEK, FTELL, and UNGETC have been
+ used throughout the code, and machdefs.h will
+ define them to point to special versions found in
+ vaxvms.c in the OS_VAXVMS conditional section.
+ The VMS debugger, particular in screen mode where
+ the source code, output, and debug input are
+ displayed in three windows is excellent, though
+ unnecessarily verbose. VMS C makes memory page 0
+ inaccessible. This caught two instances of
+ dereferencing of NULL pointers in movedown.h and
+ moveover.h.
+
+ Logical names for VAX VMS are chosen to match the
+ Kellerman and Smith TeX implementation. DVI and
+ font file formats are assumed to be fixed binary;
+ stream files would be better (since fseek() and
+ ftell() work properly for them, and padding to
+ block boundaries is unnecessary), but their use
+ would require rewriting change files for all the
+ TeXware.
+
+
+[05-Dec-86]
+ In dviinit.h (TOPS-20 and VMS only), fix bug
+ causing referencing of *(NULL + 1). Change
+ "if (isdigit(*(tcp1+1)))"
+ to
+ "if ((tcp1 != (char*)NULL) && isdigit(*(tcp1+1)))"
+
+
+[15-Nov-86]
+ In fontfile.h (bug found Unix conditional code,
+ but could happen if other machines were added),
+ in the loop beginning
+
+ m = 0; /* index in filelist[] */
+ for (k = 0; k < MAXFORMATS; ++k) /* loop over possible file types */
+ {
+ *filelist[k] = '\0'; /* Initially, all filenames are empty */
+
+ the filelist[] entry is cleared on each loop
+ iteration, but in the Unix code section, it is
+ actually advancing over two entries at a time.
+ The initialization must be moved out into a
+ separate new loop preceding the old one:
+
+ for (k = 0; k < MAXFORMATS; ++k)
+ *filelist[k] = '\0'; /* Initially, all filenames are empty */
+
+
+[13-Nov-86]
+ Update makefile.1, makefile.2, makefile.msc for
+ IBM PC.
+
+
+[13-Nov-86]
+ Add extra library .h file #include's in dvihead.h
+ for IBM PC MICROSOFT C library function
+ declarations.
+
+
+[12-Nov-86]
+ Change malloc to MALLOC in getbmap.h, loadchar.h,
+ machdefs.h, and readfont.h; for IBM PC Microsoft,
+ this is defined to use calloc() instead of
+ malloc() in machdefs.h. This seems to remove a
+ long-standing bug of the driver hanging the
+ machine after printing the last page, presumably
+ while in the free() calls in dviterm(). I made
+ extensive tests on the DEC-20 to try to reproduce
+ this bug, by using DDT to introduce code that
+ initializes the free stack area and malloc()'d
+ memory to values which would cause integer
+ overflow if used as integers, and would cause
+ illegal memory references if used as pointers.
+ No failure could be precipitated by this. On the
+ IBM PC, the symptom was that the driver would run
+ on a freshly-booted machine (booting sets memory
+ to a specific non-zero bit pattern), but if other
+ programs had been run, it would sometimes hang.
+ I found that by using the debugger to
+ preinitialize memory to a fixed bit pattern
+ before running DVIJEP, I could repeatedly run
+ DVIJEP all night long. The change from malloc()
+ to calloc(), which zeroes the returned memory,
+ permitted DVIJEP to run successfully 85 times in
+ a row; when I subsequently reran the old version,
+ it hung the PC. Recent netmail has carried
+ numerous discussions of irregularities of both
+ Lattice and Microsoft C malloc()'s; this may be
+ one more manifestation.
+
+[31-Oct-86]
+ Fixed a dumb typo in dvialw.c and dvijep.c; in
+ setstr(), change
+ (void)fprintf(stderr,isprint(c) ? "%c" : "\\%03o",c);
+ to
+ (void)fprintf(stderr,isprint(str[k]) ? "%c" : "\\%03o",str[k]);
+
+
+[24-Oct-86]
+ Whoops! Somehow, warning() lost its code to
+ write its message on stderr as well as the log
+ file. At the end, add the lines
+
+ NEWLINE(stderr);
+
+ #if (OS_TOPS20 | OS_VAXVMS)
+ (void)putc('%',stderr); /* percent at start of line */
+ #endif
+
+ (void)fputs(msg,stderr);
+ NEWLINE(stderr);
+ if (g_logname[0])
+ {
+ (void)fprintf(stderr,
+ "Current TeX page counters: [%s]",tctos());
+ NEWLINE(stderr);
+ }
+
+ The check of g_logname[0] suppresses an attempt
+ to supply page counters when no .DVI file has yet
+ been opened.
+
+
+[24-Oct-86]
+ If an invalid option is detected in option(),
+ then warning() and/or fatal() will be called.
+ However, there is not yet a file name available
+ for a log file, and g_dolog is initially TRUE, so
+ both warning() and fatal() will abort because the
+ log file cannot be opened. Change the "if
+ (g_dolog ...) statements in fatal.h and warning.h
+ to include the condition "&& g_logname[0]".
+ Since C requires external variables to be
+ initialized to zero, g_logname[0] = '\0' when
+ option() is called, and no attempt will be made
+ to open the log file in warning() and fatal().
+
+
+[21-Oct-86]
+ For TOPS-20 only, set output and log file
+ generation retention counts to zero, implying all
+ generations will be kept. That way, if the user
+ runs dvixxx for the same file, but with different
+ parameters (-x and -y are good examples), the
+ earlier versions will not be lost. This adds
+ some new flags to machdefs.h, and some additional
+ code to dviinit.h, fatal.h, and warning.h right
+ after their fopen() calls. fopen(,"w+") will
+ reuse an existing file, so we changed the logfile
+ generation to "-1", always giving a new file.
+
+
+[21-Oct-86]
+ In prtpage.h, inserted
+ rule_height = -1; /* reset last rule parameters */
+ rule_width = -1;
+ before line
+ str_ycp = -1;
+ in POSTSCRIPT section (about line 115) of case
+ BOP. I caught this when I did `dvialw foo.dvi.*'
+ today-- after the first file, the PostScript
+ output contained a reference to the Q macro
+ before a B had been issued to define h and w, the
+ previous bar dimensions.
+
+
+[13-Oct-86]
+ Added -d32 option to cause display of all
+ truncated off-page text strings. This was
+ prompted by my wasting time looking for what I
+ thought was a bug in setstr() with long strings.
+ Changes in functions setstr() and setchar() in
+ dvialw.c and dvijep.c, and setchar.h, as well as
+ documentation in dviman.ltx and dviman.texinfo.
+
+
+[15-Sep-86]
+ Added -z option for PostScript and HP LaserJet
+ Plus on TOPS-20 only; this types in a command
+ "DVISPOOL: dvifilename\n", permitting the user to
+ define a spooler for the DVI file. This typein
+ is not automatic as in TOPS-20 TeX, because it
+ may interfere with batch and .mic files; however,
+ the final newline is supplied, because it is
+ assumed the user wanted it if the option switch
+ was given. Changes in dviterm.h, gblvars.h,
+ option.h, and usage.h, with new BOOLEAN global
+ variable "spool_output".
+
+
+[15-Sep-86]
+ Added page_step[] to allow printing pages in
+ steps other 1, such as for duplex printing, and
+ option -obeginpage:endpage:steppage; this
+ required changes in dvifile.h, gblvars.h, main.h,
+ option.h, and usage.h.
+
+
+[09-Sep-86]
+ Changed checksum error message in readgf.h,
+ readpk.h, and readpxl.h to output checksums in
+ octal and hexadecimal as well as decimal, and
+ explain why the mismatch is likely to have
+ occurred.
+
+ Changed debug_code to debug_code & 4 in dvijep.c,
+ and updated dviman.ltx to define settings of -d#
+ option for selective debug output.
+
+ Added DEBUG_OPEN() calls to dvialw.c, dviinit.h,
+ fatal.h, fontsub.h, openfont.h, and warning.h,
+ and definition of DEBUG_OPEN() to gendefs.h.
+
+ Delete doubled word in comment in charpk.h.
+
+ Insert typecast in fillrect.h:
+ *p = (UNSIGN32)ONES.
+
+ Insert typecast in dvibit.c:
+ tcharptr->istoobig = ((int)(tcharptr->hp*
+ ((tcharptr->wp+15) >> 4)) >= BIGBGCHAR);
+
+ Change macro argument c to ch in dvijep.c
+ (Microsoft C version 4.0 otherwise thinks that
+ the c in the format specification is to be
+ expanded too):
+ #define SETCHARCODE(fontnumber,ch) {\
+ if (fontnumber)\
+ (void)fprintf(plotfp,"\033*c%dd%dE",fontnumber,MAPCHAR(ch));\
+ else\
+ (void)fprintf(plotfp,"\033*cd%dE",MAPCHAR(ch));\
+ }
+
+
+[04-Sep-86]
+ Fixed handling of -o-# in option.h; I forgot to
+ check for signs in skipping the number.
+
+
+[28-Aug-86]
+ Wrote errshow.c; it is a filter which merges the
+ error message file output by Microsoft C with a
+ copy of the source line causing the error
+ message.
+
+
+[28-Aug-86]
+ Minor changes for type matching. Added typecasts
+ in chargf.h, charpk.h, dvialw.c, and dvijep.c.
+ Changed type declarations of m_begin, m_end,
+ m_step in dvitype.h, of k in fontfile.h, and of
+ fontfile() arguments in gblprocs.h. Added code
+ for IBM_PC_MICROSOFT to include stdlib.h and
+ string.h in main.h. Version 3.0 of Microsoft C
+ has a number of errors and inconsistencies in the
+ library file type declarations for stdio.h and
+ string.h. I fixed declarations and use of
+ putc(), putchar(), fileno(), _flsbuf(), thereby
+ eliminating "strong type mismatch" errors on
+ every instance of use of these functions.
+ Declarations of argument types for strxxx() have
+ int instead of char, and unsigned int instead of
+ int, for strchr(), strlen(), strrchr(),
+ strncpy(), strncat(), and strncmp(), which is at
+ variance with Kernighan & Ritchie, and with
+ Harbison & Steele, so use of these still gives
+ type mismatch errors. I am not fixing the
+ library file declarations pending seeing what
+ Version 4.0 has to offer, and what the ANSI C
+ Standard committee does with them.
+
+
+[21-Aug-86]
+ Add -e option in option.h for run-time
+ command-line definition of ``environment''
+ variables, and move initialization of xx_index
+ out of initglob() into dvifile(). This was
+ prompted by the use of Unix server invocations of
+ the drivers through calls to ``system("dvixxx
+ filename")''. Such a call creates a new shell
+ which, although it inherits the caller's
+ environment, may in fact require different
+ environment variables, especially for things like
+ FONTLIST and TEXFONTS.
+
+
+[21-Aug-86]
+ Change fontlist.h, gendefs.h, and openfont.h to
+ support a more general mechanism of font file
+ name generation. fontlist() now returns a list
+ of pointers to a series of possible font file
+ names; the first null string in the list
+ terminates it. The Unix and VAX VMS code
+ sections in fontlist.h now generate names with
+ the magnification both in the directory name as
+ well as in the extension. This was prompted by a
+ local need at Utah with some networked Unix
+ workstations which have both flavors of font file
+ storage.
+
+
+[21-Aug-86]
+ Change handling of TeX \countn values to INT32,
+ instead of UNSIGN32; roman-numeral pages come out
+ with negative page numbers in PLAIN.TEX. This
+ affects the declaration and use of tex_counters[]
+ in dviinit.h, gblvars.h, prtpage.h, and tctos.h.
+
+
+[18-Aug-86]
+ Allow negative page numbers on -o#:# switch to
+ mean pages from end (-1 = last, -2 = next to
+ last, etc.). sscanf() format change in option(),
+ and introduce PAGENUMBER() macro in dvifile().
+
+
+[15-Aug-86]
+ Conversion of the font magnification factor for
+ *.*pxl files in fontfile.h to dots/inch for the
+ *.*gf and *.*pk files forgot to round up. Thus,
+ mag 1643 became 328 instead of 329. Because
+ fontfile() gets a truncated magnification value,
+ the rounding is non-trivial; comments in
+ fontfile() describe what is necessary.
+
+; Local Modes:
+; Mode:Text
+; Comment Column:0
+; Auto Fill Mode:1
+; Fill Column:65
+; Fill Prefix:" "
+; Indent Tabs Mode:0
+; End: