1 /* Copyright 2014 Clerk Ma
\r
3 This program is free software; you can redistribute it and/or modify
\r
4 it under the terms of the GNU General Public License as published by
\r
5 the Free Software Foundation; either version 2 of the License, or
\r
6 (at your option) any later version.
\r
8 This program is distributed in the hope that it will be useful, but
\r
9 WITHOUT ANY WARRANTY; without even the implied warranty of
\r
10 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
\r
11 General Public License for more details.
\r
13 You should have received a copy of the GNU General Public License
\r
14 along with this program; if not, write to the Free Software
\r
15 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
\r
17 #ifndef _YANDYTEX_MACROS_H
\r
18 #define _YANDYTEX_MACROS_H
\r
22 #define null_code 0 // 0
\r
23 #define carriage_return 015 // 13
\r
24 #define invalid_code 0177 // 127
\r
26 #define loc cur_input.loc_field
\r
28 #define length(s) (str_start[(s) + 1] - str_start[(s)])
\r
30 #define cur_length (pool_ptr - str_start[str_ptr])
\r
48 error_stop_mode = 3,
\r
55 error_message_issued = 2,
\r
56 fatal_error_stop = 3,
\r
59 #define help0() tex_help(0)
\r
60 #define help1(...) tex_help(1, __VA_ARGS__)
\r
61 #define help2(...) tex_help(2, __VA_ARGS__)
\r
62 #define help3(...) tex_help(3, __VA_ARGS__)
\r
63 #define help4(...) tex_help(4, __VA_ARGS__)
\r
64 #define help5(...) tex_help(5, __VA_ARGS__)
\r
65 #define help6(...) tex_help(6, __VA_ARGS__)
\r
67 #define check_interrupt() \
\r
70 if (interrupt != 0) \
\r
71 pause_for_instructions(); \
\r
75 #define unity 0200000
\r
78 #define nx_plus_y(a, b, c) mult_and_add(a, b, c, 07777777777L)
\r
79 #define mult_integers(a, b) mult_and_add(a, b, 0, 017777777777L)
\r
81 #define inf_bad 10000L
\r
83 #define set_glue_ratio_zero(a) (a) = 0.0
\r
84 #define set_glue_ratio_one(a) (a) = 1.0
\r
85 #define tex_float(a) (a)
\r
86 #define unfloat(a) (a)
\r
87 #define float_constant(a) (float) (a)
\r
89 //#define pointer halfword
\r
90 #define null min_halfword
\r
92 #define link(p) mem[p].hh.rh
\r
93 #define info(p) mem[p].hh.lh
\r
96 #define fast_get_avail(a) \
\r
112 #define fast_get_avail(a) \
\r
128 #define empty_flag max_halfword
\r
129 #define is_empty(a) (link(a) == empty_flag)
\r
130 #define node_size info
\r
131 #define llink(a) info(a+1)
\r
132 #define rlink(a) link(a+1)
\r
134 #define type(a) mem[a].hh.b0
\r
135 #define subtype(a) mem[a].hh.b1
\r
137 #define is_char_node(a) (a >= hi_mem_min)
\r
139 #define character subtype
\r
141 #define hlist_node 0
\r
142 #define box_node_size 7
\r
143 #define width_offset 1
\r
144 #define depth_offset 2
\r
145 #define height_offset 3
\r
146 #define width(a) mem[a + width_offset].cint
\r
147 #define depth(a) mem[a + depth_offset].cint
\r
148 #define height(a) mem[a + height_offset].cint
\r
149 #define shift_amount(a) mem[a + 4].cint
\r
150 #define list_offset 5
\r
151 #define list_ptr(a) link(a + list_offset)
\r
152 #define glue_order(a) subtype(a + list_offset)
\r
153 #define glue_sign(a) type(a + list_offset)
\r
155 #define stretching 1
\r
156 #define shrinking 2
\r
157 #define glue_offset 6
\r
158 #define glue_set(a) mem[a + glue_offset].gr
\r
160 #define vlist_node 1
\r
162 #define rule_node 2
\r
163 #define rule_node_size 4
\r
164 #define null_flag -010000000000L
\r
165 #define is_running(a) (a == null_flag)
\r
168 #define ins_node_size 5
\r
169 #define float_cost(a) mem[a + 1].cint
\r
170 #define ins_ptr(a) info(a + 4)
\r
171 #define split_top_ptr(a) link(a + 4)
\r
173 #define mark_node 4
\r
174 #define small_node_size 2
\r
175 #define mark_ptr(a) mem[a + 1].cint
\r
177 #define adjust_node 5
\r
178 #define adjust_ptr mark_ptr
\r
180 #define ligature_node 6
\r
181 #define lig_char(a) (a + 1)
\r
182 #define lig_ptr(a) link(lig_char(a))
\r
184 #define disc_node 7
\r
185 #define replace_count subtype
\r
186 #define pre_break llink
\r
187 #define post_break rlink
\r
189 #define whatsit_node 8
\r
191 #define math_node 9
\r
195 #define precedes_break(a) (type(a) < math_node)
\r
196 #define non_discardable(a) (type(a) < math_node)
\r
198 #define glue_node 10
\r
199 #define cond_math_glue 98
\r
201 #define a_leaders 100
\r
202 #define c_leaders 101
\r
203 #define x_leaders 102
\r
204 #define glue_ptr llink
\r
205 #define leader_ptr rlink
\r
207 #define glue_spec_size 4
\r
208 #define glue_ref_count(a) link(a)
\r
209 #define stretch(a) mem[a + 2].cint
\r
210 #define shrink(a) mem[a + 3].cint
\r
211 #define stretch_order type
\r
212 #define shrink_order subtype
\r
217 #define kern_node 11
\r
221 #define penalty_node 12
\r
222 #define inf_penalty inf_bad
\r
223 #define eject_penalty -inf_bad
\r
224 #define penalty(a) mem[a + 1].cint
\r
226 #define unset_node 13
\r
227 #define glue_stretch(a) mem[a + glue_offset].cint
\r
228 #define glue_shrink shift_amount
\r
229 #define span_count subtype
\r
231 #define zero_glue mem_bot // 0
\r
232 #define fil_glue (zero_glue + glue_spec_size) // 4
\r
233 #define fill_glue (fil_glue + glue_spec_size) // 8
\r
234 #define ss_glue (fill_glue + glue_spec_size) // 12
\r
235 #define fil_neg_glue (ss_glue + glue_spec_size) // 16
\r
236 #define lo_mem_stat_max (fil_neg_glue + glue_spec_size - 1) // 19
\r
237 #define page_ins_head mem_top
\r
238 #define contrib_head (mem_top - 1)
\r
239 #define page_head (mem_top - 2)
\r
240 #define temp_head (mem_top - 3)
\r
241 #define hold_head (mem_top - 4)
\r
242 #define adjust_head (mem_top - 5)
\r
243 #define active (mem_top - 7)
\r
244 #define align_head (mem_top - 8)
\r
245 #define end_span (mem_top - 9)
\r
246 #define omit_template (mem_top - 10)
\r
247 #define null_list (mem_top - 11)
\r
248 #define lig_trick (mem_top - 12)
\r
249 #define garbage (mem_top - 12)
\r
250 #define backup_head (mem_top - 13)
\r
251 #define hi_mem_stat_min (mem_top - 13)
\r
252 #define hi_mem_stat_usage 14
\r
254 #define token_ref_count(a) info(a)
\r
256 #define add_token_ref(a) incr(token_ref_count(a))
\r
257 #define add_glue_ref(a) incr(glue_ref_count(a))
\r
261 #define left_brace 1
\r
262 #define right_brace 2
\r
263 #define math_shift 3
\r
266 #define out_param 5
\r
267 #define mac_param 6
\r
274 #define other_char 12
\r
275 #define active_char 13
\r
279 #define end_match 14
\r
281 #define invalid_char 15
\r
282 #define delim_num 15
\r
283 #define max_char_code 15
\r
285 #define char_num 16
\r
286 #define math_char_num 17
\r
289 #define make_box 20
\r
294 #define remove_item 25
\r
300 #define leader_ship 31
\r
303 #define no_align 34
\r
308 #define ignore_spaces 39
\r
309 #define after_assignment 40
\r
310 #define after_group 41
\r
311 #define break_penalty 42
\r
312 #define start_par 43
\r
313 #define ital_corr 44
\r
315 #define math_accent 46
\r
316 #define discretionary 47
\r
318 #define left_right 49
\r
319 #define math_comp 50
\r
320 #define limit_switch 51
\r
322 #define math_style 53
\r
323 #define math_choice 54
\r
324 #define non_script 55
\r
326 #define case_shift 57
\r
328 #define extension 59
\r
329 #define in_stream 60
\r
330 #define begin_group 61
\r
331 #define end_group 62
\r
333 #define ex_space 64
\r
334 #define no_boundary 65
\r
336 #define end_cs_name 67
\r
337 #define min_internal 68
\r
338 #define char_given 68
\r
339 #define math_given 69
\r
340 #define last_item 70
\r
341 #define max_non_prefixed_command 70
\r
343 #define toks_register 71
\r
344 #define assign_toks 72
\r
345 #define assign_int 73
\r
346 #define assign_dimen 74
\r
347 #define assign_glue 75
\r
348 #define assign_mu_glue 76
\r
349 #define assign_font_dimen 77
\r
350 #define assign_font_int 78
\r
352 #define set_prev_graf 80
\r
353 #define set_page_dimen 81
\r
354 #define set_page_int 82
\r
355 #define set_box_dimen 83
\r
356 #define set_shape 84
\r
357 #define def_code 85
\r
358 #define def_family 86
\r
359 #define set_font 87
\r
360 #define def_font 88
\r
361 #define tex_register 89
\r
362 #define max_internal 89
\r
364 #define multiply 91
\r
368 #define shorthand_def 95
\r
369 #define read_to_cs 96
\r
372 #define hyph_data 99
\r
373 #define set_interaction 100
\r
374 #define max_command 100
\r
376 #define undefined_cs (max_command + 1 )
\r
377 #define expand_after (max_command + 2 )
\r
378 #define no_expand (max_command + 3 )
\r
379 #define input (max_command + 4 )
\r
380 #define if_test (max_command + 5 )
\r
381 #define fi_or_else (max_command + 6 )
\r
382 #define cs_name (max_command + 7 )
\r
383 #define convert (max_command + 8 )
\r
384 #define the (max_command + 9 )
\r
385 #define top_bot_mark (max_command + 10)
\r
386 #define call (max_command + 11)
\r
387 #define long_call (max_command + 12)
\r
388 #define outer_call (max_command + 13)
\r
389 #define long_outer_call (max_command + 14)
\r
390 #define end_template (max_command + 15)
\r
391 #define dont_expand (max_command + 16)
\r
392 #define glue_ref (max_command + 17)
\r
393 #define shape_ref (max_command + 18)
\r
394 #define box_ref (max_command + 19)
\r
395 #define data (max_command + 20)
\r
398 #define hmode (vmode + max_command + 1)
\r
399 #define mmode (hmode + max_command + 1)
\r
401 #define ignore_depth -65536000L
\r
403 #define mode cur_list.mode_field
\r
404 #define head cur_list.head_field
\r
405 #define tail cur_list.tail_field
\r
406 #define aux cur_list.aux_field
\r
407 #define prev_depth aux.cint
\r
408 #define space_factor aux.hh.lh
\r
409 #define clang aux.hh.rh
\r
410 #define incompleat_noad aux.cint
\r
411 #define prev_graf cur_list.pg_field
\r
412 #define mode_line cur_list.ml_field
\r
414 #define eq_level_field(a) a.hh.b1
\r
415 #define eq_type_field(a) a.hh.b0
\r
416 #define equiv_field(a) a.hh.rh
\r
417 #define eq_level(a) eq_level_field(eqtb[a])
\r
418 #define eq_type(a) eq_type_field(eqtb[a])
\r
419 #define equiv(a) equiv_field(eqtb[a])
\r
420 #define level_zero min_quarterword
\r
421 #define level_one level_zero + 1
\r
423 #define active_base 1 // 1
\r
424 #define single_base (active_base + 256) // 257
\r
425 #define null_cs (single_base + 256) // 513
\r
426 #define hash_base (null_cs + 1) // 514
\r
427 #define frozen_control_sequence (hash_base + hash_size + hash_extra) // (hash_size + hash_extra + 514)
\r
428 #define frozen_protection frozen_control_sequence // (hash_size + hash_extra + 514)
\r
429 #define frozen_cr (frozen_control_sequence + 1) // (hash_size + hash_extra + 515)
\r
430 #define frozen_end_group (frozen_control_sequence + 2) // (hash_size + hash_extra + 516)
\r
431 #define frozen_right (frozen_control_sequence + 3) // (hash_size + hash_extra + 517)
\r
432 #define frozen_fi (frozen_control_sequence + 4) // (hash_size + hash_extra + 518)
\r
433 #define frozen_end_template (frozen_control_sequence + 5) // (hash_size + hash_extra + 519)
\r
434 #define frozen_endv (frozen_control_sequence + 6) // (hash_size + hash_extra + 520)
\r
435 #define frozen_relax (frozen_control_sequence + 7) // (hash_size + hash_extra + 521)
\r
436 #define end_write (frozen_control_sequence + 8) // (hash_size + hash_extra + 522)
\r
437 #define frozen_dont_expand (frozen_control_sequence + 9) // (hash_size + hash_extra + 523)
\r
438 #define frozen_null_font (frozen_control_sequence + 10) // (hash_size + hash_extra + 524)
\r
439 #define font_id_base (frozen_null_font - font_base) // (hash_size + hash_extra + 524)
\r
440 #define undefined_control_sequence (frozen_null_font + font_max + 2) // (hash_size + 781)
\r
441 #define glue_base (undefined_control_sequence + 1) // (hash_size + 782)
\r
443 #define line_skip_code 0 // 782
\r
444 #define baseline_skip_code 1 // 783
\r
445 #define par_skip_code 2 // 784
\r
446 #define above_display_skip_code 3 // 785
\r
447 #define below_display_skip_code 4 // 786
\r
448 #define above_display_short_skip_code 5 // 787
\r
449 #define below_display_short_skip_code 6 // 788
\r
450 #define left_skip_code 7 // 789
\r
451 #define right_skip_code 8 // 790
\r
452 #define top_skip_code 9 // 791
\r
453 #define split_top_skip_code 10 // 792
\r
454 #define tab_skip_code 11 // 793
\r
455 #define space_skip_code 12 // 794
\r
456 #define xspace_skip_code 13 // 795
\r
457 #define par_fill_skip_code 14 // 796
\r
458 #define thin_mu_skip_code 15 // 797
\r
459 #define med_mu_skip_code 16 // 798
\r
460 #define thick_mu_skip_code 17 // 799
\r
461 #define glue_pars 18 // 800
\r
462 #define skip_base (glue_base + glue_pars) // 800
\r
463 #define mu_skip_base (skip_base + 256) // 1056
\r
464 #define local_base (mu_skip_base + 256) // 1312
\r
466 #define skip(a) equiv(skip_base + a)
\r
467 #define mu_skip(a) equiv(mu_skip_base + a)
\r
468 #define glue_par(a) equiv(glue_base + a)
\r
469 #define line_skip glue_par(line_skip_code)
\r
470 #define baseline_skip glue_par(baseline_skip_code)
\r
471 #define par_skip glue_par(par_skip_code)
\r
472 #define above_display_skip glue_par(above_display_skip_code)
\r
473 #define below_display_skip glue_par(below_display_skip_code)
\r
474 #define above_display_short_skip glue_par(above_display_short_skip_code)
\r
475 #define below_display_short_skip glue_par(below_display_short_skip_code)
\r
476 #define left_skip glue_par(left_skip_code)
\r
477 #define right_skip glue_par(right_skip_code)
\r
478 #define top_skip glue_par(top_skip_code)
\r
479 #define split_top_skip glue_par(split_top_skip_code)
\r
480 #define tab_skip glue_par(tab_skip_code)
\r
481 #define space_skip glue_par(space_skip_code)
\r
482 #define xspace_skip glue_par(xspace_skip_code)
\r
483 #define par_fill_skip glue_par(par_fill_skip_code)
\r
484 #define thin_mu_skip glue_par(thin_mu_skip_code)
\r
485 #define med_mu_skip glue_par(med_mu_skip_code)
\r
486 #define thick_mu_skip glue_par(thick_mu_skip_code)
\r
488 #define par_shape_loc local_base // 1312
\r
489 #define output_routine_loc (local_base + 1) // 1313
\r
490 #define every_par_loc (local_base + 2) // 1314
\r
491 #define every_math_loc (local_base + 3) // 1315
\r
492 #define every_display_loc (local_base + 4) // 1316
\r
493 #define every_hbox_loc (local_base + 5) // 1317
\r
494 #define every_vbox_loc (local_base + 6) // 1318
\r
495 #define every_job_loc (local_base + 7) // 1319
\r
496 #define every_cr_loc (local_base + 8) // 1320
\r
497 #define err_help_loc (local_base + 9) // 1321
\r
498 #define toks_base (local_base + 10) // 1322
\r
499 #define box_base (toks_base + 256) // 1578
\r
500 #define cur_font_loc (box_base + 256) // 1834
\r
501 #define math_font_base (cur_font_loc + 1) // 1835
\r
502 #define cat_code_base (math_font_base + 48) // 1883
\r
503 #define lc_code_base (cat_code_base + 256) // 2139
\r
504 #define uc_code_base (lc_code_base + 256) // 2395
\r
505 #define sf_code_base (uc_code_base + 256) // 2651
\r
506 #define math_code_base (sf_code_base + 256) // 2907
\r
507 #define int_base (math_code_base + 256) // 3163
\r
509 #define par_shape_ptr equiv(par_shape_loc)
\r
510 #define output_routine equiv(output_routine_loc)
\r
511 #define every_par equiv(every_par_loc)
\r
512 #define every_math equiv(every_math_loc)
\r
513 #define every_display equiv(every_display_loc)
\r
514 #define every_hbox equiv(every_hbox_loc)
\r
515 #define every_vbox equiv(every_vbox_loc)
\r
516 #define every_job equiv(every_job_loc)
\r
517 #define every_cr equiv(every_cr_loc)
\r
518 #define err_help equiv(err_help_loc)
\r
519 #define toks(a) equiv(toks_base + a)
\r
520 #define box(a) equiv(box_base + a)
\r
521 #define cur_font equiv(cur_font_loc)
\r
522 #define fam_fnt(a) equiv(math_font_base + a)
\r
523 #define cat_code(a) equiv(cat_code_base + a)
\r
524 #define lc_code(a) equiv(lc_code_base + a)
\r
525 #define uc_code(a) equiv(uc_code_base + a)
\r
526 #define sf_code(a) equiv(sf_code_base + a)
\r
527 #define math_code(a) equiv(math_code_base + a)
\r
529 #define null_font font_base
\r
530 #define var_code 070000
\r
532 #define pretolerance_code 0 // 3163
\r
533 #define tolerance_code 1 // 3164
\r
534 #define line_penalty_code 2 // 3165
\r
535 #define hyphen_penalty_code 3 // 3166
\r
536 #define ex_hyphen_penalty_code 4 // 3167
\r
537 #define club_penalty_code 5 // 3168
\r
538 #define widow_penalty_code 6 // 3169
\r
539 #define display_widow_penalty_code 7 // 3170
\r
540 #define broken_penalty_code 8 // 3171
\r
541 #define bin_op_penalty_code 9 // 3172
\r
542 #define rel_penalty_code 10 // 3173
\r
543 #define pre_display_penalty_code 11 // 3174
\r
544 #define post_display_penalty_code 12 // 3175
\r
545 #define inter_line_penalty_code 13 // 3176
\r
546 #define double_hyphen_demerits_code 14 // 3177
\r
547 #define final_hyphen_demerits_code 15 // 3178
\r
548 #define adj_demerits_code 16 // 3179
\r
549 #define mag_code 17 // 3180
\r
550 #define delimiter_factor_code 18 // 3181
\r
551 #define looseness_code 19 // 3182
\r
552 #define time_code 20 // 3183
\r
553 #define day_code 21 // 3184
\r
554 #define month_code 22 // 3185
\r
555 #define year_code 23 // 3186
\r
556 #define show_box_breadth_code 24 // 3187
\r
557 #define show_box_depth_code 25 // 3188
\r
558 #define hbadness_code 26 // 3189
\r
559 #define vbadness_code 27 // 3190
\r
560 #define pausing_code 28 // 3191
\r
561 #define tracing_online_code 29 // 3192
\r
562 #define tracing_macros_code 30 // 3193
\r
563 #define tracing_stats_code 31 // 3194
\r
564 #define tracing_paragraphs_code 32 // 3195
\r
565 #define tracing_pages_code 33 // 3196
\r
566 #define tracing_output_code 34 // 3197
\r
567 #define tracing_lost_chars_code 35 // 3198
\r
568 #define tracing_commands_code 36 // 3199
\r
569 #define tracing_restores_code 37 // 3200
\r
570 #define uc_hyph_code 38 // 3201
\r
571 #define output_penalty_code 39 // 3202
\r
572 #define max_dead_cycles_code 40 // 3203
\r
573 #define hang_after_code 41 // 3204
\r
574 #define floating_penalty_code 42 // 3205
\r
575 #define global_defs_code 43 // 3206
\r
576 #define cur_fam_code 44 // 3207
\r
577 #define escape_char_code 45 // 3208
\r
578 #define default_hyphen_char_code 46 // 3209
\r
579 #define default_skew_char_code 47 // 3210
\r
580 #define end_line_char_code 48 // 3211
\r
581 #define new_line_char_code 49 // 3212
\r
582 #define language_code 50 // 3213
\r
583 #define left_hyphen_min_code 51 // 3214
\r
584 #define right_hyphen_min_code 52 // 3215
\r
585 #define holding_inserts_code 53 // 3216
\r
586 #define error_context_lines_code 54 // 3217
\r
587 #define int_pars 55
\r
588 #define count_base (int_base + int_pars) // 3218
\r
589 #define del_code_base (count_base + 256) // 3474
\r
590 #define dimen_base (del_code_base + 256) // 3730
\r
592 #define del_code(a) eqtb[del_code_base + a].cint
\r
593 #define count(a) eqtb[count_base + a].cint
\r
594 #define int_par(a) eqtb[int_base + a].cint
\r
595 #define pretolerance int_par(pretolerance_code)
\r
596 #define tolerance int_par(tolerance_code)
\r
597 #define line_penalty int_par(line_penalty_code)
\r
598 #define hyphen_penalty int_par(hyphen_penalty_code)
\r
599 #define ex_hyphen_penalty int_par(ex_hyphen_penalty_code)
\r
600 #define club_penalty int_par(club_penalty_code)
\r
601 #define widow_penalty int_par(widow_penalty_code)
\r
602 #define display_widow_penalty int_par(display_widow_penalty_code)
\r
603 #define broken_penalty int_par(broken_penalty_code)
\r
604 #define bin_op_penalty int_par(bin_op_penalty_code)
\r
605 #define rel_penalty int_par(rel_penalty_code)
\r
606 #define pre_display_penalty int_par(pre_display_penalty_code)
\r
607 #define post_display_penalty int_par(post_display_penalty_code)
\r
608 #define inter_line_penalty int_par(inter_line_penalty_code)
\r
609 #define double_hyphen_demerits int_par(double_hyphen_demerits_code)
\r
610 #define final_hyphen_demerits int_par(final_hyphen_demerits_code)
\r
611 #define adj_demerits int_par(adj_demerits_code)
\r
612 #define mag int_par(mag_code)
\r
613 #define delimiter_factor int_par(delimiter_factor_code)
\r
614 #define looseness int_par(looseness_code)
\r
615 #define tex_time int_par(time_code)
\r
616 #define day int_par(day_code)
\r
617 #define month int_par(month_code)
\r
618 #define year int_par(year_code)
\r
619 #define show_box_breadth int_par(show_box_breadth_code)
\r
620 #define show_box_depth int_par(show_box_depth_code)
\r
621 #define hbadness int_par(hbadness_code)
\r
622 #define vbadness int_par(vbadness_code)
\r
623 #define pausing int_par(pausing_code)
\r
624 #define tracing_online int_par(tracing_online_code)
\r
625 #define tracing_macros int_par(tracing_macros_code)
\r
626 #define tracing_stats int_par(tracing_stats_code)
\r
627 #define tracing_paragraphs int_par(tracing_paragraphs_code)
\r
628 #define tracing_pages int_par(tracing_pages_code)
\r
629 #define tracing_output int_par(tracing_output_code)
\r
630 #define tracing_lost_chars int_par(tracing_lost_chars_code)
\r
631 #define tracing_commands int_par(tracing_commands_code)
\r
632 #define tracing_restores int_par(tracing_restores_code)
\r
633 #define uc_hyph int_par(uc_hyph_code)
\r
634 #define output_penalty int_par(output_penalty_code)
\r
635 #define max_dead_cycles int_par(max_dead_cycles_code)
\r
636 #define hang_after int_par(hang_after_code)
\r
637 #define floating_penalty int_par(floating_penalty_code)
\r
638 #define global_defs int_par(global_defs_code)
\r
639 #define cur_fam int_par(cur_fam_code)
\r
640 #define escape_char int_par(escape_char_code)
\r
641 #define default_hyphen_char int_par(default_hyphen_char_code)
\r
642 #define default_skew_char int_par(default_skew_char_code)
\r
643 #define end_line_char int_par(end_line_char_code)
\r
644 #define new_line_char int_par(new_line_char_code)
\r
645 #define language int_par(language_code)
\r
646 #define left_hyphen_min int_par(left_hyphen_min_code)
\r
647 #define right_hyphen_min int_par(right_hyphen_min_code)
\r
648 #define holding_inserts int_par(holding_inserts_code)
\r
649 #define error_context_lines int_par(error_context_lines_code)
\r
651 #define par_indent_code 0 // 3730
\r
652 #define math_surround_code 1 // 3731
\r
653 #define line_skip_limit_code 2 // 3732
\r
654 #define hsize_code 3 // 3733
\r
655 #define vsize_code 4 // 3734
\r
656 #define max_depth_code 5 // 3735
\r
657 #define split_max_depth_code 6 // 3736
\r
658 #define box_max_depth_code 7 // 3737
\r
659 #define hfuzz_code 8 // 3738
\r
660 #define vfuzz_code 9 // 3739
\r
661 #define delimiter_shortfall_code 10 // 3740
\r
662 #define null_delimiter_space_code 11 // 3741
\r
663 #define script_space_code 12 // 3742
\r
664 #define pre_display_size_code 13 // 3743
\r
665 #define display_width_code 14 // 3744
\r
666 #define display_indent_code 15 // 3745
\r
667 #define overfull_rule_code 16 // 3746
\r
668 #define hang_indent_code 17 // 3747
\r
669 #define h_offset_code 18 // 3748
\r
670 #define v_offset_code 19 // 3749
\r
671 #define emergency_stretch_code 20 // 3750
\r
672 #define dimen_pars 21
\r
673 #define scaled_base (dimen_base + dimen_pars) // 3751
\r
674 #define eqtb_size (scaled_base + 255) // 4006
\r
676 #define dimen(a) eqtb[scaled_base + a].cint
\r
677 #define dimen_par(a) eqtb[dimen_base + a].cint
\r
678 #define par_indent dimen_par(par_indent_code)
\r
679 #define math_surround dimen_par(math_surround_code)
\r
680 #define line_skip_limit dimen_par(line_skip_limit_code)
\r
681 #define hsize dimen_par(hsize_code)
\r
682 #define vsize dimen_par(vsize_code)
\r
683 #define max_depth dimen_par(max_depth_code)
\r
684 #define split_max_depth dimen_par(split_max_depth_code)
\r
685 #define box_max_depth dimen_par(box_max_depth_code)
\r
686 #define hfuzz dimen_par(hfuzz_code)
\r
687 #define vfuzz dimen_par(vfuzz_code)
\r
688 #define delimiter_shortfall dimen_par(delimiter_shortfall_code)
\r
689 #define null_delimiter_space dimen_par(null_delimiter_space_code)
\r
690 #define script_space dimen_par(script_space_code)
\r
691 #define pre_display_size dimen_par(pre_display_size_code)
\r
692 #define display_width dimen_par(display_width_code)
\r
693 #define display_indent dimen_par(display_indent_code)
\r
694 #define overfull_rule dimen_par(overfull_rule_code)
\r
695 #define hang_indent dimen_par(hang_indent_code)
\r
696 #define h_offset dimen_par(h_offset_code)
\r
697 #define v_offset dimen_par(v_offset_code)
\r
698 #define emergency_stretch dimen_par(emergency_stretch_code)
\r
700 #define text(a) hash[a].rh
\r
701 #define next(a) hash[a].lh
\r
702 #define hash_is_full (hash_used == hash_base)
\r
703 #define font_id_text(a) text(font_id_base + a)
\r
705 #define save_type(a) save_stack[a].hh.b0
\r
706 #define save_level(a) save_stack[a].hh.b1
\r
707 #define save_index(a) save_stack[a].hh.rh
\r
708 #define restore_old_value 0
\r
709 #define restore_zero 1
\r
710 #define insert_token 2
\r
711 #define level_boundary 3
\r
713 #define bottom_level 0
\r
714 #define simple_group 1
\r
715 #define hbox_group 2
\r
716 #define adjust_hbox_group 3
\r
717 #define vbox_group 4
\r
718 #define vtop_group 5
\r
719 #define align_group 6
\r
720 #define no_align_group 7
\r
721 #define output_group 8
\r
722 #define math_group 9
\r
723 #define disc_group 10
\r
724 #define insert_group 11
\r
725 #define vcenter_group 12
\r
726 #define math_choice_group 13
\r
727 #define semi_simple_group 14
\r
728 #define math_shift_group 15
\r
729 #define math_left_group 16
\r
730 #define max_group_code 16
\r
732 #define saved(a) save_stack[save_ptr + (a)].cint
\r
734 #define cs_token_flag 07777 // 4095
\r
735 #define left_brace_token 0400 // 256 = 2^8 * left_brace
\r
736 #define left_brace_limit 01000 // 512 = 2^8 * (left_brace + 1)
\r
737 #define right_brace_token 01000 // 512 = 2^8 * right_brace
\r
738 #define right_brace_limit 01400 // 768 = 2^8 * (right_brace + 1)
\r
739 #define math_shift_token 01400 // 768 = 2^8 * math_shift
\r
740 #define tab_token 02000 // 1024 = 2^8 * tab_mark
\r
741 #define out_param_token 02400 // 1280 = 2^8 * out_param
\r
742 #define space_token 05040 // 2592 = 2^8 * spacer + ' '
\r
743 #define letter_token 05400 // 2816 = 2^8 * letter
\r
744 #define other_token 06000 // 3072 = 2^8 * other_char
\r
745 #define match_token 06400 // 3328 = 2^8 * match
\r
746 #define end_match_token 07000 // 3584 = 2^8 * end_match
\r
748 #define chr_cmd(s) \
\r
756 #define state cur_input.state_field
\r
757 #define index cur_input.index_field
\r
758 #define start cur_input.start_field
\r
759 #define limit cur_input.limit_field
\r
760 #define name cur_input.name_field
\r
763 #define skip_blanks 2 + max_char_code // 17
\r
764 #define new_line 3 + max_char_code + max_char_code // 33
\r
766 #define cur_file input_file[index]
\r
772 #define absorbing 5
\r
774 #define token_list 0
\r
775 #define token_type index
\r
776 #define param_start limit
\r
777 #define parameter 0
\r
778 #define u_template 1
\r
779 #define v_template 2
\r
780 #define backed_up 3
\r
783 #define output_text 6
\r
784 #define every_par_text 7
\r
785 #define every_math_text 8
\r
786 #define every_display_text 9
\r
787 #define every_hbox_text 10
\r
788 #define every_vbox_text 11
\r
789 #define every_job_text 12
\r
790 #define every_cr_text 13
\r
791 #define mark_text 14
\r
792 #define write_text 15
\r
794 #define begin_pseudoprint() \
\r
799 selector = pseudo; \
\r
800 trick_count = 1000000L; \
\r
803 #define set_trick_count() \
\r
806 first_count = tally; \
\r
807 trick_count = tally + 1 + error_line - half_error_line; \
\r
809 if (trick_count < error_line) \
\r
810 trick_count = error_line; \
\r
815 #define back_list(a) begin_token_list(a, backed_up)
\r
816 #define ins_list(a) begin_token_list(a, inserted)
\r
818 #define any_state_plus(a) mid_line + (a): case skip_blanks + (a): case new_line + (a)
\r
820 #define add_delims_to(a) \
\r
821 (a) + math_shift: \
\r
822 case (a) + tab_mark: \
\r
823 case (a) + mac_param: \
\r
824 case (a) + sub_mark: \
\r
825 case (a) + letter: \
\r
826 case (a) + other_char
\r
828 #define is_hex(a) \
\r
829 (((a >= '0') && (a <= '9')) || ((a >= 'a') && (a <= 'f')))
\r
830 #define hex_to_cur_chr() \
\r
834 cur_chr = c - '0'; \
\r
836 cur_chr = c - 'a' + 10; \
\r
839 cur_chr = 16 * cur_chr + cc - '0'; \
\r
841 cur_chr = 16 * cur_chr + cc - 'a' + 10; \
\r
845 #define end_line_char_inactive() \
\r
846 (end_line_char < 0) || (end_line_char > 255)
\r
849 #define store_new_token(a) \
\r
858 #define fast_store_new_token(a) \
\r
861 fast_get_avail(q); \
\r
867 #define no_expand_flag 257
\r
869 #define top_mark_code 0
\r
870 #define first_mark_code 1
\r
871 #define bot_mark_code 2
\r
872 #define split_first_mark_code 3
\r
873 #define split_bot_mark_code 4
\r
874 #define top_mark cur_mark[top_mark_code]
\r
875 #define first_mark cur_mark[first_mark_code]
\r
876 #define bot_mark cur_mark[bot_mark_code]
\r
877 #define split_first_mark cur_mark[split_first_mark_code]
\r
878 #define split_bot_mark cur_mark[split_bot_mark_code]
\r
881 #define dimen_val 1
\r
884 #define ident_val 4
\r
887 #define scanned_result(va, vb) \
\r
891 cur_val_level = vb; \
\r
895 #define input_line_no_code (glue_val + 1)
\r
896 #define badness_code (glue_val + 2)
\r
898 #define max_dimen 07777777777
\r
900 #define octal_token (other_token + '\'') // 3111
\r
901 #define hex_token (other_token + '"' ) // 3106
\r
902 #define alpha_token (other_token + '`' ) // 3168
\r
903 #define point_token (other_token + '.' ) // 3118
\r
904 #define continental_point_token (other_token + ',' ) // 3116
\r
906 #define zero_token (other_token + '0') // 3120
\r
907 #define A_token (letter_token + 'A') // 2881
\r
908 #define other_A_token (other_token + 'A') // 3137
\r
910 #define set_conversion(a, b) \
\r
917 #define number_code 0
\r
918 #define roman_numeral_code 1
\r
919 #define string_code 2
\r
920 #define meaning_code 3
\r
921 #define font_name_code 4
\r
922 #define job_name_code 5
\r
925 #define just_open 1
\r
927 #define if_char_code 0
\r
928 #define if_cat_code 1
\r
929 #define if_int_code 2
\r
930 #define if_dim_code 3
\r
931 #define if_odd_code 4
\r
932 #define if_vmode_code 5
\r
933 #define if_hmode_code 6
\r
934 #define if_mmode_code 7
\r
935 #define if_inner_code 8
\r
936 #define if_void_code 9
\r
937 #define if_hbox_code 10
\r
938 #define if_vbox_code 11
\r
939 #define ifx_code 12
\r
940 #define if_eof_code 13
\r
941 #define if_true_code 14
\r
942 #define if_false_code 15
\r
943 #define if_case_code 16
\r
945 #define if_node_size 2
\r
946 #define if_line_field(a) mem[(a) + 1].cint
\r
949 #define else_code 3
\r
952 #define get_x_token_or_active_char() \
\r
957 if (cur_cmd == relax) \
\r
958 if (cur_chr == no_expand_flag) \
\r
960 cur_cmd = active_char; \
\r
961 cur_chr = cur_tok - cs_token_flag - active_base; \
\r
966 #define append_to_name(a) \
\r
971 if (k < file_name_size) \
\r
972 name_of_file[k] = xchr[c]; \
\r
981 #define stop_flag 128
\r
982 #define kern_flag 128
\r
983 #define skip_byte(a) a.b0
\r
984 #define next_char(a) a.b1
\r
985 #define op_byte(a) a.b2
\r
986 #define rem_byte(a) a.b3
\r
988 #define ext_top(a) a.b0
\r
989 #define ext_mid(a) a.b1
\r
990 #define ext_bot(a) a.b2
\r
991 #define ext_rep(a) a.b3
\r
993 #define slant_code 1
\r
994 #define space_code 2
\r
995 #define space_stretch_code 3
\r
996 #define space_shrink_code 4
\r
997 #define x_height_code 5
\r
998 #define quad_code 6
\r
999 #define extra_space_code 7
\r
1001 #define non_char 256
\r
1002 #define non_address 0
\r
1004 #define char_info(a, b) font_info[char_base[a] + b].qqqq
\r
1005 #define char_width(a, b) font_info[width_base[a] + b.b0].cint
\r
1006 #define char_exists(a) (a.b0 > min_quarterword)
\r
1007 #define char_italic(a, b) font_info[italic_base[a] + (b.b2) / 4].cint
\r
1008 #define height_depth(a) (a.b1)
\r
1009 #define char_height(a, b) font_info[height_base[a] + (b) / 16].cint
\r
1010 #define char_depth(a, b) font_info[depth_base[a] + (b) % 16].cint
\r
1011 #define char_tag(a) (a.b2 % 4)
\r
1013 #define char_kern(a, b) font_info[kern_base[a] + 256 * op_byte(b) + rem_byte(b)].cint
\r
1014 #define kern_base_offset (256 * (128 + min_quarterword))
\r
1015 #define lig_kern_start(a, b) lig_kern_base[a] + rem_byte(b)
\r
1016 #define lig_kern_restart(a, b) lig_kern_base[a] + 256 * op_byte(b) + rem_byte(b) + 32768 - kern_base_offset
\r
1018 #define param(a, b) font_info[a + param_base[b]].cint
\r
1019 #define slant(f) param(slant_code, f)
\r
1020 #define space(f) param(space_code, f)
\r
1021 #define space_stretch(f) param(space_stretch_code, f)
\r
1022 #define space_shrink(f) param(space_shrink_code, f)
\r
1023 #define x_height(f) param(x_height_code, f)
\r
1024 #define quad(f) param(quad_code, f)
\r
1025 #define extra_space(f) param(extra_space_code, f)
\r
1027 #define start_font_error_message() \
\r
1030 print_err("Font "); \
\r
1032 print_char('='); \
\r
1033 print_file_name(nom, aire, 335); \
\r
1038 print_scaled(s); \
\r
1041 else if (s != -1000) \
\r
1043 prints(" scaled "); \
\r
1044 print_int(-(integer)s); \
\r
1049 #define read_sixteen(a) \
\r
1058 a = a * 256 + fbyte;\
\r
1061 #define store_four_quarters(val) \
\r
1064 fget(); a = fbyte; qw.b0 = a; \
\r
1065 fget(); b = fbyte; qw.b1 = b; \
\r
1066 fget(); c = fbyte; qw.b2 = c; \
\r
1067 fget(); d = fbyte; qw.b3 = d; \
\r
1072 #define check_byte_range(a) \
\r
1075 if ((a < bc) || (a > ec)) \
\r
1080 #define store_scaled(a) \
\r
1083 fget(); a = fbyte; fget(); b = fbyte; \
\r
1084 fget(); c = fbyte; fget(); d = fbyte; \
\r
1085 sw = (((((d * z) / 256) + (c * z)) / 256) + (b * z)) / beta;\
\r
1089 else if (a == 255) \
\r
1096 #define check_existence(a) \
\r
1099 check_byte_range(a); \
\r
1101 qw = char_info(f, a); \
\r
1103 if (!char_exists(qw)) \
\r
1108 #define adjust(a) a[f] = a[f]
\r
1110 #define set1 128 // c[1]
\r
1111 #define set2 129 // c[2]
\r
1112 #define set3 130 // c[3]
\r
1113 #define set4 131 // c[4]
\r
1114 #define set_rule 132 // a[4] b[4]
\r
1115 #define put1 133 // c[1]
\r
1116 #define put2 134 // c[2]
\r
1117 #define put3 135 // c[3]
\r
1118 #define put4 136 // c[4]
\r
1119 #define put_rule 137 // a[4] b[4]
\r
1120 #define nop 138 // NULL
\r
1121 #define bop 139 // c0[4] c1[4] ... c9[4] p[4]
\r
1122 #define eop 140 // NULL
\r
1125 #define right1 143 // b[1]
\r
1126 #define right2 144 // b[2]
\r
1127 #define right3 145 // b[3]
\r
1128 #define right4 146 // b[4]
\r
1130 #define w1 148 // b[1]
\r
1131 #define w2 149 // b[2]
\r
1132 #define w3 150 // b[3]
\r
1133 #define w4 151 // b[4]
\r
1135 #define x1 153 // b[1]
\r
1136 #define x2 154 // b[2]
\r
1137 #define x3 155 // b[3]
\r
1138 #define x4 156 // b[4]
\r
1139 #define down1 157 // a[1]
\r
1140 #define down2 158 // a[2]
\r
1141 #define down3 159 // a[3]
\r
1142 #define down4 160 // a[4]
\r
1144 #define y1 162 // a[1]
\r
1145 #define y2 163 // a[2]
\r
1146 #define y3 164 // a[3]
\r
1147 #define y4 165 // a[4]
\r
1149 #define z1 167 // a[1]
\r
1150 #define z2 168 // a[2]
\r
1151 #define z3 169 // a[3]
\r
1152 #define z4 170 // a[4]
\r
1153 #define fnt_num_0 171 //
\r
1154 #define fnt1 235 // k[1]
\r
1155 #define fnt2 236 // k[2]
\r
1156 #define fnt3 237 // k[3]
\r
1157 #define fnt4 238 // k[4]
\r
1158 #define xxx1 239 // k[1] x[k]
\r
1159 #define xxx2 240 // k[2] x[k]
\r
1160 #define xxx3 241 // k[3] x[k]
\r
1161 #define xxx4 242 // k[4] x[k]
\r
1162 #define fnt_def1 243 // k[1] c[4] s[4] d[4] a[1] l[1] n[a + l]
\r
1163 #define fnt_def2 244 // k[2] c[4] s[4] d[4] a[1] l[1] n[a + l]
\r
1164 #define fnt_def3 245 // k[3] c[4] s[4] d[4] a[1] l[1] n[a + l]
\r
1165 #define fnt_def4 246 // k[4] c[4] s[4] d[4] a[1] l[1] n[a + l]
\r
1166 #define pre 247 // i[1] num[4] den[4] mag[4] k[1] x[k]
\r
1167 #define post 248 //
\r
1168 #define post_post 249 //
\r
1172 #define movement_node_size 3
\r
1173 #define location(a) mem[a + 2].cint
\r
1182 #define none_seen 0
\r
1186 #define billion 1000000000.0
\r
1187 #define vet_glue(a) \
\r
1191 if (glue_temp > billion) \
\r
1192 glue_temp = billion; \
\r
1193 else if (glue_temp < -billion)\
\r
1194 glue_temp = -billion; \
\r
1199 #define additional 1
\r
1200 #define natural 0, additional
\r
1202 #define u_part(a) mem[(a) + height_offset].cint
\r
1203 #define v_part(a) mem[(a) + depth_offset].cint
\r
1204 #define extra_info(a) info((a) + list_offset)
\r
1206 #define noad_size 4
\r
1207 #define nucleus(a) ((a) + 1)
\r
1208 #define supscr(a) ((a) + 2)
\r
1209 #define subscr(a) ((a) + 3)
\r
1210 #define math_type link
\r
1212 #define math_char 1
\r
1214 #define sub_mlist 3
\r
1215 #define math_text_char 4
\r
1217 #define ord_noad (unset_node + 3) // 16
\r
1218 #define op_noad (ord_noad + 1 ) // 17
\r
1219 #define bin_noad (ord_noad + 2 ) // 18
\r
1220 #define rel_noad (ord_noad + 3 ) // 19
\r
1221 #define open_noad (ord_noad + 4 ) // 20
\r
1222 #define close_noad (ord_noad + 5 ) // 21
\r
1223 #define punct_noad (ord_noad + 6 ) // 22
\r
1224 #define inner_noad (ord_noad + 7 ) // 23
\r
1226 #define no_limits 2
\r
1228 #define left_delimiter(a) ((a) + 4)
\r
1229 #define right_delimiter(a) ((a) + 5)
\r
1230 #define radical_noad (inner_noad + 1) // 24
\r
1231 #define radical_noad_size 5
\r
1232 #define fraction_noad (radical_noad + 1) // 25
\r
1233 #define fraction_noad_size 6
\r
1234 #define small_fam(a) mem[(a)].qqqq.b0
\r
1235 #define small_char(a) mem[(a)].qqqq.b1
\r
1236 #define large_fam(a) mem[(a)].qqqq.b2
\r
1237 #define large_char(a) mem[(a)].qqqq.b3
\r
1238 #define thickness width
\r
1239 #define default_code 010000000000L
\r
1240 #define numerator supscr
\r
1241 #define denominator subscr
\r
1243 #define under_noad (fraction_noad + 1) // 26
\r
1244 #define over_noad (under_noad + 1 ) // 27
\r
1245 #define accent_noad (over_noad + 1 ) // 28
\r
1246 #define accent_noad_size 5
\r
1247 #define accent_chr(a) (a) + 4
\r
1248 #define vcenter_noad (accent_noad + 1 ) // 29
\r
1249 #define left_noad (vcenter_noad + 1 ) // 30
\r
1250 #define right_noad (left_noad + 1 ) // 31
\r
1251 #define delimiter nucleus
\r
1252 #define script_allowed(a) ((type(a) >= ord_noad) && (type(a) < left_noad))
\r
1254 #define style_node (unset_node + 1)
\r
1255 #define style_node_size 3
\r
1256 #define display_style 0
\r
1257 #define text_style 2
\r
1258 #define script_style 4
\r
1259 #define script_script_style 6
\r
1262 #define choice_node (unset_node + 2)
\r
1263 #define display_mlist(a) info(a + 1)
\r
1264 #define text_mlist(a) link(a + 1)
\r
1265 #define script_mlist(a) info(a + 2)
\r
1266 #define script_script_mlist(a) link(a + 2)
\r
1268 #define text_size 0
\r
1269 #define script_size 16
\r
1270 #define script_script_size 32
\r
1272 #define mathsy(a, b) font_info[a + param_base[fam_fnt(2 + b)]].cint
\r
1273 #define math_x_height(a) mathsy(5, a)
\r
1274 #define math_quad(a) mathsy(6, a)
\r
1275 #define num1(a) mathsy(8, a)
\r
1276 #define num2(a) mathsy(9, a)
\r
1277 #define num3(a) mathsy(10, a)
\r
1278 #define denom1(a) mathsy(11, a)
\r
1279 #define denom2(a) mathsy(12, a)
\r
1280 #define sup1(a) mathsy(13, a)
\r
1281 #define sup2(a) mathsy(14, a)
\r
1282 #define sup3(a) mathsy(15, a)
\r
1283 #define sub1(a) mathsy(16, a)
\r
1284 #define sub2(a) mathsy(17, a)
\r
1285 #define sup_drop(a) mathsy(18, a)
\r
1286 #define sub_drop(a) mathsy(19, a)
\r
1287 #define delim1(a) mathsy(20, a)
\r
1288 #define delim2(a) mathsy(21, a)
\r
1289 #define axis_height(a) mathsy(22, a)
\r
1290 #define total_mathsy_params 22
\r
1292 #define mathex(a) font_info[(a) + param_base[fam_fnt(3 + cur_size)]].cint
\r
1293 #define default_rule_thickness mathex(8)
\r
1294 #define big_op_spacing1 mathex(9)
\r
1295 #define big_op_spacing2 mathex(10)
\r
1296 #define big_op_spacing3 mathex(11)
\r
1297 #define big_op_spacing4 mathex(12)
\r
1298 #define big_op_spacing5 mathex(13)
\r
1299 #define total_mathex_params 13
\r
1301 #define cramped_style(a) (2 * ((a) / 2) + cramped)
\r
1302 #define sub_style(a) (2 * ((a) / 4) + script_style + cramped)
\r
1303 #define sup_style(a) (2 * ((a) / 4) + script_style + ((a) % 2))
\r
1304 #define num_style(a) ((a) + 2 - 2 * ((a) / 6))
\r
1305 #define denom_style(a) (2 * ((a) / 2) + cramped + 2 - 2 * ((a) / 6))
\r
1307 #define mu_mult(a) nx_plus_y(n, a, xn_over_d(a, f, 0200000))
\r
1309 #define new_hlist(a) mem[nucleus(a)].cint
\r
1311 #define choose_mlist(a) \
\r
1319 #define preamble link(align_head)
\r
1320 #define align_stack_node_size 5
\r
1322 #define span_code 256
\r
1323 #define cr_code 257
\r
1324 #define cr_cr_code (cr_code + 1)
\r
1325 #define end_template_token (cs_token_flag + frozen_end_template)
\r
1327 #define span_node_size 2
\r
1329 #define tight_fit 3
\r
1330 #define loose_fit 1
\r
1331 #define very_loose_fit 0
\r
1332 #define decent_fit 2
\r
1334 #define active_node_size 3
\r
1335 #define fitness subtype
\r
1336 #define break_node rlink
\r
1337 #define line_number llink
\r
1338 #define total_demerits(a) mem[a + 2].cint
\r
1339 #define unhyphenated 0
\r
1340 #define hyphenated 1
\r
1341 #define last_active active
\r
1343 #define passive_node_size 2
\r
1344 #define cur_break rlink
\r
1345 #define prev_break llink
\r
1346 #define serial info
\r
1348 #define delta_node_size 7
\r
1349 #define delta_node 2
\r
1351 #define do_all_six(a) \
\r
1354 a(1); a(2); a(3); \
\r
1355 a(4); a(5); a(6); \
\r
1359 #define check_shrinkage(s) \
\r
1362 if ((shrink_order(s) != normal) && (shrink(s) != 0))\
\r
1363 s = finite_shrink(s); \
\r
1367 #define copy_to_cur_active(a) cur_active_width[a] = active_width[a]
\r
1369 #define update_width(a) cur_active_width[a] = cur_active_width[a] + mem[r + (a)].cint
\r
1371 #define awful_bad 07777777777
\r
1373 #define set_break_width_to_background(a) break_width[a] = background[a]
\r
1375 #define convert_to_break_width(a) mem[prev_r + (a)].cint = mem[prev_r + (a)].cint - cur_active_width[a] + break_width[a]
\r
1376 #define store_break_width(a) active_width[a] = break_width[a]
\r
1377 #define new_delta_to_break_width(a) mem[q + (a)].cint = break_width[(a)] - cur_active_width[(a)]
\r
1379 #define new_delta_from_break_width(a) mem[q + (a)].cint = cur_active_width[(a)] - break_width[(a)]
\r
1381 #define combine_two_deltas(a) mem[prev_r + (a)].cint = mem[prev_r + (a)].cint + mem[r + (a)].cint
\r
1382 #define downdate_width(a) cur_active_width[(a)] = cur_active_width[(a)] - mem[prev_r + (a)].cint
\r
1384 #define update_active(a) active_width[(a)] = active_width[(a)] + mem[r + (a)].cint
\r
1386 #define store_background(a) active_width[a] = background[a]
\r
1388 #define act_width active_width[1]
\r
1389 #define kern_break() \
\r
1392 if (!is_char_node(link(cur_p)) && auto_breaking) \
\r
1393 if (type(link(cur_p)) == glue_node) \
\r
1394 try_break(0, unhyphenated); \
\r
1396 act_width = act_width + width(cur_p); \
\r
1400 #define next_break prev_break
\r
1402 #define append_charnode_to_t(a) \
\r
1405 link(t) = get_avail(); \
\r
1408 character(t) = (a); \
\r
1411 #define set_cur_r() \
\r
1415 cur_r = hu[j + 1]; \
\r
1419 if (odd(hyf[j])) \
\r
1422 cur_rh = non_char; \
\r
1426 #define wrap_lig(a) \
\r
1429 if (ligature_present) \
\r
1431 p = new_ligature(hf, cur_l, link(cur_q)); \
\r
1436 lft_hit = false; \
\r
1440 if (lig_stack == 0) \
\r
1442 incr(subtype(p)); \
\r
1446 link(cur_q) = p; \
\r
1448 ligature_present = false; \
\r
1452 #define pop_lig_stack() \
\r
1455 if (lig_ptr(lig_stack) != 0) \
\r
1457 link(t) = lig_ptr(lig_stack); \
\r
1463 lig_stack = link(p); \
\r
1464 free_node(p, small_node_size); \
\r
1466 if (lig_stack == 0) \
\r
1471 cur_r = character(lig_stack); \
\r
1475 #define advance_major_tail() \
\r
1478 major_tail = link(major_tail); \
\r
1483 #define active_height active_width
\r
1484 #define cur_height active_height[1]
\r
1485 #define set_height_zero(a) active_width[(a)] = 0
\r
1487 #define deplorable 100000L
\r
1489 #define inserts_only 1
\r
1490 #define box_there 2
\r
1492 #define page_ins_node_size 4
\r
1493 #define inserting 0
\r
1494 #define split_up 1
\r
1495 #define broken_ptr(a) link(a + 1)
\r
1496 #define broken_ins(a) info(a + 1)
\r
1497 #define last_ins_ptr(a) link(a + 2)
\r
1498 #define best_ins_ptr(a) info(a + 2)
\r
1500 #define page_goal page_so_far[0]
\r
1501 #define page_total page_so_far[1]
\r
1502 #define page_shrink page_so_far[6]
\r
1503 #define page_depth page_so_far[7]
\r
1505 #define set_page_so_far_zero(a) page_so_far[(a)] = 0
\r
1507 #define adjust_space_factor() \
\r
1510 main_s = sf_code(cur_chr); \
\r
1511 if (main_s == 1000) \
\r
1512 space_factor = 1000; \
\r
1513 else if (main_s < 1000) \
\r
1516 space_factor = main_s; \
\r
1518 else if (space_factor < 1000) \
\r
1519 space_factor = 1000; \
\r
1521 space_factor = main_s; \
\r
1526 #define wrapup(a) \
\r
1529 if (cur_l < non_char) \
\r
1531 if (link(cur_q) != 0) \
\r
1532 if (character(tail) == hyphen_char[main_f]) \
\r
1533 ins_disc = true; \
\r
1535 if (ligature_present) \
\r
1537 main_p = new_ligature(main_f, cur_l, link(cur_q)); \
\r
1541 subtype(main_p) = 2; \
\r
1542 lft_hit = false; \
\r
1546 if (lig_stack == 0) \
\r
1548 incr(subtype(main_p)); \
\r
1552 link(cur_q) = main_p; \
\r
1554 ligature_present = false; \
\r
1559 ins_disc = false; \
\r
1563 tail_append(new_disc()); \
\r
1570 #define any_mode(a) vmode + a: case hmode + a: case mmode + a
\r
1572 #define non_math(a) vmode + a: case hmode + a
\r
1574 #define fil_code 0
\r
1575 #define fill_code 1
\r
1577 #define fil_neg_code 3
\r
1578 #define skip_code 4
\r
1579 #define mskip_code 5
\r
1581 #define box_flag 010000000000
\r
1582 #define ship_out_flag (box_flag + 512)
\r
1583 #define leader_flag (box_flag + 513)
\r
1584 #define box_code 0
\r
1585 #define copy_code 1
\r
1586 #define last_box_code 2
\r
1587 #define vsplit_code 3
\r
1588 #define vtop_code 4
\r
1590 #define above_code 0
\r
1591 #define over_code 1
\r
1592 #define atop_code 2
\r
1593 #define delimited_code 3
\r
1595 #define define(p, t, e) \
\r
1599 geq_define(p, t, e);\
\r
1601 eq_define(p, t, e); \
\r
1604 #define word_define(p, w) \
\r
1608 geq_word_define(p, w);\
\r
1610 eq_word_define(p, w); \
\r
1614 #define char_def_code 0
\r
1615 #define math_char_def_code 1
\r
1616 #define count_def_code 2
\r
1617 #define dimen_def_code 3
\r
1618 #define skip_def_code 4
\r
1619 #define mu_skip_def_code 5
\r
1620 #define toks_def_code 6
\r
1622 #define show_code 0
\r
1623 #define show_box_code 1
\r
1624 #define show_the_code 2
\r
1625 #define show_lists 3
\r
1627 #define undump(va, vb, vc) \
\r
1632 if ((x < (va)) || (x > (vb))) \
\r
1639 #define write_node_size 2
\r
1640 #define open_node_size 3
\r
1641 #define open_node 0
\r
1642 #define write_node 1
\r
1643 #define close_node 2
\r
1644 #define special_node 3
\r
1645 #define language_node 4
\r
1646 #define what_lang(s) link(s+1)
\r
1647 #define what_lhm(s) type(s+1)
\r
1648 #define what_rhm(s) subtype(s+1)
\r
1649 #define write_tokens(s) link(s+1)
\r
1650 #define write_stream(s) info(s+1)
\r
1651 #define open_name(s) link(s+1)
\r
1652 #define open_area(s) info(s+2)
\r
1653 #define open_ext(s) link(s+2)
\r
1655 #define immediate_code 4
\r
1656 #define set_language_code 5
\r
1658 #define end_write_token (cs_token_flag + end_write)
\r