OSDN Git Service

57cd09357947e5f4b4ca3f16a8a9bed49026ee23
[putex/putex.git] / src / texsourc / texd.h
1 #ifndef _YANDYTEX_TEXD_H
2 #define _YANDYTEX_TEXD_H
3
4 #define ALLOCATEINI        /* allocate iniTeX (550 k) trie_c, trie_o, trie_l, trie_r, trie_hash, trie_taken */
5 #define ALLOCATEMAIN       /* allocate main memory for TeX (2 Meg) zmem = zzzaa */
6 #define ALLOCATEFONT       /* allocate font_info (800 k) (dynamically now) */
7 #define ALLOCATETRIES      /* allocate hyphenation trie stuff (270 k) trie_trl, trie_tro, trie_trc */
8 #define ALLOCATEHYPHEN     /* allocate hyphenation exception tables */
9 #define VARIABLETRIESIZE   /* allow trie_size to be variable */
10 #define ALLOCATESTRING     /* allocate strings and string pointers (184 k)str_pool & str_start */
11 #define ALLOCATESAVESTACK  /* experiment to dynamically deal with save_stack 99/Jan/4 */
12 #define ALLOCATEINPUTSTACK /* experiment to dynamically deal with input_stack 99/Jan/21 */
13 #define ALLOCATENESTSTACK  /* experiment to dynamically deal with nest_stack 99/Jan/21 */
14 #define ALLOCATEPARAMSTACK /* experiment to dynamically deal with param_stack 99/Jan/21 */
15 #define ALLOCATEBUFFER     /* experiment to dynamically deal with input buffer 99/Jan/22 */
16 #define INCREASEFIXED
17 #define INCREASEFONTS
18 #define INCREASETRIEOP
19 #define COMPACTFORMAT
20
21 #define STAT
22 #include "texmf.h"
23
24 #define file_name_size PATH_MAX
25
26 // #define max_halfword 65535L  /* for 32 bit memory word */
27 #define min_halfword -2147483647L /* LONG_MIN, for 64 bit memory word (signed) */
28 #define max_halfword  2147483647L /* LONG_MAX, for 64 bit memory word (signed) */
29
30 #define block_size 1000 /* block_size for variable length node alloc */
31
32 #define min_quarterword 0
33 #ifdef INCREASEFONTS
34   #define max_quarterword 65535L
35 #else
36   #define max_quarterword 255
37 #endif
38
39 #define default_mem_top 262140L  /* usual big TeX allocation 2 Meg bytes */
40 /* #define default_mem_top 131070L */ /* usual big TeX allocation 1 Meg bytes */
41 /* #define default_mem_top 65534L  */ /* usual small TeX allocation 0.5 Meg   */
42
43 #define mem_bot 0
44
45 #ifdef ALLOCATEMAIN
46   EXTERN integer mem_top;
47   #define max_mem_size (max_halfword / sizeof(memory_word) - 1)
48 #else
49   #define mem_top 262140L
50 #endif
51
52 #ifdef ALLOCATEMAIN
53   EXTERN integer mem_max;
54 #else
55   #define mem_max mem_top
56 #endif
57
58 #ifdef ALLOCATEMAIN
59   EXTERN integer mem_min;
60 #else
61   #define mem_min 0
62 #endif
63
64 #ifdef ALLOCATEBUFFER
65   #define initial_buf_size   1000
66   #define increment_buf_size 2000
67   #define buf_size           2000000L
68   EXTERN ASCII_code *        buffer;
69 #else
70   #define buf_size           20000
71   EXTERN ASCII_code          buffer[buf_size + 4];
72 #endif
73
74 EXTERN integer first; 
75 EXTERN integer last; 
76 EXTERN integer max_buf_stack; 
77
78 #define error_line      79
79 #define half_error_line 50
80 #define max_print_line  79
81
82 #ifdef INCREASEFIXED
83   #define max_in_open 127
84 #else
85   #define max_in_open 15
86 #endif
87
88 #ifdef INCREASEFONTS
89   #define font_max 65535 //1023 (2^n - 1)
90 #else
91   #define font_max 255
92 #endif
93
94 #ifdef ALLOCATEFONT
95   #define font_mem_size (max_halfword / sizeof(memory_word) - 1)
96 #else
97   #define font_mem_size 100000L
98 #endif
99
100 #ifdef ALLOCATEFONT
101   #define initial_font_mem_size   20000
102   #define increment_font_mem_size 40000
103 #endif
104
105 #ifdef ALLOCATESTRING
106   #define max_strings (max_halfword / sizeof(pool_pointer) - 1)
107   #define pool_size (max_halfword - 1)
108 #else
109   #define max_strings 16384
110   #define pool_size 124000L
111 #endif
112
113 #define string_vacancies 100000L
114
115 #ifdef VARIABLETRIESIZE
116   EXTERN integer trie_size;
117   #define default_trie_size 60000
118 #else
119   #define trie_size 30000
120 #endif
121
122 #ifdef INCREASETRIEOP
123   #define trie_op_size      3001
124   #define neg_trie_op_size -3001
125   #define min_trie_op       0
126   #define max_trie_op       1000
127 #else
128   #define trie_op_size      751
129   #define neg_trie_op_size -751
130   #define min_trie_op       0
131   #define max_trie_op       500
132 #endif
133
134
135 #define dvi_buf_size 16384
136
137 #define hash_extra (255 - font_max)
138 #define hash_prime 27197 // (prime ~ 85% * (hash_size + hash_extra))
139 #define hash_size  97280 // 32768 9500 25000
140
141 #if (hash_extra != 255 - font_max)
142   #error ERROR: hash_extra not equal to (255 - font_max)
143 #endif
144
145 /* sec 0113 */
146 #ifdef INCREASEFONTS
147   typedef unsigned short quarterword;
148 #else
149   typedef unsigned char quarterword;
150 #endif
151 /* possible alternative ? */
152 /* min_halfword = 0 and double max_halfword ? */
153 /* typedef unsigned long halfword; NO NO: since mem_min may be < 0 */
154 /* sec 0113 */
155 typedef long halfword;
156 typedef halfword pointer;
157 typedef char two_choices;
158 typedef char four_choices;
159 /* sec 0113 */
160 #include "texmfmem.h"
161 #include "yandy_macros.h"
162 /* sec 0150 */
163 typedef char glue_ord; 
164 /* sec 0212 */
165 typedef struct
166 {
167   int mode_field;
168   halfword head_field, tail_field;
169   integer pg_field, ml_field;
170   memory_word aux_field;
171 } list_state_record;
172 /* sec 0269 */
173 typedef char group_code;
174 /* sec 0300 */
175 typedef struct
176 {
177   quarterword state_field, index_field; 
178   halfword start_field, loc_field, limit_field, name_field;
179 } in_state_record; 
180 /* sec 0548 */
181 typedef integer internal_font_number;
182 typedef integer font_index;
183 /* sec 0594 */
184 typedef integer dvi_index;
185 /* sec 0920 */
186 typedef integer trie_op_code;
187 /* sec 0925 */
188 typedef integer trie_pointer;
189 typedef integer hyph_pointer;
190
191 EXTERN integer bad;
192 EXTERN ASCII_code xord[256];
193 EXTERN ASCII_code xchr[256];
194 EXTERN unsigned char name_of_file[file_name_size + 4];
195 EXTERN integer name_length;
196
197 #ifdef ALLOCATESTRING
198   #define initial_pool_size     40000
199   #define increment_pool_size   80000
200   EXTERN packed_ASCII_code *    str_pool;
201   #define initial_max_strings   5000
202   #define increment_max_strings 10000
203   EXTERN pool_pointer *         str_start;
204 #else
205   EXTERN packed_ASCII_code      str_pool[pool_size + 1]; 
206   EXTERN pool_pointer           str_start[max_strings + 1]; 
207 #endif
208
209 EXTERN pool_pointer pool_ptr;
210 EXTERN str_number   str_ptr;
211 EXTERN pool_pointer init_pool_ptr;
212 EXTERN str_number   init_str_ptr;
213
214 #ifdef INITEX
215 EXTERN alpha_file pool_file; 
216 #endif
217
218 EXTERN alpha_file log_file; 
219 EXTERN int selector;
220 EXTERN char dig[23 + 1];
221 EXTERN integer tally;
222 EXTERN integer term_offset;
223 EXTERN integer file_offset;
224 EXTERN ASCII_code trick_buf[error_line + 1];
225 EXTERN integer trick_count;
226 EXTERN integer first_count;
227 EXTERN int interaction;
228 EXTERN boolean deletions_allowed;
229 EXTERN boolean set_box_allowed;
230 EXTERN int history;
231 EXTERN int error_count;
232 EXTERN char * help_line[6];
233 EXTERN int help_ptr;
234 EXTERN boolean use_err_help;
235 EXTERN volatile integer interrupt;
236 EXTERN boolean OK_to_interrupt;
237 EXTERN boolean arith_error;
238 EXTERN scaled tex_remainder;
239 EXTERN halfword temp_ptr;
240
241 /* sec 0116 */
242 #ifdef ALLOCATEMAIN
243   EXTERN memory_word * main_memory;
244   EXTERN memory_word * mem;
245 #else
246   EXTERN memory_word zzzaa[mem_max - mem_bot + 1];
247   #define zmem (zzzaa - (int)(mem_bot))
248 #endif
249
250 EXTERN pointer lo_mem_max;
251 EXTERN pointer hi_mem_min;
252 EXTERN integer var_used, dyn_used;
253 /* sec 0118 */
254 EXTERN pointer avail;
255 EXTERN pointer mem_end;
256 EXTERN halfword mem_start; // for yandytex
257 /* sec 0124 */
258 EXTERN halfword rover;
259 /* sec 0165 */
260 /* NOTE: the following really also need to be dynamically allocated */
261 #ifdef DEBUG
262   #ifdef ALLOCATEMAIN
263     EXTERN char * zzzab;
264   #else
265
266   EXTERN char
267 /* #define freearr (zzzab - (int)(mem_min)) */
268 /*  zzzab[mem_max - mem_min + 1];  */
269 #define freearr (zzzab - (int)(mem_bot))
270   zzzab[mem_max - mem_bot + 1]; 
271 #endif
272
273 #ifdef ALLOCATEMAIN
274   EXTERN char *zzzac;
275 #else
276 /* EXTERN boolean */   /* save (4 - 1) * mem_max - mem_min */
277 EXTERN char
278 /* #define wasfree (zzzac - (int)(mem_min)) */
279 #define wasfree (zzzac - (int)(mem_bot))
280 /*  zzzac[mem_max - mem_min + 1];  */
281   zzzac[mem_max - mem_bot + 1]; 
282 #endif
283
284 EXTERN halfword was_mem_end, was_lo_max, was_hi_min;
285 EXTERN boolean panicking;
286 #endif /* DEBUG */
287
288 EXTERN integer font_in_short_display;
289 EXTERN integer depth_threshold;
290 EXTERN integer breadth_max;
291 EXTERN int shown_mode;
292 EXTERN int old_setting;
293
294 #ifdef INCREASEFONTS
295   #define eqtb_extra (font_max - 255 + hash_extra)
296 #else
297   #define eqtb_extra 0
298 #endif
299
300 #if (eqtb_extra != 0)
301   #error ERROR: eqtb_extra is not zero (need hash_extra equal 255 - font_max)
302 #endif
303
304 #ifdef INCREASEFONTS
305   EXTERN memory_word eqtb[eqtb_size + 1 + eqtb_extra];
306 #else
307   EXTERN memory_word eqtb[eqtb_size + 1];
308 #endif
309
310 #ifdef INCREASEFONTS
311   #define xeq_level (zzzad - (int_base + eqtb_extra))
312 #else
313   #define xeq_level (zzzad - (int_base))
314 #endif
315
316 EXTERN quarterword zzzad[eqtb_size - int_base + 1];
317
318 #ifdef ALLOCATEHASH
319   EXTERN two_halves *zzzae;
320   #define hash (zzzae - hash_base)
321 #else
322   #ifdef INCREASEFONTS
323     EXTERN two_halves zzzae[undefined_control_sequence - hash_base + eqtb_extra];
324   #else
325     EXTERN two_halves zzzae[undefined_control_sequence - hash_base];
326   #endif
327
328   #define hash (zzzae - hash_base)
329 #endif
330
331 EXTERN halfword hash_used;
332 EXTERN boolean no_new_control_sequence;
333 EXTERN integer cs_count;
334
335 /* *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** */
336 /* using allocated save stack slows it down 1% to 2%                       */
337 /* despite reallocation, we still limit it to something finite             */
338 /* to avoid soaking up all of machine memory in case of infinite loop      */
339 #ifdef ALLOCATESAVESTACK
340   #define save_size           65536
341   #define initial_save_size   1000
342   #define increment_save_size 2000
343   EXTERN memory_word * save_stack;
344 #else
345   #define save_size 8000
346   EXTERN memory_word save_stack[save_size + 1];
347 #endif
348
349 EXTERN integer save_ptr;
350 EXTERN integer max_save_stack;
351 EXTERN int cur_level;
352 EXTERN int cur_group;
353 EXTERN integer cur_boundary;
354 EXTERN integer mag_set;
355 EXTERN int cur_cmd;
356 EXTERN int cur_chr;
357 EXTERN halfword cur_cs;
358 EXTERN halfword cur_tok;
359
360 #ifdef ALLOCATENESTSTACK
361   #define nest_size           65536
362   #define initial_nest_size   100
363   #define increment_nest_size 200
364   EXTERN list_state_record * nest;
365 #else
366   #define nest_size 200
367   EXTERN list_state_record nest[nest_size + 1];
368 #endif
369
370 EXTERN integer nest_ptr;
371 EXTERN integer max_nest_stack;
372 EXTERN list_state_record cur_list;
373
374 #ifdef ALLOCATEPARAMSTACK
375   #define param_size           65536
376   #define initial_param_size   100
377   #define increment_param_size 200
378   EXTERN halfword * param_stack;
379 #else
380   #define param_size 500
381 EXTERN halfword param_stack[param_size + 1];
382 #endif
383
384 EXTERN integer param_ptr;
385 EXTERN integer max_param_stack;
386
387 #ifdef ALLOCATEINPUTSTACK
388   #define stack_size           65536
389   #define initial_stack_size   100
390   #define increment_stack_size 200
391   EXTERN in_state_record * input_stack;
392 #else
393   #define stack_size 800
394   EXTERN in_state_record input_stack[stack_size + 1];
395 #endif
396
397 EXTERN integer input_ptr;
398 EXTERN integer max_in_stack;
399 EXTERN integer high_in_open;
400 EXTERN in_state_record cur_input;
401 EXTERN int in_open;
402 EXTERN integer open_parens;
403 EXTERN integer max_open_parens;
404 EXTERN alpha_file input_file[max_in_open + 1];
405 EXTERN integer line;
406 EXTERN integer line_stack[max_in_open + 1];
407 EXTERN int scanner_status;
408 EXTERN halfword warning_index;
409 EXTERN halfword def_ref;
410 EXTERN integer align_state;
411 EXTERN integer base_ptr;
412 EXTERN halfword par_loc;
413 EXTERN halfword par_token;
414 EXTERN boolean force_eof;
415 EXTERN halfword cur_mark[6];
416 EXTERN int long_state;
417 EXTERN halfword pstack[10];
418 EXTERN int cur_val;
419 EXTERN int cur_val_level;
420 EXTERN int radix;
421 EXTERN int cur_order;
422 EXTERN alpha_file read_file[16];
423 EXTERN char read_open[20];
424 EXTERN halfword cond_ptr;
425 EXTERN int if_limit;
426 EXTERN int cur_if;
427 EXTERN integer if_line;
428 EXTERN integer skip_line;
429 EXTERN str_number cur_name;
430 EXTERN str_number cur_area;
431 EXTERN str_number cur_ext;
432 EXTERN pool_pointer area_delimiter;
433 EXTERN pool_pointer ext_delimiter;
434 EXTERN integer format_default_length;
435 EXTERN char * TEX_format_default;
436 EXTERN boolean name_in_progress;
437 EXTERN boolean log_opened;
438 EXTERN boolean quoted_file_name;
439 EXTERN str_number job_name;
440 EXTERN str_number output_file_name;
441 EXTERN str_number texmf_log_name;
442 EXTERN byte_file dvi_file;
443 EXTERN byte_file tfm_file;
444 EXTERN byte_file pdf_file;
445 EXTERN char * dvi_file_name;
446 EXTERN char * pdf_file_name;
447 EXTERN char * log_file_name;
448
449 #ifdef ALLOCATEFONT
450   EXTERN memory_word * font_info;
451 #else
452   EXTERN memory_word font_info[font_mem_size + 1];
453 #endif
454
455 EXTERN font_index fmem_ptr;
456 EXTERN internal_font_number font_ptr;
457 EXTERN internal_font_number frozen_font_ptr;
458 EXTERN four_quarters font_check[font_max + 1];
459 EXTERN scaled font_size[font_max + 1];
460 EXTERN scaled font_dsize[font_max + 1];
461 EXTERN font_index font_params[font_max + 1];
462 EXTERN str_number font_name[font_max + 1];
463 EXTERN str_number font_area[font_max + 1];
464 EXTERN eight_bits font_bc[font_max + 1];
465 EXTERN eight_bits font_ec[font_max + 1];
466 EXTERN halfword font_glue[font_max + 1];
467 EXTERN boolean font_used[font_max + 1];
468 EXTERN integer hyphen_char[font_max + 1];
469 EXTERN integer skew_char[font_max + 1];
470 EXTERN font_index bchar_label[font_max + 1];
471 EXTERN short font_bchar[font_max + 1];
472 EXTERN short font_false_bchar[font_max + 1];
473 EXTERN integer char_base[font_max + 1];
474 EXTERN integer width_base[font_max + 1];
475 EXTERN integer height_base[font_max + 1];
476 EXTERN integer depth_base[font_max + 1];
477 EXTERN integer italic_base[font_max + 1];
478 EXTERN integer lig_kern_base[font_max + 1];
479 EXTERN integer kern_base[font_max + 1];
480 EXTERN integer exten_base[font_max + 1];
481 EXTERN integer param_base[font_max + 1];
482 EXTERN four_quarters null_character;
483 EXTERN integer total_pages;
484 EXTERN scaled max_v;
485 EXTERN scaled max_h;
486 EXTERN integer max_push;
487 EXTERN integer last_bop;
488 EXTERN integer dead_cycles;
489 EXTERN boolean doing_leaders;
490 EXTERN int c, f;
491 EXTERN scaled rule_ht, rule_dp, rule_wd;
492 EXTERN halfword g;
493 EXTERN integer lq, lr;
494 EXTERN eight_bits dvi_buf[dvi_buf_size + 4];
495 EXTERN dvi_index half_buf;
496 EXTERN dvi_index dvi_limit;
497 EXTERN dvi_index dvi_ptr;
498 EXTERN integer dvi_offset;
499 EXTERN integer pdf_offset;
500 EXTERN integer dvi_gone;
501 EXTERN halfword down_ptr, right_ptr;
502 EXTERN scaled dvi_h, dvi_v;
503 EXTERN scaled pdf_h, pdf_v;
504 EXTERN scaled pdf_x, pdf_y;
505 EXTERN scaled pdf_delta_h, pdf_delta_v;
506 EXTERN scaled cur_h, cur_v;
507 EXTERN internal_font_number dvi_f;
508 EXTERN internal_font_number pdf_f;
509 EXTERN integer cur_s;
510 EXTERN scaled total_stretch[4], total_shrink[4];
511 EXTERN integer last_badness;
512 EXTERN halfword adjust_tail;
513 EXTERN integer pack_begin_line;
514 EXTERN two_halves empty_field;
515 EXTERN four_quarters null_delimiter;
516 EXTERN halfword cur_mlist;
517 EXTERN int cur_style;
518 EXTERN int cur_size;
519 EXTERN scaled cur_mu;
520 EXTERN boolean mlist_penalties;
521 EXTERN internal_font_number cur_f;
522 EXTERN int cur_c;
523 EXTERN four_quarters cur_i;
524 EXTERN integer magic_offset;
525 EXTERN halfword cur_align;
526 EXTERN halfword cur_span;
527 EXTERN halfword cur_loop;
528 EXTERN halfword align_ptr;
529 EXTERN halfword cur_head, cur_tail;
530 EXTERN halfword just_box;
531 EXTERN halfword passive;
532 EXTERN halfword printed_node;
533 EXTERN halfword pass_number;
534 EXTERN scaled active_width[8];
535 EXTERN scaled cur_active_width[8];
536 EXTERN scaled background[8];
537 EXTERN scaled break_width[8];
538 EXTERN boolean no_shrink_error_yet;
539 EXTERN halfword cur_p;
540 EXTERN boolean second_pass;
541 EXTERN boolean final_pass;
542 EXTERN integer threshold;
543 EXTERN integer minimal_demerits[4];
544 EXTERN integer minimum_demerits;
545 EXTERN halfword best_place[4];
546 EXTERN halfword best_pl_line[4];
547 EXTERN scaled disc_width;
548 EXTERN halfword easyline;
549 EXTERN halfword last_special_line;
550 EXTERN scaled first_width;
551 EXTERN scaled second_width;
552 EXTERN scaled first_indent;
553 EXTERN scaled second_indent;
554 EXTERN halfword best_bet;
555 EXTERN integer fewest_demerits;
556 EXTERN halfword best_line;
557 EXTERN integer actual_looseness;
558 EXTERN integer line_diff;
559 EXTERN int hc[66];
560 EXTERN int hn;
561 EXTERN halfword ha, hb;
562 EXTERN int hf;
563 EXTERN int hu[66];
564 EXTERN int hyf_char;
565 EXTERN int cur_lang, init_cur_lang;
566 EXTERN integer lhyf, rhyf;
567 EXTERN integer init_l_hyf, init_r_hyf;
568 EXTERN halfword hyfbchar;
569 EXTERN char hyf[68];
570 EXTERN halfword init_list;
571 EXTERN boolean init_lig;
572 EXTERN boolean init_lft;
573 EXTERN int hyphen_passed;
574 EXTERN int cur_l, cur_r;
575 EXTERN halfword cur_q;
576 EXTERN halfword lig_stack;
577 EXTERN boolean ligature_present;
578 EXTERN boolean lft_hit, rt_hit;
579
580 #ifdef ALLOCATETRIES
581   EXTERN halfword * trie_trl;
582   EXTERN halfword * trie_tro;
583   EXTERN quarterword * trie_trc;
584 #else
585   EXTERN halfword trie_trl[trie_size + 1];
586   EXTERN halfword trie_tro[trie_size + 1];
587   EXTERN quarterword trie_trc[trie_size + 1];
588 #endif
589
590 EXTERN small_number hyf_distance[trie_op_size + 1];
591 EXTERN small_number hyf_num[trie_op_size + 1];
592 EXTERN trie_op_code hyf_next[trie_op_size + 1];
593 EXTERN integer op_start[256];
594
595 #ifdef ALLOCATEHYPHEN
596   #define default_hyphen_prime 1009
597   EXTERN str_number * hyph_word;
598   EXTERN halfword * hyph_list;
599   EXTERN integer hyphen_prime;
600 #else
601   #define hyphen_prime 607
602   EXTERN str_number hyph_word[hyphen_prime + 1];
603   EXTERN halfword hyph_list[hyphen_prime + 1];
604 #endif
605
606 EXTERN int hyph_count;
607
608 #ifdef INITEX
609   EXTERN integer trie_op_hash_C[trie_op_size - neg_trie_op_size + 1];
610   #define trie_op_hash (trie_op_hash_C - (int)(neg_trie_op_size)) 
611   EXTERN trie_op_code trie_used[256];
612   EXTERN ASCII_code trie_op_lang[trie_op_size + 1];
613   EXTERN trie_op_code trie_op_val[trie_op_size + 1];
614   EXTERN integer trie_op_ptr;
615 #endif
616
617 EXTERN trie_op_code max_op_used;
618
619 #ifdef INITEX
620   #ifdef ALLOCATEINI
621     EXTERN packed_ASCII_code *trie_c; /* characters to match */
622     EXTERN trie_op_code *trie_o;      /* operations to perform */
623     EXTERN trie_pointer *trie_l;      /* left subtrie links */
624     EXTERN trie_pointer *trie_r;      /* right subtrie links */
625     EXTERN trie_pointer *trie_hash;   /* used to identify equivlent subtries */
626   #else
627     EXTERN packed_ASCII_code trie_c[trie_size + 1];
628     EXTERN trie_op_code trie_o[trie_size + 1];
629     EXTERN trie_pointer trie_l[trie_size + 1];
630     EXTERN trie_pointer trie_r[trie_size + 1];
631     EXTERN trie_pointer trie_hash[trie_size + 1];
632   #endif
633
634   EXTERN trie_pointer trie_ptr;
635 #endif
636
637 #ifdef INITEX
638   #ifdef ALLOCATEINI
639     EXTERN char * trie_taken;
640   #else
641     EXTERN boolean trie_taken[trie_size + 1];
642   #endif
643
644   EXTERN trie_pointer trie_min[256];
645   EXTERN trie_pointer trie_max;
646   EXTERN boolean trie_not_ready;
647 #endif
648
649 EXTERN scaled best_height_plus_depth;
650 EXTERN halfword page_tail;
651 EXTERN int page_contents;
652
653 #if (half_error_line < 30) || (half_error_line > error_line - 15)
654   #error ERROR: (half_error_line < 30) || (half_error_line > error_line - 15) BAD 1
655 #endif
656
657 #if (max_print_line < 60)
658   #error ERROR: (max_print_line < 60) BAD 2
659 #endif
660
661 #if (hash_prime > hash_size)
662   #error ERROR: (hash_prime > hash_size) BAD 5
663 #endif
664
665 #if (max_in_open > 127)
666   #error ERROR: (max_in_open > 127) BAD 6
667 #endif
668
669 #if (min_quarterword > 0) || (max_quarterword < 127)
670   #error ERROR: (min_quarterword > 0) || (max_quarterword < 127) BAD 11
671 #endif
672
673 #if (min_halfword > 0) || (max_halfword < 32767)
674   #error ERROR:  (min_halfword > 0) || (max_halfword < 32767) BAD 12
675 #endif
676
677 #if (min_quarterword < min_halfword) || (max_quarterword > max_halfword)
678   #error ERROR: (min_quarterword < min_halfword) || (max_quarterword > max_halfword) BAD 13
679 #endif
680
681 #if (font_max > max_quarterword)
682   #error ERROR: (font_max > max_quarterword) BAD 15
683 #endif
684
685 #if (save_size > max_halfword)
686   #error ERROR: (save_size > max_halfword) BAD 17
687 #endif
688
689 #if (buf_size > max_halfword)
690   #error ERROR:  (buf_size > max_halfword) BAD 18
691 #endif
692
693 #if (max_quarterword - min_quarterword) < 255
694   #error (max_quarterword - min_quarterword) < 255 BAD 19
695 #endif
696
697 EXTERN scaled page_max_depth;
698 EXTERN halfword best_page_break;
699 EXTERN integer least_page_cost;
700 EXTERN scaled best_size;
701 EXTERN scaled page_so_far[8];
702 EXTERN halfword last_glue;
703 EXTERN integer last_penalty;
704 EXTERN scaled last_kern;
705 EXTERN integer insert_penalties;
706 EXTERN boolean output_active;
707 /* sec 1032 */
708 EXTERN internal_font_number main_f;
709 EXTERN four_quarters main_i;
710 EXTERN four_quarters main_j;
711 EXTERN font_index main_k;
712 EXTERN pointer main_p;
713 EXTERN integer main_s;
714 EXTERN halfword bchar;
715 EXTERN halfword false_bchar;
716 EXTERN boolean cancel_boundary;
717 EXTERN boolean ins_disc;
718 /* sec 1074 */
719 EXTERN pointer cur_box;
720 EXTERN halfword after_token;
721 EXTERN boolean long_help_seen;
722 EXTERN str_number format_ident;
723 EXTERN word_file fmt_file;
724 EXTERN gzFile gz_fmt_file;
725 /* sec 1331 */
726 EXTERN integer ready_already;
727 /* sec 1342 */
728 EXTERN alpha_file write_file[16];
729 EXTERN boolean write_open[18];
730 /* sec 1345 */
731 EXTERN pointer write_loc;
732 EXTERN pool_pointer edit_name_start;
733 EXTERN integer edit_name_length, edit_line;
734 EXTERN int tfm_temp;
735
736 /* new variables defined in local.c */
737 EXTERN boolean is_initex;
738 EXTERN boolean verbose_flag;
739 EXTERN boolean trace_flag;
740 EXTERN boolean debug_flag;
741 EXTERN boolean open_trace_flag;
742 EXTERN boolean knuth_flag;
743 EXTERN boolean no_interrupts;
744 EXTERN boolean c_style_flag;
745 EXTERN boolean non_ascii;
746 EXTERN boolean key_replace;
747 EXTERN boolean deslash;
748 EXTERN boolean trimeof;
749 EXTERN boolean allow_patterns;
750 EXTERN boolean show_fonts_used;
751 EXTERN boolean reset_exceptions;
752 EXTERN boolean show_current;
753 EXTERN boolean return_flag;
754 EXTERN boolean want_version;
755 EXTERN boolean civilize_flag;
756 EXTERN boolean show_numeric;
757 EXTERN boolean restrict_to_ascii;
758 EXTERN boolean show_missing;
759 EXTERN boolean full_file_name_flag;
760 EXTERN int mem_initex;
761 EXTERN int mem_extra_high;
762 EXTERN int mem_extra_low;
763 EXTERN int new_hyphen_prime;
764 EXTERN int missing_characters;
765 EXTERN int show_in_hex;
766 EXTERN int show_in_dos;
767 EXTERN int show_fmt_flag;
768 EXTERN int show_tfm_flag;
769 EXTERN boolean show_texinput_flag;
770 EXTERN boolean truncate_long_lines;
771 EXTERN boolean show_cs_names;
772 EXTERN int tab_step;
773 EXTERN int pseudo_tilde;
774 EXTERN int pseudo_space;
775 EXTERN int allow_quoted_names;
776 EXTERN int default_rule;
777 EXTERN char * format_file;
778 EXTERN char * source_direct;
779 EXTERN char * format_name;
780 EXTERN char * encoding_name;
781 EXTERN boolean show_line_break_stats;
782 EXTERN int first_pass_count;
783 EXTERN int second_pass_count;
784 EXTERN int final_pass_count;
785 EXTERN int underfull_hbox;
786 EXTERN int overfull_hbox;
787 EXTERN int underfull_vbox;
788 EXTERN int overfull_vbox;
789 EXTERN int paragraph_failed;
790 EXTERN int single_line;
791 EXTERN FILE * errout;
792 EXTERN int font_dimen_zero;
793 EXTERN int ignore_frozen;
794 EXTERN boolean suppress_f_ligs;
795 EXTERN int jump_used;
796 EXTERN jmp_buf jumpbuffer;
797 extern int current_pool_size;
798 extern int current_max_strings;
799 extern int current_mem_size;
800 extern int current_font_mem_size;
801 extern int current_save_size;
802 extern int current_stack_size;
803 extern int current_nest_size;
804 extern int current_param_size;
805 extern int current_buf_size;
806 extern char *tex_version;
807 extern char *application;
808 extern char *yandyversion;
809 extern unsigned char wintodos[128];
810 extern char log_line[MAXLINE];
811 extern char *texpath;
812
813 memory_word * allocate_main_memory (int);
814 memory_word * realloc_main (int, int);
815 packed_ASCII_code * realloc_str_pool (int);
816 pool_pointer * realloc_str_start (int);
817 memory_word * realloc_save_stack (int);
818 list_state_record * realloc_nest_stack (int);
819 in_state_record * realloc_input_stack (int);
820 halfword * realloc_param_stack (int);
821 ASCII_code * realloc_buffer (int);
822 memory_word * realloc_font_info (int);
823
824 int realloc_hyphen (int);
825 int allocate_tries (int);
826 void check_eqtb (char *);
827 void probe_memory (void);
828 void print_cs_names (FILE *, int);
829 void perrormod(char *);
830 char *grabenv(char *);
831 void stamp_it (char *);
832 void stampcopy (char *);
833 boolean prime (int);
834 int endit (int);
835
836 void uexit (int unix_code);
837 void t_open_in (void);
838
839
840 void call_edit (ASCII_code *filename, pool_pointer fnstart,
841                 integer fnlength, integer linenumber);
842
843 void add_variable_space(int);
844
845 char *unixify (char *);
846
847 #include "coerce.h"
848 #undef inline
849 #define inline
850 /* sec 79 */
851 extern inline void node_list_display(integer p);
852 extern inline void do_nothing(void);
853 extern inline void update_terminal(void);
854 extern inline void check_full_save_stack(void);
855 extern inline void push_input(void);
856 extern inline void pop_input(void);
857 extern inline void print_err (const char * s);
858 extern inline void ensure_dvi_open(void);
859 extern inline void write_dvi(size_t a, size_t b);
860 extern inline void prompt_input(const char *s);
861 extern inline void synch_h(void);
862 extern inline void synch_v(void);
863 extern inline void set_cur_lang(void);
864 extern char * md5_file (FILE * in_file);
865 extern inline void str_room (int val);
866 extern inline void tail_append_ (pointer val);
867 #define tail_append(a) tail_append_((pointer) a)
868 extern inline void tex_help (unsigned int n, ...);
869 extern inline void append_char(ASCII_code c);
870 extern inline void append_lc_hex(ASCII_code c);
871 extern inline void succumb(void);
872 extern inline void dvi_out_ (ASCII_code op);
873 #define dvi_out(op) dvi_out_((ASCII_code) (op))
874 extern inline void free_avail_(halfword p);
875 #define free_avail(p) free_avail_((halfword) (p))
876 extern inline void flush_string (void);
877 extern str_number load_pool_strings (integer spare_size);
878 extern str_number make_string_pool (const char *s);
879 #define help0()     tex_help(0)
880 #define help1(...)  tex_help(1, __VA_ARGS__)
881 #define help2(...)  tex_help(2, __VA_ARGS__)
882 #define help3(...)  tex_help(3, __VA_ARGS__)
883 #define help4(...)  tex_help(4, __VA_ARGS__)
884 #define help5(...)  tex_help(5, __VA_ARGS__)
885 #define help6(...)  tex_help(6, __VA_ARGS__)
886
887 EXTERN boolean shipout_flag;
888 #endif