OSDN Git Service

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