OSDN Git Service

updating codes.
[putex/putex.git] / src / texsourc / texd.h
1 #include "hpdf.h"
2 #define show_line(str,flag) fputs(str,stdout)
3 #define show_char(chr) putc(chr, stdout)
4 extern char log_line[];
5 /* *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** */
6 #ifdef MSDOS
7   #define ALLOCATEINI        /* allocate iniTeX (550 k) trie_c, trie_o, trie_l, trie_r, trie_hash, trie_taken */
8   #define ALLOCATEMAIN       /* allocate main memory for TeX (2 Meg) zmem = zzzaa */
9   #define ALLOCATEFONT       /* allocate font_info (800 k) (dynamically now) */
10   #define ALLOCATETRIES      /* allocate hyphenation trie stuff (270 k) trie_trl, trie_tro, trie_trc */
11   #define ALLOCATEHYPHEN     /* allocate hyphenation exception tables */
12   #define VARIABLETRIESIZE   /* allow trie_size to be variable */
13   #define ALLOCATESTRING     /* allocate strings and string pointers (184 k)str_pool & str_start */
14   #define ALLOCATESAVESTACK  /* experiment to dynamically deal with save_stack 99/Jan/4 */
15   #define ALLOCATEINPUTSTACK /* experiment to dynamically deal with input_stack 99/Jan/21 */
16   #define ALLOCATENESTSTACK  /* experiment to dynamically deal with nest_stack 99/Jan/21 */
17   #define ALLOCATEPARAMSTACK /* experiment to dynamically deal with param_stack 99/Jan/21 */
18   #define ALLOCATEBUFFER     /* experiment to dynamically deal with input buffer 99/Jan/22 */
19   /* NOT *//* allow increasing high area of main memory */ /* FLUSH */
20   #undef ALLOCATEHIGH
21   /* NOT *//* allow increasing low area of main memory */ /* FLUSH */
22   #undef ALLOCATELOW
23   /* NOT */ /* allocate hash table (zzzae) (78k) */
24   #undef ALLOCATEHASH
25   /* NOT */ /* allocate dvi_buf (16k) */ /* changed in 1.3 1996/Jan/18 */
26   /* #define ALLOCATEDVIBUF */
27   #undef ALLOCATEDVIBUF
28   /* increase fixed allocations */
29   #define INCREASEFIXED
30   /* increase number of fonts - quarterword 16 bit - max_quarterword limit */
31   /* there may still be some bugs with this however ... also may slow down */
32   /* also: should split use of quarterword for (i) font from (ii) char */
33   /* for example, xeq_level ? hyphenation trie_trc ? */
34   #define INCREASEFONTS
35   /* NOT NOT *//* allocate eqtb (108k) */ /* changed in 1.3 1996/Jan/18 */
36   #undef ALLOCATEZEQTB
37   /* make font_info array fmemoryword == 32 bit instead of memory_word = 64 bit */
38   #define SHORTFONTINFO
39   /* make hash table htwohalves == 32 bit instead of twohalves == 64 bit */
40   // #define SHORTHASH  --- changed 2000/Feb/22 increase max_strings from 64K to 512M
41   #undef SHORTHASH
42   /* increase trie_op_size from 751 to 3001 96/Oct/12 */
43   #define INCREASETRIEOP
44 #endif
45
46 /* With old PharLap linker it was important to avoid large fixed allocation */
47 /* Now may be better to use fixed arrays rather than allocate them */
48 /* hence ALLOCATEZQTB, ALLOCATEDVIBUF and ALLOCATEMINOR are NOT defined */
49
50 /* *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** */
51
52 #undef  TRIP
53 #undef  TRAP
54 #define STAT
55 #undef  DEBUG
56 #include "texmf.h"
57
58 /* *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** */
59
60 #define MAXLINE 256         // for log_line buffer
61
62 /* #define max_halfword 65535L  */  /* for 32 bit memory word */
63 /* #define max_halfword 262143L */  /* for 36 bit memory word */
64 #define min_halfword -2147483647L   /* for 64 bit memory word (signed) */
65 #define max_halfword  2147483647L   /* for 64 bit memory word (signed) */
66
67 #define block_size 1000 /* block_size for variable length node alloc */
68
69 /* min_quarterword assumed 0 -- i.e. we use unsigned types for quarterword */
70 #define min_quarterword 0
71 #ifdef INCREASEFONTS
72   #define max_quarterword 65535L
73 #else
74   #define max_quarterword 255
75 #endif
76
77 /* #define default_mem_top 262140L */ /* usual big TeX allocation 2 Meg bytes */
78 /* #define default_mem_top 131070L */ /* usual big TeX allocation 1 Meg bytes */
79 #define default_mem_top 65534L        /* usual small TeX allocation 0.5 Meg   */
80
81 /* mem_bot smallest index in mem array dumped by iniTeX mem_top >= mem_min */
82 #define mem_bot 0
83 /* mem_top largest index in mem array dumped by iniTeX mem_top <= mem_max */
84 #ifdef ALLOCATEMAIN
85   EXTERN integer mem_top;
86   #define max_mem_size (max_halfword / sizeof(memory_word) - 1)
87 #else
88   #define mem_top 262140L
89 #endif
90
91 /* *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** */
92 /* mem_max == mem_top in iniTeX, otherwise mem_max >= mem_top */
93 /* if ALLOCATEMAIN is true, then mem_max is a variable */
94 /* otherwise it is a pre-processor defined constant */
95 #ifdef ALLOCATEMAIN
96   EXTERN integer mem_max;
97 #else
98 /* #define mem_max 262140L */
99   #define mem_max mem_top
100 #endif
101
102 /* *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** */
103 /* if ALLOCATEMAIN is true, then mem_min is a variable */
104 /* otherwise it is a pre-processor defined constant */
105 /* mem_min == mem_bot in iniTeX, otherwise mem_min <= mem_bot */
106 #ifdef ALLOCATEMAIN
107   EXTERN integer mem_min;
108 #else
109   #define mem_min 0
110 #endif
111
112 /* *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** */
113
114 typedef unsigned char ASCII_code;
115 typedef unsigned short KANJI_code;
116 typedef unsigned char eight_bits;
117 typedef unsigned short sixteen_bits;
118 typedef integer pool_pointer;
119 typedef integer str_number;
120 typedef unsigned char packed_ASCII_code;
121 typedef integer scaled;
122 typedef integer nonnegative_integer;
123 typedef char small_number;
124
125 /* *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** */
126 /* buf_size is max size of input line and max size of csname               */
127 /* make sure its multiple of four bytes long                               */
128 /* want to increase this so it can handle whole paragraph imported from WP */
129 #ifdef INCREASEFIXED
130 /* #define buf_size 8192 */
131 /* #define buf_size 12000 */    /* 1996/Jan/17 */
132 /* #define buf_size 16384 */    /* 1998/June/30 */
133 /* #define buf_size 20000 */    /* 1999/Jan/7 */
134 #else
135 /* #define buf_size 3000  */
136 #endif
137
138 #ifdef ALLOCATEBUFFER
139   #define initial_buf_size   1000
140   #define increment_buf_size 2000
141   #define buf_size           2000000L /* arbitrary limit <= max_halfword */
142   EXTERN ASCII_code *        buffer;
143 #else
144   #define buf_size           20000 /* 1999/Jan/7 */
145   EXTERN ASCII_code          buffer[buf_size + 4]; /* padded out to ...  + 4 */
146 #endif
147 EXTERN integer first; 
148 EXTERN integer last; 
149 EXTERN integer max_buf_stack; 
150
151 #define error_line      79
152 #define half_error_line 50
153 #define max_print_line  79
154
155 /* *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** */
156 #ifdef INCREASEFIXED
157 /* maximum number of simultaneous input sources (?) */
158 /* #define stack_size 600 */    /* expanded again 1999/Jan/21 */
159 /* #define stack_size 800 */
160 /* maximum number of input files and insertions that can be going on */
161 /* #define max_in_open 15 */    /* for Y&Y TeX 1.2 */
162 /* #define max_in_open 31 */    /* 1996/Jan/17 */
163 /* #define max_in_open 63 */    /* 1996/Jan/18 */
164   #define max_in_open 127       /* 1996/Jan/20 - really ? */
165 /* save_size space for saving values outside of current group */
166 /* #define save_size 6000 */
167 /* #define save_size 8000 */    /* 1999/Jan/6 */
168 #else
169 /* *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** */
170 /* #define stack_size 300 */    /* Unix C version default */
171   #define max_in_open 15
172 /* #define save_size 1000 */    /* 3.14159 C version */
173 /* #define save_size 4000 */    /* 3.14159 C version */
174 #endif
175
176 /* *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** */
177 /* maximum internal font number - cannot be greated than max_quarter_word! */
178 #ifdef INCREASEFONTS
179   #define font_max 1023     /* 1996/Jan/17 */
180 #else
181   #define font_max 255
182 #endif
183
184 /* *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** */
185 /* free the limit on font memory ! */ /* (2^32 - 1) / sizeof(memory_word) */
186 #ifdef ALLOCATEFONT
187 /* #define font_mem_size 262140L */
188   #define font_mem_size (max_halfword / sizeof(memory_word) -1)
189 #else
190   #define font_mem_size 100000L
191 #endif
192
193 /* our real font_mem_size is 268435456 --- ridiculously large, of course */
194
195 /* *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** */
196
197 /* below is new dynamic allocation - bkph 93/Nov/28 */  /* enough for lplain */
198 #ifdef ALLOCATEFONT
199   #define initial_font_mem_size   20000
200   #define increment_font_mem_size 40000
201 #endif
202
203 /* *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** */
204 /* max_strings max number of strings */ /* (2^32 - 1) / sizeof (integer) */
205 #ifdef ALLOCATESTRING
206 /* #define max_strings 262140L */
207 // #define max_strings (max_halfword / sizeof(integer) -1)
208   #define max_strings (max_halfword / sizeof(pool_pointer) - 1)
209 /* #define pool_size 4032000L */
210   #define pool_size (max_halfword - 1)
211 /* #define stringmargin 32768L */
212   #define stringmargin 10000
213 #else
214 /* *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** */
215 /* #define max_strings 15000 */
216 #define max_strings 16384
217 #define pool_size 124000L
218 #endif
219 #define stringvacancies 100000L
220
221 /* *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** */
222 /* #if defined (ALLOCATEINITRIE) && defined (ALLOCATEHYPHEN) */
223 #ifdef VARIABLETRIESIZE
224   EXTERN integer trie_size;
225   #define default_trie_size 60000
226 #else
227   #define trie_size 30000     /* 3.14159 C version */
228 #endif
229
230 /* increase trieop to accomadate more hyphenation patterns 96/OCt/12 */
231
232 #ifdef INCREASETRIEOP
233   #define trie_op_size      3001
234   #define neg_trie_op_size -3001
235   #define min_trie_op       0
236   #define max_trie_op       1000
237 #else
238   #define trie_op_size      751
239   #define neg_trie_op_size -751
240   #define min_trie_op       0
241   #define max_trie_op       500
242 #endif
243
244 /* *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** */
245 /* dvi_buf_size must be multiple of 8 - half is written out at a time */
246 #ifdef ALLOCATEDVIBUF
247   #define default_dvi_buf_size 16384 
248 /* #define default_dvi_buf_size 32768 */    /* ? */
249   EXTERN int dvi_buf_size;
250 #else
251   #define dvi_buf_size 16384      /* 3.14159 C version */
252 /* #define dvi_buf_size 32768 */        /* ? */
253 #endif
254
255 /* *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** */
256 /* WARNING: increasing hash table for cs names is not trivial */
257 /* size of hash table for control sequence name  < (mem_max - mem_min) / 10 */
258 /* #define hash_size 9500 */
259 /* #define hash_size 25000 */   /* 96/Jan/10 */
260 #define hash_size 32768       /* 96/Jan/17 */
261 /* trick to try and get around eqtb_extra problem */
262 /* 1024 fonts = font_max + 2 */
263 /* #define hash_extra -256 */
264 #define hash_extra (255 - font_max)
265 /* hash prime about 85% of hash_size (+ hash_extra) */
266 /* #define hashprime 7919  */
267 /* #define hash_prime 21247 */    /* 96/Jan/10 */
268 #define hash_prime 27197      /* 96/Jan/17 */
269 /* *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** */
270
271 /* CONSTRAINT: reconcile increase font use by stealing from hash table ... */
272
273 /* Probably require eqtb_extra to be zero, so hash_extra = 255 - font_max */
274 #if (hash_extra != 255 - font_max)
275   #error ERROR: hash_extra not equal to (255 - font_max)
276 #endif
277
278 /* *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** */
279
280 /* some sanity check when using narrow hash table ... */
281
282 /* using SHORTHASH limits hash_size to be less than 65536 */
283 /* using SHORTHASH limits max_strings to be less than 65536 */
284 /* if you ever need more string pointers, then #undef SHORTHASH --- */
285 /* you'll use more memory (about 130k byte) and format file larger (8k) */
286
287 #ifdef SHORTHASH
288 /* can only do this if INCREASEFONTS defined up above ... */
289 #if (max_quarterword < 65535L)
290 #error ERROR: max_quarterword < 65535L
291 #endif
292 /* with narrowed hash table can only have 65535 string pointers */
293 /* #if (max_strings > max_quarterword) */ /* this test does not work */
294 #undef max_strings
295 #define max_strings max_quarterword
296 /* #endif */
297 /* with narrowed hash table can only have 65535 hash table entries */
298 #if (hash_size > max_quarterword)
299 #undef hash_size
300 #define hash_size max_quarterword
301 #endif
302 #endif /* end of if SHORTHASH */
303
304 /* NOTE: if you define/undefine SHORTFONT have to redo formats */
305
306 /* *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** */
307 #ifdef INCREASEFONTS
308   typedef unsigned short quarterword;
309 #else
310   typedef unsigned char quarterword;
311 #endif
312
313 /* possible alternative ? */ /* min_halfword = 0 and double max_halfword ? */
314 /* typedef unsigned long halfword; NO NO: since mem_min may be < 0 */
315 typedef integer halfword;
316 typedef char twochoices;
317 typedef char fourchoices;
318
319 #include "texmfmem.h"
320
321 typedef char glue_ord; 
322
323 typedef struct
324 {
325 /*  short mode_field;  */
326   int mode_field;
327   halfword head_field, tail_field;
328   integer pg_field, ml_field;
329   memory_word aux_field;
330 } list_state_record;
331
332 typedef char group_code;
333
334 typedef struct
335 {
336   quarterword state_field, index_field; 
337   halfword start_field, loc_field, limit_field, name_field;
338 } in_state_record; 
339
340 typedef integer internal_font_number; 
341 typedef integer font_index; 
342 typedef integer dvi_index; 
343 typedef integer trie_op_code; 
344 typedef integer trie_pointer; 
345
346 /* typedef short hyph_pointer; */   /* increased 1996/Oct/20 ??? */
347 typedef integer hyph_pointer; 
348
349 EXTERN integer bad;
350 EXTERN ASCII_code xord[256];
351 EXTERN ASCII_code xchr[256];
352 EXTERN unsigned char name_of_file[PATHMAX + 4]; // fix 2000 June 18
353 EXTERN integer name_length;
354
355 /* *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** */
356 #ifdef ALLOCATESTRING
357   #define initial_pool_size     40000
358   #define increment_pool_size   80000
359   EXTERN packed_ASCII_code *    str_pool;
360   #define initial_max_strings   5000
361   #define increment_max_strings 10000
362   EXTERN pool_pointer *         str_start;
363 #else
364   EXTERN packed_ASCII_code      str_pool[pool_size + 1]; 
365   EXTERN pool_pointer           str_start[max_strings + 1]; 
366 #endif
367 /* *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** */
368
369 EXTERN pool_pointer pool_ptr;
370 EXTERN str_number   str_ptr;
371 EXTERN pool_pointer init_pool_ptr;
372 EXTERN str_number   init_str_ptr;
373
374 #ifdef INITEX
375   EXTERN alpha_file pool_file; 
376 #endif
377
378 EXTERN alpha_file log_file; 
379 /* EXTERN char selector; */
380 /* EXTERN integer selector; */ /* padded out */
381 EXTERN int selector;      /* padded out */ /* 95/Jan/7 */
382 /* EXTERN char dig[23]; */
383 EXTERN char dig[23 + 1];  /* padded out */
384 EXTERN integer tally; 
385 EXTERN integer term_offset; 
386 EXTERN integer file_offset; 
387 EXTERN ASCII_code trick_buf[error_line + 1]; /* already padded 79 + 1 */
388 EXTERN integer trick_count; 
389 EXTERN integer first_count; 
390 /* EXTERN char interaction;  */
391 /* EXTERN integer interaction; */ /* padded out */
392 EXTERN int interaction; /* padded out */      /* 95/Jan/7 */
393 EXTERN bool deletions_allowed; 
394 EXTERN bool set_box_allowed; 
395 /* EXTERN char history; */
396 /* EXTERN integer history; */ /* padded out */
397 EXTERN int history; /* padded out */        /* 95/Jan/7 */
398 /* EXTERN schar error_count;  */
399 /* EXTERN integer error_count; */ /* padded out */
400 EXTERN int error_count; /* padded out */      /* 95/Jan/7 */
401 /* EXTERN str_number help_line[6]; */
402 EXTERN char * help_line[6];
403 /* EXTERN char help_ptr; */
404 /* EXTERN integer help_ptr; */ /* padded out */
405 EXTERN int help_ptr; /* padded out */       /* 95/Jan/7 */
406 EXTERN bool use_err_help; 
407 /* EXTERN integer interrupt;  */
408 EXTERN volatile integer interrupt;  /* bkph - do avoid compiler optimization */
409 EXTERN bool OK_to_interrupt; 
410 EXTERN bool arith_error; 
411 EXTERN scaled tex_remainder; 
412 EXTERN halfword temp_ptr; 
413
414 /* *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** */
415 #ifdef ALLOCATEMAIN
416   EXTERN memory_word * mainmemory;   /* remembered so can be free() later */
417   EXTERN memory_word * zzzaa;
418   #define zmem zzzaa
419 #else
420   /* *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** */
421   EXTERN memory_word 
422   /* #define zmem (zzzaa - (int)(mem_min)) */
423   /*  zzzaa[mem_max - mem_min + 1]; */
424   #define zmem (zzzaa - (int)(mem_bot))
425   zzzaa[mem_max - mem_bot + 1];
426 #endif
427
428 EXTERN halfword lo_mem_max;
429 EXTERN halfword hi_mem_min;
430 EXTERN integer var_used, dyn_used;
431 EXTERN halfword avail; 
432 EXTERN halfword mem_end; 
433 EXTERN halfword mem_start;      /* new in 3.14159 ??? */
434 EXTERN halfword rover; 
435
436 /* NOTE: the following really also need to be dynamically allocated */
437 #ifdef DEBUG
438 /* *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** */
439 #ifdef ALLOCATEMAIN
440   EXTERN char * zzzab;
441 #else
442 /* *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** */
443 /* EXTERN bool  */    /* save (4 - 1) * mem_max - mem_min */
444 EXTERN char
445 /* #define freearr (zzzab - (int)(mem_min)) */
446 /*  zzzab[mem_max - mem_min + 1];  */
447 #define freearr (zzzab - (int)(mem_bot))
448   zzzab[mem_max - mem_bot + 1]; 
449 #endif
450
451 #ifdef ALLOCATEMAIN
452   EXTERN char *zzzac;
453 #else
454 /* EXTERN bool */   /* save (4 - 1) * mem_max - mem_min */
455 EXTERN char
456 /* #define wasfree (zzzac - (int)(mem_min)) */
457 #define wasfree (zzzac - (int)(mem_bot))
458 /*  zzzac[mem_max - mem_min + 1];  */
459   zzzac[mem_max - mem_bot + 1]; 
460 #endif
461
462 EXTERN halfword was_mem_end, was_lo_max, was_hi_min; 
463 EXTERN bool panicking; 
464 #endif /* DEBUG */
465
466 EXTERN integer font_in_short_display; 
467 EXTERN integer depth_threshold; 
468 EXTERN integer breadth_max; 
469 /* EXTERN list_state_record nest[nest_size + 1];  */
470 /* EXTERN short shown_mode; */
471 /* EXTERN integer shown_mode; */ /* padded out */
472 EXTERN int shown_mode; /* padded out */   /* 95/Jan/7 */
473 /* EXTERN char old_setting; */
474 /* EXTERN integer old_setting; */ /* padded out */
475 EXTERN int old_setting; /* padded out */    /* 95/Jan/7 */
476
477 /* eqtn_extra is no longer used --- it should be 0 96/Jan/10 */
478 #ifdef INCREASEFONTS
479   #define eqtb_extra (font_max - 255 + hash_extra) 
480 #else
481   #define eqtb_extra 0
482 #endif
483
484 /* Probably require eqtb_extra to be zero, so hash_extra = 255 - font_max */
485 #if (eqtb_extra != 0)
486   #error ERROR: eqtb_extra is not zero (need hash_extra equal 255 - font_max)
487 #endif
488
489 /* *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** */
490 #ifdef ALLOCATEZEQTB
491 EXTERN memory_word * zeqtb;
492 /* *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** */
493 #else
494 #ifdef INCREASEFONTS
495 /* EXTERN memory_word zeqtb[13507 + eqtb_extra];  */
496 EXTERN memory_word eqtb[(hash_size + 4007) + eqtb_extra]; 
497 #else
498 /* EXTERN memory_word zeqtb[13507];  */ /* hash_size =  9500 */
499 /* EXTERN memory_word zeqtb[29007];  */ /* hash_size = 25000 */
500 EXTERN memory_word zeqtb[(hash_size + 4007)]; 
501 #endif
502 #endif
503
504 #ifdef INCREASEFONTS
505   #define xeq_level (zzzad - (int_base + eqtb_extra))
506 #else
507   #define xeq_level (zzzad - (int_base))
508 #endif
509 /* zzzad[844]; */
510 EXTERN quarterword zzzad[844]; /* ??? attempt to fix 99/Jan/5 */
511 /* region 5 & 6 int_base to eqtb_size: 13507 - 12663 */
512
513 /* *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** */
514 /* EXTERN twohalves 
515 #define hash (zzzae - 514)
516     zzzae[9767];  hash_size =  9500
517     zzzae[25267]; hash_size = 25000 */
518
519 #ifdef ALLOCATEHASH
520 #ifdef SHORTHASH
521 EXTERN htwohalves *zzzae;
522 #else
523 EXTERN twohalves *zzzae;
524 #endif
525 #define hash (zzzae - 514)
526 #else /* not allocating hash table */
527 /* *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** */
528 #ifdef SHORTHASH
529 EXTERN htwohalves 
530 #else
531 EXTERN twohalves 
532 #endif
533 #define hash (zzzae - 514)
534 /*  zzzae[9767];  */
535 #ifdef INCREASEFONTS
536   zzzae[hash_size + 267 + eqtb_extra]; 
537 #else
538   zzzae[hash_size + 267]; 
539 #endif
540 #endif
541
542 EXTERN halfword hash_used; 
543 EXTERN bool no_new_control_sequence; 
544 EXTERN integer cs_count; 
545
546 /* *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** */
547 /* using allocated save stack slows it down 1% to 2% */
548 /* despite reallocation, we still limit it to something finite */
549 /* to avoid soaking up all of machine memory in case of infinite loop */
550 #ifdef ALLOCATESAVESTACK
551   #define save_size           65536     /* arbitrary - ridiculously large */
552   #define initial_save_size   1000
553   #define increment_save_size 2000
554   EXTERN memory_word *save_stack; 
555 #else
556   #define save_size 8000        /* 1999/Jan/6 enough for even CRC */
557 /* *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** */
558   EXTERN memory_word save_stack[save_size + 1]; 
559 #endif
560
561 EXTERN integer save_ptr; 
562 EXTERN integer max_save_stack; 
563
564 /* The following could really be char instead of quarterword ... */
565 /* EXTERN quarterword cur_level;  */
566 /* EXTERN integer cur_level; */ /* padded out */
567 EXTERN int cur_level; /* padded out */    /* 95/Jan/7 */
568
569 /* EXTERN group_code cur_group;  */
570 /* EXTERN integer cur_group;  */ /* padded out */
571 EXTERN int cur_group; /* padded out */      /* 95/Jan/7 */
572
573 EXTERN integer cur_boundary; 
574 EXTERN integer mag_set; 
575
576 /* EXTERN eight_bits cur_cmd;  */
577 /* EXTERN integer cur_cmd;  */ /* padded out */
578 EXTERN int cur_cmd; /* padded out */      /* 95/Jan/7 */
579
580 /* EXTERN halfword cur_chr;  */ /* itex, tex0, tex, tex3, tex5, tex6, tex7, tex8 */
581 EXTERN int cur_chr;             /* 95/Jan/7 */
582
583 EXTERN halfword cur_cs; 
584 EXTERN halfword cur_tok; 
585
586 #ifdef ALLOCATENESTSTACK
587   #define nest_size           65536         /* arbitrary - ridiculously large */
588   #define initial_nest_size   100
589   #define increment_nest_size 200
590   EXTERN list_state_record * nest; 
591 #else
592   #define nest_size 200       /* 1999/Jan/7 */
593   EXTERN list_state_record nest[nest_size + 1]; 
594 #endif
595 EXTERN integer nest_ptr; 
596 EXTERN integer max_nest_stack; 
597 EXTERN list_state_record cur_list; 
598
599 #ifdef ALLOCATEPARAMSTACK
600   #define param_size 65536        /* arbitrary - ridiculously large */
601   #define initial_param_size 100
602   #define increment_param_size 200
603   EXTERN halfword * param_stack; 
604 #else
605   #define param_size 500        /* 1997/Jan/17 */
606 EXTERN halfword param_stack[param_size + 1]; 
607 #endif
608 EXTERN integer param_ptr; 
609 EXTERN integer max_param_stack; 
610
611 #ifdef ALLOCATEINPUTSTACK
612   #define stack_size           65536          /* arbitrary - ridiculously large */
613   #define initial_stack_size   100
614   #define increment_stack_size 200
615   EXTERN in_state_record * input_stack; 
616 #else
617   #define stack_size 800
618   EXTERN in_state_record input_stack[stack_size + 1]; 
619 #endif
620 EXTERN integer input_ptr; 
621 EXTERN integer max_in_stack; 
622
623 EXTERN integer high_in_open;      /* 1997/Jan/17 */
624 EXTERN in_state_record cur_input; 
625
626 /* EXTERN integer in_open;  */      /* used in itex, tex2, texmf */
627 EXTERN int in_open;         /* 95/Jan/7 */
628
629 EXTERN integer open_parens;
630 EXTERN integer max_open_parens; 
631 EXTERN alpha_file input_file[max_in_open + 1]; 
632 EXTERN integer line; 
633 EXTERN integer line_stack[max_in_open + 1]; 
634
635 /* EXTERN char scanner_status;  */
636 /* EXTERN integer scanner_status;  */ /* padded out */
637 EXTERN int scanner_status; /* padded out */ /* 95/Jan/7 */
638
639 EXTERN halfword warning_index; 
640 EXTERN halfword def_ref; 
641
642 EXTERN integer align_state; 
643 EXTERN integer base_ptr; 
644 EXTERN halfword par_loc; 
645 EXTERN halfword par_token; 
646 EXTERN bool force_eof; 
647 /* EXTERN halfword cur_mark[5];  */
648 EXTERN halfword cur_mark[6]; 
649
650 /* EXTERN char long_state; */
651 /* EXTERN integer long_state; */ /* padded out */
652 EXTERN int long_state; /* padded out */ /* 95/Jan/7 */
653
654 /* EXTERN halfword pstack[9];  */
655 EXTERN halfword pstack[10]; 
656
657 /* EXTERN integer cur_val; */
658 EXTERN int cur_val;           /* 95/Jan/7 */
659
660 /* EXTERN char cur_val_level;  */
661 /* EXTERN integer cur_val_level; */ /* padded out */
662 EXTERN int cur_val_level; /* padded out */ /* 95/Jan/7 */
663
664 /* EXTERN small_number radix;  */
665 /* EXTERN integer radix;  */ /* padded out */
666 EXTERN int radix; /* padded out */    /* 95/Jan/7 */
667
668 /* EXTERN glue_ord cur_order;  */
669 /* EXTERN integer cur_order;  */ /* padded out */
670 EXTERN int cur_order; /* padded out */    /* 95/Jan/7 */
671
672 EXTERN alpha_file read_file[16];  /* hard wired limit in TeX */
673 /* EXTERN char read_open[17];  */
674 EXTERN char read_open[20]; /* padded out */
675
676 EXTERN halfword cond_ptr; 
677
678 /* EXTERN char if_limit; */
679 /* EXTERN integer if_limit; */ /* padded out */
680 EXTERN int if_limit; /* padded out */   /* 95/Jan/7 */
681
682 /* EXTERN small_number cur_if; */
683 /* EXTERN integer cur_if; */ /* padded out */
684 EXTERN int cur_if; /* padded out */   /* 95/Jan/7 */
685
686 EXTERN integer if_line; 
687 EXTERN integer skip_line; 
688 EXTERN str_number cur_name; 
689 EXTERN str_number cur_area; 
690 EXTERN str_number cur_ext; 
691 EXTERN pool_pointer area_delimiter; 
692 EXTERN pool_pointer ext_delimiter; 
693 EXTERN integer format_default_length; 
694 EXTERN ccharpointer TEX_format_default; 
695 EXTERN bool name_in_progress; 
696 EXTERN bool log_opened; 
697 EXTERN bool quoted_file_name;
698 EXTERN str_number job_name; 
699 EXTERN str_number output_file_name;   // DVI file
700 EXTERN str_number texmf_log_name;   // LOG file
701 EXTERN byte_file dvi_file; 
702 EXTERN byte_file tfm_file;
703 EXTERN char * dvi_file_name;
704 EXTERN char * pdf_file_name;
705 EXTERN char * log_file_name;
706
707 /*******************************************************************/
708
709 /* SHORTFONTINFO halves the memory word used to store font info */
710 /* if it is not defined we use ordinary TeX memory words */
711
712 #ifdef SHORTFONTINFO
713 /* keep definition of fmemoryword in texmfmem.h */
714 /* keep definition of ffourquarters in texfmem.h */
715 /* keep definition of fquarterword in texfmem.h */
716 #else
717 /* go back to original definition as TeX memory word */
718 #undef fmemoryword
719 #define fmemoryword memory_word
720 /* go back to original definition as fourquarters of a TeX word */
721 #undef ffourquarters
722 #define ffourquarters fourquarters
723 /* go back to original definition as quaterword */
724 #undef fquarterword
725 #define fquarterword quarterword
726 #endif
727
728 /* *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** */
729 #ifdef ALLOCATEFONT
730   EXTERN fmemoryword * font_info; 
731 /* *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** */
732 #else
733 /* EXTERN memory_word font_info[font_mem_size + 1];  */
734   EXTERN fmemoryword font_info[font_mem_size + 1]; 
735 #endif
736
737 EXTERN font_index fmem_ptr; 
738 EXTERN internal_font_number font_ptr;
739 EXTERN internal_font_number frozenfontptr;        /* 99/Mar/26 */
740 /* There are about 24 integer size items per font, or about 100 bytes */
741 EXTERN ffourquarters font_check[font_max + 1]; 
742
743 EXTERN scaled font_size[font_max + 1]; 
744 EXTERN scaled font_dsize[font_max + 1]; 
745 EXTERN font_index font_params[font_max + 1];    /* in 3.14159 */
746 EXTERN str_number font_name[font_max + 1]; 
747 EXTERN str_number font_area[font_max + 1]; 
748 EXTERN eight_bits font_bc[font_max + 1]; /* already padded 511 + 1 = 512 */
749 EXTERN eight_bits font_ec[font_max + 1]; /* already padded 511 + 1 = 512 */
750 EXTERN halfword font_glue[font_max + 1]; 
751 /* use char instead of bool to save space, but is it worth slow down ? */
752 /* EXTERN char font_used[font_max + 1];  */
753 EXTERN bool font_used[font_max + 1]; 
754
755 /* might want to make some of following only one character wide also ? */
756 /* except some use -1 as special case value */
757 /* well, at least make them short instead of integer */
758 EXTERN integer hyphen_char[font_max + 1]; 
759 EXTERN integer skew_char[font_max + 1]; 
760 EXTERN font_index bchar_label[font_max + 1]; 
761 EXTERN short font_bchar[font_max + 1];  /* already padded 1023 + 1 = 1024 */
762 /* don't change above to int or format file will be incompatible */
763 EXTERN short font_false_bchar[font_max + 1];  /* already padded 1023 + 1 = 1024 */
764 /* don't change above to int or format file will be incompatible */
765 EXTERN integer char_base[font_max + 1]; 
766 EXTERN integer width_base[font_max + 1]; 
767 EXTERN integer height_base[font_max + 1]; 
768 EXTERN integer depth_base[font_max + 1]; 
769 EXTERN integer italic_base[font_max + 1]; 
770 EXTERN integer lig_kern_base[font_max + 1]; 
771 EXTERN integer kern_base[font_max + 1]; 
772 EXTERN integer exten_base[font_max + 1]; 
773 EXTERN integer param_base[font_max + 1]; 
774
775 EXTERN ffourquarters null_character; 
776
777 EXTERN integer total_pages; 
778 EXTERN scaled max_v; 
779 EXTERN scaled max_h; 
780 EXTERN integer max_push; 
781 EXTERN integer last_bop; 
782 EXTERN integer dead_cycles; 
783 EXTERN bool doing_leaders; 
784
785 /* EXTERN quarterword c, f;  */
786 /* EXTERN integer c, f */; /* padded out */
787 EXTERN int c, f; /* padded out */       /* 95/Jan/7 */
788
789 EXTERN scaled rule_ht, rule_dp, rule_wd; 
790 EXTERN halfword g; 
791 EXTERN integer lq, lr; 
792
793 #ifdef ALLOCATEDVIBUF
794   EXTERN eight_bits *zdvibuf; 
795 #else
796   /* EXTERN eight_bits dvi_buf[dvi_buf_size + 1]; */
797   /* EXTERN eight_bits dvi_buf[dvi_buf_size + 4]; */ /* padded out  */
798   EXTERN eight_bits zdvibuf[dvi_buf_size + 4];  /* padded out 1996/Jan/18 */
799 #endif
800
801 EXTERN dvi_index half_buf; 
802 EXTERN dvi_index dvi_limit; 
803 EXTERN dvi_index dvi_ptr; 
804 EXTERN integer dvi_offset; 
805 EXTERN integer dvi_gone; 
806 EXTERN halfword down_ptr, right_ptr; 
807 EXTERN scaled dvi_h, dvi_v;
808 EXTERN scaled pdf_h, pdf_v;
809 EXTERN scaled pdf_x, pdf_y;
810 EXTERN scaled cur_h, cur_v; 
811 EXTERN internal_font_number dvi_f; 
812 EXTERN integer cur_s; 
813 EXTERN scaled total_stretch[4], total_shrink[4]; /* padded already */
814 EXTERN integer last_badness; 
815 EXTERN halfword adjust_tail; 
816 EXTERN integer pack_begin_line; 
817 EXTERN twohalves empty_field; 
818 EXTERN fourquarters null_delimiter; 
819 EXTERN halfword cur_mlist; 
820
821 /* EXTERN small_number cur_style; */
822 /* EXTERN integer cur_style; */  /* padded out */ /* tex5.c, tex7.c */
823 EXTERN int cur_style;  /* padded out */     /* 95/Jan/7 */
824
825 /* EXTERN small_number cur_size; */
826 /* EXTERN integer cur_size;  */ /* padded out */
827 EXTERN int cur_size;  /* padded out */        /* 95/Jan/7 */
828
829 EXTERN scaled cur_mu; 
830 EXTERN bool mlist_penalties; 
831 EXTERN internal_font_number cur_f; 
832
833 /* EXTERN quarterword cur_c; */
834 /* EXTERN integer cur_c; */  /* padded out */
835 EXTERN int cur_c;  /* padded out */     /* 95/Jan/7 */
836
837 EXTERN ffourquarters cur_i;
838 EXTERN integer magic_offset;
839 EXTERN halfword cur_align;
840 EXTERN halfword cur_span;
841 EXTERN halfword cur_loop;
842 EXTERN halfword align_ptr;
843 EXTERN halfword cur_head, cur_tail;
844 EXTERN halfword just_box;
845 EXTERN halfword passive;
846 EXTERN halfword printed_node;
847 EXTERN halfword pass_number;
848 EXTERN scaled active_width[8];
849 EXTERN scaled cur_active_width[8];
850 EXTERN scaled background[8];
851 EXTERN scaled break_width[8];
852 EXTERN bool no_shrink_error_yet;
853 EXTERN halfword cur_p;
854 EXTERN bool second_pass;
855 EXTERN bool final_pass;
856 EXTERN integer threshold;
857 EXTERN integer minimal_demerits[4];
858 EXTERN integer minimum_demerits;
859 EXTERN halfword best_place[4];
860 EXTERN halfword best_pl_line[4];
861 EXTERN scaled disc_width;
862 EXTERN halfword easyline;
863 EXTERN halfword last_special_line;
864 EXTERN scaled first_width;
865 EXTERN scaled second_width;
866 EXTERN scaled first_indent;
867 EXTERN scaled second_indent;
868 EXTERN halfword best_bet;
869 EXTERN integer fewest_demerits;
870 EXTERN halfword best_line;
871 EXTERN integer actual_looseness;
872 EXTERN integer line_diff;
873 /* EXTERN short hc[64+2]; */  /* padded OK 66 * 2 = 132 which is divisible by 4 */
874 EXTERN int hc[66];  /* padded OK 66 * 2 = 132 which is divisible by 4 */
875
876 /* EXTERN small_number hn; */
877 /* EXTERN integer hn; */  /* padded out */
878 EXTERN int hn;  /* padded out */      /* 95/Jan/7 */
879
880 EXTERN halfword ha, hb;
881
882 /* EXTERN internal_font_number hf;  */
883 EXTERN int hf;              /* 95/Jan/7 */
884
885 /* EXTERN short hu[64+2]; */    /* padded OK */
886 EXTERN int hu[66];    /* padded OK */ 
887
888 /* EXTERN integer hyf_char;  */
889 EXTERN int hyf_char;            /* 95/Jan/7 */
890
891 /* init_cur_lang new in 3.14159 */
892 /* EXTERN ASCII_code cur_lang, init_cur_lang; */
893 /* EXTERN integer cur_lang, init_cur_lang; */ /* padded out */
894 EXTERN int cur_lang, init_cur_lang; /* padded out */    /* 95/Jan/7 */
895
896 EXTERN integer lhyf, rhyf;
897 /* EXTERN init_l_hyf, init_r_hyf; */ /* new in 3.14159 */
898 EXTERN integer init_l_hyf, init_r_hyf;  /* new in 3.14159 */
899
900 EXTERN halfword hyfbchar;
901 /* EXTERN char hyf[65];  */
902 EXTERN char hyf[68]; /* padded out */
903 EXTERN halfword init_list;
904 EXTERN bool init_lig;
905 EXTERN bool init_lft;
906
907 /* EXTERN small_number hyphen_passed; */
908 /* EXTERN integer hyphen_passed; */  /* padded out */
909 EXTERN int hyphen_passed;  /* padded out */     /* 95/Jan/7 */
910
911 /* EXTERN halfword cur_l, cur_r; */   /* make int's ? 95/Jan/7 */
912 EXTERN int cur_l, cur_r;    /* make int's ? 95/Jan/7 */
913
914 EXTERN halfword cur_q;
915 EXTERN halfword lig_stack;
916 EXTERN bool ligature_present;
917 EXTERN bool lft_hit, rt_hit;
918
919 /* *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** */
920 /* could perhaps use packed_ASCII_code for trie_trc ? */
921 #ifdef ALLOCATETRIES
922   EXTERN halfword * trie_trl;
923   EXTERN halfword * trie_tro;
924   EXTERN quarterword * trie_trc;
925 #else
926   /* *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** */
927   EXTERN halfword trie_trl[trie_size + 1];
928   EXTERN halfword trie_tro[trie_size + 1];
929   EXTERN quarterword trie_trc[trie_size + 1];
930 #endif
931 EXTERN small_number hyf_distance[trie_op_size + 1]; /* already padded 751 + 1 */
932 EXTERN small_number hyf_num[trie_op_size + 1];    /* already padded 751 + 1 */
933 EXTERN trie_op_code hyf_next[trie_op_size + 1];
934 EXTERN integer op_start[256];
935
936 /* if ALLOCATEHYPHEN is true, then hyphen_prime is a variable */
937 /* otherwise it is a pre-processor defined constant */
938 #ifdef ALLOCATEHYPHEN
939   #define default_hyphen_prime 1009
940   EXTERN str_number * hyph_word;
941   EXTERN halfword * hyph_list;
942   /* EXTERN hyphen_prime; */
943   EXTERN integer hyphen_prime;
944 #else
945   #define hyphen_prime 607
946   /* EXTERN str_number hyph_word[608];  */
947   EXTERN str_number hyph_word[hyphen_prime + 1]; 
948   /* EXTERN halfword hyph_list[608];  */
949   EXTERN halfword hyph_list[hyphen_prime + 1]; 
950 #endif
951
952 /* EXTERN hyph_pointer hyph_count;  */
953 /* EXTERN integer hyph_count; */  /* padded out */
954 EXTERN int hyph_count;  /* padded out */    /* 95/Jan/7 */
955
956 #ifdef INITEX
957 EXTERN integer trie_op_hash_C[trie_op_size - neg_trie_op_size + 1];
958 #define trie_op_hash (trie_op_hash_C - (int)(neg_trie_op_size)) 
959 EXTERN trie_op_code trie_used[256]; 
960 EXTERN ASCII_code trie_op_lang[trie_op_size + 1];   /* already padded 751 + 1 */
961 EXTERN trie_op_code trie_op_val[trie_op_size + 1]; 
962 EXTERN integer trie_op_ptr; 
963 #endif /* INITEX */
964
965 EXTERN trie_op_code max_op_used; 
966 EXTERN bool smallop; 
967
968 #ifdef INITEX
969   #ifdef ALLOCATEINI
970     EXTERN packed_ASCII_code *trie_c; /* characters to match */
971     EXTERN trie_op_code *trie_o;      /* operations to perform */
972     EXTERN trie_pointer *trie_l;      /* left subtrie links */
973     EXTERN trie_pointer *trie_r;      /* right subtrie links */
974     EXTERN trie_pointer *trie_hash;   /* used to identify equivlent subtries */
975   #else /* end ALLOCATEINI */
976     EXTERN packed_ASCII_code trie_c[trie_size + 1]; 
977     EXTERN trie_op_code trie_o[trie_size + 1]; 
978     EXTERN trie_pointer trie_l[trie_size + 1]; 
979     EXTERN trie_pointer trie_r[trie_size + 1]; 
980     EXTERN trie_pointer trie_hash[trie_size + 1]; 
981   #endif /* end not ALLOCATEINI */
982   EXTERN trie_pointer trie_ptr; 
983 #endif /* INITEX */
984
985 #ifdef INITEX
986   #ifdef ALLOCATEINI
987     /* EXTERN bool *trie_taken; */ /* save (4 - 1) * trie_size = 90,000 byte */
988     EXTERN char *trie_taken; 
989   #else
990     EXTERN bool trie_taken[trie_size + 1]; 
991   #endif
992
993   EXTERN trie_pointer trie_min[256]; 
994   EXTERN trie_pointer trie_max; 
995   EXTERN bool trie_not_ready; 
996 #endif /* INITEX */
997 EXTERN scaled best_height_plus_depth; 
998 EXTERN halfword page_tail; 
999
1000 /* EXTERN char page_contents; */
1001 /* EXTERN integer page_contents; */ /* padded out */
1002 EXTERN int page_contents; /* padded out */      /* 95/Jan/7 */
1003
1004 /* ********************************************************************* */
1005
1006 /* do *some* sanity checking here --- rather than in TeX later 96/Jan/18 */
1007 /* (cannot catch everything here, since some is now dynamic) */
1008
1009 #if (half_error_line < 30) || (half_error_line > error_line - 15)
1010   #error ERROR: (half_error_line < 30) || (half_error_line > error_line - 15) BAD 1
1011 #endif
1012
1013 #if (max_print_line < 60)
1014   #error ERROR: (max_print_line < 60) BAD 2
1015 #endif
1016
1017 #if (hash_prime > hash_size)
1018   #error ERROR: (hash_prime > hash_size) BAD 5
1019 #endif
1020
1021 #if (max_in_open > 127)
1022   #error ERROR: (max_in_open > 127) BAD 6
1023 #endif
1024
1025 #if (min_quarterword > 0) || (max_quarterword < 127)
1026   #error ERROR: (min_quarterword > 0) || (max_quarterword < 127) BAD 11
1027 #endif
1028
1029 #if (min_halfword > 0) || (max_halfword < 32767)
1030   #error ERROR:  (min_halfword > 0) || (max_halfword < 32767) BAD 12
1031 #endif
1032
1033 #if (min_quarterword < min_halfword) || (max_quarterword > max_halfword)
1034   #error ERROR: (min_quarterword < min_halfword) || (max_quarterword > max_halfword) BAD 13
1035 #endif
1036
1037 #if (font_max > max_quarterword)
1038   #error ERROR: (font_max > max_quarterword) BAD 15
1039 #endif
1040
1041 #if (save_size > max_halfword)
1042   #error ERROR: (save_size > max_halfword) BAD 17
1043 #endif
1044
1045 #if (buf_size > max_halfword)
1046   #error ERROR:  (buf_size > max_halfword) BAD 18
1047 #endif
1048
1049 #if (max_quarterword - min_quarterword) < 255
1050   #error (max_quarterword - min_quarterword) < 255 BAD 19
1051 #endif
1052
1053 /* ********************************************************************* */
1054
1055 EXTERN scaled page_max_depth; 
1056 EXTERN halfword best_page_break; 
1057 EXTERN integer least_page_cost; 
1058 EXTERN scaled best_size; 
1059 EXTERN scaled page_so_far[8]; 
1060 EXTERN halfword last_glue; 
1061 EXTERN integer last_penalty; 
1062 EXTERN scaled last_kern; 
1063 EXTERN integer insert_penalties; 
1064 EXTERN bool output_active; 
1065 EXTERN internal_font_number main_f; 
1066
1067 EXTERN ffourquarters main_i; 
1068 EXTERN ffourquarters main_j; 
1069
1070 EXTERN font_index main_k; 
1071 EXTERN halfword main_p; 
1072 EXTERN integer main_s; 
1073 EXTERN halfword bchar; 
1074 EXTERN halfword false_bchar; 
1075 EXTERN bool cancel_boundary; 
1076 EXTERN bool ins_disc; 
1077 EXTERN halfword cur_box; 
1078 EXTERN halfword after_token; 
1079 EXTERN bool long_help_seen; 
1080 EXTERN str_number format_ident; 
1081 EXTERN word_file fmt_file; 
1082 EXTERN integer ready_already; 
1083
1084 EXTERN alpha_file write_file[16]; /* hard wired limit in TeX */
1085 EXTERN bool write_open[18]; 
1086
1087 EXTERN halfword write_loc; 
1088 EXTERN pool_pointer edit_name_start; 
1089 /* EXTERN integer edit_name_length, edit_line, tfm_temp;  */
1090 EXTERN integer edit_name_length, edit_line; 
1091 /* EXTERN integer tfm_temp; */    /* only used in tex3.c */
1092 EXTERN int tfm_temp;        /* only used in tex3.c 95/Jan/7 */
1093
1094 /* new stuff defined in local.c - bkph */
1095
1096 #ifdef MSDOS
1097   EXTERN bool is_initex;
1098   EXTERN bool verbose_flag;
1099   EXTERN bool trace_flag;
1100   EXTERN bool debug_flag;
1101   EXTERN bool heap_flag;
1102   EXTERN bool open_trace_flag;
1103   EXTERN bool cache_file_flag;
1104   EXTERN bool knuth_flag;
1105   EXTERN bool no_interrupts;
1106   EXTERN bool c_style_flag;
1107   EXTERN bool non_ascii;
1108   EXTERN bool key_replace;
1109   EXTERN bool deslash;
1110   EXTERN bool trimeof;
1111   EXTERN bool allow_patterns;
1112   EXTERN bool show_fonts_used;
1113   EXTERN bool reset_exceptions;
1114   EXTERN bool show_current;
1115   EXTERN bool current_flag;
1116   EXTERN bool current_tfm;
1117   EXTERN bool return_flag;
1118   EXTERN bool want_version;
1119   EXTERN bool civilize_flag;
1120   EXTERN bool show_numeric;
1121   EXTERN bool restrict_to_ascii;
1122   EXTERN bool show_missing;
1123   EXTERN bool full_file_name_flag;
1124   EXTERN bool save_strings_flag;
1125   EXTERN int mem_initex;
1126   EXTERN int mem_extra_high;
1127   EXTERN int mem_extra_low;
1128   EXTERN int new_hyphen_prime;
1129   EXTERN int missing_characters;
1130   EXTERN int show_in_hex;
1131   EXTERN int show_in_dos;
1132   EXTERN int test_dir_access;
1133   EXTERN int dir_method;
1134   EXTERN int file_method;
1135   /* EXTERN int waitflush; */
1136   EXTERN int show_fmt_flag;
1137   EXTERN int show_tfm_flag;
1138   EXTERN bool show_texinput_flag;  /* 1998/Jan/28 */
1139   EXTERN bool truncate_long_lines; /* 1998/Feb/2 */
1140   EXTERN bool show_cs_names;       /* 1998/Mar/31 */
1141   EXTERN int tab_step;
1142   EXTERN int pseudo_tilde;
1143   EXTERN int pseudo_space;
1144   EXTERN int allow_quoted_names;
1145   EXTERN int default_rule;
1146   EXTERN char * format_file;
1147   EXTERN char * source_direct;     /* 1998/Sep/29 */
1148   EXTERN char * string_file;
1149   EXTERN int share_flag;
1150   EXTERN char * format_name;
1151   EXTERN char * encoding_name;
1152   EXTERN bool format_specific;
1153   EXTERN bool encoding_specific;
1154   EXTERN bool show_line_break_stats;  /* 1996/Feb/9 */
1155   EXTERN int first_pass_count;        /* 1996/Feb/9 */
1156   EXTERN int second_pass_count;       /* 1996/Feb/9 */
1157   EXTERN int final_pass_count;        /* 1996/Feb/9 */
1158   EXTERN int underfull_hbox;          /* 1996/Feb/9 */
1159   EXTERN int overfull_hbox;           /* 1996/Feb/9 */
1160   EXTERN int underfull_vbox;          /* 1996/Feb/9 */
1161   EXTERN int overfull_vbox;           /* 1996/Feb/9 */
1162   EXTERN int paragraph_failed;        /* 1996/Feb/9 */
1163   EXTERN int single_line;             /* 1996/Feb/15 */
1164   EXTERN FILE * errout;
1165   EXTERN int font_dimen_zero;   /* 1998/Oct/5 */
1166   EXTERN int ignore_frozen;     /* 1998/Oct/5 */
1167   EXTERN bool suppress_f_ligs;  /* 1999/Jan/5 */
1168   EXTERN int abort_flag;      // not yet hooked up ???
1169   EXTERN int err_level;     // not yet hooked up ???
1170   EXTERN int jump_used;       /* 1999/Nov/28 */
1171   EXTERN jmp_buf jumpbuffer;  /* 1999/Nov/7 */
1172  #endif /* DOS */
1173
1174 #ifdef MSDOS
1175   extern int current_pool_size;        /* in local.c - bkph */
1176   extern int current_max_strings;      /* in local.c - bkph */
1177   extern int current_mem_size;         /* in local.c - bkph */
1178   extern int current_font_mem_size;    /* in local.c - bkph */
1179   extern int current_save_size;        /* in local.c - bkph */
1180   extern int current_stack_size;       /* in local.c - bkph */
1181   extern int current_nest_size;        /* in local.c - bkph */
1182   extern int current_param_size;       /* in local.c - bkph */
1183   extern int current_buf_size;         /* in local.c - bkph */
1184   extern char *tex_version;            /* in local.c - bkph */
1185   extern char *application;            /* in local.c - bkph */
1186   extern char *yandyversion;           /* in local.c - bkph */
1187   extern unsigned char wintodos[128];  /* in local.c - bkph */
1188   extern char last_filename[PATH_MAX]; /* in ourpaths.c */
1189   extern char log_line[MAXLINE];       /* in local.c */
1190   extern char *texpath;           /* in local.c */
1191
1192   memory_word * allocate_main_memory (int);     /* in local.c - bkph */
1193   memory_word * realloc_main (int, int);        /* in local.c - bkph */
1194   packed_ASCII_code * realloc_str_pool (int);   /* in local.c - bkph */
1195   pool_pointer * realloc_str_start (int);       /* in local.c - bkph */
1196   memory_word * realloc_save_stack (int);       /* in local.c - bkph */
1197   list_state_record * realloc_nest_stack (int); /* in local.c - bkph */
1198   in_state_record * realloc_input_stack (int);  /* in local.c - bkph */
1199   halfword * realloc_param_stack (int);         /* in local.c - bkph */
1200   ASCII_code * realloc_buffer (int);            /* in local.c - bkph */
1201   fmemoryword * realloc_font_info (int);        /* in local.c - bkph */
1202
1203   int realloc_hyphen (int);         /* in local.c - bkph */
1204   int allocate_tries (int);         /* in local.c - bkph */
1205
1206   void try_and_open (char *);        /* in local.c - bkph */
1207   void check_eqtb (char *);          /* in local.c - bkph */
1208   void probe_memory (void);          /* in local.c - bkph */
1209   void print_cs_names (FILE *, int); /* in local.c - bkph */
1210   void perrormod(char *);            /* in local.c */
1211   char *grabenv(char *);             /* in local.c - bkph */
1212   void stamp_it (char *);            /* in local.c - bkph */
1213   void stampcopy (char *);           /* in local.c - bkph */
1214   bool prime (int);                  /* in local.c - bkph */
1215   int endit (int);                   /* in local.c - bkph */
1216
1217   void uexit (int unix_code);     /* in lib/uexit.c - bkph */
1218   void t_open_in (void);          /* in lib/texmf.c - bkph */
1219
1220
1221   void call_edit (ASCII_code *filename, pool_pointer fnstart,
1222          integer fnlength, integer linenumber); /* from lib/texmf.c - bkph */
1223
1224   void add_variable_space(int);       /* in itex.c - bkph */
1225
1226   void get_date_and_time (integer *minutes, integer *day,
1227             integer *month, integer *year);   /* in lib/texmf.c - bkph */
1228
1229   char *unixify (char *);       /* in pathsrch.c bkph */
1230
1231 #ifdef _WINDOWS
1232   void show_line (char *, int); /* in local.c */
1233   void show_char (int);         /* in local.c */
1234   int main(int, char *[]);      /* in lib\texmf.c */
1235 #endif
1236
1237 #endif /* ifdef MSDOS */
1238
1239 /****************************************************************************/
1240
1241 #include "coerce.h"
1242
1243 /****************************************************************************/
1244 #define font_base 0
1245 /* sec 0022 */
1246 #define null_code       0     // 0
1247 #define carriage_return 015   // 13
1248 #define invalid_code    0177  // 127
1249 /* sec 0040 */
1250 #define length(s) (str_start[(s) + 1] - str_start[(s)])
1251 /* sec 0041 */
1252 #define cur_length (pool_ptr - str_start[str_ptr])
1253 /* sec 0054 */
1254 #define no_print     16
1255 #define term_only    17
1256 #define log_only     18
1257 #define term_and_log 19
1258 #define pseudo       20
1259 #define new_string   21
1260 #define max_selector 21
1261 /* sec 0073 */
1262 #define batch_mode      0
1263 #define nonstop_mode    1
1264 #define scroll_mode     2
1265 #define error_stop_mode 3
1266 /* sec 0076 */
1267 #define spotless             0
1268 #define warning_issued       1
1269 #define error_message_issued 2
1270 #define fatal_error_stop     3
1271 /* sec 0105 */
1272 #define nx_plux_y(...)   mult_and_add(..., 07777777777L)
1273 #define mult_integers(a) mult_and_add(a,0,017777777777L)
1274 /* sec 0108 */
1275 #define inf_bad 10000L
1276 /* sec 0109 */
1277 #define set_glue_ratio_zero(a) (a) = 0.0
1278 #define set_glue_ratio_one(a)  (a) = 1.0
1279 #define tex_float(a)           (a)
1280 #define unfloat(a)             (a)
1281 #define float_constant(a)      (float) (a)
1282 /* sec 0115*/
1283 #define pointer halfword
1284 #define null    min_halfword
1285 /* sec 0118 */
1286 #define link(p) mem[(p)].hh.v.RH
1287 #define info(p) mem[(p)].hh.v.LH
1288 /* sec 0124 */
1289 #define empty_flag  max_halfword
1290 #define is_empty(a) (link(a) = empty_flag)
1291 #define node_size   info
1292 #define llink(a)    info(a+1)
1293 #define rlink(a)    link(a+1)
1294 /* sec 0133 */
1295 #define type(a)    mem[a].hh.b0
1296 #define subtype(a) mem[a].hh.b1
1297 /* sec 0134 */
1298 #define is_char_node(a) (a >= hi_mem_min)
1299 #define font            type
1300 #define character       subtype
1301 /* sec 0135 */
1302 #define hlist_node      0
1303 #define box_node_size   7
1304 #define width_offset    1
1305 #define depth_offset    2
1306 #define height_offset   3
1307 #define width(a)        mem[a + width_offset].cint
1308 #define depth(a)        mem[a + depth_offset].cint
1309 #define height(a)       mem[a + height_offset].cint
1310 #define shift_amount(a) mem[a + 4].cint
1311 #define list_offset     5
1312 #define list_ptr(a)     link(a + list_offset)
1313 #define glue_order(a)   subtype(a + list_offset)
1314 #define glue_sign(a)    type(a + list_offset)
1315 #define normal          0
1316 #define stretching      1
1317 #define shrinking       2
1318 #define glue_offset     6
1319 #define glue_set(a)     mem[a + glue_offset].gr
1320 /* sec 0137 */
1321 #define vlist_node 1
1322 /* sec 0138 */
1323 #define rule_node      2
1324 #define rule_node_size 4
1325 #define null_flag      -010000000000L
1326 #define is_running(a)  (a = null_flag)
1327 /* sec 0140 */
1328 #define ins_node         3
1329 #define ins_node_size    5
1330 #define float_cost(a)    mem[a + 1].cint
1331 #define ins_ptr(a)       info(a + 4)
1332 #define split_top_ptr(a) link(a + 4)
1333 /* sec 0141 */
1334 #define mark_node       4
1335 #define small_node_size 2
1336 #define mark_ptr(a)     mem[a + 1].cint
1337 /* sec 0142 */
1338 #define adjust_node 5
1339 #define adjust_ptr  mark_ptr
1340 /* sec 0143 */
1341 #define ligature_node 6
1342 #define lig_char(a)   (a + 1)
1343 #define lig_ptr(a)    link(lig_char(a))
1344 /* sec 0145 */
1345 #define disc_node     7
1346 #define replace_count subtype
1347 #define pre_break     llink
1348 #define post_break    rlink
1349 /* sec 0146 */
1350 #define whatsit_node 8
1351 /* sec 0147 */
1352 #define math_node 9
1353 #define before    0
1354 #define after     1
1355 /* sec 0148 */
1356 #define precedes_break(a)  (type(a) < math_node)
1357 #define non_discardable(a) (type(a) < math_node)
1358 /* sec 0149 */
1359 #define glue_node      10
1360 #define cond_math_glue 98
1361 #define mu_glue        99
1362 #define a_leaders      100
1363 #define c_leaders      101
1364 #define x_leaders      102
1365 #define glue_ptr       llink
1366 #define leader_ptr     rlink
1367 /* sec 0150 */
1368 #define glue_spec_size    4
1369 #define glue_ref_count(a) link(a)
1370 #define stretch(a)        mem[a + 2].cint
1371 #define shrink(a)         mem[a + 3].cint
1372 #define stretch_order     type
1373 #define shrink_order      subtype
1374 #define fil               1
1375 #define fill              2
1376 #define filll             3
1377 /* sec 0155 */
1378 #define kern_node 11
1379 #define explicit  1
1380 #define acc_kern  2
1381 /* sec 0157 */
1382 #define penalty_node  12
1383 #define inf_penalty   inf_bad
1384 #define eject_penalty -inf_bad
1385 #define penalty(a)    mem[a + 1].cint
1386 /* sec 0159 */
1387 #define unset_node      13
1388 #define glue_stretch(a) mem[a + glue_offset].cint
1389 #define glue_shrink     shift_amount
1390 #define span_count      subtype
1391 /* sec 0162 */
1392 #define zero_glue         mem_bot // 0
1393 #define fil_glue          (zero_glue + glue_spec_size) // 4
1394 #define fill_glue         (fil_glue + glue_spec_size) // 8
1395 #define ss_glue           (fill_glue + glue_spec_size) // 12
1396 #define fil_neg_glue      (ss_glue + glue_spec_size) // 16
1397 #define lo_mem_stat_max   (fil_neg_glue + glue_spec_size - 1) // 19
1398 #define page_ins_head     mem_top
1399 #define contrib_head      (mem_top - 1)
1400 #define page_head         (mem_top - 2)
1401 #define temp_head         (mem_top - 3)
1402 #define hold_head         (mem_top - 4)
1403 #define adjust_head       (mem_top - 5)
1404 #define active            (mem_top - 7)
1405 #define align_head        (mem_top - 8)
1406 #define end_span          (mem_top - 9)
1407 #define omit_template     (mem_top - 10)
1408 #define null_list         (mem_top - 11)
1409 #define lig_trick         (mem_top - 12)
1410 #define garbage           (mem_top - 12)
1411 #define backup_head       (mem_top - 13)
1412 #define hi_mem_stat_min   (mem_top - 13)
1413 #define hi_mem_stat_usage 14
1414 /* sec 0200 */
1415 #define token_ref_count(a) info(a)
1416 /* sec 0203 */
1417 #define add_token_ref(a) incr(token_ref_count(a))
1418 #define add_glue_ref(a)  incr(glue_ref_count(a))
1419 /* sec 0207 */
1420 #define escape        0
1421 #define relax         0
1422 #define left_brace    1
1423 #define right_brace   2
1424 #define math_shift    3
1425 #define tab_mark      4
1426 #define car_ret       5
1427 #define out_param     5
1428 #define mac_param     6
1429 #define sup_mark      7
1430 #define sub_mark      8
1431 #define ignore        9
1432 #define endv          9
1433 #define spacer        10
1434 #define letter        11
1435 #define other_char    12
1436 #define active_char   13
1437 #define par_end       13
1438 #define match         13
1439 #define comment       14
1440 #define end_match     14
1441 #define stop          14
1442 #define invalid_char  15
1443 #define delim_num     15
1444 #define max_char_code 15
1445 /* sec 0208 */
1446 #define char_num      16
1447 #define math_char_num 17
1448 #define mark          18
1449 #define xray          19
1450 #define make_box      20
1451 #define hmove         21
1452 #define vmove         22
1453 #define un_hbox       23
1454 #define un_vbox       24
1455 #define remove_item   25
1456 #define hskip         26
1457 #define vskip         27
1458 #define mskip         28
1459 #define kern          29
1460 #define mkern         30
1461 #define leader_ship   31
1462 #define halign        32
1463 #define valign        33
1464 #define no_align      34
1465 #define vrule         35
1466 #define hrule         36
1467 #define insert        37
1468 #define vadjust       38
1469 #define ignore_spaces 39
1470 #define after_assignment 40
1471 #define after_group      41
1472 #define break_penalty    42
1473 #define start_par        43
1474 #define ital_corr        44
1475 #define accent           45
1476 #define math_accent      46
1477 #define discretionary    47
1478 #define eq_no            48
1479 #define left_right       49
1480 #define math_comp        50
1481 #define limit_switch     51
1482 #define above            52
1483 #define math_style       53
1484 #define math_choice      54
1485 #define non_script       55
1486 #define vcenter          56
1487 #define case_shift       57
1488 #define message          58
1489 #define extension        59
1490 #define in_stream        60
1491 #define begin_group      61
1492 #define end_group        62
1493 #define omit             63
1494 #define ex_space         64
1495 #define no_boundary      65
1496 #define radical          66
1497 #define end_cs_name      67
1498 #define min_internal     68
1499 #define char_given       68
1500 #define math_given       69
1501 #define last_item        70
1502 #define max_non_prefixed_command 70
1503 /* sec 0209 */
1504 #define toks_register 71
1505 #define assign_toks 72
1506 #define assign_int 73
1507 #define assign_dimen 74
1508 #define assign_glue 75
1509 #define assign_mu_glue 76
1510 #define assign_font_dimen 77
1511 #define assign_font_int 78
1512 #define set_aux 79
1513 #define set_prev_graf 80
1514 #define set_page_dimen 81
1515 #define set_page_int 82
1516 #define set_box_dimen 83
1517 #define set_shape 84
1518 #define def_code 85
1519 #define def_family 86
1520 #define set_font 87
1521 #define def_font 88
1522 #define tex_register 89
1523 #define max_internal 89
1524 #define advance 90
1525 #define multiply 91
1526 #define divide 92
1527 #define prefix 93
1528 #define let 94
1529 #define shorthand_def 95
1530 #define read_to_cs 96
1531 #define def 97
1532 #define set_box 98
1533 #define hyph_data 99
1534 #define set_interaction 100
1535 #define max_command 100
1536 /* sec 0210 */
1537 #define undefined_cs    (max_command + 1)
1538 #define expand_after    (max_command + 2)
1539 #define no_expand       (max_command + 3)
1540 #define input           (max_command + 4)
1541 #define if_test         (max_command + 5)
1542 #define fi_or_else      (max_command + 6)
1543 #define cs_name         (max_command + 7)
1544 #define convert         (max_command + 8)
1545 #define the             (max_command + 9)
1546 #define top_bot_mark    (max_command + 10)
1547 #define call            (max_command + 11)
1548 #define long_call       (max_command + 12)
1549 #define outer_call      (max_command + 13)
1550 #define long_outer_call (max_command + 14)
1551 #define end_template    (max_command + 15)
1552 #define dont_expand     (max_command + 16)
1553 #define glue_ref        (max_command + 17)
1554 #define shape_ref       (max_command + 18)
1555 #define box_ref         (max_command + 19) 
1556 #define data            (max_command + 20)
1557 /* sec 0211 */
1558 #define vmode 1
1559 #define hmode (vmode + max_command + 1)
1560 #define mmode (hmode + max_command + 1)
1561 /* sec 0212 */
1562 #define ignore_depth -65536000L
1563 /* sec 0213 */
1564 #define mode            cur_list.mode_field
1565 #define head            cur_list.head_field
1566 #define tail            cur_list.tail_field
1567 #define aux             cur_list.aux_field
1568 #define prev_depth      aux.cint
1569 #define space_factor    aux.hh.v.LH
1570 #define clang           aux.hh.v.RH
1571 #define incompleat_noad aux.cint
1572 #define prev_graf       cur_list.pg_field
1573 #define mode_line       cur_list.ml_field
1574 /* sec 0221 */
1575 #define eq_level_field(a) a.hh.b1
1576 #define eq_type_field(a)  a.hh.b0
1577 #define equiv_field(a)    a.hh.v.RH
1578 #define eq_level(a)       eq_level_field(eqtb[a])
1579 #define eq_type(a)        eq_type_field(eqtb[a])
1580 #define equiv(a)          equiv_field(eqtb[a])
1581 #define level_zero        min_quarterword
1582 #define level_one         level_zero + 1
1583 /* sec 0222 */
1584 #define active_base                   1                                    // 1
1585 #define single_base                   (active_base + 256)                  // 257
1586 #define null_cs                       (single_base + 256)                  // 513
1587 #define hash_base                     (null_cs + 1)                        // 514
1588 #define frozen_control_sequence       (hash_base + hash_size + hash_extra) // (hash_size + hash_extra + 514)
1589 #define frozen_protection             frozen_control_sequence              // (hash_size + hash_extra + 514)
1590 #define frozen_cr                     (frozen_control_sequence + 1)        // (hash_size + hash_extra + 515)
1591 #define frozen_end_group              (frozen_control_sequence + 2)        // (hash_size + hash_extra + 516)
1592 #define frozen_right                  (frozen_control_sequence + 3)        // (hash_size + hash_extra + 517)
1593 #define frozen_fi                     (frozen_control_sequence + 4)        // (hash_size + hash_extra + 518)
1594 #define frozen_end_template           (frozen_control_sequence + 5)        // (hash_size + hash_extra + 519)
1595 #define frozen_endv                   (frozen_control_sequence + 6)        // (hash_size + hash_extra + 520)
1596 #define frozen_relax                  (frozen_control_sequence + 7)        // (hash_size + hash_extra + 521)
1597 #define end_write                     (frozen_control_sequence + 8)        // (hash_size + hash_extra + 522)
1598 #define frozen_dont_expand            (frozen_control_sequence + 9)        // (hash_size + hash_extra + 523)
1599 #define frozen_null_font              (frozen_control_sequence + 10)       // (hash_size + hash_extra + 524)
1600 #define font_id_base                  (frozen_null_font - font_base)       // (hash_size + hash_extra + 524)
1601 #define undefined_control_sequence    (frozen_null_font + 1025)            // (hash_size + hash_extra + 781) = font_max + 2
1602                                                                            // (hash_size + (255 - 1023) + 1025 + 524)
1603                                                                            // (hash_size + 781)
1604 #define glue_base                     (undefined_control_sequence + 1)     // (hash_size + 782)
1605 /* sec 0224 */
1606 #define line_skip_code                0  // 782
1607 #define baseline_skip_code            1  // 783
1608 #define par_skip_code                 2  // 784
1609 #define above_display_skip_code       3  // 785
1610 #define below_display_skip_code       4  // 786
1611 #define above_display_short_skip_code 5  // 787
1612 #define below_display_short_skip_code 6  // 788
1613 #define left_skip_code                7  // 789
1614 #define right_skip_code               8  // 790
1615 #define top_skip_code                 9  // 791
1616 #define split_top_skip_code           10 // 792
1617 #define tab_skip_code                 11 // 793
1618 #define space_skip_code               12 // 794
1619 #define xspace_skip_code              13 // 795
1620 #define par_fill_skip_code            14 // 796
1621 #define thin_mu_skip_code             15 // 797
1622 #define med_mu_skip_code              16 // 798
1623 #define thick_mu_skip_code            17 // 799
1624 #define glue_pars                     18 // 800
1625 #define skip_base                     (glue_base + glue_pars) // 800
1626 #define mu_skip_base                  (skip_base + 256) // 1056
1627 #define local_base                    (mu_skip_base + 256) // 1312
1628 // #
1629 #define skip(a)                       equiv(skip_base + a)
1630 #define mu_skip(a)                    equiv(mu_skip_base + a)
1631 #define glue_par(a)                   equiv(glue_base + a)
1632 #define line_skip                     glue_par(line_skip_code)
1633 #define baseline_skip                 glue_par(baseline_skip_code)
1634 #define par_skip                      glue_par(par_skip_code)
1635 #define above_display_skip            glue_par(above_display_skip_code)
1636 #define below_display_skip            glue_par(below_display_skip_code)
1637 #define above_display_short_skip      glue_par(above_display_short_skip_code)
1638 #define below_display_short_skip      glue_par(below_display_short_skip_code)
1639 #define left_skip                     glue_par(left_skip_code)
1640 #define right_skip                    glue_par(right_skip_code)
1641 #define top_skip                      glue_par(top_skip_code)
1642 #define split_top_skip                glue_par(split_top_skip_code)
1643 #define tab_skip                      glue_par(tab_skip_code)
1644 #define space_skip                    glue_par(space_skip_code)
1645 #define xspace_skip                   glue_par(xspace_skip_code)
1646 #define par_fill_skip                 glue_par(par_fill_skip_code)
1647 #define thin_mu_skip                  glue_par(thin_mu_skip_code)
1648 #define med_mu_skip                   glue_par(med_mu_skip_code)
1649 #define thick_mu_skip                 glue_par(thick_mu_skip_code)
1650 /* sec 0230 */
1651 #define par_shape_loc                 local_base             // 1312
1652 #define output_routine_loc            (local_base + 1)       // 1313
1653 #define every_par_loc                 (local_base + 2)       // 1314
1654 #define every_math_loc                (local_base + 3)       // 1315
1655 #define every_display_loc             (local_base + 4)       // 1316
1656 #define every_hbox_loc                (local_base + 5)       // 1317
1657 #define every_vbox_loc                (local_base + 6)       // 1318
1658 #define every_job_loc                 (local_base + 7)       // 1319
1659 #define every_cr_loc                  (local_base + 8)       // 1320
1660 #define err_help_loc                  (local_base + 9)       // 1321
1661 #define toks_base                     (local_base + 10)      // 1322
1662 #define box_base                      (toks_base + 256)      // 1578
1663 #define cur_font_loc                  (box_base + 256)       // 1834
1664 #define math_font_base                (cur_font_loc + 1)     // 1835
1665 #define cat_code_base                 (math_font_base + 48)  // 1883
1666 #define lc_code_base                  (cat_code_base + 256)  // 2139
1667 #define uc_code_base                  (lc_code_base + 256)   // 2395
1668 #define sf_code_base                  (uc_code_base + 256)   // 2651
1669 #define math_code_base                (sf_code_base + 256)   // 2907
1670 #define int_base                      (math_code_base + 256) // 3163
1671 // #
1672 #define par_shape_ptr                 equiv(par_shape_loc)
1673 #define output_routine                equiv(output_routine_loc)
1674 #define every_par                     equiv(every_par_loc)
1675 #define every_math                    equiv(every_math_loc)
1676 #define every_display                 equiv(every_display_loc)
1677 #define every_hbox                    equiv(every_hbox_loc)
1678 #define every_vbox                    equiv(every_vbox_loc)
1679 #define every_job                     equiv(every_job_loc)
1680 #define every_cr                      equiv(every_cr_loc)
1681 #define err_help                      equiv(err_help_loc)
1682 #define toks(a)                       equiv(toks_base + a)
1683 #define box(a)                        equiv(box_base + a)
1684 #define cur_font                      equiv(cur_font_loc)
1685 #define fam_fnt(a)                    equiv(math_font_base + a)
1686 #define cat_code(a)                   equiv(cat_code_base + a)
1687 #define lc_code(a)                    equiv(lc_code_base + a)
1688 #define uc_code(a)                    equiv(uc_code_base + a)
1689 #define sf_code(a)                    equiv(sf_code_base + a)
1690 #define math_code(a)                  equiv(math_code_base + a)
1691 /* sec 0232 */
1692 #define null_font font_base
1693 #define var_code 070000
1694 /* sec 0236 */
1695 #define pretolerance_code             0  // 3163
1696 #define tolerance_code                1  // 3164
1697 #define line_penalty_code             2  // 3165
1698 #define hyphen_penalty_code           3  // 3166
1699 #define ex_hyphen_penalty_code        4  // 3167
1700 #define club_penalty_code             5  // 3168
1701 #define widow_penalty_code            6  // 3169
1702 #define display_widow_penalty_code    7  // 3170
1703 #define broken_penalty_code           8  // 3171
1704 #define bin_op_penalty_code           9  // 3172
1705 #define rel_penalty_code              10 // 3173
1706 #define pre_display_penalty_code      11 // 3174
1707 #define post_display_penalty_code     12 // 3175
1708 #define inter_line_penalty_code       13 // 3176
1709 #define double_hyphen_demerits_code   14 // 3177
1710 #define final_hyphen_demerits_code    15 // 3178
1711 #define adj_demerits_code             16 // 3179
1712 #define mag_code                      17 // 3180
1713 #define delimiter_factor_code         18 // 3181
1714 #define looseness_code                19 // 3182
1715 #define time_code                     20 // 3183
1716 #define day_code                      21 // 3184
1717 #define month_code                    22 // 3185
1718 #define year_code                     23 // 3186
1719 #define show_box_breadth_code         24 // 3187
1720 #define show_box_depth_code           25 // 3188
1721 #define hbadness_code                 26 // 3189
1722 #define vbadness_code                 27 // 3190
1723 #define pausing_code                  28 // 3191
1724 #define tracing_online_code           29 // 3192
1725 #define tracing_macros_code           30 // 3193
1726 #define tracing_stats_code            31 // 3194
1727 #define tracing_paragraphs_code       32 // 3195
1728 #define tracing_pages_code            33 // 3196
1729 #define tracing_output_code           34 // 3197
1730 #define tracing_lost_chars_code       35 // 3198
1731 #define tracing_commands_code         36 // 3199 
1732 #define tracing_restores_code         37 // 3200
1733 #define uc_hyph_code                  38 // 3201
1734 #define output_penalty_code           39 // 3202 NOT USED.
1735 #define max_dead_cycles_code          40 // 3203
1736 #define hang_after_code               41 // 3204
1737 #define floating_penalty_code         42 // 3205
1738 #define global_defs_code              43 // 3206
1739 #define cur_fam_code                  44 // 3207
1740 #define escape_char_code              45 // 3208
1741 #define default_hyphen_char_code      46 // 3209
1742 #define default_skew_char_code        47 // 3210
1743 #define end_line_char_code            48 // 3211
1744 #define new_line_char_code            49 // 3212
1745 #define language_code                 50 // 3213
1746 #define left_hyphen_min_code          51 // 3214
1747 #define right_hyphen_min_code         52 // 3215
1748 #define holding_inserts_code          53 // 3216
1749 #define error_context_lines_code      54 // 3217
1750 #define int_pars                      55
1751 #define count_base                    (int_base + int_pars) // 3218
1752 #define del_code_base                 (count_base + 256)    // 3474
1753 #define dimen_base                    (del_code_base + 256) // 3730
1754 // #
1755 #define del_code(a)                   eqtb[del_code_base + a].cint
1756 #define count(a)                      eqtb[count_base + a].cint
1757 #define int_par(a)                    eqtb[int_base + a].cint
1758 #define pretolerance                  int_par(pretolerance_code)
1759 #define tolerance                     int_par(tolerance_code)
1760 #define line_penalty                  int_par(line_penalty_code)
1761 #define hyphen_penalty                int_par(hyphen_penalty_code)
1762 #define ex_hyphen_penalty             int_par(ex_hyphen_penalty_code)
1763 #define club_penalty                  int_par(club_penalty_code)
1764 #define widow_penalty                 int_par(widow_penalty_code)
1765 #define display_widow_penalty         int_par(display_widow_penalty_code)
1766 #define broken_penalty                int_par(broken_penalty_code)
1767 #define bin_op_penalty                int_par(bin_op_penalty_code)
1768 #define rel_penalty                   int_par(rel_penalty_code)
1769 #define pre_display_penalty           int_par(pre_display_penalty_code)
1770 #define post_display_penalty          int_par(post_display_penalty_code)
1771 #define inter_line_penalty            int_par(inter_line_penalty_code)
1772 #define double_hyphen_demerits        int_par(double_hyphen_demerits_code)
1773 #define final_hyphen_demerits         int_par(final_hyphen_demerits_code)
1774 #define adj_demerits                  int_par(adj_demerits_code)
1775 #define mag                           int_par(mag_code)
1776 #define delimiter_factor              int_par(delimiter_factor_code)
1777 #define looseness                     int_par(looseness_code)
1778 #define tex_time                      int_par(time_code)
1779 #define day                           int_par(day_code)
1780 #define month                         int_par(month_code)
1781 #define year                          int_par(year_code)
1782 #define show_box_breadth              int_par(show_box_breadth_code)
1783 #define show_box_depth                int_par(show_box_depth_code)
1784 #define hbadness                      int_par(hbadness_code)
1785 #define vbadness                      int_par(vbadness_code)
1786 #define pausing                       int_par(pausing_code)
1787 #define tracing_online                int_par(tracing_online_code)
1788 #define tracing_macros                int_par(tracing_macros_code)
1789 #define tracing_stats                 int_par(tracing_stats_code)
1790 #define tracing_paragraphs            int_par(tracing_paragraphs_code)
1791 #define tracing_pages                 int_par(tracing_pages_code)
1792 #define tracing_output                int_par(tracing_output_code)
1793 #define tracing_lost_chars            int_par(tracing_lost_chars_code)
1794 #define tracing_commands              int_par(tracing_commands_code)
1795 #define tracing_restores              int_par(tracing_restores_code)
1796 #define uc_hyph                       int_par(uc_hyph_code)
1797 #define output_penalty                int_par(output_penalty_code)
1798 #define max_dead_cycles               int_par(max_dead_cycles_code)
1799 #define hang_after                    int_par(hang_after_code)
1800 #define floating_penalty              int_par(floating_penalty_code)
1801 #define global_defs                   int_par(global_defs_code)
1802 #define cur_fam                       int_par(cur_fam_code)
1803 #define escape_char                   int_par(escape_char_code)
1804 #define default_hyphen_char           int_par(default_hyphen_char_code)
1805 #define default_skew_char             int_par(default_skew_char_code)
1806 #define end_line_char                 int_par(end_line_char_code)
1807 #define new_line_char                 int_par(new_line_char_code)
1808 #define language                      int_par(language_code)
1809 #define left_hyphen_min               int_par(left_hyphen_min_code)
1810 #define right_hyphen_min              int_par(right_hyphen_min_code)
1811 #define holding_inserts               int_par(holding_inserts_code)
1812 #define error_context_lines           int_par(error_context_lines_code)
1813 /* sec 0247 */
1814 #define par_indent_code               0  // 3730
1815 #define math_surround_code            1  // 3731
1816 #define line_skip_limit_code          2  // 3732
1817 #define hsize_code                    3  // 3733
1818 #define vsize_code                    4  // 3734
1819 #define max_depth_code                5  // 3735
1820 #define split_max_depth_code          6  // 3736
1821 #define box_max_depth_code            7  // 3737
1822 #define hfuzz_code                    8  // 3738
1823 #define vfuzz_code                    9  // 3739
1824 #define delimiter_shortfall_code      10 // 3740
1825 #define null_delimiter_space_code     11 // 3741
1826 #define script_space_code             12 // 3742
1827 #define pre_display_size_code         13 // 3743
1828 #define display_width_code            14 // 3744
1829 #define display_indent_code           15 // 3745
1830 #define overfull_rule_code            16 // 3746
1831 #define hang_indent_code              17 // 3747
1832 #define h_offset_code                 18 // 3748
1833 #define v_offset_code                 19 // 3749
1834 #define emergency_stretch_code        20 // 3750
1835 #define dimen_pars                    21
1836 #define scaled_base                   (dimen_base + dimen_pars) // 3751
1837 #define eqtb_size                     (scaled_base + 255) // 4006
1838 // #
1839 #define dimen(a)                      eqtb[scaled_base + a].cint
1840 #define dimen_par(a)                  eqtb[dimen_base + a].cint
1841 #define par_indent                    dimen_par(par_indent_code)
1842 #define math_surround                 dimen_par(math_surround_code)
1843 #define line_skip_limit               dimen_par(line_skip_limit_code)
1844 #define hsize                         dimen_par(hsize_code)
1845 #define vsize                         dimen_par(vsize_code)
1846 #define max_depth                     dimen_par(max_depth_code)
1847 #define split_max_depth               dimen_par(split_max_depth_code)
1848 #define box_max_depth                 dimen_par(box_max_depth_code)
1849 #define hfuzz                         dimen_par(hfuzz_code)
1850 #define vfuzz                         dimen_par(vfuzz_code)
1851 #define delimiter_shortfall           dimen_par(delimiter_shortfall_code)
1852 #define null_delimiter_space          dimen_par(null_delimiter_space_code)
1853 #define script_space                  dimen_par(script_space_code)
1854 #define pre_display_size              dimen_par(pre_display_size_code)
1855 #define display_width                 dimen_par(display_width_code)
1856 #define display_indent                dimen_par(display_indent_code)
1857 #define overfull_rule                 dimen_par(overfull_rule_code)
1858 #define hang_indent                   dimen_par(hang_indent_code)
1859 #define h_offset                      dimen_par(h_offset_code)
1860 #define v_offset                      dimen_par(v_offset_code)
1861 #define emergency_stretch             dimen_par(emergency_stretch_code)
1862 /* sec 0256 */
1863 //#define next
1864 #define text(a)         hash[a].v.RH
1865 #define next(a)         hash[a].v.LH
1866 #define hash_is_full    (hash_used == hash_base)
1867 #define font_id_text(a) text(font_id_base + a)
1868 /* sec 0268 */
1869 #define save_type(a)      save_stack[a].hh.b0
1870 #define save_level(a)     save_stack[a].hh.b1
1871 #define save_index(a)     save_stack[a].hh.v.RH
1872 #define restore_old_value 0
1873 #define restore_zero      1
1874 #define insert_token      2
1875 #define level_boundary    3
1876 /* sec 0269 */
1877 #define bottom_level      0
1878 #define simple_group      1
1879 #define hbox_group        2
1880 #define adjust_hbox_group 3
1881 #define vbox_group        4
1882 #define vtop_group        5
1883 #define align_group       6
1884 #define no_align_group    7
1885 #define output_group      8
1886 #define math_group        9
1887 #define disc_group        10
1888 #define insert_group      11
1889 #define vcenter_group     12
1890 #define math_choice_group 13
1891 #define semi_simple_group 14
1892 #define math_shift_group  15
1893 #define math_left_group   16
1894 #define max_group_code    16
1895 /* sec 0274 */
1896 #define saved(a) save_stack[save_ptr + (a)].cint
1897 /* sec 0289 */
1898 #define cs_token_flag     07777 // 4095
1899 #define left_brace_token  0400  // 256  = 2^8 * left_brace
1900 #define left_brace_limit  01000 // 512  = 2^8 * (left_brace + 1)
1901 #define right_brace_token 01000 // 512  = 2^8 * right_brace
1902 #define right_brace_limit 01400 // 768  = 2^8 * (right_brace + 1)
1903 #define math_shift_token  01400 // 768  = 2^8 * math_shift
1904 #define tab_token         02000 // 1024 = 2^8 * tab_mark
1905 #define out_param_token   02400 // 1280 = 2^8 * out_param
1906 #define space_token       05040 // 2592 = 2^8 * spacer + ' '
1907 #define letter_token      05400 // 2816 = 2^8 * letter
1908 #define other_token       06000 // 3072 = 2^8 * other_char
1909 #define match_token       06400 // 3328 = 2^8 * match
1910 #define end_match_token   07000 // 3584 = 2^8 * end_match
1911 /* sec 0303 */
1912 #define mid_line    1
1913 #define skip_blanks 2 + max_char_code // 17
1914 #define new_line    3 + max_char_code + max_char_code // 33
1915 /* sec 0305 */
1916 #define skipping  1
1917 #define defining  2
1918 #define matching  3
1919 #define aligning  4
1920 #define absorbing 5
1921 /* sec 0307 */
1922 #define token_list         0
1923 #define token_type         cur_input.index_field
1924 #define param_start        cur_input.limit_field
1925 #define parameter          0
1926 #define u_template         1
1927 #define v_template         2
1928 #define backed_up          3
1929 #define inserted           4
1930 #define macro              5
1931 #define output_text        6
1932 #define every_par_text     7
1933 #define every_math_text    8
1934 #define every_display_text 9
1935 #define every_hbox_text    10
1936 #define every_vbox_text    11
1937 #define every_job_text     12
1938 #define every_cr_text      13
1939 #define mark_text          14
1940 #define write_text         15
1941 /* sec 0323 */
1942 #define back_list(a) begin_token_list(a, backed_up)
1943 #define ins_list(a)  begin_token_list(a, inserted)
1944 /* sec 0344 */
1945 #define any_state_plus(a) mid_line + (a): case skip_blanks + (a): case new_line + (a)
1946 /* sec 0347 */
1947 #define add_delims_to(a) \
1948   (a) + math_shift:      \
1949   case (a) + tab_mark:   \
1950   case (a) + mac_param:  \
1951   case (a) + sub_mark:   \
1952   case (a) + letter:     \
1953   case (a) + other_char
1954 /* sec 0358 */
1955 #define no_expand_flag 257
1956 /* sec 0382 */
1957 #define top_mark_code         0
1958 #define first_mark_code       1
1959 #define bot_mark_code         2
1960 #define split_first_mark_code 3
1961 #define split_bot_mark_code   4
1962 #define top_mark              cur_mark[top_mark_code]
1963 #define first_mark            cur_mark[first_mark_code]
1964 #define bot_mark              cur_mark[bot_mark_code]
1965 #define split_first_mark      cur_mark[split_first_mark_code]
1966 #define split_bot_mark        cur_mark[split_bot_mark_code]
1967 /* sec 0400 */
1968 #define int_val   0
1969 #define dimen_val 1
1970 #define glue_val  2
1971 #define mu_val    3
1972 #define ident_val 4
1973 #define tok_val   5
1974 /* sec 0416 */
1975 #define input_line_no_code (glue_val + 1)
1976 #define badness_code       (glue_val + 2)
1977 /* sec 0421 */
1978 #define max_dimen 07777777777
1979 /* sec 0438 */
1980 #define octal_token             (other_token + '\'') // 3111
1981 #define hex_token               (other_token + '"' ) // 3106
1982 #define alpha_token             (other_token + '`' ) // 3168
1983 #define point_token             (other_token + '.' ) // 3118
1984 #define continental_point_token (other_token + ',' ) // 3116
1985 /* sec 0445 */
1986 #define zero_token    (other_token + '0')  // 3120
1987 #define A_token       (letter_token + 'A') // 2881
1988 #define other_A_token (other_token + 'A')  // 3137
1989 /* sec 0468 */
1990 #define number_code        0
1991 #define roman_numeral_code 1
1992 #define string_code        2
1993 #define meaning_code       3
1994 #define font_name_code     4
1995 #define job_name_code      5
1996 /* sec 0480 */
1997 #define closed    2
1998 #define just_open 1
1999 /* sec 0487 */
2000 #define if_char_code   0
2001 #define if_cat_code    1
2002 #define if_int_code    2
2003 #define if_dim_code    3
2004 #define if_odd_code    4
2005 #define if_vmode_code  5
2006 #define if_hmode_code  6
2007 #define if_mmode_code  7
2008 #define if_inner_code  8
2009 #define if_void_code   9
2010 #define if_hbox_code   10
2011 #define if_vbox_code   11
2012 #define ifx_code       12
2013 #define if_eof_code    13
2014 #define if_true_code   14
2015 #define if_false_code  15
2016 #define if_case_code   16
2017 /* sec 0489 */
2018 #define if_node_size     2
2019 #define if_line_field(a) mem[(a) + 1].cint
2020 #define if_code          1
2021 #define fi_code          2
2022 #define else_code        3
2023 #define or_code          4
2024 /* sec 0544 */
2025 #define no_tag   0
2026 #define lig_tag  1
2027 #define list_tag 2
2028 #define ext_tag  3
2029 /* sec 0545 */
2030 #define stop_flag    128
2031 #define kern_flag    128
2032 #define skip_byte(a) a.b0
2033 #define next_char(a) a.b1
2034 #define op_byte(a)   a.b2
2035 #define rem_byte(a)  a.b3
2036 /* sec 0546 */
2037 #define ext_top(a) a.b0
2038 #define ext_mid(a) a.b1
2039 #define ext_bot(a) a.b2
2040 #define ext_rep(a) a.b3
2041 /* sec 0547 */
2042 #define slant_code         1
2043 #define space_code         2
2044 #define space_stretch_code 3
2045 #define space_shrink_code  4
2046 #define x_height_code      5
2047 #define quad_code          6
2048 #define extra_space_code   7
2049 /* sec 0549 */
2050 #define non_char    256
2051 #define non_address 0
2052 /* sec 0554 */
2053 #define char_info(a, b)   font_info[char_base[a] + b].qqqq
2054 #define char_width(a, b)  font_info[width_base[a] + b.b0].cint
2055 #define char_exists(a)    (a.b0 > min_quarterword)
2056 #define char_italic(a, b) font_info[italic_base[a] + (b.b2) / 4].cint
2057 #define height_depth(a)   (a.b1)
2058 #define char_height(a, b) font_info[height_base[a] + (b) / 16].cint
2059 #define char_depth(a, b)  font_info[depth_base[a] + (b) % 16].cint
2060 #define char_tag(a)       (a.b2 % 4)
2061 /* sec 0557 */
2062 #define char_kern(a, b)        font_info[kern_base[a] + 256 * op_byte(b) + rem_byte(b)].cint
2063 #define kern_base_offset       (256 * (128 + min_quarterword))
2064 #define lig_kern_start(a, b)   lig_kern_base[a] + rem_byte(b)
2065 #define lig_kern_restart(a, b) lig_kern_base[a] + 256 * op_byte(b) + rem_byte(b) + 32768 - kern_base_offset
2066 /* sec 0558 */
2067 #define param(a, b)      font_info[a + param_base[b]].cint
2068 #define slant(f)         param(slant_code, f)
2069 #define space(f)         param(space_code, f)
2070 #define space_stretch(f) param(space_stretch_code, f)
2071 #define space_shrink(f)  param(space_shrink_code, f)
2072 #define x_height(f)      param(x_height_code, f)
2073 #define quad(f)          param(quad_code, f)
2074 #define extra_space(f)   param(extra_space_code, f)
2075 /* sec 0564 */
2076 /* sec 0585 */
2077 #define set1      128 // c[1]
2078 #define set2      129 // c[2]
2079 #define set3      130 // c[3]
2080 #define set4      131 // c[4]
2081 #define set_rule  132 // a[4] b[4]
2082 #define put1      133 // c[1]
2083 #define put2      134 // c[2]
2084 #define put3      135 // c[3]
2085 #define put4      136 // c[4]
2086 #define put_rule  137 // a[4] b[4]
2087 #define nop       138 // NULL
2088 #define bop       139 // c0[4] c1[4] ... c9[4] p[4]
2089 #define eop       140 // NULL
2090 //#define dvi_push 141
2091 //#define dvi_pop  142
2092 #define right1    143 // b[1]
2093 #define right2    144 // b[2]
2094 #define right3    145 // b[3]
2095 #define right4    146 // b[4]
2096 #define w0        147 //
2097 #define w1        148 // b[1]
2098 #define w2        149 // b[2]
2099 #define w3        150 // b[3]
2100 #define w4        151 // b[4]
2101 #define x0        152 //
2102 #define x1        153 // b[1]
2103 #define x2        154 // b[2]
2104 #define x3        155 // b[3]
2105 #define x4        156 // b[4]
2106 #define down1     157 // a[1]
2107 #define down2     158 // a[2]
2108 #define down3     159 // a[3]
2109 #define down4     160 // a[4]
2110 #define y0        161 //
2111 #define y1        162 // a[1]
2112 #define y2        163 // a[2]
2113 #define y3        164 // a[3]
2114 #define y4        165 // a[4]
2115 #define z0        166 //
2116 #define z1        167 // a[1]
2117 #define z2        168 // a[2]
2118 #define z3        169 // a[3]
2119 #define z4        170 // a[4]
2120 #define fnt_num_0 171 //
2121 #define fnt1      235 // k[1]
2122 #define fnt2      236 // k[2]
2123 #define fnt3      237 // k[3]
2124 #define fnt4      238 // k[4]
2125 #define xxx1      239 // k[1] x[k]
2126 #define xxx2      240 // k[2] x[k]
2127 #define xxx3      241 // k[3] x[k]
2128 #define xxx4      242 // k[4] x[k]
2129 #define fnt_def1  243 // k[1] c[4] s[4] d[4] a[1] l[1] n[a + l]
2130 #define fnt_def2  244 // k[2] c[4] s[4] d[4] a[1] l[1] n[a + l]
2131 #define fnt_def3  245 // k[3] c[4] s[4] d[4] a[1] l[1] n[a + l]
2132 #define fnt_def4  246 // k[4] c[4] s[4] d[4] a[1] l[1] n[a + l]
2133 #define pre       247 // i[1] num[4] den[4] mag[4] k[1] x[k]
2134 #define post      248 //
2135 #define post_post 249 //
2136 /* sec 0587 */
2137 #define id_byte 2
2138 /* sec 0605 */
2139 #define movement_node_size 3
2140 #define location(a) mem[a + 2].cint
2141 /* sec 0608 */
2142 #define y_here  1
2143 #define z_here  2
2144 #define yz_OK   3
2145 #define y_OK    4
2146 #define z_OK    5
2147 #define d_fixed 6
2148 /* sec 0611 */
2149 #define none_seen 0
2150 #define y_seen    6
2151 #define z_seen    12
2152 /* sec 0644 */
2153 #define exactly    0
2154 #define additional 1
2155 /* sec 0769 */
2156 #define u_part(a)     mem[(a) + height_offset].cint
2157 #define v_part(a)     mem[(a) + depth_offset].cint
2158 #define extra_info(a) info((a) + list_offset)
2159 /* sec 0681 */
2160 #define noad_size      4
2161 #define nucleus(a)     ((a) + 1)
2162 #define supscr(a)      ((a) + 2)
2163 #define subscr(a)      ((a) + 3)
2164 #define math_type      link
2165 #define fam            font
2166 #define math_char      1
2167 #define sub_box        2
2168 #define sub_mlist      3
2169 #define math_text_char 4
2170 /* sec 0682 */
2171 #define ord_noad   (unset_node + 3) // 16
2172 #define op_noad    (ord_noad + 1  ) // 17
2173 #define bin_noad   (ord_noad + 2  ) // 18
2174 #define rel_noad   (ord_noad + 3  ) // 19
2175 #define open_noad  (ord_noad + 4  ) // 20
2176 #define close_noad (ord_noad + 5  ) // 21
2177 #define punct_noad (ord_noad + 6  ) // 22
2178 #define inner_noad (ord_noad + 7  ) // 23
2179 #define limits    1
2180 #define no_limits 2
2181 /* sec 0683 */
2182 #define left_delimiter(a)  ((a) + 4)
2183 #define right_delimiter(a) ((a) + 5)
2184 #define radical_noad       (inner_noad + 1) // 24
2185 #define radical_noad_size  5
2186 #define fraction_noad      (radical_noad + 1) // 25
2187 #define fraction_noad_size 6
2188 #define small_fam(a)       mem[(a)].qqqq.b0
2189 #define small_char(a)      mem[(a)].qqqq.b1
2190 #define large_fam(a)       mem[(a)].qqqq.b2
2191 #define large_char(a)      mem[(a)].qqqq.b3
2192 #define thickness          width
2193 #define default_code       010000000000L
2194 #define numerator          supscr
2195 #define denominator        subscr
2196 /* sec 0687 */
2197 #define under_noad        (fraction_noad + 1) // 26
2198 #define over_noad         (under_noad + 1   ) // 27
2199 #define accent_noad       (over_noad + 1    ) // 28
2200 #define accent_noad_size  5
2201 #define accent_chr(a)     (a) + 4
2202 #define vcenter_noad      (accent_noad + 1  ) // 29
2203 #define left_noad         (vcenter_noad + 1 ) // 30
2204 #define right_noad        (left_noad + 1    ) // 31
2205 #define delimiter         nucleus
2206 #define script_allowed(a) ((type(a) >= ord_noad) && (type(a) < left_noad))
2207 /* sec 0688 */
2208 #define style_node          (unset_node + 1)
2209 #define style_node_size     3
2210 #define display_style       0
2211 #define text_style          2
2212 #define script_style        4
2213 #define script_script_style 6
2214 #define cramped             1
2215 /* sec 0689 */
2216 #define choice_node            (unset_node + 2)
2217 #define display_mlist(a)       info(a + 1)
2218 #define text_mlist(a)          link(a + 1)
2219 #define script_mlist(a)        info(a + 2)
2220 #define script_script_mlist(a) link(a + 2)
2221 /* sec 0699 */
2222 #define text_size          0
2223 #define script_size        16
2224 #define script_script_size 32
2225 /* sec 0700 */
2226 #define mathsy(a, b)        font_info[a + param_base[fam_fnt(2 + b)]].cint
2227 #define math_x_height(a)    mathsy(5, a)
2228 #define math_quad(a)        mathsy(6, a)
2229 #define num1(a)             mathsy(8, a)
2230 #define num2(a)             mathsy(9, a)
2231 #define num3(a)             mathsy(10, a)
2232 #define denom1(a)           mathsy(11, a)
2233 #define denom2(a)           mathsy(12, a)
2234 #define sup1(a)             mathsy(13, a)
2235 #define sup2(a)             mathsy(14, a)
2236 #define sup3(a)             mathsy(15, a)
2237 #define sub1(a)             mathsy(16, a)
2238 #define sub2(a)             mathsy(17, a)
2239 #define sup_drop(a)         mathsy(18, a)
2240 #define sub_drop(a)         mathsy(19, a)
2241 #define delim1(a)           mathsy(20, a)
2242 #define delim2(a)           mathsy(21, a)
2243 #define axis_height(a)      mathsy(22, a)
2244 #define total_mathsy_params 22
2245 /* sec 0701 */
2246 #define mathex(a)              font_info[(a) + param_base[fam_fnt(3 + cur_size)]].cint
2247 #define default_rule_thickness mathex(8)
2248 #define big_op_spacing1        mathex(9)
2249 #define big_op_spacing2        mathex(10)
2250 #define big_op_spacing3        mathex(11)
2251 #define big_op_spacing4        mathex(12)
2252 #define big_op_spacing5        mathex(13)
2253 #define total_mathex_params    13
2254 /* sec 0702 */
2255 #define cramped_style(a) (2 * ((a) / 2) + cramped)
2256 #define sub_style(a)     (2 * ((a) / 4) + script_style + cramped)
2257 #define sup_style(a)     (2 * ((a) / 4) + script_style + ((a) % 2))
2258 #define num_style(a)     ((a) + 2 - 2 * ((a) / 6))
2259 #define denom_style(a)   (2 * ((a) / 2) + cramped + 2 - 2 * ((a) / 6))
2260 /* sec 0725 */
2261 #define new_hlist(a) mem[nucleus(a)].cint
2262 /* sec 0770 */
2263 #define preamble              link(align_head)
2264 #define align_stack_node_size 5
2265 /* sec 0780 */
2266 #define span_code          256
2267 #define cr_code            257
2268 #define cr_cr_code         (cr_code + 1)
2269 #define end_template_token (cs_token_flag + frozen_end_template)
2270 /* sec 0797 */
2271 #define span_node_size 2
2272 /* sec 0817 */
2273 #define tight_fit      3
2274 #define loose_fit      1
2275 #define very_loose_fit 0
2276 #define decent_fit     2
2277 /* sec 0819 */
2278 #define active_node_size  3
2279 #define fitness           subtype
2280 #define break_node        rlink
2281 #define line_number       llink
2282 #define total_demerits(a) mem[a + 2].cint
2283 #define unhyphenated      0
2284 #define hyphenated        1
2285 #define last_active       active
2286 /* sec 0821 */
2287 #define passive_node_size 2
2288 #define cur_break         rlink
2289 #define prev_break        llink
2290 #define serial            info
2291 /* sec 0822 */
2292 #define delta_node_size 7
2293 #define delta_node      2
2294 /* sec 0823 */
2295 #define do_all_six(a) a(1); a(2); a(3); a(4); a(5); a(6)
2296 /* sec 0829 */
2297 #define copy_to_cur_active(a) cur_active_width[a] = active_width[a]
2298 /* sec 0832 */
2299 #define update_width(a) cur_active_width[a] = cur_active_width[a] + mem[r + (a)].cint
2300 /* sec 0833 */
2301 #define awful_bad 07777777777
2302 /* sec 0837 */
2303 #define set_break_width_to_background(a) break_width[a] = background[a]
2304 /* sec 0843 */
2305 #define convert_to_break_width(a)   mem[prev_r + (a)].cint = mem[prev_r + (a)].cint - cur_active_width[a] + break_width[a]
2306 #define store_break_width(a)        active_width[a] = break_width[a]
2307 #define new_delta_to_break_width(a) mem[q + (a)].cint = break_width[(a)] - cur_active_width[(a)]
2308 /* sec 0844 */
2309 #define new_delta_from_break_width(a) mem[q + (a)].cint = cur_active_width[(a)] - break_width[(a)]
2310 /* sec 0860 */
2311 #define combine_two_deltas(a) mem[prev_r + (a)].cint = mem[prev_r + (a)].cint + mem[r + (a)].cint
2312 #define downdate_width(a)     cur_active_width[(a)] = cur_active_width[(a)] - mem[prev_r + (a)].cint
2313 /* sec 0861 */
2314 #define update_active(a) active_width[(a)] = active_width[(a)] + mem[r + (a)].cint
2315 /* sec 0877 */
2316 #define next_break prev_break
2317 /* sec 0908 */
2318 #define append_charnode_to_t(a) \
2319   {                             \
2320     link(t) = get_avail();      \
2321     t = link(t);                \
2322     font(t) = hf;               \
2323     character(t) = (a);         \
2324   }
2325 #define set_cur_r()      \
2326   {                      \
2327     if (j < n)           \
2328       cur_r = hu[j + 1]; \
2329     else                 \
2330       cur_r = bchar;     \
2331                          \
2332     if (odd(hyf[j]))     \
2333       cur_rh = hchar;    \
2334     else                 \
2335       cur_rh = non_char; \
2336   }
2337 /* sec 0910 */
2338 #define wrap_lig(a)                           \
2339   if (ligature_present)                       \
2340   {                                           \
2341     p = new_ligature(hf, cur_l, link(cur_q)); \
2342                                               \
2343     if (lft_hit)                              \
2344     {                                         \
2345       subtype(p) = 2;                         \
2346       lft_hit = false;                        \
2347     }                                         \
2348                                               \
2349     if ((a))                                  \
2350       if (lig_stack == 0)                     \
2351       {                                       \
2352         incr(subtype(p));                     \
2353         rt_hit = false;                       \
2354       }                                       \
2355                                               \
2356     link(cur_q) = p;                          \
2357     t = p;                                    \
2358     ligature_present = false;                 \
2359   }
2360 #define pop_lig_stack()                       \
2361   {                                           \
2362     if (lig_ptr(lig_stack) != 0)              \
2363     {                                         \
2364       link(t) = lig_ptr(lig_stack);           \
2365       t = link(t);                            \
2366       incr(j);                                \
2367     }                                         \
2368                                               \
2369     p = lig_stack;                            \
2370     lig_stack = link(p);                      \
2371     free_node(p, small_node_size);            \
2372                                               \
2373     if (lig_stack == 0)                       \
2374     {                                         \
2375       set_cur_r();                            \
2376     }                                         \
2377     else                                      \
2378       cur_r = character(lig_stack);           \
2379   }
2380 /* sec 0914 */
2381 #define advance_major_tail()       \
2382   {                                \
2383     major_tail = link(major_tail); \
2384     incr(r_count);                 \
2385   }
2386 /* sec 0970 */
2387 #define active_height      active_width
2388 #define cur_height         active_height[1]
2389 #define set_height_zero(a) active_width[(a)] = 0
2390 /* sec 0974 */
2391 #define deplorable 100000L
2392 /* sec 0980 */
2393 #define inserts_only 1
2394 #define box_there    2
2395 /* sec 0981 */
2396 #define page_ins_node_size 4
2397 #define inserting          0
2398 #define split_up           1
2399 #define broken_ptr(a)      link(a + 1)
2400 #define broken_ins(a)      info(a + 1)
2401 #define last_ins_ptr(a)    link(a + 2)
2402 #define best_ins_ptr(a)    info(a + 2)
2403 /* sec 0982 */
2404 #define page_goal   page_so_far[0]
2405 #define page_total  page_so_far[1]
2406 #define page_shrink page_so_far[6]
2407 #define page_depth  page_so_far[7]
2408 /* sec 0987 */
2409 #define set_page_so_far_zero(a) page_so_far[(a)] = 0
2410 /* sec 1034 */
2411 #define adjust_space_factor()   \
2412 {                               \
2413   main_s = sf_code(cur_chr);    \
2414   if (main_s == 1000)           \
2415     space_factor = 1000;        \
2416   else if (main_s < 1000)       \
2417   {                             \
2418     if (main_s > 0)             \
2419       space_factor = main_s;    \
2420   }                             \
2421   else if (space_factor < 1000) \
2422     space_factor = 1000;        \
2423   else                          \
2424     space_factor = main_s;      \
2425 }
2426 /* sec 1035 */
2427 /* -> false */
2428 #define wrapup(a)                                         \
2429 {                                                         \
2430   if (cur_l < non_char)                                   \
2431   {                                                       \
2432     if (link(cur_q) != 0)                                 \
2433       if (character(tail) == hyphen_char[main_f])         \
2434         ins_disc = true;                                  \
2435                                                           \
2436     if (ligature_present)                                 \
2437     {                                                     \
2438       main_p = new_ligature(main_f, cur_l, link(cur_q));  \
2439                                                           \
2440       if (lft_hit)                                        \
2441       {                                                   \
2442         subtype(main_p) = 2;                              \
2443         lft_hit = false;                                  \
2444       }                                                   \
2445                                                           \
2446       if (a)                                              \
2447         if (lig_stack == 0)                               \
2448         {                                                 \
2449           incr(subtype(main_p));                          \
2450           rt_hit = false;                                 \
2451         }                                                 \
2452                                                           \
2453       link(cur_q) = main_p;                               \
2454       tail = main_p;                                      \
2455       ligature_present = false;                           \
2456     }                                                     \
2457                                                           \
2458     if (ins_disc)                                         \
2459     {                                                     \
2460       ins_disc = false;                                   \
2461                                                           \
2462       if (mode > 0)                                       \
2463       {                                                   \
2464         tail_append(new_disc());                          \
2465       }                                                   \
2466     }                                                     \
2467   }                                                       \
2468 }
2469 /* sec 1045 */
2470 #define any_mode(a) vmode + a: case hmode + a: case mmode + a
2471 /* sec 1046 */
2472 #define non_math(a) vmode + a: case hmode + a
2473 /* sec 1058 */
2474 #define fil_code     0
2475 #define fill_code    1
2476 #define ss_code      2
2477 #define fil_neg_code 3
2478 #define skip_code    4
2479 #define mskip_code   5
2480 /* sec 1071 */
2481 #define box_flag      010000000000
2482 #define ship_out_flag (box_flag + 512)
2483 #define leader_flag   (box_flag + 513)
2484 #define box_code      0
2485 #define copy_code     1
2486 #define last_box_code 2
2487 #define vsplit_code   3
2488 #define vtop_code     4
2489 /* sec 1178 */
2490 #define above_code     0
2491 #define over_code      1
2492 #define atop_code      2
2493 #define delimited_code 3
2494 /* sec 1222 */
2495 #define char_def_code      0
2496 #define math_char_def_code 1
2497 #define count_def_code     2
2498 #define dimen_def_code     3
2499 #define skip_def_code      4
2500 #define mu_skip_def_code   5
2501 #define toks_def_code      6
2502 /* sec 1290 */
2503 #define show_code     0
2504 #define show_box_code 1
2505 #define show_the_code 2
2506 #define show_lists    3
2507 /* sec 1342 */
2508 #define write_node_size 2
2509 #define open_node_size  3
2510 #define open_node       0
2511 #define write_node      1
2512 #define close_node      2
2513 #define special_node    3
2514 #define language_node   4
2515 #define what_lang(s)    link(s+1)
2516 #define what_lhm(s)     type(s+1)
2517 #define what_rhm(s)     subtype(s+1)
2518 #define write_tokens(s) link(s+1)
2519 #define write_stream(s) info(s+1)
2520 #define open_name(s)    link(s+1)
2521 #define open_area(s)    info(s+2)
2522 #define open_ext(s)     link(s+2)
2523 /* sec 1344 */
2524 #define immediate_code    4
2525 #define set_language_code 5
2526 /* sec 1371 */
2527 #define end_write_token (cs_token_flag + end_write)
2528 /* sec 79 */
2529 extern void synch_h(void);
2530 extern void synch_v(void);
2531 extern void set_cur_lang(void);
2532 extern str_number make_string_pool (char *s);
2533 extern char * md5_file(FILE * in_file);
2534 extern INLINE void str_room_ (int val);
2535 #define str_room(a) str_room_((int) a)
2536 extern INLINE void tail_append_ (pointer val);
2537 #define tail_append(a) tail_append_((pointer) a)
2538 extern INLINE void tex_help (unsigned int n, ...);
2539 extern INLINE void append_char(ASCII_code c);
2540 extern INLINE void append_lc_hex(ASCII_code c);
2541 extern INLINE void succumb(void);
2542 extern INLINE void dvi_out_ (ASCII_code op);
2543 #define dvi_out(op) dvi_out_((ASCII_code) (op))
2544 extern INLINE void free_avail_(halfword p);
2545 #define free_avail(p) free_avail_((halfword) (p))
2546 extern INLINE void flush_string (void);
2547 extern int load_pool_strings (integer spare_size);
2548 #define help0()     tex_help(0)
2549 #define help1(...)  tex_help(1, __VA_ARGS__)
2550 #define help2(...)  tex_help(2, __VA_ARGS__)
2551 #define help3(...)  tex_help(3, __VA_ARGS__)
2552 #define help4(...)  tex_help(4, __VA_ARGS__)
2553 #define help5(...)  tex_help(5, __VA_ARGS__)
2554 #define help6(...)  tex_help(6, __VA_ARGS__)
2555 /********BINDING WITH LIBHARU*********/
2556
2557 EXTERN HPDF_Doc  yandy_pdf;
2558 EXTERN HPDF_Page yandy_page;
2559 EXTERN HPDF_Font yandy_font;
2560
2561 /********BINDING WITH LIBHARU*********/