Add dtl tools to 3rdparty/

We need to compile our own (patched) version of the app on Windows.

See #11325
This commit is contained in:
Juergen Spitzmueller 2020-04-09 08:58:09 +02:00
parent eea4ef9b6e
commit d6f9fdcaef
13 changed files with 9652 additions and 0 deletions

148
3rdparty/dtl/README vendored Normal file
View File

@ -0,0 +1,148 @@
This file is public domain.
Originally written 1995, Geoffrey Tobin.
The author has expressed the hope that any modification will retain enough content to remain useful. He would also appreciate being acknowledged as the original author in the documentation.
This declaration added 2008/11/14 by Clea F. Rees with the permission of Geoffrey Tobin.
README for DTL package - Thu 9 March 1995
-----------------------------------------
Author: Geoffrey Tobin <G.Tobin@ee.latrobe.edu.au>
Version: 0.6.1
CTAN Archive-path: dviware/dtl
Brief Description:
DTL (DVI Text Language) files are equivalent to TeX's DVI files,
but are humanly readable, instead of binary. Two programs are
provided to translate between DVI and DTL: dv2dt, dt2dv.
dt2dv warns if byte addresses or string lengths recorded in a DTL
file are incorrect, then overrides them. This makes DTL files
editable. It also allows quoted apostrophes (\') and quoted quotes
(\\) in strings. The current DTL variety, sequences-6, separates
font paths into directory and font, which makes them freely editable.
In this release, DTL line numbers are correctly calculated, and three
memory leaks have been fixed.
Keywords: dvi, TeX
Includes:
Makefile README dt2dv.c dtl.h dv2dt.c
man2ps dtl.doc dvi.doc dt2dv.man dv2dt.man
hello.tex example.tex tripvdu.tex edited.txt
Motivation:
When TeX has typeset a document, it writes its handiwork to a DVI
file, for DVI processing software (such as viewers, printer drivers,
dvidvi, and dvicopy) to read.
The file dvi.doc lists the DVI file commands, with their opcodes
(byte values), nominal command names, arguments, and meanings. For a
detailed description of DVI file structure, see one of these:
1. Donald E. Knuth's book _TeX: The Program_;
2. The file tex.web, which contains source and documentation for TeX:
CTAN: systems/knuth/tex/tex.web
3. The source for Knuth's dvitype program:
CTAN: systems/knuth/texware/dvitype.web
4. Joachim Schrod's DVI drivers standard document, the relevant part
of which is at
CTAN: dviware/driv-standard/level-0
Sometimes human beings are interested to see exactly what TeX has
produced, for example when viewing or printing of the DVI file gives
unexpected results. However, a DVI file is a compact binary
representation, so we need software to display its contents.
Binary file editors, when available, can show the DVI bytes, but not
their meanings, except for the portions that represent embedded text.
In particular, the command names are not shown, and the command
boundaries are not respected.
By contrast, Knuth's dvitype program is designed as an example of a
DVI driver. However, dvitype is inconvenient for studying the DVI
file alone, for the following reasons:
1. Being a DVI driver, dvitype endeavors to read the TFM font metric
files referenced in the DVI file. If a TFM file is absent, dvitype
quits with an error message.
2. When it starts, it prompts the user interactively for each of a
series of options.
3. Even the least verbose option gives masses of information that is
not contained in the DVI file, coming instead from a combination of
the data in the DVI file and TFM files.
4. It does NOT show the DVI information in a way that accurately
reflects the structure of the DVI file.
5. Its output, if redirected to a file, produces a very large file.
6. There is no automated procedure for converting the output of
dvitype back to a DVI file, and doing it by hand is totally
unreasonable.
The first disadvantage is a killer if a TFM file is absent.
Disadvantages two to four make dvitype very inconvenient for studying
a DVI file. The fifth problem makes dvitype's output tedious,
disk-hungry (so one deletes it almost immediately), and unsuitable for
file transfer.
The sixth disadvantage of dvitype is important to those people who are
interested in editing DVI files. Since the DVI files refer explicitly
to their own internal byte addresses, it's very easy to mess up a DVI
file if one were to try to edit it directly, even apart from the problem
of how to recognise a command.
So an exact, concise, textual representation of a DVI file is needed,
but dvitype does not produce one.
Resolution:
Therefore, working from Joachim Schrod's description, I designed DTL
and its conversion programs dv2dt (DVI -> DTL) and dt2dv (DTL -> DVI),
which are provided as C sources:
dtl.h
dv2dt.c
dt2dv.c
Although I was motivated by the TFM <-> PL conversion provided by
Knuth's tftopl and pltotf programs, I deliberately designed DTL to be
a much more concise and literal translation than the `property list'
structure exemplified by PL. The result is that a DTL file is
typically three times the size of its equivalent DVI file. The
document dtl.doc lists the correspondence between the DTL command
names and the (nominal) DVI command names.
A clear advantage of an exact two-way conversion is that we can check
(and prove) whether the converters worked truly on a given DVI file.
The provided plain TeX files:
example.tex
tripvdu.tex
can be used to test whether the compiled programs are behaving
sensibly. Whereas example.tex is a simple document that uses a
variety of plain TeX commands, tripvdu.tex provides a kind of
`trip test' for DVI processor programs. Both documents are taken,
with permission, from Andrew K. Trevorrow's dvitovdu (alias dvi2vdu)
distribution (and are also part of the dvgt viewer distribution).
The Makefile might have to be edited for your site, as it assumes
gcc for your C compiler. Makefile compiles dv2dt and dt2dv, then
runs tex on example.tex and tripvdu.tex, and also converts the
resulting DVI files to DTL files, back to DVI files (with a change
of name), then back again to DTL files, so that the results can be
compared using a textual differencing program. (Many computer systems
have such a program; on unix, as assumed by Makefile, this is named
`diff'; ms-dos has one named `comp'.) This should produce a
zero-length .dif file for each document, proving that the two DTL
files are identical.
A keen tester might also use a binary difference program on the DVI
files, to check that they are identical, as they need to be. (On unix
systems, the `diff' program suffices for that purpose.)
Note:
In representing numeric quantities, I have mainly opted to use
decimal notation, as this is how most of us are trained to think.
However, for the checksums in the `fd' (font definition) commands, I
chose octal notation, as this is used for checksums in Knuth's PL
files, against which DVI files must be compared when a DVI driver
loads a font.
Caveat:
The length of DTL commands is limited by the size of the line buffer
in dt2dv.c.
End of README

2856
3rdparty/dtl/dt2dv.c vendored Normal file

File diff suppressed because it is too large Load Diff

160
3rdparty/dtl/dt2dv.man vendored Normal file
View File

@ -0,0 +1,160 @@
.\" This file is public domain.
.\" Originally written 1995, Geoffrey Tobin.
.\" The author has expressed the hope that any modification will retain enough content to remain useful. He would also appreciate being acknowledged as the original author in the documentation.
.\" This declaration added 2008/11/14 by Clea F. Rees with the permission of Geoffrey Tobin.
.\" ====================================================================
.\" @Troff-man-file{
.\" author = "Nelson H. F. Beebe and Geoffrey R. D. Tobin",
.\" version = "0.6.0",
.\" date = "08 March 1995",
.\" time = "19:57:00 GMT +11",
.\" filename = "dt2dv.man",
.\" address = "Center for Scientific Computing
.\" Department of Mathematics
.\" University of Utah
.\" Salt Lake City, UT 84112
.\" USA",
.\" telephone = "+1 801 581 5254",
.\" FAX = "+1 801 581 4148",
.\" checksum = "03708 156 634 4989",
.\" email = "beebe@math.utah.edu (Internet)",
.\" codetable = "ISO/ASCII",
.\" keywords = "DVI, TeX",
.\" supported = "no",
.\" docstring = "This file contains the UNIX manual pages
.\" for the dt2dv utility, a program for
.\" converting a DTL text representation of a TeX
.\" DVI file, usually produced by the companion
.\" dv2dt utility, back to a binary DVI file.
.\"
.\" The checksum field above contains a CRC-16
.\" checksum as the first value, followed by the
.\" equivalent of the standard UNIX wc (word
.\" count) utility output of lines, words, and
.\" characters. This is produced by Robert
.\" Solovay's checksum utility.",
.\" }
.\" ====================================================================
.if t .ds Te T\\h'-0.1667m'\\v'0.20v'E\\v'-0.20v'\\h'-0.125m'X
.if n .ds Te TeX
.TH DT2DV 1 "08 March 1995" "Version 0.6.0"
.\"======================================================================
.SH NAME
dt2dv \- convert a DTL text representation of a TeX DVI file to a binary DVI file
.\"======================================================================
.SH SYNOPSIS
.B dt2dv
.RB [ \-debug ]
.RB [ \-group ]
.RB [ \-si ]
.RB [ \-so ]
.I [input-DTL-file]
.I [output-DVI-file]
.PP
In the absence of the
.B \-si
and
.B \-so
options,
both file arguments are
.IR required
in the order
.B input-DTL-file output-DVI-file .
But also see the OPTIONS section below.
No default file extensions are supplied.
.\"======================================================================
.SH DESCRIPTION
.B dt2dv
converts a text representation of a \*(Te\& DVI
file, usually produced by the companion
.BR dv2dt (1)
utility, back to a binary DVI file. DTL
.RI ( "DVI Text Language" )
files can be edited, with care, and then restored
to DVI form for processing by any \*(Te\& DVI
driver program. In DTL files, font directory names
and font names are preceded by a length field,
which must be updated if the names are modified.
.PP
.BR dvitype (1)
can also display a textual representation of DVI
files, but in some implementations at least, it
cannot be used in batch mode, and its output is
not well-suited for conversion back to a DVI file.
.PP
The format of \*(Te\& DVI files is fully described
in
Donald E. Knuth,
.IR "\*(Te\&: The Program" ,
Addison-Wesley (1986), ISBN 0-201-13437-3, as well
as in the
.BR dvitype (1)
literate program source code. Brief descriptions
of the DTL and DVI formats are given in
.BR dv2dt (1).
.\"======================================================================
.SH OPTIONS
.\"-----------------------------------------------
.TP \w'\-debug'u+3n
.B \-debug
Turn on detailed debugging output.
.\"-----------------------------------------------
.TP
.B \-group
Expect each DTL command to be in parentheses.
.\"-----------------------------------------------
.TP
.B \-si
Read all DTL commands from standard input.
.\"-----------------------------------------------
.TP
.B \-so
Write all DVI commands to standard output.
.\"======================================================================
.SH "SEE ALSO"
.BR dv2dt (1),
.BR dvitype (1),
.BR tex (1).
.\"======================================================================
.SH FILES
.TP \w'\fI*.dvi\fP'u+3n
.I *.dvi
binary \*(Te\& DVI file.
.TP
.I *.dtl
text representation of a \*(Te\& DVI file in
.I "DVI Text Language"
format.
.\"======================================================================
.SH AUTHOR
.B dt2dv
and
.BR dv2dt (1)
were written by
.RS
.nf
Geoffrey Tobin
Department of Electronic Engineering
La Trobe University
Bundoora, Victoria 3083
Australia
Tel: +61 3 479 3736
FAX: +61 3 479 3025
Email: <G.Tobin@ee.latrobe.edu.au>
.fi
.RE
.PP
These manual pages were written primarily by
.RS
.nf
Nelson H. F. Beebe, Ph.D.
Center for Scientific Computing
Department of Mathematics
University of Utah
Salt Lake City, UT 84112
Tel: +1 801 581 5254
FAX: +1 801 581 4148
Email: <beebe@math.utah.edu>
.fi
.RE
.\"==============================[The End]==============================

82
3rdparty/dtl/dtl.doc vendored Normal file
View File

@ -0,0 +1,82 @@
This file is public domain.
Originally written 1995, Geoffrey Tobin.
The author has expressed the hope that any modification will retain enough content to remain useful. He would also appreciate being acknowledged as the original author in the documentation.
This declaration added 2008/11/14 by Clea F. Rees with the permission of Geoffrey Tobin.
``dtl.doc''
Wed 8 March 1995
Geoffrey Tobin
Correspondence between DTL and DVI files.
-----------------------------------------
DTL variety sequences-6, version 0.6.0
--------------------------------------
Note: `DTL' stands for `Device-Independent Text Language', and is an
ASCII text representation of a DVI file.
References for DVI file structure:
----------------------------------
In this distribution:
dvi.doc
In the TeX archives:
CTAN: dviware/driv-standard/level-0/dvistd0.tex
"The DVI Driver Standard, Level 0",
by The TUG DVI Driver Standards Committee (now defunct)
chaired by Joachim Schrod.
Appendix A, "Device-Independent File Format",
section A.2, "Summary of DVI commands".
DTL Commands
------------
variety <variety-name> Specifies name of DTL file type.
Naturally, `variety' has no DVI equivalent.
The other DTL commands correspond one-to-one with DVI commands, but I
have used briefer names (except for `special') than those used in the
DVI standards document.
DTL : DVI
(text) : series of set_char commands, for printable ASCII text
\( : literal ASCII left parenthesis in (text)
\) : literal ASCII right parenthesis in (text)
\\ : literal ASCII backslash in (text)
\" : literal ASCII double quote in (text)
\XY : set_char for character with hexadecimal code XY,
not in parentheses, but by itself for readability
s1, s2, s2, s3 : set, with (1,2,3,4)-byte charcodes
sr : set_rule
p1, p2, p2, p3 : put, with (1,2,3,4)-byte charcodes
pr : put_rule
nop : nop (do nothing)
bop : bop (beginning of page)
eop : eop (end of page)
[ : push
] : pop
r1, r2, r3, r4 : right, with (1,2,3,4)-byte argument
w0, w1, w2, w3, w4 : as in DVI
x0, x1, x2, x3, x4 : as in DVI
d1, d2, d3, d4 : down, with (1,2,3,4)-byte argument
y0, y1, y2, y3, y4 : as in DVI
z0, z1, z2, z3, z4 : as in DVI
fn : fnt_num (set current font to font number in 0 to 63)
f1, f2, f3, f4 : fnt (set current font to (1,2,3,4)-byte font number)
special : xxx (special commands with (1,2,3,4)-byte string length)
fd : fnt_def (assign a number to a named font)
pre : preamble
post : post (begin postamble)
post_post : post_post (end postamble)
opcode : undefined DVI command (250 to 255)
---------------
EOF ``dtl.doc''
---------------

180
3rdparty/dtl/dtl.h vendored Normal file
View File

@ -0,0 +1,180 @@
/* dtl.h
This file is public domain.
Originally written 1995, Geoffrey Tobin.
The author has expressed the hope that any modification will retain enough content to remain useful. He would also appreciate being acknowledged as the original author in the documentation.
This declaration added 2008/11/14 by Clea F. Rees with the permission of Geoffrey Tobin.
- header for dv2dt.c and dt2dv.c, conversion programs
for human-readable "DTL" <-> DVI.
- (ANSI C) version 0.6.0 - 18:31 GMT +11 Wed 8 March 1995
- author: Geoffrey Tobin G.Tobin@ee.latrobe.edu.au
- patch: Michal Tomczak-Jaegermann ntomczak@vm.ucs.ualberta.ca
- Reference: "The DVI Driver Standard, Level 0",
by The TUG DVI Driver Standards Committee.
Appendix A, "Device-Independent File Format".
*/
/* variety of DTL produced */
#define VARIETY "sequences-6"
/* version of DTL programs */
#define VERSION "0.6.0"
/* Test for ANSI/ISO Standard C */
#if (defined(__cplusplus) || defined(__STDC__) || defined(c_plusplus))
#define STDC 1
#else
#define STDC 0
#endif
/* Version (Traditional or ANSI) of C affects prototype and type definitions */
#if STDC
#define ARGS(parenthesized_list) parenthesized_list
#else /* NOT STDC */
#define ARGS(parenthesized_list) ()
#endif /* NOT STDC */
#if STDC
#define Void void
#define VOID void
#define FILE_BEGIN SEEK_SET
#else /* NOT STDC */
#define Void int
#define VOID
#define FILE_BEGIN 0
#endif /* NOT STDC */
/* types to store 4 byte signed and unsigned integers */
typedef long S4;
typedef unsigned long U4;
/* scanf and printf formats to read or write those */
#define SF4 "%ld"
#define UF4 "%lu"
/* 4 byte hexadecimal */
/* #define XF4 "%04lx" */
#define XF4 "%lx"
/* 4 byte octal */
#define OF4 "%lo"
/* type for byte count for DVI file */
/* COUNT must be large enough to hold a U4 (unsigned 4 byte) value */
typedef U4 COUNT;
/* size of a TeX and DVI word is 32 bits; in some systems a `long int' is needed */
typedef long int word_t;
/* format for a DVI word */
#define WF "%ld"
/* string of 8-bit characters for machine: keyboard, screen, memory */
#define MAXSTRLEN 256
typedef char String[MAXSTRLEN+1];
/* string s of length l and maximum length m */
typedef struct {int l; int m; char * s;} Lstring;
int debug = 0; /* normally, debugging is off */
/* Is each DTL command parenthesised by a BCOM and an ECOM? */
int group = 0; /* by default, no grouping */
/* signals of beginning and end of a command and its arguments */
/* these apply only if group is nonzero */
# define BCOM "{"
# define ECOM "}"
# define BCOM_CHAR '{'
# define ECOM_CHAR '}'
/* beginning and end of a message string */
#define BMES "'"
#define EMES BMES
#define BMES_CHAR '\''
#define EMES_CHAR BMES_CHAR
/* beginning and end of sequence of font characters */
#define BSEQ "("
#define ESEQ ")"
#define BSEQ_CHAR '('
#define ESEQ_CHAR ')'
/* escape and quote characters */
#define ESC_CHAR '\\'
#define QUOTE_CHAR '\"'
/* command names in DTL */
#define SETCHAR "\\"
#define SET "s"
#define SET1 "s1"
#define SET2 "s2"
#define SET3 "s3"
#define SET4 "s4"
#define SETRULE "sr"
#define PUT "p"
#define PUT1 "p1"
#define PUT2 "p2"
#define PUT3 "p3"
#define PUT4 "p4"
#define PUTRULE "pr"
#define NOP "nop"
#define BOP "bop"
#define EOP "eop"
#define PUSH "["
#define POP "]"
#define RIGHT "r"
#define RIGHT1 "r1"
#define RIGHT2 "r2"
#define RIGHT3 "r3"
#define RIGHT4 "r4"
#define W "w"
#define W0 "w0"
#define W1 "w1"
#define W2 "w2"
#define W3 "w3"
#define W4 "w4"
#define X "x"
#define X0 "x0"
#define X1 "x1"
#define X2 "x2"
#define X3 "x3"
#define X4 "x4"
#define DOWN "d"
#define DOWN1 "d1"
#define DOWN2 "d2"
#define DOWN3 "d3"
#define DOWN4 "d4"
#define Y "y"
#define Y0 "y0"
#define Y1 "y1"
#define Y2 "y2"
#define Y3 "y3"
#define Y4 "y4"
#define Z "z"
#define Z0 "z0"
#define Z1 "z1"
#define Z2 "z2"
#define Z3 "z3"
#define Z4 "z4"
#define FONT "f"
#define FONT1 "f1"
#define FONT2 "f2"
#define FONT3 "f3"
#define FONT4 "f4"
#define FONTDEF "fd"
#define FONTNUM "fn"
#define SPECIAL "special"
#define PRE "pre"
#define POST "post"
#define POSTPOST "post_post"
#define OPCODE "opcode"
/* end dtl.h */

925
3rdparty/dtl/dv2dt.c vendored Normal file
View File

@ -0,0 +1,925 @@
/* dv2dt - convert DVI file to human-readable "DTL" format.
This file is public domain.
Originally written 1995, Geoffrey Tobin.
The author has expressed the hope that any modification will retain enough content to remain useful. He would also appreciate being acknowledged as the original author in the documentation.
This declaration added 2008/11/14 by Clea F. Rees with the permission of Geoffrey Tobin.
- (ANSI C) version 0.6.0 - 17:54 GMT +11 Wed 8 March 1995
- author: Geoffrey Tobin ecsgrt@luxor.latrobe.edu.au
- patch: Michal Tomczak-Jaegermann ntomczak@vm.ucs.ualberta.ca
- Reference: "The DVI Driver Standard, Level 0",
by The TUG DVI Driver Standards Committee.
Appendix A, "Device-Independent File Format".
*/
/* unix version; read from stdin, write to stdout, by default. */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include "dtl.h"
#define PRINT_BCOM if (group) fprintf (dtl, "%s", BCOM)
#define PRINT_ECOM if (group) fprintf (dtl, "%s", ECOM)
/*
operation's:
opcode,
name,
number of args,
string of arguments.
*/
struct op_info_st {int code; char * name; int nargs; char * args; };
typedef struct op_info_st op_info;
/*
table's:
name,
first opcode,
last opcode,
pointer to opcode info.
*/
struct op_table_st {char * name; int first; int last; op_info * list; };
typedef struct op_table_st op_table;
/* Table for opcodes 128 to 170 inclusive. */
op_info op_info_128_170 [] =
{
{128, "s1", 1, "1"},
{129, "s2", 1, "2"},
{130, "s3", 1, "3"},
{131, "s4", 1, "-4"},
{132, "sr", 2, "-4 -4"},
{133, "p1", 1, "1"},
{134, "p2", 1, "2"},
{135, "p3", 1, "3"},
{136, "p4", 1, "-4"},
{137, "pr", 2, "-4 -4"},
{138, "nop", 0, ""},
{139, "bop", 11, "-4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4"},
{140, "eop", 0, ""},
{141, "[", 0, ""},
{142, "]", 0, ""},
{143, "r1", 1, "-1"},
{144, "r2", 1, "-2"},
{145, "r3", 1, "-3"},
{146, "r4", 1, "-4"},
{147, "w0", 0, ""},
{148, "w1", 1, "-1"},
{149, "w2", 1, "-2"},
{150, "w3", 1, "-3"},
{151, "w4", 1, "-4"},
{152, "x0", 0, ""},
{153, "x1", 1, "-1"},
{154, "x2", 1, "-2"},
{155, "x3", 1, "-3"},
{156, "x4", 1, "-4"},
{157, "d1", 1, "-1"},
{158, "d2", 1, "-2"},
{159, "d3", 1, "-3"},
{160, "d4", 1, "-4"},
{161, "y0", 0, ""},
{162, "y1", 1, "-1"},
{163, "y2", 1, "-2"},
{164, "y3", 1, "-3"},
{165, "y4", 1, "-4"},
{166, "z0", 0, ""},
{167, "z1", 1, "-1"},
{168, "z2", 1, "-2"},
{169, "z3", 1, "-3"},
{170, "z4", 1, "-4"}
}; /* op_info op_info_128_170 [] */
op_table op_128_170 = {"op_128_170", 128, 170, op_info_128_170};
/* Table for font with 1 to 4 bytes (opcodes 235 to 238) inclusive. */
op_info fnt_n [] =
{
{235, "f1", 1, "1"},
{236, "f2", 1, "2"},
{237, "f3", 1, "3"},
{238, "f4", 1, "-4"}
}; /* op_info fnt_n [] */
op_table fnt = {"f", 235, 238, fnt_n};
/* function prototypes */
int open_dvi ARGS((char * dvi_file, FILE ** dvi));
int open_dtl ARGS((char * dtl_file, FILE ** dtl));
int dv2dt ARGS((FILE * dvi, FILE * dtl));
COUNT wunsigned ARGS((int n, FILE * dvi, FILE * dtl));
COUNT wsigned ARGS((int n, FILE * dvi, FILE * dtl));
S4 rsigned ARGS((int n, FILE * dvi));
U4 runsigned ARGS((int n, FILE * dvi));
COUNT wtable ARGS((op_table table, int opcode, FILE * dvi, FILE * dtl));
COUNT setseq ARGS((int opcode, FILE * dvi, FILE * dtl));
Void setpchar ARGS((int charcode, FILE * dtl));
Void xferstring ARGS((int k, FILE * dvi, FILE * dtl));
COUNT special ARGS((FILE * dvi, FILE * dtl, int n));
COUNT fontdef ARGS((FILE * dvi, FILE * dtl, int n));
COUNT preamble ARGS((FILE * dvi, FILE * dtl));
COUNT postamble ARGS((FILE * dvi, FILE * dtl));
COUNT postpost ARGS((FILE * dvi, FILE * dtl));
String program; /* name of dv2dt program */
int
main
#ifdef STDC
(int argc, char * argv[])
#else
(argc, argv)
int argc;
char * argv[];
#endif
{
FILE * dvi = stdin;
FILE * dtl = stdout;
/* Watch out: C's standard library's string functions are dicey */
strncpy (program, argv[0], MAXSTRLEN);
if (argc > 1)
open_dvi (argv[1], &dvi);
if (argc > 2)
open_dtl (argv[2], &dtl);
dv2dt (dvi, dtl);
return 0; /* OK */
}
/* end main */
int
open_dvi
#ifdef STDC
(char * dvi_file, FILE ** pdvi)
#else
(dvi_file, pdvi)
char * dvi_file;
FILE ** pdvi;
#endif
/* I: dvi_file; I: pdvi; O: *pdvi. */
{
if (pdvi == NULL)
{
fprintf (stderr, "%s: address of dvi variable is NULL.\n", program);
exit (1);
}
*pdvi = fopen (dvi_file, "rb");
if (*pdvi == NULL)
{
fprintf (stderr, "%s: Cannot open \"%s\" for binary reading.\n",
program, dvi_file);
exit (1);
}
return 1; /* OK */
}
/* open_dvi */
int
open_dtl
#ifdef STDC
(char * dtl_file, FILE ** pdtl)
#else
(dtl_file, pdtl)
char * dtl_file;
FILE ** pdtl;
#endif
/* I: dtl_file; I: pdtl; O: *pdtl. */
{
if (pdtl == NULL)
{
fprintf (stderr, "%s: address of dtl variable is NULL.\n", program);
exit (1);
}
*pdtl = fopen (dtl_file, "w");
if (*pdtl == NULL)
{
fprintf (stderr, "%s: Cannot open \"%s\" for text writing.\n",
program, dtl_file);
exit (1);
}
return 1; /* OK */
}
/* open_dtl */
int
dv2dt
#ifdef STDC
(FILE * dvi, FILE * dtl)
#else
(dvi, dtl)
FILE * dvi;
FILE * dtl;
#endif
{
int opcode;
COUNT count; /* intended to count bytes to DVI file; as yet unused. */
PRINT_BCOM;
fprintf (dtl, "variety ");
/* fprintf (dtl, BMES); */
fprintf (dtl, VARIETY);
/* fprintf (dtl, EMES); */
PRINT_ECOM;
fprintf (dtl, "\n");
/* start counting DVI bytes */
count = 0;
while ((opcode = fgetc (dvi)) != EOF)
{
PRINT_BCOM; /* start of command and parameters */
if (opcode < 0 || opcode > 255)
{
count += 1;
fprintf (stderr, "%s: Non-byte from \"fgetc()\"!\n", program);
exit (1);
}
else if (opcode <= 127)
{
/* setchar commands */
/* count += 1; */
/* fprintf (dtl, "%s%d", SETCHAR, opcode); */
count +=
setseq (opcode, dvi, dtl);
}
else if (opcode >= 128 && opcode <= 170)
{
count +=
wtable (op_128_170, opcode, dvi, dtl);
}
else if (opcode >= 171 && opcode <= 234)
{
count += 1;
fprintf (dtl, "%s%d", FONTNUM, opcode - 171);
}
else if (opcode >= 235 && opcode <= 238)
{
count +=
wtable (fnt, opcode, dvi, dtl);
}
else if (opcode >= 239 && opcode <= 242)
{
count +=
special (dvi, dtl, opcode - 238);
}
else if (opcode >= 243 && opcode <= 246)
{
count +=
fontdef (dvi, dtl, opcode - 242);
}
else if (opcode == 247)
{
count +=
preamble (dvi, dtl);
}
else if (opcode == 248)
{
count +=
postamble (dvi, dtl);
}
else if (opcode == 249)
{
count +=
postpost (dvi, dtl);
}
else if (opcode >= 250 && opcode <= 255)
{
count += 1;
fprintf (dtl, "opcode%d", opcode);
}
else
{
count += 1;
fprintf (stderr, "%s: unknown byte.\n", program);
exit (1);
}
PRINT_ECOM; /* end of command and parameters */
fprintf (dtl, "\n");
if (fflush (dtl) == EOF)
{
fprintf (stderr, "%s: fflush on dtl file gave write error!\n", program);
exit (1);
}
} /* end while */
return 1; /* OK */
}
/* dv2dt */
COUNT
wunsigned
#ifdef STDC
(int n, FILE * dvi, FILE * dtl)
#else
(n, dvi, dtl)
int n;
FILE * dvi;
FILE * dtl;
#endif
{
U4 unum;
fprintf (dtl, " ");
unum = runsigned (n, dvi);
fprintf (dtl, UF4, unum);
return n;
}
/* end wunsigned */
COUNT
wsigned
#ifdef STDC
(int n, FILE * dvi, FILE * dtl)
#else
(n, dvi, dtl)
int n;
FILE * dvi;
FILE * dtl;
#endif
{
S4 snum;
fprintf (dtl, " ");
snum = rsigned (n, dvi);
fprintf (dtl, SF4, snum);
return n;
}
/* end wsigned */
U4
runsigned
#ifdef STDC
(int n, FILE * dvi)
#else
(n, dvi)
int n;
FILE * dvi;
#endif
/* read 1 <= n <= 4 bytes for an unsigned integer from dvi file */
/* DVI format uses Big-endian storage of numbers. */
{
U4 integer;
int ibyte = 0;
int i;
if (n < 1 || n > 4)
{
fprintf (stderr,
"%s: runsigned() asked for %d bytes. Must be 1 to 4.\n", program, n);
exit (1);
}
/* Following calculation works iff storage is big-endian. */
integer = 0;
for (i = 0; i < n; i++)
{
integer *= 256;
ibyte = fgetc (dvi);
integer += ibyte;
}
return integer;
}
/* end runsigned */
S4
rsigned
#ifdef STDC
(int n, FILE * dvi)
#else
(n, dvi)
int n;
FILE * dvi;
#endif
/* read 1 <= n <= 4 bytes for a signed integer from dvi file */
/* DVI format uses Big-endian storage of numbers. */
{
S4 integer;
int ibyte = 0;
int i;
if (n < 1 || n > 4)
{
fprintf (stderr,
"%s: rsigned() asked for %d bytes. Must be 1 to 4.\n", program, n);
exit (1);
}
/* Following calculation works iff storage is big-endian. */
integer = 0;
for (i = 0; i < n; i++)
{
integer *= 256;
ibyte = fgetc (dvi);
/* Big-endian implies sign byte is first byte. */
if (i == 0 && ibyte >= 128)
{
ibyte -= 256;
}
integer += ibyte;
}
return integer;
}
/* end rsigned */
COUNT
wtable
#ifdef STDC
(op_table table, int opcode, FILE * dvi, FILE * dtl)
#else
(table, opcode, dvi, dtl)
op_table table;
int opcode;
FILE * dvi;
FILE * dtl;
#endif
/* write command with given opcode in given table */
/* return number of DVI bytes in this command */
{
op_info op; /* pointer into table of operations and arguments */
COUNT bcount = 0; /* number of bytes in arguments of this opcode */
String args; /* arguments string */
int i; /* count of arguments read from args */
int pos; /* position in args */
/* Defensive programming. */
if (opcode < table.first || opcode > table.last)
{
fprintf (stderr,
"%s: opcode %d is outside table %s [ %d to %d ] !\n",
program, opcode, table.name, table.first, table.last);
exit (1);
}
op = table.list [opcode - table.first];
/* Further defensive programming. */
if (op.code != opcode)
{
fprintf (stderr, "%s: internal table %s wrong!\n", program, table.name);
exit (1);
}
bcount = 1;
fprintf (dtl, "%s", op.name);
/* NB: sscanf does an ungetc, */
/* so args must be writable. */
strncpy (args, op.args, MAXSTRLEN);
pos = 0;
for (i = 0; i < op.nargs; i++)
{
int argtype; /* sign and number of bytes in current argument */
int nconv; /* number of successful conversions from args */
int nread; /* number of bytes read from args */
nconv = sscanf (args + pos, "%d%n", &argtype, &nread);
/* internal consistency checks */
if (nconv != 1 || nread <= 0)
{
fprintf (stderr,
"%s: internal read of table %s failed!\n", program, table.name);
exit (1);
}
pos += nread;
bcount += ( argtype < 0 ?
wsigned (-argtype, dvi, dtl) :
wunsigned (argtype, dvi, dtl) ) ;
} /* end for */
return bcount;
}
/* wtable */
COUNT
setseq
#ifdef STDC
(int opcode, FILE * dvi, FILE * dtl)
#else
(opcode, dvi, dtl)
int opcode;
FILE * dvi;
FILE * dtl;
#endif
/* write a sequence of setchar commands */
/* return count of DVI bytes interpreted into DTL */
{
int charcode = opcode; /* fortuitous */
int ccount = 0;
if (!isprint (charcode))
{
ccount = 1;
fprintf (dtl, "%s%02X", SETCHAR, opcode);
}
else
{
/* start of sequence of font characters */
fprintf (dtl, BSEQ);
/* first character */
ccount = 1;
setpchar (charcode, dtl);
/* subsequent characters */
while ((opcode = fgetc (dvi)) != EOF)
{
if (opcode < 0 || opcode > 127)
{
break; /* not a setchar command, so sequence has ended */
}
charcode = opcode; /* fortuitous */
if (!isprint (charcode)) /* not printable ascii */
{
break; /* end of font character sequence, as for other commands */
}
else /* printable ASCII */
{
ccount += 1;
setpchar (charcode, dtl);
}
} /* end for loop */
/* prepare to reread opcode of next DVI command */
if (ungetc (opcode, dvi) == EOF)
{
fprintf (stderr, "setseq: cannot push back a byte\n");
exit (1);
}
/* end of sequence of font characters */
fprintf (dtl, ESEQ);
}
return ccount;
}
/* setseq */
Void
setpchar
#ifdef STDC
(int charcode, FILE * dtl)
#else
(charcode, dtl)
int charcode;
FILE * dtl;
#endif
/* set printable character */
{
switch (charcode)
{
case ESC_CHAR:
fprintf (dtl, "%c", ESC_CHAR);
fprintf (dtl, "%c", ESC_CHAR);
break;
case QUOTE_CHAR:
fprintf (dtl, "%c", ESC_CHAR);
fprintf (dtl, "%c", QUOTE_CHAR);
break;
case BSEQ_CHAR:
fprintf (dtl, "%c", ESC_CHAR);
fprintf (dtl, "%c", BSEQ_CHAR);
break;
case ESEQ_CHAR:
fprintf (dtl, "%c", ESC_CHAR);
fprintf (dtl, "%c", ESEQ_CHAR);
break;
default:
fprintf (dtl, "%c", charcode);
break;
}
}
/* setpchar */
Void
xferstring
#ifdef STDC
(int k, FILE * dvi, FILE * dtl)
#else
(k, dvi, dtl)
int k;
FILE * dvi;
FILE * dtl;
#endif
/* copy string of k characters from dvi file to dtl file */
{
int i;
int ch;
fprintf (dtl, " ");
fprintf (dtl, "'");
for (i=0; i < k; i++)
{
ch = fgetc (dvi);
if (ch == ESC_CHAR || ch == EMES_CHAR)
{
fprintf (dtl, "%c", ESC_CHAR);
}
fprintf (dtl, "%c", ch);
}
fprintf (dtl, "'");
}
/* xferstring */
COUNT
special
#ifdef STDC
(FILE * dvi, FILE * dtl, int n)
#else
(dvi, dtl, n)
FILE * dvi;
FILE * dtl;
int n;
#endif
/* read special 1 .. 4 from dvi and write in dtl */
/* return number of DVI bytes interpreted into DTL */
{
U4 k;
if (n < 1 || n > 4)
{
fprintf (stderr, "%s: special %d, range is 1 to 4.\n", program, n);
exit (1);
}
fprintf (dtl, "%s%d", SPECIAL, n);
/* k[n] = length of special string */
fprintf (dtl, " ");
k = runsigned (n, dvi);
fprintf (dtl, UF4, k);
/* x[k] = special string */
xferstring (k, dvi, dtl);
return (1 + n + k);
}
/* end special */
COUNT
fontdef
#ifdef STDC
(FILE * dvi, FILE * dtl, int n)
#else
(dvi, dtl, n)
FILE * dvi;
FILE * dtl;
int n;
#endif
/* read fontdef 1 .. 4 from dvi and write in dtl */
/* return number of DVI bytes interpreted into DTL */
{
U4 ku, c, s, d, a, l;
S4 ks;
if (n < 1 || n > 4)
{
fprintf (stderr, "%s: font def %d, range is 1 to 4.\n", program, n);
exit (1);
}
fprintf (dtl, "%s%d", FONTDEF, n);
/* k[n] = font number */
fprintf (dtl, " ");
if (n == 4)
{
ks = rsigned (n, dvi);
fprintf (dtl, SF4, ks);
}
else
{
ku = runsigned (n, dvi);
fprintf (dtl, UF4, ku);
}
/* c[4] = checksum */
fprintf (dtl, " ");
c = runsigned (4, dvi);
#ifdef HEX_CHECKSUM
fprintf (dtl, XF4, c);
#else /* NOT HEX_CHECKSUM */
/* write in octal, to allow quick comparison with tftopl's output */
fprintf (dtl, OF4, c);
#endif
/* s[4] = scale factor */
fprintf (dtl, " ");
s = runsigned (4, dvi);
fprintf (dtl, UF4, s);
/* d[4] = design size */
fprintf (dtl, " ");
d = runsigned (4, dvi);
fprintf (dtl, UF4, d);
/* a[1] = length of area (directory) name */
a = runsigned (1, dvi);
fprintf (dtl, " ");
fprintf (dtl, UF4, a);
/* l[1] = length of font name */
l = runsigned (1, dvi);
fprintf (dtl, " ");
fprintf (dtl, UF4, l);
/* n[a+l] = font pathname string => area (directory) + font */
xferstring (a, dvi, dtl);
xferstring (l, dvi, dtl);
return (1 + n + 4 + 4 + 4 + 1 + 1 + a + l);
}
/* end fontdef */
COUNT
preamble
#ifdef STDC
(FILE * dvi, FILE * dtl)
#else
(dvi, dtl)
FILE * dvi;
FILE * dtl;
#endif
/* read preamble from dvi and write in dtl */
/* return number of DVI bytes interpreted into DTL */
{
U4 id, num, den, mag, k;
fprintf (dtl, "pre");
/* i[1] = DVI format identification */
fprintf (dtl, " ");
id = runsigned (1, dvi);
fprintf (dtl, UF4, id);
/* num[4] = numerator of DVI unit */
fprintf (dtl, " ");
num = runsigned (4, dvi);
fprintf (dtl, UF4, num);
/* den[4] = denominator of DVI unit */
fprintf (dtl, " ");
den = runsigned (4, dvi);
fprintf (dtl, UF4, den);
/* mag[4] = 1000 x magnification */
fprintf (dtl, " ");
mag = runsigned (4, dvi);
fprintf (dtl, UF4, mag);
/* k[1] = length of comment */
fprintf (dtl, " ");
k = runsigned (1, dvi);
fprintf (dtl, UF4, k);
/* x[k] = comment string */
xferstring (k, dvi, dtl);
return (1 + 1 + 4 + 4 + 4 + 1 + k);
}
/* end preamble */
COUNT
postamble
#ifdef STDC
(FILE * dvi, FILE * dtl)
#else
(dvi, dtl)
FILE * dvi;
FILE * dtl;
#endif
/* read postamble from dvi and write in dtl */
/* return number of bytes */
{
U4 p, num, den, mag, l, u, s, t;
fprintf (dtl, "post");
/* p[4] = pointer to final bop */
fprintf (dtl, " ");
p = runsigned (4, dvi);
fprintf (dtl, UF4, p);
/* num[4] = numerator of DVI unit */
fprintf (dtl, " ");
num = runsigned (4, dvi);
fprintf (dtl, UF4, num);
/* den[4] = denominator of DVI unit */
fprintf (dtl, " ");
den = runsigned (4, dvi);
fprintf (dtl, UF4, den);
/* mag[4] = 1000 x magnification */
fprintf (dtl, " ");
mag = runsigned (4, dvi);
fprintf (dtl, UF4, mag);
/* l[4] = height + depth of tallest page */
fprintf (dtl, " ");
l = runsigned (4, dvi);
fprintf (dtl, UF4, l);
/* u[4] = width of widest page */
fprintf (dtl, " ");
u = runsigned (4, dvi);
fprintf (dtl, UF4, u);
/* s[2] = maximum stack depth */
fprintf (dtl, " ");
s = runsigned (2, dvi);
fprintf (dtl, UF4, s);
/* t[2] = total number of pages (bop commands) */
fprintf (dtl, " ");
t = runsigned (2, dvi);
fprintf (dtl, UF4, t);
/* return (29); */
return (1 + 4 + 4 + 4 + 4 + 4 + 4 + 2 + 2);
}
/* end postamble */
COUNT
postpost
#ifdef STDC
(FILE * dvi, FILE * dtl)
#else
(dvi, dtl)
FILE * dvi;
FILE * dtl;
#endif
/* read post_post from dvi and write in dtl */
/* return number of bytes */
{
U4 q, id;
int b223; /* hope this is 8-bit clean */
int n223; /* number of "223" bytes in final padding */
fprintf (dtl, "post_post");
/* q[4] = pointer to post command */
fprintf (dtl, " ");
q = runsigned (4, dvi);
fprintf (dtl, UF4, q);
/* i[1] = DVI identification byte */
fprintf (dtl, " ");
id = runsigned (1, dvi);
fprintf (dtl, UF4, id);
/* final padding by "223" bytes */
/* hope this way of obtaining b223 is 8-bit clean */
for (n223 = 0; (b223 = fgetc (dvi)) == 223; n223++)
{
fprintf (dtl, " ");
fprintf (dtl, "%d", 223);
}
if (n223 < 4)
{
fprintf (stderr,
"%s: bad post_post: fewer than four \"223\" bytes.\n", program);
exit (1);
}
if (b223 != EOF)
{
fprintf (stderr,
"%s: bad post_post: doesn't end with a \"223\".\n", program);
exit (1);
}
return (1 + 4 + 1 + n223);
}
/* end postpost */
/* end of "dv2dt.c" */

719
3rdparty/dtl/dv2dt.man vendored Normal file
View File

@ -0,0 +1,719 @@
.\" This file is public domain.
.\" Originally written 1995, Geoffrey Tobin.
.\" The author has expressed the hope that any modification will retain enough content to remain useful. He would also appreciate being acknowledged as the original author in the documentation.
.\" This declaration added 2008/11/14 by Clea F. Rees with the permission of Geoffrey Tobin.
.\" ====================================================================
.\" @Troff-man-file{
.\" author = "Nelson H. F. Beebe and Geoffrey Tobin",
.\" version = "0.6.0",
.\" date = "08 March 1995",
.\" time = "19:52:00 GMT +11",
.\" filename = "dv2dt.man",
.\" address = "Center for Scientific Computing
.\" Department of Mathematics
.\" University of Utah
.\" Salt Lake City, UT 84112
.\" USA",
.\" telephone = "+1 801 581 5254",
.\" FAX = "+1 801 581 4148",
.\" checksum = "32328 715 2191 12898",
.\" email = "beebe@math.utah.edu (Internet)",
.\" codetable = "ISO/ASCII",
.\" keywords = "DVI, TeX",
.\" supported = "no",
.\" docstring = "This file contains the UNIX manual pages
.\" for the dv2dt utility, a program for
.\" converting a binary TeX DVI file to an
.\" editable text representation in DTL (DVI Text
.\" Language). The companion dt2dv utility can
.\" convert the output DTL file back to a binary
.\" DVI file.
.\"
.\" The checksum field above contains a CRC-16
.\" checksum as the first value, followed by the
.\" equivalent of the standard UNIX wc (word
.\" count) utility output of lines, words, and
.\" characters. This is produced by Robert
.\" Solovay's checksum utility.",
.\" }
.\" ====================================================================
.if t .ds Te T\\h'-0.1667m'\\v'0.20v'E\\v'-0.20v'\\h'-0.125m'X
.if n .ds Te TeX
.if t .ds Xe X\\h'-0.1667m'\\v'0.20v'E\\v'-0.20v'\\h'-0.125m'T
.if n .ds Xe XeT
.TH DV2DT 1 "08 March 1995" "Version 0.6.0"
.\"======================================================================
.SH NAME
dv2dt \- convert a binary TeX DVI file to DTL text representation
.\"======================================================================
.SH SYNOPSIS
.B dv2dt
.I input-DVI-file
.I output-DTL-file
.PP
If the filenames are omitted, then
.I stdin
and
.I stdout
are assumed.
.\"======================================================================
.SH DESCRIPTION
.B dv2dt
converts a binary \*(Te\& DVI file to an editable
text file in DTL
.RI ( "DVI Text Language" )
format. The companion
.BR dt2dv (1)
utility can convert the DTL file back to a binary
DVI file.
.\"======================================================================
.SH "DVI COMMAND DESCRIPTION"
\*(Te\& DVI files contain a compact binary
description of typeset pages, as a stream of
operation code bytes, each immediately followed by
zero or more parameter bytes. The format of DVI
files is fully described in Donald E. Knuth,
.IR "\*(Te\&: The Program" ,
Addison-Wesley (1986), ISBN 0-201-13437-3, as well
as in the
.BR dvitype (1)
literate program source code.
.PP
For convenience, we provide a summary of DVI
commands here. In the following list, operation
code bytes are given as unsigned decimal values,
followed by their symbolic names (not present in
the DVI file), and a short description. A
designation like
.I b[+n]
means that the operation code byte is followed by
a parameter
.I b
which uses
.I n
bytes, and is signed. Without the plus sign, the
parameter is unsigned. Signed integer parameter
values are always represented in two's complement
arithmetic, which is the system followed by most
computers manufactured today, including all
personal computers and workstations.
.if n .TP \w'\fI128_set1__c[1]\fP'u+3n
.if t .TP \w'\fI243_fnt_def1__k[1]_c[4]_s[4]_d[4]_a[1]_l[1]_n[a+l]\fP'u+3n
.I "0 set_char_0"
Set character 0 from current font.
.TP
.I .\|.\|.
.TP
.I "127 set_char_127"
Set character 127 from current font.
.TP
.I "128 set1 c[1]"
Set 1-byte unsigned character (uchar) number
.IR c .
.TP
.I "129 set2 c[2]"
Set 2-byte uchar number
.IR c .
.TP
.I "130 set3 c[3]"
Set 3-byte uchar number
.IR c .
.TP
.I "131 set4 c[+4]"
Set 4-byte signed character (schar) number
.IR c .
.TP
.I "132 set_rule a[+4] b[+4]"
Set rule, height
.IR a ,
width
.IR b .
.TP
.I "133 put1 c[1]"
Put 1-byte uchar
.IR c .
.TP
.I "134 put2 c[2]"
Put 2-byte uchar
.IR c .
.TP
.I "135 put3 c[3]"
Put 3-byte uchar
.IR c .
.TP
.I "136 put4 c[+4]"
Put 4-byte schar
.IR c .
.TP
.I "137 put_rule a[+4] b[+4]"
Put rule, height
.IR a ,
width
.IR b .
.TP
.I "138 nop"
Do nothing.
.TP
.I "139 bop c0[+4] .\|.\|. c9[+4] p[+4]"
Beginning of page. The parameters
.I "c0 .\|.\|. c9"
are the \*(Te\& page counters, the contents of
\*(Te\& count registers
.IR "\ecount0 .\|.\|. \ecount9" .
The parameter
.I p
is the byte offset from the beginning of the DVI
file of the previous
.I bop
operation code byte. The first such command in
the file has
.IR "p = \-1" .
.TP
.I "140 eop"
End of page.
.TP
.I "141 push"
Push
.RI ( h,v,w,x,y,z )
onto stack.
.TP
.I "142 pop"
Pop
.RI ( h,v,w,x,y,z )
from stack.
.TP
.I "143 right1 b[+1]"
Move right
.I b
units.
.TP
.I "144 right2 b[+2]"
Move right
.I b
units.
.TP
.I "145 right3 b[+3]"
Move right
.I b
units.
.TP
.I "146 right4 b[+4]"
Move right
.I b
units.
.TP
.I "147 w0"
Move right
.I w
units.
.TP
.I "148 w1 b[+1]"
Move right
.I b
units, and set
.IR "w = b" .
.TP
.I "149 w2 b[+2]"
Move right
.I b
units, and set
.IR "w = b" .
.TP
.I "150 w3 b[+3]"
Move right
.I b
units, and set
.IR "w = b" .
.TP
.I "151 w4 b[+4]"
Move right
.I b
units, and set
.IR "w = b" .
.TP
.I "152 x0"
Move right
.I x
units.
.TP
.I "153 x1 b[+1]"
Move right
.I b
units, and set
.IR "x = b" .
.TP
.I "154 x2 b[+2]"
Move right
.I b
units, and set
.IR "x = b" .
.TP
.I "155 x3 b[+3]"
Move right
.I b
units, and set
.IR "x = b" .
.TP
.I "156 x4 b[+4]"
Move right
.I b
units, and set
.IR "x = b" .
.TP
.I "157 down1 a[+1]"
Move down
.I a
units.
.TP
.I "158 down2 a[+2]"
Move down
.I a
units.
.TP
.I "159 down3 a[+3]"
Move down
.I a
units.
.TP
.I "160 down4 a[+4]"
Move down
.I a
units.
.TP
.I "161 y0"
Move right
.I y
units.
.TP
.I "162 y1 a[+1]"
Move right
.I a
units, and set
.IR "y = a" .
.TP
.I "163 y2 a[+2]"
Move right
.I a
units, and set
.IR "y = a" .
.TP
.I "164 y3 a[+3]"
Move right
.I a
units, and set
.IR "y = a" .
.TP
.I "165 y4 a[+4]"
Move right
.I a
units, and set
.IR "y = a" .
.TP
.I "166 z0"
Move right
.I z
units.
.TP
.I "167 z1 a[+1]"
Move right
.I a
units, and set
.IR "z = a" .
.TP
.I "168 z2 a[+2]"
Move right
.I a
units, and set
.IR "z = a" .
.TP
.I "169 z3 a[+3]"
Move right
.I a
units, and set
.IR "z = a" .
.TP
.I "170 z4 a[+4]"
Move right
.I a
units, and set
.IR "z = a" .
.TP
.I "171 fnt_num_0"
Set current font number
.IR "(f) = 0" .
.TP
.I .\|.\|.
.TP
.I "234 fnt_num_63"
Set
.IR "f = 63" .
.TP
.I "235 fnt1 k[1]"
Set
.IR "f = k" .
.TP
.I "236 fnt2 k[2]"
Set
.IR "f = k" .
.TP
.I "237 fnt3 k[3]"
Set
.IR "f = k" .
.TP
.I "238 fnt4 k[+4]"
Set
.IR "f = k" .
.TP
.I "239 xxx1 k[1] x[k]"
Special string
.I x
with
.I k
bytes.
.TP
.I "240 xxx2 k[2] x[k]"
Special string
.I x
with
.I k
bytes.
.TP
.I "241 xxx3 k[3] x[k]"
Special string
.I x
with
.I k
bytes.
.TP
.I "242 xxx4 k[4] x[k]"
Special string
.I x
with (unsigned)
.I k
bytes.
.TP
.I "243 fnt_def1 k[1] c[4] s[4] d[4] a[1] l[1] n[a+l]"
Define font
.IR k .
The parameters are:
.RS
.TP \w'\fIm\fP'u+3n
.I c
Checksum for TFM file.
.TP
.I s
Scale factor, in DVI units.
.TP
.I d
Design size, in DVI units.
.TP
.I a
Length of the ``area'' or directory.
.TP
.I l
Length of the font name.
.TP
.I n
Area and font name string(s).
.RE
.TP
.I "244 fnt_def2 k[2] c[4] s[4] d[4] a[1] l[1] n[a+l]"
Define font
.IR k .
.TP
.I "245 fnt_def3 k[3] c[4] s[4] d[4] a[1] l[1] n[a+l]"
Define font
.IR k .
.TP
.I "246 fnt_def4 k[+4] c[4] s[4] d[4] a[1] l[1] n[a+l]"
Define font
.IR k .
.TP
.I "247 pre i[1] num[4] den[4] mag[4] k[1] x[k]"
Begin preamble. The parameters are:
.RS
.TP \w'\fInum\fP'u+3n
.I i
DVI format. Standard \*(Te\& has
.IR "ID = 2" ,
and \*(Te\&-\*(Xe\& has
.IR "ID = 3" .
.TP
.I num
Numerator of 100 nm / DVI unit.
.TP
.I den
Denominator of 100 nm / DVI unit.
.TP
.I mag
1000 * magnification.
.TP
.I k
Comment length.
.TP
.I x
Comment string.
.RE
.TP
.I "248 post p[4] num[4] den[4] mag[4] l[4] u[4] s[2] t[2]"
Begin postamble. The parameters are:
.RS
.TP \w'\fInum\fP'u+3n
.I p
Pointer to final bop.
.TP
.I "num, den, mag"
Duplicates of values in preamble.
.TP
.I l
Height-plus-depth of tallest page, in DVI units.
.TP
.I u
Width of widest page, in DVI units.
.TP
.I s
Maximum stack depth needed to process this DVI file.
.TP
.I t
Total number of pages
.RI ( bop
commands) present.
.RE
.TP
.I "249 post_post q[4] i[1] 223 .\|.\|. 223"
End postamble. The parameters are:
.RS
.TP \w'\fI223\fP'u+3n
.I q
Byte offset from the beginning of the DVI file to
the
.I post
command that started the postamble.
.TP
.I i
DVI format ID, as in the preamble.
.TP
.I
223
At least four
.I 223
bytes.
.RE
.TP
.I "250"
Undefined.
.TP
.I .\|.\|.
.TP
.I "255"
Undefined.
.\"======================================================================
.SH "DTL COMMAND DESCRIPTION"
A DTL file contains one line per command, with a
limit of 1024 characters per line. Each command
contains a symbolic operation name, followed by
zero or more parameter values. The parameter
value descriptions are not repeated here; they can
be found in the previous section.
.TP \w'\fIw0,_w1,_w2,_w3,_w4\fP'u+3n
variety <variety-name>
This command specifies the name of the DTL file
type; it has no DVI file equivalent.
.TP
.I (text)
Series of set_char commands, for printable ASCII text.
.TP
.I \e(
Literal ASCII left parenthesis in (text).
.TP
.I \e)
Literal ASCII right parenthesis in (text).
.TP
.I \e\e
Literal ASCII backslash in (text).
.TP
.I \e"
Literal ASCII double quote in (text).
.TP
.I \eXY
Set_char for character with hexadecimal code XY,
not in parentheses, but by itself for readability.
.TP
.I "s1, s2, s2, s3"
Set, with (1,2,3,4)-byte charcodes.
.TP
.I sr
.IR set_rule .
.TP
.I "p1, p2, p2, p3"
Put, with (1,2,3,4)-byte charcodes.
.TP
.I pr
.IR put_rule .
.TP
.I nop
.I nop
(do nothing).
.TP
.I bop
.I bop
(beginning of page).
.TP
.I eop
.I eop
(end of page).
.TP
.I [
Push.
.TP
.I ]
Pop.
.TP
.I "r1, r2, r3, r4"
Right, with (1,2,3,4)-byte argument.
.TP
.I "w0, w1, w2, w3, w4"
As in DVI.
.TP
.I "x0, x1, x2, x3, x4"
As in DVI.
.TP
.I "d1, d2, d3, d4"
Down, with (1,2,3,4)-byte argument.
.TP
.I "y0, y1, y2, y3, y4"
As in DVI.
.TP
.I "z0, z1, z2, z3, z4"
As in DVI.
.TP
.I fn
.I fnt_num
(set current font to font number in 0 to 63).
.TP
.I "f1, f2, f3, f4"
.I fnt
(set current font to (1,2,3,4)-byte font number).
.TP
.I special
.I xxx
(special commands with (1,2,3,4)-byte string length).
.TP
.I fd
.I fnt_def
(assign a number to a named font).
.TP
.I pre
Preamble.
.TP
.I post
.I post
(begin postamble).
.TP
.I post_post
.I post_post
(end postamble).
.TP
.I opcode
Undefined DVI command (250 to 255).
.\"======================================================================
.SH "SAMPLE DTL FILE"
The following 2-line \*(Te\& file
.RS
.nf
Hello.
\ebye
.fi
.RE
when processed with the commands
.RS
.nf
tex hello.tex
dv2dt hello.dvi hello.dtl
.fi
.RE
produces this DTL file:
.RS
.nf
variety sequences-6
pre 2 25400000 473628672 1000 27 ' TeX output 1995.03.02:2334'
bop 1 0 0 0 0 0 0 0 0 0 -1
[
d3 -917504
]
d4 42152922
[
d4 -41497562
[
r3 1310720
fd1 0 11374260171 655360 655360 0 5 '' 'cmr10'
fn0
(Hello.)
]
]
d3 1572864
[
r4 15229091
(1)
]
eop
post 42 25400000 473628672 1000 43725786 30785863 2 1
fd1 0 11374260171 655360 655360 0 5 'cmr10'
post_post 152 2 223 223 223 223
.fi
.RE
The command
.RS
.nf
dt2dv hello.dtl hello.dvi
.fi
.RE
will reconstruct the original DVI file.
.\"======================================================================
.SH "SEE ALSO"
.BR dt2dv (1),
.BR dvitype (1),
.BR tex (1).
.\"======================================================================
.SH FILES
.TP \w'\fI*.dvi\fP'u+3n
.I *.dvi
binary \*(Te\& DVI file.
.TP
.I *.dtl
text representation of a \*(Te\& DVI file in
.I "DVI Text Language"
format.
.\"======================================================================
.SH AUTHOR
.B dv2dt
and
.BR dt2dv (1)
were written by
.RS
.nf
Geoffrey Tobin
Department of Electronic Engineering
La Trobe University
Bundoora, Victoria 3083
Australia
Tel: +61 3 479 3736
FAX: +61 3 479 3025
Email: <G.Tobin@ee.latrobe.edu.au>
.fi
.RE
.PP
These manual pages were primarily written by
.RS
.nf
Nelson H. F. Beebe, Ph.D.
Center for Scientific Computing
Department of Mathematics
University of Utah
Salt Lake City, UT 84112
Tel: +1 801 581 5254
FAX: +1 801 581 4148
Email: <beebe@math.utah.edu>
.fi
.RE
.\"==============================[The End]==============================

159
3rdparty/dtl/dvi.doc vendored Normal file
View File

@ -0,0 +1,159 @@
This file is public domain.
Originally written 1995, Geoffrey Tobin.
The author has expressed the hope that any modification will retain enough content to remain useful. He would also appreciate being acknowledged as the original author in the documentation.
This declaration added 2008/11/14 by Clea F. Rees with the permission of Geoffrey Tobin.
``dvi.doc''
Mon 27 Feb 1995
Geoffrey Tobin
Description of the DVI file structure.
--------------------------------------
Reference:
----------
CTAN: dviware/driv-standard/level-0/dvistd0.tex
"The DVI Driver Standard, Level 0",
by The TUG DVI Driver Standards Committee (now defunct)
chaired by Joachim Schrod.
Appendix A, "Device-Independent File Format",
section A.2, "Summary of DVI commands".
DVI Commands
------------
Listed in the free format:
"Opcode Symbol Parameter[Signed? Bytes] ... Action".
0 set_char_0 - set character 0 from current font
...
127 set_char_127 - set character 127 from current font
128 set1 c[1] - set 1-byte unsigned character (uchar) number c
129 set2 c[2] - set 2-byte uchar number c
130 set3 c[3] - set 3-byte uchar number c
131 set4 c[+4] - set 4-byte signed character (schar) number c
132 set_rule a[+4] b[+4] - set rule, height a, width b
133 put1 c[1] - put 1-byte uchar c
134 put2 c[2] - put 2-byte uchar
135 put3 c[3] - put 3-byte uchar
136 put4 c[+4] - put 4-byte schar
137 put_rule a[+4] b[+4] - put rule, height a, width b
138 nop - do nothing
139 bop c0[+4] ... c9[+4] p[+4] - beginning of page
140 eop - end of page
141 push - push (h,v,w,x,y,z) onto stack
142 pop - pop (h,v,w,x,y,z) from stack
143 right1 b[+1] - move right b units
144 right2 b[+2] - move right b units
145 right3 b[+3] - move right b units
146 right4 b[+4] - move right b units
147 w0 - move right w units
148 w1 b[+1] - move right b units, and set w = b
149 w2 b[+2] - move right b units, and set w = b
150 w3 b[+3] - move right b units, and set w = b
151 w4 b[+4] - move right b units, and set w = b
152 x0 - move right x units
153 x1 b[+1] - move right b units, and set x = b
154 x2 b[+2] - move right b units, and set x = b
155 x3 b[+3] - move right b units, and set x = b
156 x4 b[+4] - move right b units, and set x = b
157 down1 a[+1] - move down a units
158 down2 a[+2] - move down a units
159 down3 a[+3] - move down a units
160 down4 a[+4] - move down a units
161 y0 - move right y units
162 y1 a[+1] - move right a units, and set y = a
163 y2 a[+2] - move right a units, and set y = a
164 y3 a[+3] - move right a units, and set y = a
165 y4 a[+4] - move right a units, and set y = a
166 z0 - move right z units
167 z1 a[+1] - move right a units, and set z = a
168 z2 a[+2] - move right a units, and set z = a
169 z3 a[+3] - move right a units, and set z = a
170 z4 a[+4] - move right a units, and set z = a
171 fnt_num_0 - set current font number (f) = 0
...
234 fnt_num_63 - set f = 63
235 fnt1 k[1] - set f = k
236 fnt2 k[2] - set f = k
237 fnt3 k[3] - set f = k
238 fnt4 k[+4] - set f = k
239 xxx1 k[1] x[k] - special string x with k bytes
240 xxx2 k[2] x[k] - special string x with k bytes
241 xxx3 k[3] x[k] - special string x with k bytes
242 xxx4 k[4] x[k] - special string x with (unsigned) k bytes
243 fnt_def1 k[1] c[4] s[4] d[4] a[1] l[1] n[a+l] - define font k
244 fnt_def2 k[2] c[4] s[4] d[4] a[1] l[1] n[a+l] - define font k
245 fnt_def3 k[3] c[4] s[4] d[4] a[1] l[1] n[a+l] - define font k
246 fnt_def4 k[+4] c[4] s[4] d[4] a[1] l[1] n[a+l] - define font k
247 pre i[1] num[4] den[4] mag[4] k[1] x[k] - begin preamble
248 post p[4] num[4] den[4] mag[4] l[4] u[4] s[2] t[2] - begin postamble
249 post_post q[4] i[1] 223 ... 223 - end postamble
250 - undefined
...
255 - undefined
In bop:
c0[+4] ... c9[+4] = page counters, \`a la TeX.
p[+4] = pointer to previous bop (its byte address); first bop has p = -1 .
In the font definitions:
c[4] = check sum for TFM file.
s[4] = scale factor, in DVI units.
d[4] = design size, in DVI units.
a[1] = length of the "area" or directory.
l[1] = length of the font name.
n[a+l] = area and font name string(s).
In the preamble:
i[1] = DVI format ID = 2, except TeX-XeT has 3.
num[4] = numerator of 100 nm / DVI unit.
den[4] = denominator of 100 nm / DVI unit.
mag[4] = 1000 * magnification.
k[1] = comment length.
x[k] = comment string.
In the postamble:
p[4] = pointer to final bop.
num[4], den[4], mag[4] = duplicates of values in preamble.
l[4] = height-plus-depth of tallest page, in DVI units.
u[4] = width of widest page, in DVI units.
s[2] = maximum stack depth needed to process this DVI file.
t[2] = total number of pages (bop commands) present.
In the post-postamble:
q[4] = pointer to the "post" command that started the postamble.
i[1] = DVI format ID, as in the preamble.
223 ... 223 = at least four "223" bytes.
---------------
EOF ``dvi.doc''
---------------

3854
3rdparty/dtl/edited.txt vendored Normal file

File diff suppressed because it is too large Load Diff

237
3rdparty/dtl/example.tex vendored Normal file
View File

@ -0,0 +1,237 @@
% This file is public domain.
% Originally written 1995, Geoffrey Tobin.
% The author has expressed the hope that any modification will retain enough content to remain useful. He would also appreciate being acknowledged as the original author in the documentation.
% This declaration added 2008/11/14 by Clea F. Rees with the permission of Geoffrey Tobin.
% This is the TeX source file for the "TeXnical Typesetting" document.
% Notice how you can put in comments? If TeX sees a % it simply ignores
% the rest of the line.
% A4 paper is 8.3in wide and 11.7in high; we set the page dimensions so that
% there are 1in margins all around:
\hsize 6.3in % page width
\vsize 9.7in % page height
\parskip 8pt plus 2pt minus 1pt % glue before a paragraph
% Define a few extra fonts for later use:
\font\bigrm=cmr10 scaled\magstep4 % big version of the standard roman font
\font\ninerm=cmr9 % 9pt roman
\font\fiverm=cmr5 % 5pt roman
\font\sm=cmcsc10 % caps and small caps
\font\ss=cmss10 % sans serif
% Here's a macro that we'll use to produce all subheadings:
\def\subhead#1{\bigskip % extra glue before subheading
\noindent{\bf #1}\par % unindented boldface subheading
\nobreak} % prevent a page break after subheading
\centerline{\bigrm \TeX nical Typesetting}
\vskip 2.5cm % dimensions can be metric
\subhead{What is \TeX?}
\TeX\ (pronounced ``teck'') is a computerized typesetting system developed by
Donald Knuth and others at Stanford University. It is used to create
high-quality documents, particularly those containing mathematics.
The name \TeX\ is an uppercase form of the Greek letters $\tau\epsilon\chi$,
the first three letters of a Greek word meaning {\sl art} as well as
{\sl technology}.
The lowering of the ``E'' is a reminder that \TeX\ is about typesetting,
which can be thought of as the next stage beyond word processing.
On devices where such lowering is difficult or impossible you may see \TeX\
written as {\tt TeX}.
% the above blank line ends the first paragraph
Most word processors allow you to
create and modify a document interactively --- what
you see on the screen is usually what your output will look like.
\TeX\ does {\it not} work in this way.
Like other typesetting systems (such as SCRIBE and
{\sl troff\/}), \TeX\ is known as a ``document compiler''. Using your
favourite text editor you need to create a file containing the
text of your manuscript along with the \TeX\ typesetting commands.
\TeX\ gives you the ability to produce printed matter with a quality
matching that found in books, depending on the output device.
Adelaide University has an {\sm imagen} laser printer
with a resolution of 240 dots per inch.
This publication shows both the capabilities of \TeX\ and
the output quality of the laser printer.
\subhead{Fonts}
One of the more obvious advantages of \TeX\ is the large range of fonts from
which you can choose. A font is a collection of characters each having a
similar size and style. Some of the fonts currently available include:
$$ % enter display math mode just to get space above and below \line
\line
{\hfil % infinitely stretchable glue
\rm roman\hfil \sl slanted\hfil \it italic\hfil \bf boldface\hfil
\tt typewriter\hfil \ss sans serif\hfil \sm small caps\hfil
} % take care to ensure each { has a matching }
$$
Many of these also come in a variety of sizes:
$$
\centerline{{\bigrm from the very big},~ % extra space after comma
{\ninerm to the very small},~
{\fiverm to the ridiculous}.}
$$
Apart from a large selection of mathematical symbols,
many special characters and accents are available:
$$
\vbox
{\tabskip 10pt plus 1fil % glue before and after all columns
\halign to\hsize
{& \hfil#\hfil\cr % specify a variable number of centred columns
\copyright& \it\$& \S& \P& \dag& \ddag&
$\circ$& $\bigcirc$& % some symbols must be accessed from math mode
$\leftarrow$& $\rightarrow$& $\triangle$& $\clubsuit$&
\`a& \'e& \c c& \^o& \"u\cr
}
}
$$
\TeX\ does a few subtle things automatically.
Certain sequences of characters in your text will
be replaced by {\sl ligatures} in the printed output (consider the ``{\tt ffi}''
in ``difficult''), while other pairs of characters need to be {\sl kerned}
(e.g., the ``o'' and ``x'' in ``box'' look better if they are moved closer
together). The range and quality of fonts available will continue to improve.
\subhead{Mathematics}
A major design goal of \TeX\ was to simplify the task of typesetting
mathematics --- and to do it properly. Mathematicians will be pleasantly
surprised at the ease with which formulae and expressions can be created;
from simple in-line equations
such as $e^{i\pi}=-1$ and $f_{n+2}=f_{n+1}+f_n$, to more extravagant displays:
$$
\sum_{k\ge1} \sqrt{x_k-\ln k}\quad\ne\quad
\int_{0}^\infty {e^{-x^3}+\sqrt{x} \over \left(123-x\right)^3} \,dx
$$
\TeX\ looks after most of the nitty gritty details, such as spacing things
correctly and choosing the right sizes for superscripts, parentheses,
square root signs etc. (The discoverer of the above relation wishes to
remain anonymous.)
\subhead{Alignment}
The preparation of tabular material such as in lists and matrices can be a
tedious job for a person armed only with a typewriter and a bottle of
correction fluid. With a little help from \TeX, computers can make it so
much easier:
$$
\vcenter % a vertically centred \vbox
{\tabskip 0pt % no space before column 1
\halign to 3.5in % width of table
{\strut#& % col 1 is a strut
\vrule#\tabskip .5em plus2em& % col 2 is a vrule; also set col spacing
#\hfil& % col 3 is left justified
\vrule#& % col 4 is a vrule
\hfil#\hfil& % col 5 is centred
\vrule#& % col 6 is a vrule
\hfil#& % col 7 is right justified
\vrule#\tabskip 0pt % col 8 is a vrule; no space after it
\cr % end of the preamble
\noalign{\hrule}
& & \multispan5 \hfil Oldest players to represent\hfil& \cr
& & \multispan5 \hfil England in a Test Match\hfil& \cr
\noalign{\hrule}
& & \omit\hfil Name\hfil& & % \omit ignores template in preamble
\omit\hfil Age\hfil& &
\omit\hfil Versus\hfil& \cr
\noalign{\hrule}
& & W.Rhodes& & 52y 165d& & West Indies, 1930& \cr
\noalign{\hrule}
& & W.G.Grace& & 50y 320d& & Australia, 1899& \cr
\noalign{\hrule}
& & G.Gunn& & 50y 303d& & West Indies, 1929& \cr
\noalign{\hrule}
& & J.Southerton{\ninerm*}& & 49y 139d& & Australia, 1877& \cr
\noalign{\hrule\smallskip}
& \multispan7\ninerm* (This was actually his Test debut.)\hfil \cr
}
}
\hskip .5in % space between table and matrix
A=\pmatrix % parenthesized matrix
{a_{11}& a_{12}& \ldots& a_{1n}\cr
a_{21}& a_{22}& \ldots& a_{2n}\cr
\vdots& \vdots& \ddots& \vdots\cr
a_{m1}& a_{m2}& \ldots& a_{mn}\cr
}
$$
\vskip -\the\belowdisplayskip % avoid too much space below display
\subhead{Other features}
Space does not permit examples of all the things \TeX\ can do. Here are some
more features you might like to know about:
\item{$\bullet$}
Multi-column output can be generated.
{\parskip=0pt % temporarily turn off the skipping between paragraphs
\item{$\bullet$}
\TeX\ has a very sophisticated paragraph building algorithm and rarely needs
to resort to hyphenation. Paragraphs can be indented and shaped in many
different ways.
\item{$\bullet$}
Automatic insertion of footnotes,\footnote{\dag}{\ninerm Here is
a footnote.} running heads, page numbers etc.
\item{$\bullet$}
\TeX\ makes provision for generating a table of contents, a bibliography, even
an index. Automatic section numbering and cross referencing are also possible.
\item{$\bullet$}
A powerful macro facility is built into \TeX. This lets you do some very
useful things, like creating an abbreviation for a commonly used phrase, or
defining a new command that will have varying effects depending on the
parameters it is given. A macro package can enhance \TeX\ by making it much
easier to generate a document in a predefined format.
\par % end the last paragraph BEFORE ending the group
} % \parskip will now revert to its previous value
\subhead{What CAN'T \TeX\ do?}
Complex graphics such as diagrams and illustrations pose
a major problem --- at the moment you have to leave an appropriate amount of
blank space and paste them in later.
Graphic facilities are the subject of current research.
\subhead{\TeX\ and VAX/VMS}
The \TeX\ source file used to generate this document is available for
inspection on any VAX node that has \TeX ---
just type `{\tt scroll tex\char'137 inputs:example.tex}'.
A few steps are needed to print such a file:
\item{(1)}
Type `{\tt tex example}' to ``compile'' the file.
(\TeX\ looks for a {\tt .tex} file by default. If it can't find the given
file in your current directory it will look in {\tt tex\char'137 inputs}.)
Two new files will be created in your current directory:
{\tt example.dvi} and {\tt example.lis}.
The former is a device independent description of the document;
the latter is simply a log of the \TeX\ run.
{\parskip=0pt % temporarily turn off \parskip
\item{(2)}
Type `{\tt dvitovdu example}' to preview the document on a terminal screen.
This program can be used to detect a variety of formatting problems,
saving both time and paper.
\item{(3)}
Type `{\tt imprint example}' to print the document.
(Note that the DVIto\kern-.15em VDU and IMPRINT commands
accept a {\tt .dvi} file by default).
} % restore \parskip
Detailed help on all these commands is available on-line --- try typing
`{\tt help tex}' to get started.
\bye

7
3rdparty/dtl/hello.tex vendored Normal file
View File

@ -0,0 +1,7 @@
% This file is public domain.
% Originally written 1995, Geoffrey Tobin.
% The author has expressed the hope that any modification will retain enough content to remain useful. He would also appreciate being acknowledged as the original author in the documentation.
% This declaration added 2008/11/14 by Clea F. Rees with the permission of Geoffrey Tobin.
Hello.
\bye

41
3rdparty/dtl/man2ps vendored Normal file
View File

@ -0,0 +1,41 @@
#!/bin/sh
# This file is public domain.
# Originally written 1995, Geoffrey Tobin.
# The author has expressed the hope that any modification will retain enough content to remain useful. He would also appreciate being acknowledged as the original author in the documentation.
# This declaration added 2008/11/14 by Clea F. Rees with the permission of Geoffrey Tobin.
#
# Filter for converting "troff -mxx" to PostScript. This script is
# normally linked to the names man2ps, ms2ps, me2ps, and mm2ps.
#
# Usage:
# man2ps [<] cc.1 >cc.ps
# me2ps [<] foo.me >foo.ps
# mm2ps [<] foo.mm >foo.ps
# ms2ps [<] foo.ms >foo.ps
#
# [08-May-1993]
# Choose a troff format according to the scrip name.
case `basename $0` in
man*) FORMAT=-man ;;
me*) FORMAT=-me ;;
mm*) FORMAT=-mm ;;
ms*) FORMAT=-ms ;;
*) echo "Unknown troff format:" ; exit 1 ;;
esac
# We can use either GNU groff or Sun Solaris troff + dpost
if [ -x /usr/local/bin/groff ]
then # GNU groff
TROFF="groff $FORMAT"
TROFF2PS="cat"
elif [ -x /usr/lib/lp/postscript/dpost ]
then # Solaris 2.1
TROFF="troff $FORMAT"
TROFF2PS="/usr/lib/lp/postscript/dpost"
else
echo "Cannot find troff-to-PostScript filter"
exit 1
fi
tbl $* | eqn | $TROFF | $TROFF2PS

284
3rdparty/dtl/tripvdu.tex vendored Normal file
View File

@ -0,0 +1,284 @@
% This file is public domain.
% Originally written 1995, Geoffrey Tobin.
% The author has expressed the hope that any modification will retain enough content to remain useful. He would also appreciate being acknowledged as the original author in the documentation.
% This declaration added 2008/11/14 by Clea F. Rees with the permission of Geoffrey Tobin.
% TeX source file for creating TRIPVDU.DVI, a torture file for DVItoVDU
% (using the same philosophy as Donald Knuth's torture test for TeX).
\nopagenumbers
\topskip 0pt
\parindent 0pt
\parskip 0pt
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% DVI page 1
% This page is completely empty but has some \special stuff.
\message{Empty page.}
\null
\special{DVItoVDU should warn user that it is ignoring this stuff.}
\special{And this.}
\vfil\eject
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% DVI page 2
% This page has 1 black pixel at (0,0).
\message{1 black pixel at (0,0).}
\hrule height 1sp width 1sp depth 0sp
\vfil\eject
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% DVI page 3
% This page will fill an A4 sheet with black pixels, assuming A4 paper is
% 8.3in by 11.7in and (0,0) is 1in from the top and left edges.
\message{A4 sheet full of black pixels.}
{% change page size and location temporarily
\hsize 10in
\vsize 12in
\hoffset -1in
\voffset -1in
% Because ref pts of rules are at BOTTOM left corner we first need to output
% a rule that will guarantee Minv = -1in, then output the large rule with
% slightly less than A4 height.
\hrule height 1sp width 8.299in depth 0sp
\hrule height 11.695in width 8.299in depth 0sp
\vfil\eject
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% DVI page 4
% This page is 1 pixel wider than page 3.
% DVItoVDU should detect that page is too wide for A4 paper.
\message{As above but 1 pixel too wide.}
\hrule height 1sp width 8.301in depth 0sp
\hrule height 11.695in width 8.301in depth 0sp
\vfil\eject
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% DVI page 5
% This page is 1 pixel longer than page 3.
% DVItoVDU should detect that page is too low for A4 paper.
\message{As above but 1 pixel too low.}
\hrule height 11.701in width 8.299in depth 0sp
\vfil\eject
}% reset page size and location
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% DVI page 6
% This page has a rulelist with a full ruletable (= 300 rules).
% Note that DVItoVDU does not impose any limits
% on the number of rules or characters in a page. Pages 6 to 9
% test the list manipulating code in DVIReader and DVItoVDU.
\message{Page with ruletablesize rules.}
\newcount\temp
\temp=300
\loop\ifnum\temp>0
\hrule height 1sp width \hsize % 1 pixel high
\vfil
\advance\temp by -1
\repeat
\vfil\eject
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% DVI page 7
% This page has ruletablesize+1 rules (so rulelist has 2 nodes).
\message{Page with ruletablesize+1 rules.}
\temp=301
\loop\ifnum\temp>0
\hrule height 1sp width \hsize % 1 pixel high
\vfil
\advance\temp by -1
\repeat
\vfil\eject
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% DVI page 8
% This page has a charlist with a full chartable (= 3000 characters).
\message{Page with chartablesize characters from one font.}
\font\small=cmr5
{\small \offinterlineskip
\temp=30
\loop\ifnum\temp>0
\leftline{iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii
iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii} % 100 chars
\advance\temp by -1
\repeat
}
\vfil\eject
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% DVI page 9
% This page has chartablesize+1 characters (so charlist has 2 nodes).
\message{Page with chartablesize+1 characters from one font.}
{\small \offinterlineskip
\temp=30
\loop\ifnum\temp>0
\leftline{iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii
iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii} % 100 chars
\advance\temp by -1
\repeat
\leftline{i} % the extra character
}
\vfil\eject
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% DVI page 10
\message{Multiple TeX page counters.}
\footline={\hss\tenrm\folio\hss} % turn on page numbers
\pageno=0
\count1=1 \count2=2 \count3=3 \count4=4 \count9=9
\noindent
This is \TeX\ page [0.1.2.3.4.....9].
\vfil\eject
\count1=0 \count2=0 \count3=0 \count4=0 \count9=0 % reset TeX counters
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% DVI page 11
\message{Negative TeX page.}
\pageno=-11
\noindent
This is \TeX\ page [-11].
\vfil\eject
\pageno=12 % DVI page = TeX page again
\nopagenumbers % turn off page numbers again
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% DVI page 12
% This page has characters from many fonts.
% Note that the page is off the right edge of A4 paper.
\message{Page with characters from many fonts.}
% avoid redefining plain TeX's \i, \j etc.
\font\Fb=cmr5
\font\Fc=cmr5 scaled\magstep5
\font\Fe=cmr10 scaled\magstep5
\font\Fg=cmbx10
\font\Fh=cmbx10 scaled\magstep5
\font\Fj=cmsl10
\font\Fk=cmsl10 scaled\magstep5
\font\Fm=cmtt10
\font\Fn=cmtt10 scaled\magstep5
\font\Fo=cmss10
\font\Fp=cmcsc10
\font\Fq=cmdunh10
\leftline{\Fb These characters are from CMR5 at mag 1000.}
\leftline{\Fc These characters are from CMR5 at mag 2488.}
\leftline{\tenrm These characters are from CMR10 at mag 1000.}
\leftline{\Fe These characters are from CMR10 at mag 2488.}
\leftline{\Fg These characters are from CMBX10 at mag 1000.}
\leftline{\Fh These characters are from CMBX10 at mag 2488.}
\leftline{\Fj These characters are from CMSL10 at mag 1000.}
\leftline{\Fk These characters are from CMSL10 at mag 2488.}
\leftline{\Fm These characters are from CMTT10 at mag 1000.}
\leftline{\Fn These characters are from CMTT10 at mag 2488.}
\leftline{\Fo These characters are from CMSS10 at mag 1000.}
\leftline{\Fp These characters are from CMCSC10 at mag 1000.}
\leftline{\Fq These characters are from CMDUNH10 at mag 1000.}
\vfil\eject
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% DVI page 13
% This page has characters from many fonts, some of which have no corresponding
% PXL file. DVItoVDU should warn user about non-existent font files and
% continue as best it can by loading dummy font info.
% Note that the page is off the right edge of A4 paper.
\message{Page with characters from fonts at unknown magnifications.}
% PXL files do not exist at the requested magnifications:
\font\Fr=cmr5 scaled 500
\font\Fs=cmr5 scaled 3000
\font\Ft=cmr10 scaled 200
\font\Fu=cmr10 scaled 5000
\font\Fv=cmsl10 scaled 49
\font\Fw=cmsl10 scaled 10000
\leftline{\Fr CMR5 at mag 500 does not exist.}
\leftline{\Fb These characters are from CMR5 at mag 1000.}
\leftline{\Fs CMR5 at mag 3000 does not exist.}
\leftline{\Ft CMR10 at mag 200 does not exist.}
\leftline{\tenrm These characters are from CMR10 at mag 1000.}
\leftline{\Fu CMR10 at mag 5000 does not exist.}
\leftline{\Fv CMSL10 at mag 49 does not exist.}
\leftline{\Fj These characters are from CMSL10 at mag 1000.}
\leftline{\Fw CMSL10 at mag 10000 does not exist.}
\vfil\eject
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% DVI page 14
% This page has a paragraph illustrating most of the characters from the
% standard roman TeX text font.
\message{Standard paragraph.}
\rm
Our task is to create a paragraph illustrating what a typical piece of text
looks like in the standard \TeX\ font. It should be stressed that not all
\TeX\ fonts can be used for typesetting text. We need to show most of the
characters in this font---for instance, something like ``the quick brown fox
jumps over a lazy dog'' would use all the lower-case letters. Hmmm \dots\
how about ``THE QUICK BROWN FOX JUMPS OVER 9876543210 LAZY DOGS'' to make
sure we show all the upper-case letters and digits? Such a paragraph would
hardly be typical! Then there's ligatures (try and fit in words like
fluffy, waffle, firefly, difficult) and examples of kerning (boxer, cooked,
vowel). Not to mention the various accents and other special letters:
prot\'eg\'e, r\^ole, na\"\i ve, \AE sop's \OE vres en fran\c cais.
But how do we put all this stuff into a paragraph that makes sense!?
\vfil\eject
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% DVI page 15
\message{Page in bottom half of A4 paper.}
\null\vfil
\centerline{Page in bottom half of A4 paper.}
\eject
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% DVI page 16
\message{Page completely above left of A4 paper.}
\voffset -3in
\hoffset -9in
\leftline{Page completely above left of A4 paper.}
\vfil\eject
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% DVI page 17
\message{Page completely below right of A4 paper.}
\voffset 3in
\hoffset 9in
\null\vfil
\rightline{Page completely below right of A4 paper.}
\eject
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% DVI page 18
\message{Page beyond all edges of A4 paper.}
\voffset -3in
\hoffset -3in
\vsize 15in
\hsize 15in
\line{Page beyond all edges of A4 paper.\hfil
Page beyond all edges of A4 paper.}
\vfil
\line{Page beyond all edges of A4 paper.\hfil
Page beyond all edges of A4 paper.}
\eject
\voffset 0in \hoffset 0in % offsets back to normal
\bye