summaryrefslogtreecommitdiff
path: root/dviware/dtl/dvi.doc
blob: 4594bf728c4c000e6a120e622f87ed6913effb05 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
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''
---------------