OSDN Git Service

scan_keyword: str_number -> char *.
[putex/putex.git] / src / texsourc / texd.h
1 /* *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** */
2 #ifdef MSDOS
3   /* allocate iniTeX (550 k) trie_c, trie_o, trie_l, trie_r, trie_hash, trie_taken */
4   #define ALLOCATEINI
5   /* allocate main memory for TeX (2 Meg) zmem = zzzaa */
6   #define ALLOCATEMAIN
7   /* NOT *//* allow increasing high area of main memory */ /* FLUSH */
8   #undef ALLOCATEHIGH  
9   /* NOT *//* allow increasing low area of main memory */ /* FLUSH */
10   #undef ALLOCATELOW  
11   /* allocate font_info (800 k) (dynamically now) */
12   #define ALLOCATEFONT 
13   /* allocate hyphenation trie stuff (270 k) trie_trl, trie_tro, trie_trc */
14   #define ALLOCATETRIES
15   /* allocate hyphenation exception tables */
16   #define ALLOCATEHYPHEN 
17   /* allow trie_size to be variable */
18   #define VARIABLETRIESIZE
19   /* allocate strings and string pointers (184 k)str_pool & str_start */
20   #define ALLOCATESTRING 
21   /* NOT */ /* allocate hash table (zzzae) (78k) */
22   #undef ALLOCATEHASH
23   /* NOT */ /* allocate dvi_buf (16k) */ /* changed in 1.3 1996/Jan/18 */
24   /* #define ALLOCATEDVIBUF */
25   #undef ALLOCATEDVIBUF 
26   /* experiment to dynamically deal with save_stack 99/Jan/4 */
27   #define ALLOCATESAVESTACK
28   /* experiment to dynamically deal with input_stack 99/Jan/21 */
29   #define ALLOCATEINPUTSTACK
30   /* experiment to dynamically deal with neststack 99/Jan/21 */
31   #define ALLOCATENESTSTACK
32   /* experiment to dynamically deal with param_stack 99/Jan/21 */
33   #define ALLOCATEPARAMSTACK
34   /* experiment to dynamically deal with input buffer 99/Jan/22 */
35   #define ALLOCATEBUFFER
36   /* increase fixed allocations */
37   #define INCREASEFIXED
38   /* increase number of fonts - quarterword 16 bit - max_quarterword limit */
39   /* there may still be some bugs with this however ... also may slow down */
40   /* also: should split use of quarterword for (i) font from (ii) char */
41   /* for example, xeq_level ? hyphenation trie_trc ? */
42   #define INCREASEFONTS 
43   /* NOT NOT *//* allocate eqtb (108k) */ /* changed in 1.3 1996/Jan/18 */
44   #undef ALLOCATEZEQTB
45   /* make font_info array fmemoryword == 32 bit instead of memory_word = 64 bit */
46   #define SHORTFONTINFO
47   /* make hash table htwohalves == 32 bit instead of twohalves == 64 bit */
48   // #define SHORTHASH  --- changed 2000/Feb/22 increase max_strings from 64K to 512M
49   #undef SHORTHASH
50   /* increase trie_op_size from 751 to 3001 96/Oct/12 */
51   #define INCREASETRIEOP
52 #endif
53
54 /* With old PharLap linker it was important to avoid large fixed allocation */
55 /* Now may be better to use fixed arrays rather than allocate them */
56 /* hence ALLOCATEZQTB, ALLOCATEDVIBUF and ALLOCATEMINOR are NOT defined */
57
58 /* *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** */
59
60 #undef  TRIP
61 #undef  TRAP
62 #define STAT
63 #undef  DEBUG
64 #include "texmf.h"
65
66 /* *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** */
67
68 #define MAXLINE 256         // for log_line buffer
69
70 /* #define max_halfword 65535L  */ /* for 32 bit memory word */
71 /* #define max_halfword 262143L */ /* for 36 bit memory word */
72 #define min_halfword -2147483647L  /* for 64 bit memory word (signed) */
73 #define max_halfword  2147483647L   /* for 64 bit memory word (signed) */
74
75 #define block_size 1000 /* block_size for variable length node alloc */
76
77 /* min_quarterword assumed 0 -- i.e. we use unsigned types for quarterword */
78 #define min_quarterword 0
79 #ifdef INCREASEFONTS
80   #define max_quarterword 65535L
81 #else
82   #define max_quarterword 255
83 #endif
84
85 /* #define default_mem_top 262140L */ /* usual big TeX allocation 2 Meg bytes */
86 /* #define default_mem_top 131070L */ /* usual big TeX allocation 1 Meg bytes */
87 #define default_mem_top 65534L      /* usual small TeX allocation 0.5 Meg   */
88
89 /* mem_bot smallest index in mem array dumped by iniTeX mem_top >= mem_min */
90 #define mem_bot 0
91 /* mem_top largest index in mem array dumped by iniTeX mem_top <= mem_max */
92 #ifdef ALLOCATEMAIN
93   EXTERN integer mem_top;
94   #define max_mem_size (max_halfword / sizeof(memory_word) -1)
95 #else
96   #define mem_top 262140L 
97 #endif
98
99 /* *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** */
100
101 /* *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** */
102 /* mem_max == mem_top in iniTeX, otherwise mem_max >= mem_top */
103 /* if ALLOCATEMAIN is true, then mem_max is a variable */
104 /* otherwise it is a pre-processor defined constant */
105 #ifdef ALLOCATEMAIN
106   EXTERN integer mem_max;
107 #else
108   /* *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** */
109   /* #define mem_max 262140L */
110   #define mem_max mem_top
111 #endif
112
113 /* *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** */
114 /* if ALLOCATEMAIN is true, then mem_min is a variable */
115 /* otherwise it is a pre-processor defined constant */
116 /* mem_min == mem_bot in iniTeX, otherwise mem_min <= mem_bot */
117 #ifdef ALLOCATEMAIN
118   EXTERN integer mem_min;
119 #else
120   /* *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** */
121   #define mem_min 0
122 #endif
123
124 /* *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** */
125
126 #define pool_name TEXPOOLNAME
127
128 /* #define mem_top 262140L */
129
130 /* type definitions follow */
131
132 typedef unsigned char ASCII_code; 
133 typedef unsigned char eight_bits; 
134 typedef integer pool_pointer; 
135 typedef integer str_number; 
136 typedef unsigned char packed_ASCII_code; 
137 typedef integer scaled; 
138 typedef integer nonnegative_integer; 
139 typedef char small_number; 
140
141 /* *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** */
142 /* buf_size is max size of input line and max size of csname */
143 /* make sure its multiple of four bytes long */
144 /* want to increase this so it can handle whole paragraph imported from WP */
145 #ifdef INCREASEFIXED
146 /* #define buf_size 8192 */
147 /* #define buf_size 12000 */    /* 1996/Jan/17 */
148 /* #define buf_size 16384 */      /* 1998/June/30 */
149 /* #define buf_size 20000 */      /* 1999/Jan/7 */
150 #else
151 /* *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** */
152 /* #define buf_size 3000  */
153 #endif
154
155 #ifdef ALLOCATEBUFFER
156   #define initial_buf_size   1000
157   #define increment_buf_size 2000
158   #define buf_size           2000000L /* arbitrary limit <= max_halfword */
159   EXTERN ASCII_code *        buffer;
160 #else
161   #define buf_size           20000 /* 1999/Jan/7 */
162   EXTERN ASCII_code          buffer[buf_size + 4]; /* padded out to ...  + 4 */
163 #endif
164 EXTERN integer first; 
165 EXTERN integer last; 
166 EXTERN integer max_buf_stack; 
167
168 #define error_line      79
169 #define half_error_line 50
170 #define max_print_line  79
171
172 /* *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** */
173 #ifdef INCREASEFIXED
174 /* maximum number of simultaneous input sources (?) */
175 /* #define stack_size 600 */    /* expanded again 1999/Jan/21 */
176 /* #define stack_size 800 */
177 /* maximum number of input files and insertions that can be going on */
178 /* #define max_in_open 15 */    /* for Y&Y TeX 1.2 */
179 /* #define max_in_open 31 */    /* 1996/Jan/17 */
180 /* #define max_in_open 63 */    /* 1996/Jan/18 */
181   #define max_in_open 127     /* 1996/Jan/20 - really ? */
182 /* save_size space for saving values outside of current group */
183 /* #define save_size 6000 */
184 /* #define save_size 8000 */      /* 1999/Jan/6 */
185 #else
186 /* *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** */
187 /* #define stack_size 300 */    /* Unix C version default */
188   #define max_in_open 15
189 /* #define save_size 1000 */    /* 3.14159 C version */
190 /* #define save_size 4000 */    /* 3.14159 C version */
191 #endif
192
193 /* *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** */
194 /* maximum internal font number - cannot be greated than max_quarter_word ! */
195 #ifdef INCREASEFONTS
196 /* #define font_max 511 */
197   #define font_max 1023     /* 1996/Jan/17 */
198 #else
199 /* *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** */
200   #define font_max 255 
201 #endif
202
203 /* *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** */
204 /* free the limit on font memory ! */ /* (2^32 - 1) / sizeof(memory_word) */
205 #ifdef ALLOCATEFONT
206 /* #define font_mem_size 262140L */
207   #define font_mem_size (max_halfword / sizeof(memory_word) -1)
208 #else
209 /* *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** */
210   #define font_mem_size 100000L
211 #endif
212
213 /* our real font_mem_size is 268435456 --- ridiculously large, of course */
214
215 /* #define non_address font_mem_size */   /* 3.141 */
216 #define non_address 0           /* 3.14159 96/Jan/16 */
217
218 /* *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** */
219
220 /* below is new dynamic allocation - bkph 93/Nov/28 */  /* enough for lplain */
221 #ifdef ALLOCATEFONT
222   #define initial_font_mem_size   20000
223   #define increment_font_mem_size 40000
224 #endif
225
226 /* *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** */
227 /* param_size maximum number of simultaneous macro parameters */
228 /* nest_size  maximum number of semantic levels simultaneously active */
229 #ifdef INCREASEFIXED
230 /* #define param_size 60 */     /* 3.14159 C version */
231 /* #define param_size 120 */
232 /* #define param_size 200 */      /* 1994/Oct/11 */
233 /* #define param_size 300 */      /* 1995/May/15 */
234 /* #define param_size 500 */      /* 1997/Jan/17 */
235 /* #define nest_size 40 */      /* 3.14159 C version */
236 /* #define nest_size 80 */
237 /* #define nest_size 100  */      /* 1994/Oct/11 */
238 /* #define nest_size 120 */     /* 1995/May/15 */
239 /* #define nest_size 200 */     /* 1999/Jan/7 */
240 #else
241 /* *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** */
242 /* #define param_size 60 */     /* Unix C default */
243 /* #define nest_size 40 */      /* Unix C default */
244 /* #define nest_size 100 */     /* Unix C default */
245 #endif
246
247 /* *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** */
248 /* max_strings max number of strings */ /* (2^32 - 1) / sizeof (integer) */
249 #ifdef ALLOCATESTRING
250 /* #define max_strings 262140L */
251 // #define max_strings (max_halfword / sizeof(integer) -1)
252   #define max_strings (max_halfword / sizeof(pool_pointer) -1)
253 /* #define pool_size 4032000L */
254   #define pool_size (max_halfword - 1)
255 /* #define stringmargin 32768L */
256   #define stringmargin 10000
257 #else
258 /* *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** */
259 /* #define max_strings 15000 */
260 #define max_strings 16384
261 #define pool_size 124000L 
262 #endif
263 #define stringvacancies 100000L 
264
265 /* *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** */
266 /* #if defined (ALLOCATEINITRIE) && defined (ALLOCATEHYPHEN) */
267 #ifdef VARIABLETRIESIZE
268   EXTERN integer trie_size;
269   #define default_trie_size 60000
270 /* *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** */
271 #else
272   #define trie_size 30000     /* 3.14159 C version */
273 #endif
274
275 /* increase trieop to accomadate more hyphenation patterns 96/OCt/12 */
276
277 #ifdef INCREASETRIEOP
278   #define trie_op_size      3001
279   #define neg_trie_op_size -3001
280   #define min_trie_op       0
281   #define max_trie_op       1000
282 #else
283   #define trie_op_size      751
284   #define neg_trie_op_size  -751
285   #define min_trie_op       0
286   #define max_trie_op       500
287 #endif
288
289 /* *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** */
290 /* dvi_buf_size must be multiple of 8 - half is written out at a time */
291 #ifdef ALLOCATEDVIBUF
292   #define default_dvi_buf_size 16384 
293 /* #define default_dvi_buf_size 32768 */    /* ? */
294   EXTERN int dvi_buf_size;
295 #else
296 /* *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** */
297   #define dvi_buf_size 16384      /* 3.14159 C version */
298 /* #define dvi_buf_size 32768 */        /* ? */
299 #endif
300
301 /* *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** */
302 /* WARNING: increasing hash table for cs names is not trivial */
303 /* size of hash table for control sequence name  < (mem_max - mem_min) / 10 */
304 /* #define hash_size 9500 */
305 /* #define hash_size 25000 */   /* 96/Jan/10 */
306 #define hash_size 32768       /* 96/Jan/17 */
307 /* trick to try and get around eqtb_extra problem */
308 /* #define hash_extra -256 */
309 #define hash_extra (255 - font_max) 
310 /* hash prime about 85% of hash_size (+ hash_extra) */
311 /* #define hashprime 7919  */
312 /* #define hash_prime 21247 */    /* 96/Jan/10 */
313 #define hash_prime 27197      /* 96/Jan/17 */
314 /* *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** */
315
316 /* CONSTRAINT: reconcile increase font use by stealing from hash table ... */
317
318 /* Probably require eqtb_extra to be zero, so hash_extra = 255 - font_max */
319 #if (hash_extra != 255 - font_max)
320   #error ERROR: hash_extra not equal to (255 - font_max)
321 #endif
322
323 /* *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** */
324
325 /* some sanity check when using narrow hash table ... */
326
327 /* using SHORTHASH limits hash_size to be less than 65536 */
328 /* using SHORTHASH limits max_strings to be less than 65536 */
329 /* if you ever need more string pointers, then #undef SHORTHASH --- */
330 /* you'll use more memory (about 130k byte) and format file larger (8k) */
331
332 #ifdef SHORTHASH
333 /* can only do this if INCREASEFONTS defined up above ... */
334 #if (max_quarterword < 65535L)
335 #error ERROR: max_quarterword < 65535L
336 #endif
337 /* with narrowed hash table can only have 65535 string pointers */
338 /* #if (max_strings > max_quarterword) */ /* this test does not work */
339 #undef max_strings
340 #define max_strings max_quarterword
341 /* #endif */
342 /* with narrowed hash table can only have 65535 hash table entries */
343 #if (hash_size > max_quarterword)
344 #undef hash_size
345 #define hash_size max_quarterword
346 #endif
347 #endif /* end of if SHORTHASH */
348
349 /* NOTE: if you define/undefine SHORTFONT have to redo formats */
350
351 /* *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** */
352 #ifdef INCREASEFONTS
353   typedef unsigned short quarterword;
354 #else
355 /* *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** */
356   typedef unsigned char quarterword;
357 #endif
358
359 /* possible alternative ? */ /* min_halfword = 0 and double max_halfword ? */
360 /* typedef unsigned long halfword; NO NO: since mem_min may be < 0 */
361 typedef integer halfword;
362 typedef char twochoices;
363 typedef char fourchoices;
364
365 #include "texmfmem.h"
366
367 typedef char glue_ord; 
368
369 typedef struct {
370 /*  short mode_field;  */
371   int mode_field; 
372   halfword head_field, tail_field; 
373   integer pg_field, ml_field; 
374   memory_word aux_field; 
375 } list_state_record; 
376
377 typedef char group_code; 
378
379 typedef struct {
380   quarterword state_field, index_field; 
381   halfword start_field, loc_field, limit_field, name_field;
382 } in_state_record; 
383
384 typedef integer internal_font_number; 
385 typedef integer font_index; 
386 typedef integer dvi_index; 
387 typedef integer trie_op_code; 
388 typedef integer trie_pointer; 
389
390 /* typedef short hyph_pointer; */   /* increased 1996/Oct/20 ??? */
391 typedef integer hyph_pointer; 
392
393 EXTERN integer bad; 
394 EXTERN ASCII_code xord[256]; 
395 EXTERN ASCII_code xchr[256]; 
396 /* EXTERN char name_of_file[PATHMAX + 1]; */
397 // EXTERN char name_of_file[PATHMAX + 4]; /* padded out 512 + 4 */
398 EXTERN unsigned char name_of_file[PATHMAX + 4]; // fix 2000 June 18 
399 EXTERN integer name_length; 
400
401 /* EXTERN ASCII_code buffer[buf_size + 1]; */
402 /* EXTERN ASCII_code buffer[buf_size + 4]; */ /* padded out to ...  + 4 */
403
404 /* *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** */
405 #ifdef ALLOCATESTRING
406   #define initial_pool_size     40000
407   #define increment_pool_size   80000
408   EXTERN packed_ASCII_code *    str_pool;
409   #define initial_max_strings   5000
410   #define increment_max_strings 10000
411   EXTERN pool_pointer *         str_start;
412 #else
413   EXTERN packed_ASCII_code      str_pool[pool_size + 1]; 
414   EXTERN pool_pointer           str_start[max_strings + 1]; 
415 #endif
416 /* *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** */
417
418 EXTERN pool_pointer pool_ptr;
419 EXTERN str_number   str_ptr;
420 EXTERN pool_pointer init_pool_ptr;
421 EXTERN str_number   init_str_ptr;
422
423 #ifdef INITEX
424   EXTERN alpha_file pool_file; 
425 #endif /* INITEX */
426
427 EXTERN alpha_file log_file; 
428 /* EXTERN char selector; */
429 /* EXTERN integer selector; */ /* padded out */
430 EXTERN int selector;      /* padded out */ /* 95/Jan/7 */
431 /* EXTERN char dig[23]; */
432 EXTERN char dig[23 + 1];  /* padded out */
433 EXTERN integer tally; 
434 EXTERN integer term_offset; 
435 EXTERN integer file_offset; 
436 EXTERN ASCII_code trick_buf[error_line + 1]; /* already padded 79 + 1 */
437 EXTERN integer trick_count; 
438 EXTERN integer first_count; 
439 /* EXTERN char interaction;  */
440 /* EXTERN integer interaction; */ /* padded out */
441 EXTERN int interaction; /* padded out */      /* 95/Jan/7 */
442 EXTERN bool deletions_allowed; 
443 EXTERN bool set_box_allowed; 
444 /* EXTERN char history; */
445 /* EXTERN integer history; */ /* padded out */
446 EXTERN int history; /* padded out */        /* 95/Jan/7 */
447 /* EXTERN schar error_count;  */
448 /* EXTERN integer error_count; */ /* padded out */
449 EXTERN int error_count; /* padded out */      /* 95/Jan/7 */
450 /* EXTERN str_number help_line[6]; */
451 EXTERN char * help_line[6];
452 /* EXTERN char help_ptr; */
453 /* EXTERN integer help_ptr; */ /* padded out */
454 EXTERN int help_ptr; /* padded out */       /* 95/Jan/7 */
455 EXTERN bool use_err_help; 
456 /* EXTERN integer interrupt;  */
457 EXTERN volatile integer interrupt;  /* bkph - do avoid compiler optimization */
458 EXTERN bool OK_to_interrupt; 
459 EXTERN bool arith_error; 
460 EXTERN scaled tex_remainder; 
461 EXTERN halfword temp_ptr; 
462
463 /* *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** */
464 #ifdef ALLOCATEMAIN
465   EXTERN memory_word * mainmemory;   /* remembered so can be free() later */
466   EXTERN memory_word * zzzaa;
467   #define zmem zzzaa
468 #else
469   /* *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** */
470   EXTERN memory_word 
471   /* #define zmem (zzzaa - (int)(mem_min)) */
472   /*  zzzaa[mem_max - mem_min + 1]; */
473   #define zmem (zzzaa - (int)(mem_bot))
474   zzzaa[mem_max - mem_bot + 1];
475 #endif
476
477 EXTERN halfword lo_mem_max;
478 EXTERN halfword hi_mem_min;
479 EXTERN integer var_used, dyn_used;
480 EXTERN halfword avail; 
481 EXTERN halfword mem_end; 
482 EXTERN halfword mem_start;      /* new in 3.14159 ??? */
483 EXTERN halfword rover; 
484
485 /* NOTE: the following really also need to be dynamically allocated */
486 #ifdef DEBUG
487 /* *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** */
488 #ifdef ALLOCATEMAIN
489   EXTERN char * zzzab;
490 #else
491 /* *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** */
492 /* EXTERN bool  */    /* save (4 - 1) * mem_max - mem_min */
493 EXTERN char
494 /* #define freearr (zzzab - (int)(mem_min)) */
495 /*  zzzab[mem_max - mem_min + 1];  */
496 #define freearr (zzzab - (int)(mem_bot))
497   zzzab[mem_max - mem_bot + 1]; 
498 #endif
499
500 #ifdef ALLOCATEMAIN
501   EXTERN char *zzzac;
502 #else
503 /* EXTERN bool */   /* save (4 - 1) * mem_max - mem_min */
504 EXTERN char
505 /* #define wasfree (zzzac - (int)(mem_min)) */
506 #define wasfree (zzzac - (int)(mem_bot))
507 /*  zzzac[mem_max - mem_min + 1];  */
508   zzzac[mem_max - mem_bot + 1]; 
509 #endif
510
511 EXTERN halfword was_mem_end, was_lo_max, was_hi_min; 
512 EXTERN bool panicking; 
513 #endif /* DEBUG */
514
515 EXTERN integer font_in_short_display; 
516 EXTERN integer depth_threshold; 
517 EXTERN integer breadth_max; 
518 /* EXTERN list_state_record nest[nest_size + 1];  */
519 /* EXTERN short shown_mode; */
520 /* EXTERN integer shown_mode; */ /* padded out */
521 EXTERN int shown_mode; /* padded out */   /* 95/Jan/7 */
522 /* EXTERN char old_setting; */
523 /* EXTERN integer old_setting; */ /* padded out */
524 EXTERN int old_setting; /* padded out */    /* 95/Jan/7 */
525
526 /* eqtn_extra is no longer used --- it should be 0 96/Jan/10 */
527 #ifdef INCREASEFONTS
528   #define eqtb_extra (font_max - 255 + hash_extra) 
529 #else
530   #define eqtb_extra 0
531 #endif
532
533 /* Probably require eqtb_extra to be zero, so hash_extra = 255 - font_max */
534 #if (eqtb_extra != 0)
535   #error ERROR: eqtb_extra is not zero (need hash_extra equal 255 - font_max)
536 #endif
537
538 /* *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** */
539 #ifdef ALLOCATEZEQTB
540 EXTERN memory_word * zeqtb; 
541 /* *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** */
542 #else
543 #ifdef INCREASEFONTS
544 /* EXTERN memory_word zeqtb[13507 + eqtb_extra];  */
545 EXTERN memory_word eqtb[(hash_size + 4007) + eqtb_extra]; 
546 #else
547 /* EXTERN memory_word zeqtb[13507];  */ /* hash_size =  9500 */
548 /* EXTERN memory_word zeqtb[29007];  */ /* hash_size = 25000 */
549 EXTERN memory_word zeqtb[(hash_size + 4007)]; 
550 #endif
551 #endif
552
553 /* *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** */
554 /* EXTERN quarterword 
555 #define xeq_level (zzzad -12663)    hash_size =  9500
556 #define xeq_level (zzzad -28163)    hash_size = 25000
557   zzzad[844]; */
558
559 #ifdef INCREASEFONTS
560 /* #define xeq_level (zzzad - (12663 + eqtb_extra))  */
561 #define xeq_level (zzzad - ((hash_size + 3163) + eqtb_extra))  
562 /* *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** */
563 #else
564 /* #define xeq_level (zzzad -12663) */
565 #define xeq_level (zzzad - (hash_size + 3163)) 
566 #endif
567 /* zzzad[844]; */
568 EXTERN quarterword zzzad[844]; /* ??? attempt to fix 99/Jan/5 */
569 /* region 5 & 6 int_base to eqtb_size: 13507 - 12663 */
570
571 /* *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** */
572 /* EXTERN twohalves 
573 #define hash (zzzae - 514)
574     zzzae[9767];  hash_size =  9500
575     zzzae[25267]; hash_size = 25000 */
576
577 #ifdef ALLOCATEHASH
578 #ifdef SHORTHASH
579 EXTERN htwohalves *zzzae;
580 #else
581 EXTERN twohalves *zzzae;
582 #endif
583 #define hash (zzzae - 514)
584 #else /* not allocating hash table */
585 /* *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** */
586 #ifdef SHORTHASH
587 EXTERN htwohalves 
588 #else
589 EXTERN twohalves 
590 #endif
591 #define hash (zzzae - 514)
592 /*  zzzae[9767];  */
593 #ifdef INCREASEFONTS
594   zzzae[hash_size + 267 + eqtb_extra]; 
595 #else
596   zzzae[hash_size + 267]; 
597 #endif
598 #endif
599
600 EXTERN halfword hash_used; 
601 EXTERN bool no_new_control_sequence; 
602 EXTERN integer cs_count; 
603
604 /* *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** */
605 /* using allocated save stack slows it down 1% to 2% */
606 /* despite reallocation, we still limit it to something finite */
607 /* to avoid soaking up all of machine memory in case of infinite loop */
608 #ifdef ALLOCATESAVESTACK
609   #define save_size 65536     /* arbitrary - ridiculously large */
610   #define initial_save_size 1000
611   #define increment_save_size 2000
612   EXTERN memory_word *save_stack; 
613 #else
614   #define save_size 8000        /* 1999/Jan/6 enough for even CRC */
615 /* *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** */
616   EXTERN memory_word save_stack[save_size + 1]; 
617 #endif
618
619 EXTERN integer save_ptr; 
620 EXTERN integer max_save_stack; 
621
622 /* The following could really be char instead of quarterword ... */
623 /* EXTERN quarterword cur_level;  */
624 /* EXTERN integer cur_level; */ /* padded out */
625 EXTERN int cur_level; /* padded out */    /* 95/Jan/7 */
626
627 /* EXTERN group_code cur_group;  */
628 /* EXTERN integer cur_group;  */ /* padded out */
629 EXTERN int cur_group; /* padded out */      /* 95/Jan/7 */
630
631 EXTERN integer cur_boundary; 
632 EXTERN integer mag_set; 
633
634 /* EXTERN eight_bits cur_cmd;  */
635 /* EXTERN integer cur_cmd;  */ /* padded out */
636 EXTERN int cur_cmd; /* padded out */      /* 95/Jan/7 */
637
638 /* EXTERN halfword cur_chr;  */ /* itex, tex0, tex, tex3, tex5, tex6, tex7, tex8 */
639 EXTERN int cur_chr;             /* 95/Jan/7 */
640
641 EXTERN halfword cur_cs; 
642 EXTERN halfword cur_tok; 
643
644 #ifdef ALLOCATENESTSTACK
645   #define nest_size 65536         /* arbitrary - ridiculously large */
646   #define initial_nest_size 100
647   #define increment_nest_size 200
648   EXTERN list_state_record * nest; 
649 #else
650   #define nest_size 200       /* 1999/Jan/7 */
651   EXTERN list_state_record nest[nest_size + 1]; 
652 #endif
653 EXTERN integer nest_ptr; 
654 EXTERN integer max_nest_stack; 
655 EXTERN list_state_record cur_list; 
656
657 #ifdef ALLOCATEPARAMSTACK
658   #define param_size 65536        /* arbitrary - ridiculously large */
659   #define initial_param_size 100
660   #define increment_param_size 200
661   EXTERN halfword * param_stack; 
662 #else
663 #define param_size 500        /* 1997/Jan/17 */
664 EXTERN halfword param_stack[param_size + 1]; 
665 #endif
666 EXTERN integer param_ptr; 
667 EXTERN integer max_param_stack; 
668
669 #ifdef ALLOCATEINPUTSTACK
670   #define stack_size 65536          /* arbitrary - ridiculously large */
671   #define initial_stack_size 100
672   #define increment_stack_size 200
673   EXTERN in_state_record *input_stack; 
674 #else
675   #define stack_size 800
676   EXTERN in_state_record input_stack[stack_size + 1]; 
677 #endif
678 EXTERN integer input_ptr; 
679 EXTERN integer max_in_stack; 
680
681 EXTERN integer high_in_open;      /* 1997/Jan/17 */
682 EXTERN in_state_record cur_input; 
683
684 /* EXTERN integer in_open;  */      /* used in itex, tex2, texmf */
685 EXTERN int in_open;         /* 95/Jan/7 */
686
687 EXTERN integer open_parens;
688 EXTERN integer max_open_parens; 
689 EXTERN alpha_file input_file[max_in_open + 1]; 
690 EXTERN integer line; 
691 EXTERN integer line_stack[max_in_open + 1]; 
692
693 /* EXTERN char scanner_status;  */
694 /* EXTERN integer scanner_status;  */ /* padded out */
695 EXTERN int scanner_status; /* padded out */ /* 95/Jan/7 */
696
697 EXTERN halfword warning_index; 
698 EXTERN halfword def_ref; 
699
700 EXTERN integer align_state; 
701 EXTERN integer base_ptr; 
702 EXTERN halfword par_loc; 
703 EXTERN halfword par_token; 
704 EXTERN bool force_eof; 
705 /* EXTERN halfword cur_mark[5];  */
706 EXTERN halfword cur_mark[6]; 
707
708 /* EXTERN char long_state; */
709 /* EXTERN integer long_state; */ /* padded out */
710 EXTERN int long_state; /* padded out */ /* 95/Jan/7 */
711
712 /* EXTERN halfword pstack[9];  */
713 EXTERN halfword pstack[10]; 
714
715 /* EXTERN integer cur_val; */
716 EXTERN int cur_val;           /* 95/Jan/7 */
717
718 /* EXTERN char cur_val_level;  */
719 /* EXTERN integer cur_val_level; */ /* padded out */
720 EXTERN int cur_val_level; /* padded out */ /* 95/Jan/7 */
721
722 /* EXTERN small_number radix;  */
723 /* EXTERN integer radix;  */ /* padded out */
724 EXTERN int radix; /* padded out */    /* 95/Jan/7 */
725
726 /* EXTERN glue_ord cur_order;  */
727 /* EXTERN integer cur_order;  */ /* padded out */
728 EXTERN int cur_order; /* padded out */    /* 95/Jan/7 */
729
730 EXTERN alpha_file read_file[16];  /* hard wired limit in TeX */
731 /* EXTERN char read_open[17];  */
732 EXTERN char read_open[20]; /* padded out */
733
734 EXTERN halfword cond_ptr; 
735
736 /* EXTERN char if_limit; */
737 /* EXTERN integer if_limit; */ /* padded out */
738 EXTERN int if_limit; /* padded out */   /* 95/Jan/7 */
739
740 /* EXTERN small_number cur_if; */
741 /* EXTERN integer cur_if; */ /* padded out */
742 EXTERN int cur_if; /* padded out */   /* 95/Jan/7 */
743
744 EXTERN integer if_line; 
745 EXTERN integer skip_line; 
746 EXTERN str_number cur_name; 
747 EXTERN str_number cur_area; 
748 EXTERN str_number cur_ext; 
749 EXTERN pool_pointer area_delimiter; 
750 EXTERN pool_pointer ext_delimiter; 
751 EXTERN integer format_default_length; 
752 EXTERN ccharpointer TEX_format_default; 
753 EXTERN bool name_in_progress; 
754 EXTERN bool log_opened; 
755 EXTERN bool quoted_file_name;
756 EXTERN str_number job_name; 
757 EXTERN str_number output_file_name;   // DVI file
758 EXTERN str_number texmf_log_name;   // LOG file
759 EXTERN byte_file dvi_file; 
760 EXTERN byte_file tfm_file;
761 EXTERN char * dvi_file_name;
762 EXTERN char * log_file_name;
763
764 /*******************************************************************/
765
766 /* SHORTFONTINFO halves the memory word used to store font info */
767 /* if it is not defined we use ordinary TeX memory words */
768
769 #ifdef SHORTFONTINFO
770 /* keep definition of fmemoryword in texmfmem.h */
771 /* keep definition of ffourquarters in texfmem.h */
772 /* keep definition of fquarterword in texfmem.h */
773 #else
774 /* go back to original definition as TeX memory word */
775 #undef fmemoryword
776 #define fmemoryword memory_word
777 /* go back to original definition as fourquarters of a TeX word */
778 #undef ffourquarters
779 #define ffourquarters fourquarters
780 /* go back to original definition as quaterword */
781 #undef fquarterword
782 #define fquarterword quarterword
783 #endif
784
785 /* *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** */
786 #ifdef ALLOCATEFONT
787   EXTERN fmemoryword * font_info; 
788 /* *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** */
789 #else
790 /* EXTERN memory_word font_info[font_mem_size + 1];  */
791   EXTERN fmemoryword font_info[font_mem_size + 1]; 
792 #endif
793
794 EXTERN font_index fmem_ptr; 
795 EXTERN internal_font_number font_ptr;
796 EXTERN internal_font_number frozenfontptr;        /* 99/Mar/26 */
797 /* There are about 24 integer size items per font, or about 100 bytes */
798 EXTERN ffourquarters font_check[font_max + 1]; 
799
800 EXTERN scaled font_size[font_max + 1]; 
801 EXTERN scaled font_dsize[font_max + 1]; 
802 EXTERN font_index font_params[font_max + 1];    /* in 3.14159 */
803 EXTERN str_number font_name[font_max + 1]; 
804 EXTERN str_number font_area[font_max + 1]; 
805 EXTERN eight_bits font_bc[font_max + 1]; /* already padded 511 + 1 = 512 */
806 EXTERN eight_bits font_ec[font_max + 1]; /* already padded 511 + 1 = 512 */
807 EXTERN halfword font_glue[font_max + 1]; 
808 /* use char instead of bool to save space, but is it worth slow down ? */
809 /* EXTERN char font_used[font_max + 1];  */
810 EXTERN bool font_used[font_max + 1]; 
811
812 /* might want to make some of following only one character wide also ? */
813 /* except some use -1 as special case value */
814 /* well, at least make them short instead of integer */
815 EXTERN integer hyphen_char[font_max + 1]; 
816 EXTERN integer skew_char[font_max + 1]; 
817 EXTERN font_index bchar_label[font_max + 1]; 
818 EXTERN short font_bchar[font_max + 1];  /* already padded 1023 + 1 = 1024 */
819 /* don't change above to int or format file will be incompatible */
820 EXTERN short font_false_bchar[font_max + 1];  /* already padded 1023 + 1 = 1024 */
821 /* don't change above to int or format file will be incompatible */
822 EXTERN integer char_base[font_max + 1]; 
823 EXTERN integer width_base[font_max + 1]; 
824 EXTERN integer height_base[font_max + 1]; 
825 EXTERN integer depth_base[font_max + 1]; 
826 EXTERN integer italic_base[font_max + 1]; 
827 EXTERN integer lig_kern_base[font_max + 1]; 
828 EXTERN integer kern_base[font_max + 1]; 
829 EXTERN integer exten_base[font_max + 1]; 
830 EXTERN integer param_base[font_max + 1]; 
831
832 EXTERN ffourquarters null_character; 
833
834 EXTERN integer total_pages; 
835 EXTERN scaled max_v; 
836 EXTERN scaled max_h; 
837 EXTERN integer max_push; 
838 EXTERN integer last_bop; 
839 EXTERN integer dead_cycles; 
840 EXTERN bool doing_leaders; 
841
842 /* EXTERN quarterword c, f;  */
843 /* EXTERN integer c, f */; /* padded out */
844 EXTERN int c, f; /* padded out */       /* 95/Jan/7 */
845
846 EXTERN scaled rule_ht, rule_dp, rule_wd; 
847 EXTERN halfword g; 
848 EXTERN integer lq, lr; 
849
850 #ifdef ALLOCATEDVIBUF
851   EXTERN eight_bits *zdvibuf; 
852 #else
853   /* EXTERN eight_bits dvi_buf[dvi_buf_size + 1]; */
854   /* EXTERN eight_bits dvi_buf[dvi_buf_size + 4]; */ /* padded out  */
855   EXTERN eight_bits zdvibuf[dvi_buf_size + 4];  /* padded out 1996/Jan/18 */
856 #endif
857
858 EXTERN dvi_index half_buf; 
859 EXTERN dvi_index dvi_limit; 
860 EXTERN dvi_index dvi_ptr; 
861 EXTERN integer dvi_offset; 
862 EXTERN integer dvi_gone; 
863 EXTERN halfword down_ptr, right_ptr; 
864 EXTERN scaled dvi_h, dvi_v; 
865 EXTERN scaled cur_h, cur_v; 
866 EXTERN internal_font_number dvi_f; 
867 EXTERN integer cur_s; 
868 EXTERN scaled totalstretch[4], totalshrink[4]; /* padded already */
869 EXTERN integer last_badness; 
870 EXTERN halfword adjust_tail; 
871 EXTERN integer pack_begin_line; 
872 EXTERN twohalves empty_field; 
873 EXTERN fourquarters null_delimiter; 
874 EXTERN halfword cur_mlist; 
875
876 /* EXTERN small_number cur_style; */
877 /* EXTERN integer cur_style; */  /* padded out */ /* tex5.c, tex7.c */
878 EXTERN int cur_style;  /* padded out */     /* 95/Jan/7 */
879
880 /* EXTERN small_number cur_size; */
881 /* EXTERN integer cur_size;  */ /* padded out */
882 EXTERN int cur_size;  /* padded out */        /* 95/Jan/7 */
883
884 EXTERN scaled cur_mu; 
885 EXTERN bool mlist_penalties; 
886 EXTERN internal_font_number cur_f; 
887
888 /* EXTERN quarterword cur_c; */
889 /* EXTERN integer cur_c; */  /* padded out */
890 EXTERN int cur_c;  /* padded out */     /* 95/Jan/7 */
891
892 EXTERN ffourquarters cur_i; 
893
894 EXTERN integer magic_offset; 
895 EXTERN halfword cur_align; 
896 EXTERN halfword cur_span; 
897 EXTERN halfword cur_loop; 
898 EXTERN halfword align_ptr; 
899 EXTERN halfword cur_head, cur_tail; 
900 EXTERN halfword just_box; 
901 EXTERN halfword passive; 
902 EXTERN halfword printed_node; 
903 EXTERN halfword pass_number; 
904 /* EXTERN scaled active_width[7]; */
905 EXTERN scaled active_width[8]; 
906 /* EXTERN scaled cur_active_width[7]; */
907 EXTERN scaled cur_active_width[8]; 
908 /* EXTERN scaled background[7]; */
909 EXTERN scaled background[8]; 
910 /* EXTERN scaled break_width[7]; */
911 EXTERN scaled break_width[8]; 
912 EXTERN bool noshrinkerroryet; 
913 EXTERN halfword cur_p; 
914 EXTERN bool second_pass; 
915 EXTERN bool final_pass; 
916 EXTERN integer threshold; 
917 EXTERN integer minimal_demerits[4]; 
918 EXTERN integer minimum_demerits; 
919 EXTERN halfword best_place[4]; 
920 EXTERN halfword best_pl_line[4]; 
921 EXTERN scaled disc_width; 
922 EXTERN halfword easyline; 
923 EXTERN halfword last_special_line; 
924 EXTERN scaled first_width; 
925 EXTERN scaled second_width; 
926 EXTERN scaled first_indent; 
927 EXTERN scaled second_indent; 
928 EXTERN halfword best_bet; 
929 EXTERN integer fewest_demerits; 
930 EXTERN halfword best_line; 
931 EXTERN integer actual_looseness; 
932 EXTERN integer line_diff; 
933 /* EXTERN short hc[64+2]; */  /* padded OK 66 * 2 = 132 which is divisible by 4 */
934 EXTERN int hc[66];  /* padded OK 66 * 2 = 132 which is divisible by 4 */
935
936 /* EXTERN small_number hn; */
937 /* EXTERN integer hn; */  /* padded out */
938 EXTERN int hn;  /* padded out */      /* 95/Jan/7 */
939
940 EXTERN halfword ha, hb; 
941
942 /* EXTERN internal_font_number hf;  */
943 EXTERN int hf;              /* 95/Jan/7 */
944
945 /* EXTERN short hu[64+2]; */    /* padded OK */
946 EXTERN int hu[66];    /* padded OK */ 
947
948 /* EXTERN integer hyf_char;  */
949 EXTERN int hyf_char;            /* 95/Jan/7 */
950
951 /* init_cur_lang new in 3.14159 */
952 /* EXTERN ASCII_code cur_lang, init_cur_lang; */
953 /* EXTERN integer cur_lang, init_cur_lang; */ /* padded out */
954 EXTERN int cur_lang, init_cur_lang; /* padded out */    /* 95/Jan/7 */
955
956 EXTERN integer lhyf, rhyf;
957 /* EXTERN init_l_hyf, init_r_hyf; */ /* new in 3.14159 */
958 EXTERN integer init_l_hyf, init_r_hyf;  /* new in 3.14159 */
959
960 EXTERN halfword hyfbchar; 
961 /* EXTERN char hyf[65];  */
962 EXTERN char hyf[68]; /* padded out */
963 EXTERN halfword init_list; 
964 EXTERN bool init_lig; 
965 EXTERN bool init_lft; 
966
967 /* EXTERN small_number hyphen_passed; */
968 /* EXTERN integer hyphen_passed; */  /* padded out */
969 EXTERN int hyphen_passed;  /* padded out */     /* 95/Jan/7 */
970
971 /* EXTERN halfword cur_l, cur_r; */   /* make int's ? 95/Jan/7 */
972 EXTERN int cur_l, cur_r;    /* make int's ? 95/Jan/7 */
973
974 EXTERN halfword cur_q; 
975 EXTERN halfword lig_stack; 
976 EXTERN bool ligature_present; 
977 EXTERN bool lft_hit, rt_hit; 
978
979 /* *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** */
980 /* could perhaps use packed_ASCII_code for trie_trc ? */
981 #ifdef ALLOCATETRIES
982   EXTERN halfword *trie_trl; 
983   EXTERN halfword *trie_tro; 
984   EXTERN quarterword *trie_trc; 
985 #else
986   /* *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** */
987   EXTERN halfword trie_trl[trie_size + 1]; 
988   EXTERN halfword trie_tro[trie_size + 1]; 
989   EXTERN quarterword trie_trc[trie_size + 1]; 
990 #endif
991 EXTERN small_number hyf_distance[trie_op_size + 1]; /* already padded 751 + 1 */
992 EXTERN small_number hyf_num[trie_op_size + 1];    /* already padded 751 + 1 */
993 EXTERN trie_op_code hyf_next[trie_op_size + 1]; 
994 EXTERN integer op_start[256]; 
995
996 /* if ALLOCATEHYPHEN is true, then hyphen_prime is a variable */
997 /* otherwise it is a pre-processor defined constant */
998 #ifdef ALLOCATEHYPHEN
999   #define default_hyphen_prime 1009
1000   EXTERN str_number * hyph_word;
1001   EXTERN halfword * hyph_list; 
1002   /* EXTERN hyphen_prime; */
1003   EXTERN integer hyphen_prime;
1004 #else
1005   #define hyphen_prime 607
1006   /* EXTERN str_number hyph_word[608];  */
1007   EXTERN str_number hyph_word[hyphen_prime + 1]; 
1008   /* EXTERN halfword hyph_list[608];  */
1009   EXTERN halfword hyph_list[hyphen_prime + 1]; 
1010 #endif
1011
1012 /* EXTERN hyph_pointer hyph_count;  */
1013 /* EXTERN integer hyph_count; */  /* padded out */
1014 EXTERN int hyph_count;  /* padded out */    /* 95/Jan/7 */
1015
1016 #ifdef INITEX
1017 EXTERN integer trie_op_hash_C[trie_op_size - neg_trie_op_size + 1];
1018 #define trie_op_hash (trie_op_hash_C - (int)(neg_trie_op_size)) 
1019 EXTERN trie_op_code trie_used[256]; 
1020 EXTERN ASCII_code trie_op_lang[trie_op_size + 1];   /* already padded 751 + 1 */
1021 EXTERN trie_op_code trie_op_val[trie_op_size + 1]; 
1022 EXTERN integer trie_op_ptr; 
1023 #endif /* INITEX */
1024
1025 EXTERN trie_op_code max_op_used; 
1026 EXTERN bool smallop; 
1027
1028 #ifdef INITEX
1029   #ifdef ALLOCATEINI
1030     EXTERN packed_ASCII_code *trie_c;  
1031     EXTERN trie_op_code *trie_o; 
1032     EXTERN trie_pointer *trie_l; 
1033     EXTERN trie_pointer *trie_r; 
1034     EXTERN trie_pointer *trie_hash; 
1035   #else /* end ALLOCATEINI */
1036     EXTERN packed_ASCII_code trie_c[trie_size + 1]; 
1037     EXTERN trie_op_code trie_o[trie_size + 1]; 
1038     EXTERN trie_pointer trie_l[trie_size + 1]; 
1039     EXTERN trie_pointer trie_r[trie_size + 1]; 
1040     EXTERN trie_pointer trie_hash[trie_size + 1]; 
1041   #endif /* end not ALLOCATEINI */
1042   EXTERN trie_pointer trie_ptr; 
1043 #endif /* INITEX */
1044
1045 #ifdef INITEX
1046   #ifdef ALLOCATEINI
1047     /* EXTERN bool *trie_taken; */ /* save (4 - 1) * trie_size = 90,000 byte */
1048     EXTERN char *trie_taken; 
1049   #else
1050     EXTERN bool trie_taken[trie_size + 1]; 
1051   #endif
1052
1053   EXTERN trie_pointer trie_min[256]; 
1054   EXTERN trie_pointer trie_max; 
1055   EXTERN bool trie_not_ready; 
1056 #endif /* INITEX */
1057 EXTERN scaled best_height_plus_depth; 
1058 EXTERN halfword page_tail; 
1059
1060 /* EXTERN char page_contents; */
1061 /* EXTERN integer page_contents; */ /* padded out */
1062 EXTERN int page_contents; /* padded out */      /* 95/Jan/7 */
1063
1064 #define cs_token_flag 4095    /* if we should want to use this ... */
1065
1066 /* ********************************************************************* */
1067
1068 /* do *some* sanity checking here --- rather than in TeX later 96/Jan/18 */
1069 /* (cannot catch everything here, since some is now dynamic) */
1070
1071 #if (half_error_line < 30) || (half_error_line > error_line - 15)
1072   #error ERROR: (half_error_line < 30) || (half_error_line > error_line - 15) BAD 1
1073 #endif
1074
1075 #if (max_print_line < 60)
1076   #error ERROR: (max_print_line < 60) BAD 2
1077 #endif
1078
1079 #if (hash_prime > hash_size)
1080   #error ERROR: (hash_prime > hash_size) BAD 5
1081 #endif
1082
1083 #if (max_in_open > 127)
1084   #error ERROR: (max_in_open > 127) BAD 6
1085 #endif
1086
1087 #if (min_quarterword > 0) || (max_quarterword < 127)
1088   #error ERROR: (min_quarterword > 0) || (max_quarterword < 127) BAD 11
1089 #endif
1090
1091 #if (min_halfword > 0) || (max_halfword < 32767)
1092   #error ERROR:  (min_halfword > 0) || (max_halfword < 32767) BAD 12
1093 #endif
1094
1095 #if (min_quarterword < min_halfword) || (max_quarterword > max_halfword)
1096   #error ERROR: (min_quarterword < min_halfword) || (max_quarterword > max_halfword) BAD 13
1097 #endif
1098
1099 #if (font_max > max_quarterword)
1100   #error ERROR: (font_max > max_quarterword) BAD 15
1101 #endif
1102
1103 #if (save_size > max_halfword)
1104   #error ERROR: (save_size > max_halfword) BAD 17
1105 #endif
1106
1107 #if (buf_size > max_halfword)
1108   #error ERROR:  (buf_size > max_halfword) BAD 18
1109 #endif
1110
1111 #if (max_quarterword - min_quarterword) < 255
1112   #error (max_quarterword - min_quarterword) < 255 BAD 19
1113 #endif
1114
1115 /* ********************************************************************* */
1116
1117 EXTERN scaled page_max_depth; 
1118 EXTERN halfword best_page_break; 
1119 EXTERN integer least_page_cost; 
1120 EXTERN scaled best_size; 
1121 EXTERN scaled page_so_far[8]; 
1122 EXTERN halfword last_glue; 
1123 EXTERN integer last_penalty; 
1124 EXTERN scaled last_kern; 
1125 EXTERN integer insert_penalties; 
1126 EXTERN bool output_active; 
1127 EXTERN internal_font_number main_f; 
1128
1129 EXTERN ffourquarters main_i; 
1130 EXTERN ffourquarters main_j; 
1131
1132 EXTERN font_index main_k; 
1133 EXTERN halfword main_p; 
1134 EXTERN integer main_s; 
1135 EXTERN halfword bchar; 
1136 EXTERN halfword false_bchar; 
1137 EXTERN bool cancel_boundary; 
1138 EXTERN bool ins_disc; 
1139 EXTERN halfword cur_box; 
1140 EXTERN halfword after_token; 
1141 EXTERN bool long_help_seen; 
1142 EXTERN str_number format_ident; 
1143 EXTERN word_file fmt_file; 
1144 EXTERN integer ready_already; 
1145
1146 EXTERN alpha_file write_file[16]; /* hard wired limit in TeX */
1147 EXTERN bool write_open[18]; 
1148
1149 EXTERN halfword write_loc; 
1150 EXTERN pool_pointer edit_name_start; 
1151 /* EXTERN integer edit_name_length, edit_line, tfm_temp;  */
1152 EXTERN integer edit_name_length, edit_line; 
1153 /* EXTERN integer tfm_temp; */    /* only used in tex3.c */
1154 EXTERN int tfm_temp;        /* only used in tex3.c 95/Jan/7 */
1155
1156 /* new stuff defined in local.c - bkph */
1157
1158 #ifdef MSDOS
1159   EXTERN bool is_initex;
1160   EXTERN bool verbose_flag;
1161   EXTERN bool trace_flag;
1162   EXTERN bool debug_flag;
1163   EXTERN bool heap_flag;
1164   EXTERN bool open_trace_flag;
1165   EXTERN bool cache_file_flag;
1166   EXTERN bool knuth_flag;
1167   EXTERN bool no_interrupts;
1168   EXTERN bool c_style_flag;
1169   EXTERN bool non_ascii;
1170   EXTERN bool key_replace;
1171   EXTERN bool deslash;
1172   EXTERN bool trimeof;
1173   EXTERN bool allow_patterns;
1174   EXTERN bool show_fonts_used;
1175   EXTERN bool reset_exceptions;
1176   EXTERN bool show_current;
1177   EXTERN bool current_flag;
1178   EXTERN bool current_tfm;
1179   EXTERN bool return_flag;
1180   EXTERN bool want_version;
1181   EXTERN bool civilize_flag;
1182   EXTERN bool show_numeric;
1183   EXTERN bool restrict_to_ascii;
1184   EXTERN bool show_missing;
1185   EXTERN bool full_file_name_flag;
1186   EXTERN bool save_strings_flag;
1187   EXTERN int mem_initex;
1188   EXTERN int mem_extra_high;
1189   EXTERN int mem_extra_low;
1190   EXTERN int new_hyphen_prime;
1191   EXTERN int missing_characters;
1192   EXTERN int show_in_hex;
1193   EXTERN int show_in_dos;
1194   EXTERN int test_dir_access;
1195   EXTERN int dir_method;
1196   EXTERN int file_method;
1197   /* EXTERN int waitflush; */
1198   EXTERN int show_fmt_flag;
1199   EXTERN int show_tfm_flag;
1200   EXTERN bool show_texinput_flag; /* 1998/Jan/28 */
1201   EXTERN bool truncate_long_lines;  /* 1998/Feb/2 */
1202   EXTERN bool show_cs_names;      /* 1998/Mar/31 */
1203   EXTERN int tab_step;
1204   EXTERN int pseudo_tilde;
1205   EXTERN int pseudo_space;
1206   EXTERN int allow_quoted_names;
1207   EXTERN int default_rule;
1208   EXTERN char *format_file;
1209   EXTERN char *source_direct;     /* 1998/Sep/29 */
1210   EXTERN char *string_file;
1211   EXTERN int share_flag;
1212   EXTERN char *format_name;
1213   EXTERN char *encoding_name;
1214   EXTERN bool format_specific;
1215   EXTERN bool encoding_specific;
1216   EXTERN bool show_line_break_stats;  /* 1996/Feb/9 */
1217   EXTERN int first_pass_count;      /* 1996/Feb/9 */
1218   EXTERN int second_pass_count;     /* 1996/Feb/9 */
1219   EXTERN int final_pass_count;      /* 1996/Feb/9 */
1220   EXTERN int underfull_hbox;      /* 1996/Feb/9 */
1221   EXTERN int overfull_hbox;     /* 1996/Feb/9 */
1222   EXTERN int underfull_vbox;      /* 1996/Feb/9 */
1223   EXTERN int overfull_vbox;     /* 1996/Feb/9 */
1224   EXTERN int paragraph_failed;      /* 1996/Feb/9 */
1225   EXTERN int singleline;        /* 1996/Feb/15 */
1226   EXTERN FILE *errout;
1227   EXTERN int font_dimen_zero;     /* 1998/Oct/5 */
1228   EXTERN int ignore_frozen;     /* 1998/Oct/5 */
1229   EXTERN bool suppress_f_ligs;    /* 1999/Jan/5 */
1230   EXTERN int abort_flag;      // not yet hooked up ???
1231   EXTERN int err_level;     // not yet hooked up ???
1232   EXTERN int jump_used;       /* 1999/Nov/28 */
1233   EXTERN jmp_buf jumpbuffer;      /* 1999/Nov/7 */
1234  #endif /* DOS */
1235
1236 #ifdef MSDOS
1237   extern int current_pool_size;       /* in local.c - bkph */
1238   extern int current_max_strings;     /* in local.c - bkph */
1239   extern int current_mem_size;        /* in local.c - bkph */
1240   extern int current_font_mem_size;     /* in local.c - bkph */
1241   extern int current_save_size;       /* in local.c - bkph */
1242   extern int current_stack_size;      /* in local.c - bkph */
1243   extern int current_nest_size;       /* in local.c - bkph */
1244   extern int current_param_size;      /* in local.c - bkph */
1245   extern int current_buf_size;        /* in local.c - bkph */
1246   extern char *tex_version;       /* in local.c - bkph */
1247   extern char *application;       /* in local.c - bkph */
1248   extern char *yandyversion;        /* in local.c - bkph */
1249   unsigned char wintodos[128];        /* in local.c - bkph */
1250   extern char last_filename[PATH_MAX];    /* in ourpaths.c */
1251   extern char log_line[MAXLINE];        /* in local.c */
1252   extern char *texpath;           /* in local.c */
1253
1254   memory_word * allocate_main_memory (int);   /* in local.c - bkph */
1255   memory_word * realloc_main (int, int);      /* in local.c - bkph */
1256   packed_ASCII_code * realloc_str_pool (int);   /* in local.c - bkph */
1257   pool_pointer * realloc_str_start (int);     /* in local.c - bkph */
1258   memory_word * realloc_save_stack (int);     /* in local.c - bkph */
1259   list_state_record * realloc_nest_stack (int); /* in local.c - bkph */
1260   in_state_record * realloc_input_stack (int);    /* in local.c - bkph */
1261   halfword * realloc_param_stack (int);     /* in local.c - bkph */
1262   ASCII_code * realloc_buffer (int);        /* in local.c - bkph */
1263   fmemoryword * realloc_font_info (int);      /* in local.c - bkph */
1264
1265   int realloc_hyphen (int);       /* in local.c - bkph */
1266   int allocate_tries (int);       /* in local.c - bkph */
1267
1268 void try_and_open (char *);       /* in local.c - bkph */
1269 void check_eqtb (char *);       /* in local.c - bkph */
1270 void probe_memory (void);       /* in local.c - bkph */
1271 // void show_maximums (FILE *);     /* in local.c - bkph */
1272 void print_cs_names (FILE *, int);    /* in local.c - bkph */
1273 void perrormod(char *);         /* in local.c */
1274
1275 char *grabenv(char *);      /* in local.c - bkph */
1276 // void showversion (FILE *);     /* in local.c - bkph */
1277 void stamp_it (char *);         /* in local.c - bkph */
1278 void stampcopy (char *);        /* in local.c - bkph */
1279 bool prime (int);         /* in local.c - bkph */
1280 int endit (int);            /* in local.c - bkph */
1281
1282 void uexit (int unix_code);     /* in lib/uexit.c - bkph */
1283 void t_open_in (void);          /* in lib/texmf.c - bkph */
1284
1285 bool extensionirrelevantp (unsigned char *base, int nlen, char *suffix);
1286
1287 void call_edit (ASCII_code *filename, pool_pointer fnstart,
1288          integer fnlength, integer linenumber); /* from lib/texmf.c - bkph */
1289
1290 void add_variable_space(int);       /* in itex.c - bkph */
1291
1292 void get_date_and_time (integer *minutes, integer *day,
1293             integer *month, integer *year);   /* in lib/texmf.c - bkph */
1294
1295 bool maketextex (void);       /* in openinou.c */
1296 bool maketextfm (void);       /* in openinou.c */
1297
1298 char *unixify (char *);       /* in pathsrch.c bkph */
1299
1300 #ifdef _WINDOWS
1301   void show_line (char *, int);     /* in local.c */
1302   void show_char (int);         /* in local.c */
1303   int main(int, char *[]);        /* in lib\texmf.c */
1304 #endif
1305
1306 #ifdef CHECKPOOL
1307   int checkpool (char *);         /* in itex.c - debugging */
1308 #endif
1309
1310 #endif /* ifdef MSDOS */
1311
1312 /****************************************************************************/
1313
1314 #include "coerce.h"
1315
1316 /****************************************************************************/
1317 /* sec 0054 */
1318 #define no_print     16
1319 #define term_only    17
1320 #define log_only     18
1321 #define term_and_log 19
1322 #define pseudo       20
1323 #define new_string   21
1324 #define max_selector 21
1325 /* sec 0073 */
1326 #define batch_mode      0
1327 #define nonstop_mode    1
1328 #define scroll_mode     2
1329 #define error_stop_mode 3
1330 /* sec 0076 */
1331 #define spotless             0
1332 #define warning_issued       1
1333 #define error_message_issued 2
1334 #define fatal_error_stop     3
1335 /* sec 0105 */
1336 #define nx_plux_y(...)   mult_and_add(..., 07777777777L)
1337 #define mult_integers(a) mult_and_add(a,0,07777777777L)
1338 /* sec 0108 */
1339 #define inf_bad 10000L
1340 /* sec 0109 */
1341 #define set_glue_ratio_zero(a) (a) = 0.0
1342 #define set_glue_ratio_one(a)  (a) = 1.0
1343 #define tex_float(a)           (a)
1344 #define unfloat(a)             (a)
1345 #define float_constant(a)      (float) (a)
1346 /* sec 0115*/
1347 #define pointer halfword
1348 #define null    min_halfword
1349 /* sec 0118 */
1350 #define link(p) mem[(p)].hh.v.RH
1351 #define info(p) mem[(p)].hh.v.LH
1352 /* sec 0124 */
1353 #define empty_flag  max_halfword
1354 #define is_empty(a) (link(a) = empty_flag)
1355 #define node_size   info
1356 #define llink(a)    info(a+1)
1357 #define rlink(a)    link(a+1)
1358 /* sec 0133 */
1359 #define type(a)    mem[a].hh.b0
1360 #define subtype(a) mem[a].hh.b1
1361 /* sec 0134 */
1362 #define is_char_node(a) (a >= hi_mem_min)
1363 #define font            type
1364 #define character       subtype
1365 /* sec 0135 */
1366 #define hlist_node      0
1367 #define box_node_size   7
1368 #define width_offset    1
1369 #define depth_offset    2
1370 #define height_offset   3
1371 #define width(a)        mem[a + width_offset].sc
1372 #define depth(a)        mem[a + depth_offset].sc
1373 #define height(a)       mem[a + height_offset].sc
1374 #define shift_amount(a) mem[a + 4].sc
1375 #define list_offset     5
1376 #define glue_order(a)   subtype(a + list_offset)
1377 #define glue_sign(a)    type(a + list_offset)
1378 #define normal          0
1379 #define stretching      1
1380 #define shrinking       2
1381 #define glue_offset     6
1382 #define glue_set(a)     mem[a + glue_offset].gr
1383 /* sec 0137 */
1384 #define vlist_node 1
1385 /* sec 0138 */
1386 #define rule_node      2
1387 #define rule_node_size 4
1388 #define null_flag      -010000000000L
1389 #define is_running(a)  (a = null_flag)
1390 /* sec 0140 */
1391 #define ins_node         3
1392 #define ins_node_size    5
1393 #define float_cost(a)    mem[a + 1].cint
1394 #define ins_ptr(a)       info(a + 4)
1395 #define split_top_ptr(a) link(a + 4)
1396 /* sec 0162 */
1397 #define contrib_head  mem_top - 1
1398 #define page_head     mem_top - 2
1399 #define temp_head     mem_top - 3
1400 #define hold_head     mem_top - 4
1401 #define adjust_head   mem_top - 5
1402 #define active        mem_top - 7
1403 #define align_head    mem_top - 8
1404 #define end_span      mem_top - 9
1405 #define omit_template mem_top - 10
1406 #define null_list     mem_top - 11
1407 #define lig_trick     mem_top - 12
1408 /* sec 0207 */
1409 #define escape 0
1410 #define relax 0
1411 #define left_brace 1
1412 #define right_brace 2
1413 #define math_shift 3
1414 #define tab_mark 4
1415 #define car_ret 5
1416 #define out_param 5
1417 #define mac_param 6
1418 #define sup_mark 7
1419 #define sub_mark 8
1420 #define ignore 9
1421 #define endv 9
1422 #define spacer 10
1423 #define letter 11
1424 #define other_char 12
1425 #define active_char 13
1426 #define par_end 13
1427 #define match 13
1428 #define comment 14
1429 #define end_match 14
1430 #define stop 14
1431 #define invalid_char 15
1432 #define delim_num 15
1433 #define max_char_code 15
1434 /* sec 0208 */
1435 #define char_num 16
1436 #define math_char_num 17
1437 #define mark 18
1438 #define xray 19
1439 #define make_box 20
1440 #define hmove 21
1441 #define vmove 22
1442 #define un_hbox 23
1443 #define un_vbox 24
1444 #define remove_item 25
1445 #define hskip 26
1446 #define vskip 27
1447 #define mskip 28
1448 #define kern 29
1449 #define mkern 30
1450 #define leader_ship 31
1451 #define halign 32
1452 #define valign 33
1453 #define no_align 34
1454 #define vrule 35
1455 #define hrule 36
1456 #define insert 37
1457 #define vadjust 38
1458 #define ignore_spaces 39
1459 #define after_assignment 40
1460 #define after_group 41
1461 #define break_penalty 42
1462 #define start_par 43
1463 #define ital_corr 44
1464 #define accent 45
1465 #define math_accent 46
1466 #define discretionary 47
1467 #define eq_no 48
1468 #define left_right 49
1469 #define math_comp 50
1470 #define limit_switch 51
1471 #define above 52
1472 #define math_style 53
1473 #define math_choice 54
1474 #define non_script 55
1475 #define vcenter 56
1476 #define case_shift 57
1477 #define message 58
1478 #define extension 59
1479 #define in_stream 60
1480 #define begin_group 61
1481 #define end_group 62
1482 #define omit 63
1483 #define ex_space 64
1484 #define no_boundary 65
1485 #define radical 66
1486 #define end_cs_name 67
1487 #define min_internal 68
1488 #define char_given 68
1489 #define math_given 69
1490 #define last_item 70
1491 #define max_non_prefixed_command 70
1492 /* sec 0209 */
1493 #define toks_register 71
1494 #define assign_toks 72
1495 #define assign_int 73
1496 #define assign_dimen 74
1497 #define assign_glue 75
1498 #define assign_mu_glue 76
1499 #define assign_font_dimen 77
1500 #define assign_font_int 78
1501 #define set_aux 79
1502 #define set_prev_graf 80
1503 #define set_page_dimen 81
1504 #define set_page_int 82
1505 #define set_box_dimen 83
1506 #define set_shape 84
1507 #define def_code 85
1508 #define def_family 86
1509 #define set_font 87
1510 #define def_font 88
1511 #define tex_register 89
1512 #define max_internal 89
1513 #define advance 90
1514 #define multiply 91
1515 #define divide 92
1516 #define prefix 93
1517 #define let 94
1518 #define shorthand_def 95
1519 #define read_to_cs 96
1520 #define def 97
1521 #define set_box 98
1522 #define hyph_data 99
1523 #define set_interaction 100
1524 #define max_command 100
1525 /* sec 0210 */
1526 #define undefined_cs max_command + 1
1527 #define expand_after max_command + 2
1528 #define no_expand max_command + 3
1529 #define input max_command + 4
1530 #define if_test max_command + 5
1531 #define fi_or_else max_command + 6
1532 #define cs_name max_command + 7
1533 #define convert max_command + 8
1534 #define the max_command + 9
1535 #define top_bot_mark max_command + 10
1536 #define call max_command + 11
1537 #define long_call max_command + 12
1538 #define outer_call max_command + 13
1539 #define long_outer_call max_command + 14
1540 #define end_template max_command + 15
1541 #define dont_expand max_command + 16
1542 #define glue_ref max_command + 17
1543 #define shape_ref max_command + 18
1544 #define box_ref max_command + 19 
1545 #define data max_command + 20
1546 /* sec 0212 */
1547 #define ignore_depth -65536000L
1548 /* sec 0213 */
1549 #define mode            cur_list.mode_field
1550 #define head            cur_list.head_field
1551 #define tail            cur_list.tail_field
1552 #define aux             cur_list.aux_field
1553 #define prev_depth      aux.sc
1554 #define space_factor    aux.hh.v.LH
1555 #define clang           aux.hh.v.RH
1556 #define incompleat_noad aux.cint
1557 #define prev_graf       cur_list.pg_field
1558 #define mode_line       cur_list.ml_field
1559 /* sec 0221 */
1560 #define level_zero min_quarterword
1561 #define level_one  level_zero + 1
1562 /* sec 0222 */
1563 #define active_base                   1
1564 #define single_base                   active_base + 256
1565 #define null_cs                       single_base + 256
1566 #define hash_base                     null_cs + 1
1567 #define frozen_control_sequence       hash_base + hash_size
1568 #define frozen_protection             frozen_control_sequence
1569 #define frozen_cr                     frozen_control_sequence + 1
1570 #define frozen_end_group              frozen_control_sequence + 2
1571 #define frozen_right                  frozen_control_sequence + 3
1572 #define frozen_fi                     frozen_control_sequence + 4
1573 #define frozen_end_template           frozen_control_sequence + 5
1574 #define frozen_endv                   frozen_control_sequence + 6
1575 #define frozen_relax                  frozen_control_sequence + 7
1576 #define end_write                     frozen_control_sequence + 8
1577 #define frozen_dont_expand            frozen_control_sequence + 9
1578 #define frozen_null_font              frozen_control_sequence + 10
1579 #define font_id_base                  frozen_null_font - font_base
1580 #define undefined_control_sequence    frozen_null_font + 257
1581 #define glue_base                     undefined_control_sequence + 1
1582 /* sec 0224 */
1583 #define line_skip_code                0
1584 #define baseline_skip_code            1
1585 #define par_skip_code                 2
1586 #define above_display_skip_code       3
1587 #define below_display_skip_code       4
1588 #define above_display_short_skip_code 5
1589 #define below_display_short_skip_code 6
1590 #define left_skip_code                7
1591 #define right_skip_code               8
1592 #define top_skip_code                 9
1593 #define split_top_skip_code           10
1594 #define tab_skip_code                 11
1595 #define space_skip_code               12
1596 #define xspace_skip_code              13
1597 #define par_fill_skip_code            14
1598 #define thin_mu_skip_code             15
1599 #define med_mu_skip_code              16
1600 #define thick_mu_skip_code            17
1601 #define glue_pars                     18
1602 #define skip_base                     glue_base + glue_pars
1603 #define mu_skip_base                  skip_base + 256
1604 #define local_base                    mu_skip_base + 256
1605 // #
1606 #define skip(a)                       equiv(skip_base + a)
1607 #define mu_skip(a)                    equiv(mu_skip_base + a)
1608 #define glue_par(a)                   equiv(glue_base + a)
1609 #define line_skip                     glue_par(line_skip_code)
1610 #define baseline_skip                 glue_par(baseline_skip_code)
1611 #define par_skip                      glue_par(par_skip_code)
1612 #define above_display_skip            glue_par(above_display_skip_code)
1613 #define below_display_skip            glue_par(below_display_skip_code)
1614 #define above_display_short_skip      glue_par(above_display_short_skip_code)
1615 #define below_display_short_skip      glue_par(below_display_short_skip_code)
1616 #define left_skip                     glue_par(left_skip_code)
1617 #define right_skip                    glue_par(right_skip_code)
1618 #define top_skip                      glue_par(top_skip_code)
1619 #define split_top_skip                glue_par(split_top_skip_code)
1620 #define tab_skip                      glue_par(tab_skip_code)
1621 #define space_skip                    glue_par(space_skip_code)
1622 #define xspace_skip                   glue_par(xspace_skip_code)
1623 #define par_fill_skip                 glue_par(par_fill_skip_code)
1624 #define thin_mu_skip                  glue_par(thin_mu_skip_code)
1625 #define med_mu_skip                   glue_par(med_mu_skip_code)
1626 #define thick_mu_skip                 glue_par(thick_mu_skip_code)
1627 /* sec 0230 */
1628 #define par_shape_loc                 local_base
1629 #define output_routine_loc            local_base + 1
1630 #define every_par_loc                 local_base + 2
1631 #define every_math_loc                local_base + 3
1632 #define every_display_loc             local_base + 4
1633 #define every_hbox_loc                local_base + 5
1634 #define every_vbox_loc                local_base + 6
1635 #define every_job_loc                 local_base + 7
1636 #define every_cr_loc                  local_base + 8
1637 #define err_help_loc                  local_base + 9
1638 #define toks_base                     local_base + 10
1639 #define box_base                      toks_base + 256
1640 #define cur_font_loc                  box_base + 256
1641 #define math_font_base                cur_font_loc + 1
1642 #define cat_code_base                 math_font_base + 48
1643 #define lc_code_base                  cat_code_base + 256
1644 #define uc_code_base                  lc_code_base + 256
1645 #define sf_code_base                  uc_code_base + 256
1646 #define math_code_base                sf_code_base + 256
1647 #define int_base                      math_code_base + 256
1648 // #
1649 #define par_shape_ptr                 equiv(par_shape_loc)
1650 #define output_routine                equiv(output_routine_loc)
1651 #define every_par                     equiv(every_par_loc)
1652 #define every_math                    equiv(every_math_loc)
1653 #define every_display                 equiv(every_display_loc)
1654 #define every_hbox                    equiv(every_hbox_loc)
1655 #define every_vbox                    equiv(every_vbox_loc)
1656 #define every_job                     equiv(every_job_loc)
1657 #define every_cr                      equiv(every_cr_loc)
1658 #define err_help                      equiv(err_help_code)
1659 #define toks(a)                       equiv(toks_base + a)
1660 #define box(a)                        equiv(box_base + a)
1661 #define cur_font                      equiv(cur_font_loc)
1662 #define fam_fnt(a)                    equiv(math_font_base + a)
1663 #define cat_code(a)                   equiv(cat_code_base + a)
1664 #define lc_code(a)                    equiv(lc_code_base + a)
1665 #define uc_code(a)                    equiv(uc_code_base +a)
1666 #define sf_code(a)                    equiv(sf_code_bas + a)
1667 #define math_code(a)                  equiv(math_code_base + a)
1668 /* sec 0236 */
1669 #define pretolerance_code             0
1670 #define tolerance_code                1
1671 #define line_penalty_code             2
1672 #define hyphen_penalty_code           3
1673 #define ex_hyphen_penalty_code        4
1674 #define club_penalty_code             5
1675 #define widow_penalty_code            6
1676 #define display_widow_penalty_code    7
1677 #define broken_penalty_code           8
1678 #define bin_op_penalty_code           9
1679 #define rel_penalty_code              10
1680 #define pre_display_penalty_code      11
1681 #define post_display_penalty_code     12
1682 #define inter_line_penalty_code       13
1683 #define double_hyphen_demerits_code   14
1684 #define final_hyphen_demerits_code    15
1685 #define adj_demerits_code             16
1686 #define mag_code                      17
1687 #define delimiter_factor_code         18
1688 #define looseness_code                19
1689 #define time_code                     20
1690 #define day_code                      21
1691 #define month_code                    22
1692 #define year_code                     23
1693 #define show_box_breadth_code         24
1694 #define show_box_depth_code           25
1695 #define hbadness_code                 26
1696 #define vbadness_code                 27
1697 #define pausing_code                  28
1698 #define tracing_online_code           29
1699 #define tracing_macros_code           30
1700 #define tracing_stats_code            31
1701 #define tracing_paragraphs_code       32
1702 #define tracing_pages_code            33
1703 #define tracing_output_code           34
1704 #define tracing_lost_chars_code       35
1705 #define tracing_commands_code         36
1706 #define tracing_restores_code         37
1707 #define uc_hyph_code                  38
1708 #define output_penalty_code           39
1709 #define max_dead_cycles_code          40
1710 #define hang_after_code               41
1711 #define floating_penalty_code         42
1712 #define global_defs_code              43
1713 #define cur_fam_code                  44
1714 #define escape_char_code              45
1715 #define default_hyphen_char_code      46
1716 #define default_skew_char_code        47
1717 #define end_line_char_code            48
1718 #define new_line_char_code            49
1719 #define language_code                 50
1720 #define left_hyphen_min_code          51
1721 #define right_hyphen_min_code         52
1722 #define holding_inserts_code          53
1723 #define error_context_lines_code      54
1724 #define int_pars                      55
1725 #define count_base                    int_base + int_pars
1726 #define del_code_base                 count_base + 256
1727 #define dimen_base                    del_code_base + 256
1728 // #
1729 #define del_code(a)                   eqtb[del_code_base + a].cint
1730 #define count(a)                      eqtb[count_base + a].cint
1731 #define int_par(a)                    eqtb[int_base + a].cint
1732 #define pretolerance                  int_par(pretolerance_code)
1733 #define tolerance                     int_par(tolerance_code)
1734 #define line_penalty                  int_par(line_penalty_code)
1735 #define hyphen_penalty                int_par(hyphen_penalty_code)
1736 #define ex_hyphen_penalty             int_par(ex_hyphen_penalty_code)
1737 #define club_penalty                  int_par(club_penalty_code)
1738 #define widow_penalty                 int_par(widow_penalty_code)
1739 #define display_widow_penalty         int_par(display_widow_penalty_code)
1740 #define broken_penalty                int_par(broken_penalty_code)
1741 #define bin_op_penalty                int_par(bin_op_penalty_code)
1742 #define rel_penalty                   int_par(rel_penalty_code)
1743 #define pre_display_penalty           int_par(pre_display_penalty_code)
1744 #define post_display_penalty          int_par(post_display_penalty_code)
1745 #define inter_line_penalty            int_par(inter_line_penalty_code)
1746 #define double_hyphen_demerits        int_par(double_hyphen_demerits_code)
1747 #define final_hyphen_demerits         int_par(final_hyphen_demerits_code)
1748 #define adj_demerits                  int_par(adj_demerits_code)
1749 #define mag                           int_par(mag_code)
1750 #define delimiter_factor              int_par(delimiter_factor_code)
1751 #define looseness                     int_par(looseness_code)
1752 #define tex_time                      int_par(time_code)
1753 #define day                           int_par(day_code)
1754 #define month                         int_par(month_code)
1755 #define year                          int_par(year_code)
1756 #define show_box_breadth              int_par(show_box_breadth_code)
1757 #define show_box_depth                int_par(show_box_depth_code)
1758 #define hbadness                      int_par(hbadness_code)
1759 #define vbadness                      int_par(vbadness_code)
1760 #define pausing                       int_par(pausing_code)
1761 #define tracing_online                int_par(tracing_online_code)
1762 #define tracing_macros                int_par(tracing_macros_code)
1763 #define tracing_stats                 int_par(tracing_stats_code)
1764 #define tracing_paragraphs            int_par(tracing_paragraphs_code)
1765 #define tracing_pages                 int_par(tracing_pages_code)
1766 #define tracing_output                int_par(tracing_output_code)
1767 #define tracing_lost_chars            int_par(tracing_lost_chars_code)
1768 #define tracing_commands              int_par(tracing_commands_code)
1769 #define tracing_restores              int_par(tracing_restores_code)
1770 #define uc_hyph                       int_par(uc_hyph_code)
1771 #define output_penalty                int_par(output_penalty_code)
1772 #define max_dead_cycles               int_par(max_dead_cycles_code)
1773 #define hang_after                    int_par(hang_after_code)
1774 #define floating_penalty              int_par(floating_penalty_code)
1775 #define global_defs                   int_par(global_defs_code)
1776 #define cur_fam                       int_par(cur_fam_code)
1777 #define escape_char                   int_par(escape_char_code)
1778 #define default_hyphen_char           int_par(default_hyphen_char_code)
1779 #define default_skew_char             int_par(default_skew_char_code)
1780 #define end_line_char                 int_par(end_line_char_code)
1781 #define new_line_char                 int_par(new_line_char_code)
1782 #define language                      int_par(language_code)
1783 #define left_hyphen_min               int_par(left_hyphen_min_code)
1784 #define right_hyphen_min              int_par(right_hyphen_min_code)
1785 #define holding_inserts               int_par(holding_inserts_code)
1786 #define error_context_lines           int_par(error_context_lines_code)
1787 /* sec 0247 */
1788 #define par_indent_code               0
1789 #define math_surround_code            1
1790 #define line_skip_limit_code          2
1791 #define hsize_code                    3
1792 #define vsize_code                    4
1793 #define max_depth_code                5
1794 #define split_max_depth_code          6
1795 #define box_max_depth_code            7
1796 #define hfuzz_code                    8
1797 #define vfuzz_code                    9
1798 #define delimiter_shortfall_code      10
1799 #define null_delimiter_space_code     11
1800 #define script_space_code             12
1801 #define pre_display_size_code         13
1802 #define display_width_code            14
1803 #define display_indent_code           15
1804 #define overfull_rule_code            16
1805 #define hang_indent_code              17
1806 #define h_offset_code                 18
1807 #define v_offset_code                 19
1808 #define emergency_stretch_code        20
1809 #define dimen_pars                    21
1810 #define scaled_base                   dimen_base + dimen_pars
1811 #define eqtb_size                     scaled_base + 255
1812 // #
1813 #define dimen(a)                      eqtb[scaled_base + a].sc
1814 #define dimen_par(a)                  eqtb[dimen_base + a].sc
1815 #define par_indent                    dimen_par(par_indent_code)
1816 #define math_surround                 dimen_par(math_surround_code)
1817 #define line_skip_limit               dimen_par(line_skip_limit_code)
1818 #define hsize                         dimen_par(hsize_code)
1819 #define vsize                         dimen_par(vsize_code)
1820 #define max_depth                     dimen_par(max_depth_code)
1821 #define split_max_depth               dimen_par(split_max_depth_code)
1822 #define box_max_depth                 dimen_par(box_max_depth_code)
1823 #define hfuzz                         dimen_par(hfuzz_code)
1824 #define vfuzz                         dimen_par(vfuzz_code)
1825 #define delimiter_shortfall           dimen_par(delimiter_shortfall_code)
1826 #define null_delimiter_space          dimen_par(null_delimiter_space_code)
1827 #define script_space                  dimen_par(script_space_code)
1828 #define pre_display_size              dimen_par(pre_display_size_code)
1829 #define display_width                 dimen_par(display_width_code)
1830 #define display_indent                dimen_par(display_indent_code)
1831 #define overfull_rule                 dimen_par(overfull_rule_code)
1832 #define hang_indent                   dimen_par(hang_indent_code)
1833 #define h_offset                      dimen_par(h_offset_code)
1834 #define v_offset                      dimen_par(v_offset_code)
1835 #define emergency_stretch             dimen_par(emergency_stretch_code)
1836 /* sec 79 */
1837
1838 extern void tex_help (unsigned int n, ...);
1839 extern void append_char(ASCII_code c);
1840 #define help0()     tex_help(0)
1841 #define help1(...)  tex_help(1, __VA_ARGS__)
1842 #define help2(...)  tex_help(2, __VA_ARGS__)
1843 #define help3(...)  tex_help(3, __VA_ARGS__)
1844 #define help4(...)  tex_help(4, __VA_ARGS__)
1845 #define help5(...)  tex_help(5, __VA_ARGS__)
1846 #define help6(...)  tex_help(6, __VA_ARGS__)