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