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
|
/* dvipos-20070107
Copyright (C) 2003 by Jin-Hwan <chofchof@ktug.or.kr>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
#ifndef _DVICORE_H_
#define _DVICORE_H_
#include "utils.h"
/* DVI opcodes */
#define SET_CHAR_0 0
#define SET_CHAR_1 1
/* etc. */
#define SET_CHAR_127 127
#define SET1 128 /* Typesets its single operand between 128 and 255 */
#define SET2 129 /* Typesets its single two byte unsigned operand */
#define SET3 130 /* Typesets its single three byte unsigned operand */
#define SET4 131 /* Typesets its single four byte unsigned operand */
/* Sets a rule of height param1(four bytes) and width param2(four bytes)
* These are *signed*. Nothing typeset for nonpositive values
* However, negative value *do* change current point */
#define SET_RULE 132
#define PUT1 133 /* Like SET1, but point doesn't change */
#define PUT2 134 /* Like SET2 */
#define PUT3 135 /* Like SET3 */
#define PUT4 136 /* Like SET4 */
#define PUT_RULE 137 /* Like SET_RULE */
#define NOP 138
/* Followed by 10 four byte count registers (signed?).
* Last parameter points to previous BOP (backward linked, first BOP has -1).
* BOP clears stack and resets current point. */
#define BOP 139
#define EOP 140
#define PUSH 141 /* Pushes h,v,w,x,y,z */
#define POP 142 /* Opposite of push */
#define RIGHT1 143 /* Move right by one byte signed operand */
#define RIGHT2 144 /* Move right by two byte signed operand */
#define RIGHT3 145 /* Move right by three byte signed operand */
#define RIGHT4 146 /* Move right by four byte signed operand */
#define W0 147 /* Move right w */
#define W1 148 /* w single byte signed operand. Move right by same amount */
#define W2 149 /* Same as W1 with two byte signed operand */
#define W3 150 /* Three byte signed operand */
#define W4 151 /* Four byte signed operand */
#define X0 152 /* Move right x */
#define X1 153 /* Like W1 */
#define X2 154 /* Like W2 */
#define X3 155 /* Like W3 */
#define X4 156 /* Like W4 */
#define DOWN1 157 /* Move down by one byte signed operand */
#define DOWN2 158 /* Two byte signed operand */
#define DOWN3 159 /* Three byte signed operand */
#define DOWN4 160 /* Four byte signed operand */
#define Y0 161 /* Move down by y */
#define Y1 162 /* Move down by one byte signed operand, which replaces Y */
#define Y2 163 /* Two byte signed operand */
#define Y3 164 /* Three byte signed operand */
#define Y4 165 /* Four byte signed operand */
#define Z0 166 /* Like Y0, but use z */
#define Z1 167 /* Like Y1 */
#define Z2 168 /* Like Y2 */
#define Z3 169 /* Like Y3 */
#define Z4 170 /* Like Y4 */
#define FNT_NUM_0 171 /* Switch to font 0 */
#define FNT_NUM_1 172 /* Switch to font 1 */
/* etc. */
#define FNT_NUM_63 234 /* Switch to font 63 */
/* Switch to font described by single byte unsigned operand */
#define FNT1 235
/* Switch to font described by two byte unsigned operand */
#define FNT2 236
/* Switch to font described by three byte unsigned operand */
#define FNT3 237
/* Four byte operator (Knuth says signed, but what would be the point?) */
#define FNT4 238
/* Special. Operand is one byte length. Special follows immediately */
#define XXX1 239
/* Two byte operand */
#define XXX2 240
/* Three byte operand */
#define XXX3 241
/* Four byte operand (Knuth says TeX uses only XXX1 and XXX4 */
#define XXX4 242
/* One byte font number, four byte checksum, four byte magnified size
* (DVI units), four byte designed size, single byte directory length,
* single byte name length, followed by complete name (area+name) */
#define FNT_DEF1 243
#define FNT_DEF2 244 /* Same for two byte font number */
#define FNT_DEF3 245 /* Same for three byte font number */
#define FNT_DEF4 246 /* Four byte font number (Knuth says signed) */
/* Preamble: one byte DVI version (should be 2)
* four byte unsigned numerator
* four byte unsigned denominator -- one DVI unit = den/num*10^(-7) m
* four byte magnification (multiplied by 1000)
* one byte unsigned comment length followed by comment. */
#define PRE 247
/* Postamble: similar to preamble
* four byte pointer to final bop
* four byte numerator
* four byte denominator
* four byte mag
* four byte maximum height (signed?)
* four byte maximum width
* two byte max stack depth required to process file
* two byte number of pages */
#define POST 248
/* End of postamble:
* four byte pointer to POST command
* Version byte (same as preamble)
* Padded by four or more 223's to the end of the file. */
#define POST_POST 249
#define DIR 255 /* Ascii pTeX DIR command */
#define DVI_ID 2 /* ID Byte for current DVI file */
#define DVIV_ID 3 /* with Ascii pTeX VW mode extension */
#define PADDING 223
#define MAX_FONTS_STEP 10
extern int dvi_pages;
extern void dvi_init (int m, int r);
extern void dvi_close (void);
extern void dvi_do_page (int n);
#endif /* _DVICORE_H_ */
|