OSDN Git Service

fixed prints.
[putex/putex.git] / src / texsourc / macros.h
1 /* Copyright 2014 Clerk Ma
2
3    This program is free software; you can redistribute it and/or modify
4    it under the terms of the GNU General Public License as published by
5    the Free Software Foundation; either version 2 of the License, or
6    (at your option) any later version.
7
8    This program is distributed in the hope that it will be useful, but
9    WITHOUT ANY WARRANTY; without even the implied warranty of
10    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
11    General Public License for more details.
12
13    You should have received a copy of the GNU General Public License
14    along with this program; if not, write to the Free Software
15    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
16    02110-1301 USA.  */
17 #ifndef _YANDYTEX_MACROS_H
18 #define _YANDYTEX_MACROS_H
19
20 #define font_base 0
21 /* sec 0022 */
22 #define null_code       0     // 0
23 #define carriage_return 015   // 13
24 #define invalid_code    0177  // 127
25 /* sec 0036 */
26 #define loc cur_input.loc_field
27 /* sec 0040 */
28 #define length(s) (str_start[(s) + 1] - str_start[(s)])
29 /* sec 0041 */
30 #define cur_length (pool_ptr - str_start[str_ptr])
31 /* sec 0054 */
32 enum 
33 {
34   no_print     = 16,
35   term_only    = 17,
36   log_only     = 18,
37   term_and_log = 19,
38   pseudo       = 20,
39   new_string   = 21,
40   max_selector = 21,
41 };
42 /* sec 0073 */
43 enum
44 {
45   batch_mode      = 0,
46   nonstop_mode    = 1,
47   scroll_mode     = 2,
48   error_stop_mode = 3,
49 };
50 /* sec 0076 */
51 enum
52 {
53   spotless             = 0,
54   warning_issued       = 1,
55   error_message_issued = 2,
56   fatal_error_stop     = 3,
57 };
58 /* sec 0096 */
59 #define check_interrupt()     \
60 do                            \
61 {                             \
62   if (interrupt != 0)         \
63     pause_for_instructions(); \
64 }                             \
65 while (0)
66 /* sec 0101 */
67 #define unity 0200000
68 #define two   0400000
69 /* sec 0105 */
70 #define nx_plus_y(a, b, c)  mult_and_add(a, b, c, 07777777777L)
71 #define mult_integers(a, b) mult_and_add(a, b, 0, 017777777777L)
72 /* sec 0108 */
73 #define inf_bad 10000L
74 /* sec 0109 */
75 #define set_glue_ratio_zero(a) (a) = 0.0
76 #define set_glue_ratio_one(a)  (a) = 1.0
77 #define tex_float(a)           (a)
78 #define unfloat(a)             (a)
79 #define float_constant(a)      (float) (a)
80 /* sec 0115 */
81 //#define pointer halfword
82 #define null    min_halfword
83 /* sec 0118 */
84 #define link(p) mem[p].hh.rh
85 #define info(p) mem[p].hh.lh
86 /* sec 0122 */
87 #ifdef STAT
88 #define fast_get_avail(a) \
89   do                      \
90     {                     \
91       a = avail;          \
92                           \
93       if (a == 0)         \
94         a = get_avail();  \
95       else                \
96       {                   \
97         avail = link(a);  \
98         link(a) = 0;      \
99         incr(dyn_used);   \
100       }                   \
101     }                     \
102   while (0)
103 #else
104 #define fast_get_avail(a) \
105   do                      \
106     {                     \
107       a = avail;          \
108                           \
109       if (a == 0)         \
110         a = get_avail();  \
111       else                \
112       {                   \
113         avail = link(a);  \
114         link(a) = 0;      \
115       }                   \
116     }                     \
117   while (0)
118 #endif
119 /* sec 0124 */
120 #define empty_flag  max_halfword
121 #define is_empty(a) (link(a) == empty_flag)
122 #define node_size   info
123 #define llink(a)    info(a+1)
124 #define rlink(a)    link(a+1)
125 /* sec 0133 */
126 #define type(a)    mem[a].hh.b0
127 #define subtype(a) mem[a].hh.b1
128 /* sec 0134 */
129 #define is_char_node(a) (a >= hi_mem_min)
130 #define font            type
131 #define character       subtype
132 /* sec 0135 */
133 #define hlist_node      0
134 #define box_node_size   7
135 #define width_offset    1
136 #define depth_offset    2
137 #define height_offset   3
138 #define width(a)        mem[a + width_offset].cint
139 #define depth(a)        mem[a + depth_offset].cint
140 #define height(a)       mem[a + height_offset].cint
141 #define shift_amount(a) mem[a + 4].cint
142 #define list_offset     5
143 #define list_ptr(a)     link(a + list_offset)
144 #define glue_order(a)   subtype(a + list_offset)
145 #define glue_sign(a)    type(a + list_offset)
146 #define normal          0
147 #define stretching      1
148 #define shrinking       2
149 #define glue_offset     6
150 #define glue_set(a)     mem[a + glue_offset].gr
151 /* sec 0137 */
152 #define vlist_node 1
153 /* sec 0138 */
154 #define rule_node      2
155 #define rule_node_size 4
156 #define null_flag      -010000000000L
157 #define is_running(a)  (a == null_flag)
158 /* sec 0140 */
159 #define ins_node         3
160 #define ins_node_size    5
161 #define float_cost(a)    mem[a + 1].cint
162 #define ins_ptr(a)       info(a + 4)
163 #define split_top_ptr(a) link(a + 4)
164 /* sec 0141 */
165 #define mark_node       4
166 #define small_node_size 2
167 #define mark_ptr(a)     mem[a + 1].cint
168 /* sec 0142 */
169 #define adjust_node 5
170 #define adjust_ptr  mark_ptr
171 /* sec 0143 */
172 #define ligature_node 6
173 #define lig_char(a)   (a + 1)
174 #define lig_ptr(a)    link(lig_char(a))
175 /* sec 0145 */
176 #define disc_node     7
177 #define replace_count subtype
178 #define pre_break     llink
179 #define post_break    rlink
180 /* sec 0146 */
181 #define whatsit_node 8
182 /* sec 0147 */
183 #define math_node 9
184 #define before    0
185 #define after     1
186 /* sec 0148 */
187 #define precedes_break(a)  (type(a) < math_node)
188 #define non_discardable(a) (type(a) < math_node)
189 /* sec 0149 */
190 #define glue_node      10
191 #define cond_math_glue 98
192 #define mu_glue        99
193 #define a_leaders      100
194 #define c_leaders      101
195 #define x_leaders      102
196 #define glue_ptr       llink
197 #define leader_ptr     rlink
198 /* sec 0150 */
199 #define glue_spec_size    4
200 #define glue_ref_count(a) link(a)
201 #define stretch(a)        mem[a + 2].cint
202 #define shrink(a)         mem[a + 3].cint
203 #define stretch_order     type
204 #define shrink_order      subtype
205 #define fil               1
206 #define fill              2
207 #define filll             3
208 /* sec 0155 */
209 #define kern_node 11
210 #define explicit  1
211 #define acc_kern  2
212 /* sec 0157 */
213 #define penalty_node  12
214 #define inf_penalty   inf_bad
215 #define eject_penalty -inf_bad
216 #define penalty(a)    mem[a + 1].cint
217 /* sec 0159 */
218 #define unset_node      13
219 #define glue_stretch(a) mem[a + glue_offset].cint
220 #define glue_shrink     shift_amount
221 #define span_count      subtype
222 /* sec 0162 */
223 #define zero_glue         mem_bot // 0
224 #define fil_glue          (zero_glue + glue_spec_size) // 4
225 #define fill_glue         (fil_glue + glue_spec_size) // 8
226 #define ss_glue           (fill_glue + glue_spec_size) // 12
227 #define fil_neg_glue      (ss_glue + glue_spec_size) // 16
228 #define lo_mem_stat_max   (fil_neg_glue + glue_spec_size - 1) // 19
229 #define page_ins_head     mem_top
230 #define contrib_head      (mem_top - 1)
231 #define page_head         (mem_top - 2)
232 #define temp_head         (mem_top - 3)
233 #define hold_head         (mem_top - 4)
234 #define adjust_head       (mem_top - 5)
235 #define active            (mem_top - 7)
236 #define align_head        (mem_top - 8)
237 #define end_span          (mem_top - 9)
238 #define omit_template     (mem_top - 10)
239 #define null_list         (mem_top - 11)
240 #define lig_trick         (mem_top - 12)
241 #define garbage           (mem_top - 12)
242 #define backup_head       (mem_top - 13)
243 #define hi_mem_stat_min   (mem_top - 13)
244 #define hi_mem_stat_usage 14
245 /* sec 0200 */
246 #define token_ref_count(a) info(a)
247 /* sec 0203 */
248 #define add_token_ref(a) incr(token_ref_count(a))
249 #define add_glue_ref(a)  incr(glue_ref_count(a))
250 /* sec 0207 */
251 #define escape        0
252 #define relax         0
253 #define left_brace    1
254 #define right_brace   2
255 #define math_shift    3
256 #define tab_mark      4
257 #define car_ret       5
258 #define out_param     5
259 #define mac_param     6
260 #define sup_mark      7
261 #define sub_mark      8
262 #define ignore        9
263 #define endv          9
264 #define spacer        10
265 #define letter        11
266 #define other_char    12
267 #define active_char   13
268 #define par_end       13
269 #define match         13
270 #define comment       14
271 #define end_match     14
272 #define stop          14
273 #define invalid_char  15
274 #define delim_num     15
275 #define max_char_code 15
276 /* sec 0208 */
277 #define char_num      16
278 #define math_char_num 17
279 #define mark          18
280 #define xray          19
281 #define make_box      20
282 #define hmove         21
283 #define vmove         22
284 #define un_hbox       23
285 #define un_vbox       24
286 #define remove_item   25
287 #define hskip         26
288 #define vskip         27
289 #define mskip         28
290 #define kern          29
291 #define mkern         30
292 #define leader_ship   31
293 #define halign        32
294 #define valign        33
295 #define no_align      34
296 #define vrule         35
297 #define hrule         36
298 #define insert        37
299 #define vadjust       38
300 #define ignore_spaces 39
301 #define after_assignment 40
302 #define after_group      41
303 #define break_penalty    42
304 #define start_par        43
305 #define ital_corr        44
306 #define accent           45
307 #define math_accent      46
308 #define discretionary    47
309 #define eq_no            48
310 #define left_right       49
311 #define math_comp        50
312 #define limit_switch     51
313 #define above            52
314 #define math_style       53
315 #define math_choice      54
316 #define non_script       55
317 #define vcenter          56
318 #define case_shift       57
319 #define message          58
320 #define extension        59
321 #define in_stream        60
322 #define begin_group      61
323 #define end_group        62
324 #define omit             63
325 #define ex_space         64
326 #define no_boundary      65
327 #define radical          66
328 #define end_cs_name      67
329 #define min_internal     68
330 #define char_given       68
331 #define math_given       69
332 #define last_item        70
333 #define max_non_prefixed_command 70
334 /* sec 0209 */
335 #define toks_register     71
336 #define assign_toks       72
337 #define assign_int        73
338 #define assign_dimen      74
339 #define assign_glue       75
340 #define assign_mu_glue    76
341 #define assign_font_dimen 77
342 #define assign_font_int   78
343 #define set_aux           79
344 #define set_prev_graf     80
345 #define set_page_dimen    81
346 #define set_page_int      82
347 #define set_box_dimen     83
348 #define set_shape         84
349 #define def_code          85
350 #define def_family        86
351 #define set_font          87
352 #define def_font          88
353 #define tex_register      89
354 #define max_internal      89
355 #define advance           90
356 #define multiply          91
357 #define divide            92
358 #define prefix            93
359 #define let               94
360 #define shorthand_def     95
361 #define read_to_cs        96
362 #define def               97
363 #define set_box           98
364 #define hyph_data         99
365 #define set_interaction   100
366 #define max_command       100
367 /* sec 0210 */
368 #define undefined_cs    (max_command + 1 )
369 #define expand_after    (max_command + 2 )
370 #define no_expand       (max_command + 3 )
371 #define input           (max_command + 4 )
372 #define if_test         (max_command + 5 )
373 #define fi_or_else      (max_command + 6 )
374 #define cs_name         (max_command + 7 )
375 #define convert         (max_command + 8 )
376 #define the             (max_command + 9 )
377 #define top_bot_mark    (max_command + 10)
378 #define call            (max_command + 11)
379 #define long_call       (max_command + 12)
380 #define outer_call      (max_command + 13)
381 #define long_outer_call (max_command + 14)
382 #define end_template    (max_command + 15)
383 #define dont_expand     (max_command + 16)
384 #define glue_ref        (max_command + 17)
385 #define shape_ref       (max_command + 18)
386 #define box_ref         (max_command + 19) 
387 #define data            (max_command + 20)
388 /* sec 0211 */
389 #define vmode 1
390 #define hmode (vmode + max_command + 1)
391 #define mmode (hmode + max_command + 1)
392 /* sec 0212 */
393 #define ignore_depth -65536000L
394 /* sec 0213 */
395 #define mode            cur_list.mode_field
396 #define head            cur_list.head_field
397 #define tail            cur_list.tail_field
398 #define aux             cur_list.aux_field
399 #define prev_depth      aux.cint
400 #define space_factor    aux.hh.lh
401 #define clang           aux.hh.rh
402 #define incompleat_noad aux.cint
403 #define prev_graf       cur_list.pg_field
404 #define mode_line       cur_list.ml_field
405 /* sec 0221 */
406 #define eq_level_field(a) a.hh.b1
407 #define eq_type_field(a)  a.hh.b0
408 #define equiv_field(a)    a.hh.rh
409 #define eq_level(a)       eq_level_field(eqtb[a])
410 #define eq_type(a)        eq_type_field(eqtb[a])
411 #define equiv(a)          equiv_field(eqtb[a])
412 #define level_zero        min_quarterword
413 #define level_one         level_zero + 1
414 /* sec 0222 */
415 #define active_base                   1                                    // 1
416 #define single_base                   (active_base + 256)                  // 257
417 #define null_cs                       (single_base + 256)                  // 513
418 #define hash_base                     (null_cs + 1)                        // 514
419 #define frozen_control_sequence       (hash_base + hash_size + hash_extra) // (hash_size + hash_extra + 514)
420 #define frozen_protection             frozen_control_sequence              // (hash_size + hash_extra + 514)
421 #define frozen_cr                     (frozen_control_sequence + 1)        // (hash_size + hash_extra + 515)
422 #define frozen_end_group              (frozen_control_sequence + 2)        // (hash_size + hash_extra + 516)
423 #define frozen_right                  (frozen_control_sequence + 3)        // (hash_size + hash_extra + 517)
424 #define frozen_fi                     (frozen_control_sequence + 4)        // (hash_size + hash_extra + 518)
425 #define frozen_end_template           (frozen_control_sequence + 5)        // (hash_size + hash_extra + 519)
426 #define frozen_endv                   (frozen_control_sequence + 6)        // (hash_size + hash_extra + 520)
427 #define frozen_relax                  (frozen_control_sequence + 7)        // (hash_size + hash_extra + 521)
428 #define end_write                     (frozen_control_sequence + 8)        // (hash_size + hash_extra + 522)
429 #define frozen_dont_expand            (frozen_control_sequence + 9)        // (hash_size + hash_extra + 523)
430 #define frozen_null_font              (frozen_control_sequence + 10)       // (hash_size + hash_extra + 524)
431 #define font_id_base                  (frozen_null_font - font_base)       // (hash_size + hash_extra + 524)
432 #define undefined_control_sequence    (frozen_null_font + font_max + 2)    // (hash_size + 781)
433 #define glue_base                     (undefined_control_sequence + 1)     // (hash_size + 782)
434 /* sec 0224 */
435 #define line_skip_code                0  // 782
436 #define baseline_skip_code            1  // 783
437 #define par_skip_code                 2  // 784
438 #define above_display_skip_code       3  // 785
439 #define below_display_skip_code       4  // 786
440 #define above_display_short_skip_code 5  // 787
441 #define below_display_short_skip_code 6  // 788
442 #define left_skip_code                7  // 789
443 #define right_skip_code               8  // 790
444 #define top_skip_code                 9  // 791
445 #define split_top_skip_code           10 // 792
446 #define tab_skip_code                 11 // 793
447 #define space_skip_code               12 // 794
448 #define xspace_skip_code              13 // 795
449 #define par_fill_skip_code            14 // 796
450 #define thin_mu_skip_code             15 // 797
451 #define med_mu_skip_code              16 // 798
452 #define thick_mu_skip_code            17 // 799
453 #define glue_pars                     18 // 800
454 #define skip_base                     (glue_base + glue_pars) // 800
455 #define mu_skip_base                  (skip_base + 256) // 1056
456 #define local_base                    (mu_skip_base + 256) // 1312
457 // #
458 #define skip(a)                       equiv(skip_base + a)
459 #define mu_skip(a)                    equiv(mu_skip_base + a)
460 #define glue_par(a)                   equiv(glue_base + a)
461 #define line_skip                     glue_par(line_skip_code)
462 #define baseline_skip                 glue_par(baseline_skip_code)
463 #define par_skip                      glue_par(par_skip_code)
464 #define above_display_skip            glue_par(above_display_skip_code)
465 #define below_display_skip            glue_par(below_display_skip_code)
466 #define above_display_short_skip      glue_par(above_display_short_skip_code)
467 #define below_display_short_skip      glue_par(below_display_short_skip_code)
468 #define left_skip                     glue_par(left_skip_code)
469 #define right_skip                    glue_par(right_skip_code)
470 #define top_skip                      glue_par(top_skip_code)
471 #define split_top_skip                glue_par(split_top_skip_code)
472 #define tab_skip                      glue_par(tab_skip_code)
473 #define space_skip                    glue_par(space_skip_code)
474 #define xspace_skip                   glue_par(xspace_skip_code)
475 #define par_fill_skip                 glue_par(par_fill_skip_code)
476 #define thin_mu_skip                  glue_par(thin_mu_skip_code)
477 #define med_mu_skip                   glue_par(med_mu_skip_code)
478 #define thick_mu_skip                 glue_par(thick_mu_skip_code)
479 /* sec 0230 */
480 #define par_shape_loc                 local_base             // 1312
481 #define output_routine_loc            (local_base + 1)       // 1313
482 #define every_par_loc                 (local_base + 2)       // 1314
483 #define every_math_loc                (local_base + 3)       // 1315
484 #define every_display_loc             (local_base + 4)       // 1316
485 #define every_hbox_loc                (local_base + 5)       // 1317
486 #define every_vbox_loc                (local_base + 6)       // 1318
487 #define every_job_loc                 (local_base + 7)       // 1319
488 #define every_cr_loc                  (local_base + 8)       // 1320
489 #define err_help_loc                  (local_base + 9)       // 1321
490 #define toks_base                     (local_base + 10)      // 1322
491 #define box_base                      (toks_base + 256)      // 1578
492 #define cur_font_loc                  (box_base + 256)       // 1834
493 #define math_font_base                (cur_font_loc + 1)     // 1835
494 #define cat_code_base                 (math_font_base + 48)  // 1883
495 #define lc_code_base                  (cat_code_base + 256)  // 2139
496 #define uc_code_base                  (lc_code_base + 256)   // 2395
497 #define sf_code_base                  (uc_code_base + 256)   // 2651
498 #define math_code_base                (sf_code_base + 256)   // 2907
499 #define int_base                      (math_code_base + 256) // 3163
500 // #
501 #define par_shape_ptr                 equiv(par_shape_loc)
502 #define output_routine                equiv(output_routine_loc)
503 #define every_par                     equiv(every_par_loc)
504 #define every_math                    equiv(every_math_loc)
505 #define every_display                 equiv(every_display_loc)
506 #define every_hbox                    equiv(every_hbox_loc)
507 #define every_vbox                    equiv(every_vbox_loc)
508 #define every_job                     equiv(every_job_loc)
509 #define every_cr                      equiv(every_cr_loc)
510 #define err_help                      equiv(err_help_loc)
511 #define toks(a)                       equiv(toks_base + a)
512 #define box(a)                        equiv(box_base + a)
513 #define cur_font                      equiv(cur_font_loc)
514 #define fam_fnt(a)                    equiv(math_font_base + a)
515 #define cat_code(a)                   equiv(cat_code_base + a)
516 #define lc_code(a)                    equiv(lc_code_base + a)
517 #define uc_code(a)                    equiv(uc_code_base + a)
518 #define sf_code(a)                    equiv(sf_code_base + a)
519 #define math_code(a)                  equiv(math_code_base + a)
520 /* sec 0232 */
521 #define null_font font_base
522 #define var_code 070000
523 /* sec 0236 */
524 #define pretolerance_code             0  // 3163
525 #define tolerance_code                1  // 3164
526 #define line_penalty_code             2  // 3165
527 #define hyphen_penalty_code           3  // 3166
528 #define ex_hyphen_penalty_code        4  // 3167
529 #define club_penalty_code             5  // 3168
530 #define widow_penalty_code            6  // 3169
531 #define display_widow_penalty_code    7  // 3170
532 #define broken_penalty_code           8  // 3171
533 #define bin_op_penalty_code           9  // 3172
534 #define rel_penalty_code              10 // 3173
535 #define pre_display_penalty_code      11 // 3174
536 #define post_display_penalty_code     12 // 3175
537 #define inter_line_penalty_code       13 // 3176
538 #define double_hyphen_demerits_code   14 // 3177
539 #define final_hyphen_demerits_code    15 // 3178
540 #define adj_demerits_code             16 // 3179
541 #define mag_code                      17 // 3180
542 #define delimiter_factor_code         18 // 3181
543 #define looseness_code                19 // 3182
544 #define time_code                     20 // 3183
545 #define day_code                      21 // 3184
546 #define month_code                    22 // 3185
547 #define year_code                     23 // 3186
548 #define show_box_breadth_code         24 // 3187
549 #define show_box_depth_code           25 // 3188
550 #define hbadness_code                 26 // 3189
551 #define vbadness_code                 27 // 3190
552 #define pausing_code                  28 // 3191
553 #define tracing_online_code           29 // 3192
554 #define tracing_macros_code           30 // 3193
555 #define tracing_stats_code            31 // 3194
556 #define tracing_paragraphs_code       32 // 3195
557 #define tracing_pages_code            33 // 3196
558 #define tracing_output_code           34 // 3197
559 #define tracing_lost_chars_code       35 // 3198
560 #define tracing_commands_code         36 // 3199 
561 #define tracing_restores_code         37 // 3200
562 #define uc_hyph_code                  38 // 3201
563 #define output_penalty_code           39 // 3202
564 #define max_dead_cycles_code          40 // 3203
565 #define hang_after_code               41 // 3204
566 #define floating_penalty_code         42 // 3205
567 #define global_defs_code              43 // 3206
568 #define cur_fam_code                  44 // 3207
569 #define escape_char_code              45 // 3208
570 #define default_hyphen_char_code      46 // 3209
571 #define default_skew_char_code        47 // 3210
572 #define end_line_char_code            48 // 3211
573 #define new_line_char_code            49 // 3212
574 #define language_code                 50 // 3213
575 #define left_hyphen_min_code          51 // 3214
576 #define right_hyphen_min_code         52 // 3215
577 #define holding_inserts_code          53 // 3216
578 #define error_context_lines_code      54 // 3217
579 #define int_pars                      55
580 #define count_base                    (int_base + int_pars) // 3218
581 #define del_code_base                 (count_base + 256)    // 3474
582 #define dimen_base                    (del_code_base + 256) // 3730
583 // #
584 #define del_code(a)                   eqtb[del_code_base + a].cint
585 #define count(a)                      eqtb[count_base + a].cint
586 #define int_par(a)                    eqtb[int_base + a].cint
587 #define pretolerance                  int_par(pretolerance_code)
588 #define tolerance                     int_par(tolerance_code)
589 #define line_penalty                  int_par(line_penalty_code)
590 #define hyphen_penalty                int_par(hyphen_penalty_code)
591 #define ex_hyphen_penalty             int_par(ex_hyphen_penalty_code)
592 #define club_penalty                  int_par(club_penalty_code)
593 #define widow_penalty                 int_par(widow_penalty_code)
594 #define display_widow_penalty         int_par(display_widow_penalty_code)
595 #define broken_penalty                int_par(broken_penalty_code)
596 #define bin_op_penalty                int_par(bin_op_penalty_code)
597 #define rel_penalty                   int_par(rel_penalty_code)
598 #define pre_display_penalty           int_par(pre_display_penalty_code)
599 #define post_display_penalty          int_par(post_display_penalty_code)
600 #define inter_line_penalty            int_par(inter_line_penalty_code)
601 #define double_hyphen_demerits        int_par(double_hyphen_demerits_code)
602 #define final_hyphen_demerits         int_par(final_hyphen_demerits_code)
603 #define adj_demerits                  int_par(adj_demerits_code)
604 #define mag                           int_par(mag_code)
605 #define delimiter_factor              int_par(delimiter_factor_code)
606 #define looseness                     int_par(looseness_code)
607 #define tex_time                      int_par(time_code)
608 #define day                           int_par(day_code)
609 #define month                         int_par(month_code)
610 #define year                          int_par(year_code)
611 #define show_box_breadth              int_par(show_box_breadth_code)
612 #define show_box_depth                int_par(show_box_depth_code)
613 #define hbadness                      int_par(hbadness_code)
614 #define vbadness                      int_par(vbadness_code)
615 #define pausing                       int_par(pausing_code)
616 #define tracing_online                int_par(tracing_online_code)
617 #define tracing_macros                int_par(tracing_macros_code)
618 #define tracing_stats                 int_par(tracing_stats_code)
619 #define tracing_paragraphs            int_par(tracing_paragraphs_code)
620 #define tracing_pages                 int_par(tracing_pages_code)
621 #define tracing_output                int_par(tracing_output_code)
622 #define tracing_lost_chars            int_par(tracing_lost_chars_code)
623 #define tracing_commands              int_par(tracing_commands_code)
624 #define tracing_restores              int_par(tracing_restores_code)
625 #define uc_hyph                       int_par(uc_hyph_code)
626 #define output_penalty                int_par(output_penalty_code)
627 #define max_dead_cycles               int_par(max_dead_cycles_code)
628 #define hang_after                    int_par(hang_after_code)
629 #define floating_penalty              int_par(floating_penalty_code)
630 #define global_defs                   int_par(global_defs_code)
631 #define cur_fam                       int_par(cur_fam_code)
632 #define escape_char                   int_par(escape_char_code)
633 #define default_hyphen_char           int_par(default_hyphen_char_code)
634 #define default_skew_char             int_par(default_skew_char_code)
635 #define end_line_char                 int_par(end_line_char_code)
636 #define new_line_char                 int_par(new_line_char_code)
637 #define language                      int_par(language_code)
638 #define left_hyphen_min               int_par(left_hyphen_min_code)
639 #define right_hyphen_min              int_par(right_hyphen_min_code)
640 #define holding_inserts               int_par(holding_inserts_code)
641 #define error_context_lines           int_par(error_context_lines_code)
642 /* sec 0247 */
643 #define par_indent_code               0  // 3730
644 #define math_surround_code            1  // 3731
645 #define line_skip_limit_code          2  // 3732
646 #define hsize_code                    3  // 3733
647 #define vsize_code                    4  // 3734
648 #define max_depth_code                5  // 3735
649 #define split_max_depth_code          6  // 3736
650 #define box_max_depth_code            7  // 3737
651 #define hfuzz_code                    8  // 3738
652 #define vfuzz_code                    9  // 3739
653 #define delimiter_shortfall_code      10 // 3740
654 #define null_delimiter_space_code     11 // 3741
655 #define script_space_code             12 // 3742
656 #define pre_display_size_code         13 // 3743
657 #define display_width_code            14 // 3744
658 #define display_indent_code           15 // 3745
659 #define overfull_rule_code            16 // 3746
660 #define hang_indent_code              17 // 3747
661 #define h_offset_code                 18 // 3748
662 #define v_offset_code                 19 // 3749
663 #define emergency_stretch_code        20 // 3750
664 #define dimen_pars                    21
665 #define scaled_base                   (dimen_base + dimen_pars) // 3751
666 #define eqtb_size                     (scaled_base + 255) // 4006
667 // #
668 #define dimen(a)                      eqtb[scaled_base + a].cint
669 #define dimen_par(a)                  eqtb[dimen_base + a].cint
670 #define par_indent                    dimen_par(par_indent_code)
671 #define math_surround                 dimen_par(math_surround_code)
672 #define line_skip_limit               dimen_par(line_skip_limit_code)
673 #define hsize                         dimen_par(hsize_code)
674 #define vsize                         dimen_par(vsize_code)
675 #define max_depth                     dimen_par(max_depth_code)
676 #define split_max_depth               dimen_par(split_max_depth_code)
677 #define box_max_depth                 dimen_par(box_max_depth_code)
678 #define hfuzz                         dimen_par(hfuzz_code)
679 #define vfuzz                         dimen_par(vfuzz_code)
680 #define delimiter_shortfall           dimen_par(delimiter_shortfall_code)
681 #define null_delimiter_space          dimen_par(null_delimiter_space_code)
682 #define script_space                  dimen_par(script_space_code)
683 #define pre_display_size              dimen_par(pre_display_size_code)
684 #define display_width                 dimen_par(display_width_code)
685 #define display_indent                dimen_par(display_indent_code)
686 #define overfull_rule                 dimen_par(overfull_rule_code)
687 #define hang_indent                   dimen_par(hang_indent_code)
688 #define h_offset                      dimen_par(h_offset_code)
689 #define v_offset                      dimen_par(v_offset_code)
690 #define emergency_stretch             dimen_par(emergency_stretch_code)
691 /* sec 0256 */
692 #define text(a)         hash[a].rh
693 #define next(a)         hash[a].lh
694 #define hash_is_full    (hash_used == hash_base)
695 #define font_id_text(a) text(font_id_base + a)
696 /* sec 0268 */
697 #define save_type(a)      save_stack[a].hh.b0
698 #define save_level(a)     save_stack[a].hh.b1
699 #define save_index(a)     save_stack[a].hh.rh
700 #define restore_old_value 0
701 #define restore_zero      1
702 #define insert_token      2
703 #define level_boundary    3
704 /* sec 0269 */
705 #define bottom_level      0
706 #define simple_group      1
707 #define hbox_group        2
708 #define adjust_hbox_group 3
709 #define vbox_group        4
710 #define vtop_group        5
711 #define align_group       6
712 #define no_align_group    7
713 #define output_group      8
714 #define math_group        9
715 #define disc_group        10
716 #define insert_group      11
717 #define vcenter_group     12
718 #define math_choice_group 13
719 #define semi_simple_group 14
720 #define math_shift_group  15
721 #define math_left_group   16
722 #define max_group_code    16
723 /* sec 0274 */
724 #define saved(a) save_stack[save_ptr + (a)].cint
725 /* sec 0289 */
726 #define cs_token_flag     07777 // 4095
727 #define left_brace_token  0400  // 256  = 2^8 * left_brace
728 #define left_brace_limit  01000 // 512  = 2^8 * (left_brace + 1)
729 #define right_brace_token 01000 // 512  = 2^8 * right_brace
730 #define right_brace_limit 01400 // 768  = 2^8 * (right_brace + 1)
731 #define math_shift_token  01400 // 768  = 2^8 * math_shift
732 #define tab_token         02000 // 1024 = 2^8 * tab_mark
733 #define out_param_token   02400 // 1280 = 2^8 * out_param
734 #define space_token       05040 // 2592 = 2^8 * spacer + ' '
735 #define letter_token      05400 // 2816 = 2^8 * letter
736 #define other_token       06000 // 3072 = 2^8 * other_char
737 #define match_token       06400 // 3328 = 2^8 * match
738 #define end_match_token   07000 // 3584 = 2^8 * end_match
739 /* sec 0298 */
740 #define chr_cmd(s)  \
741 do                  \
742 {                   \
743   prints(s);        \
744   print(chr_code);  \
745 }                   \
746 while (0)
747 /* sec 0302 */
748 #define state cur_input.state_field
749 #define index cur_input.index_field
750 #define start cur_input.start_field
751 #define limit cur_input.limit_field
752 #define name  cur_input.name_field
753 /* sec 0303 */
754 #define mid_line    1
755 #define skip_blanks 2 + max_char_code // 17
756 #define new_line    3 + max_char_code + max_char_code // 33
757 /* sec 0304 */
758 #define cur_file input_file[index]
759 /* sec 0305 */
760 #define skipping  1
761 #define defining  2
762 #define matching  3
763 #define aligning  4
764 #define absorbing 5
765 /* sec 0307 */
766 #define token_list         0
767 #define token_type         index
768 #define param_start        limit
769 #define parameter          0
770 #define u_template         1
771 #define v_template         2
772 #define backed_up          3
773 #define inserted           4
774 #define macro              5
775 #define output_text        6
776 #define every_par_text     7
777 #define every_math_text    8
778 #define every_display_text 9
779 #define every_hbox_text    10
780 #define every_vbox_text    11
781 #define every_job_text     12
782 #define every_cr_text      13
783 #define mark_text          14
784 #define write_text         15
785 /* sec 0316 */
786 #define begin_pseudoprint() \
787 do                          \
788 {                           \
789   l = tally;                \
790   tally = 0;                \
791   selector = pseudo;        \
792   trick_count = 1000000L;   \
793 }                           \
794 while (0)
795 #define set_trick_count()                                 \
796 do                                                        \
797 {                                                         \
798   first_count = tally;                                    \
799   trick_count = tally + 1 + error_line - half_error_line; \
800                                                           \
801   if (trick_count < error_line)                           \
802     trick_count = error_line;                             \
803 }                                                         \
804 while (0)
805 /* sec 0322 */
806 /* sec 0323 */
807 #define back_list(a) begin_token_list(a, backed_up)
808 #define ins_list(a)  begin_token_list(a, inserted)
809 /* sec 0344 */
810 #define any_state_plus(a) mid_line + (a): case skip_blanks + (a): case new_line + (a)
811 /* sec 0347 */
812 #define add_delims_to(a) \
813   (a) + math_shift:      \
814   case (a) + tab_mark:   \
815   case (a) + mac_param:  \
816   case (a) + sub_mark:   \
817   case (a) + letter:     \
818   case (a) + other_char
819 /* sec 0352 */
820 #define is_hex(a) \
821   (((a >= '0') && (a <= '9')) || ((a >= 'a') && (a <= 'f')))
822 #define hex_to_cur_chr()                    \
823 do                                          \
824 {                                           \
825   if (c <= '9')                             \
826     cur_chr = c - '0';                      \
827   else                                      \
828     cur_chr = c - 'a' + 10;                 \
829                                             \
830   if (cc <= '9')                            \
831     cur_chr = 16 * cur_chr + cc - '0';      \
832   else                                      \
833     cur_chr = 16 * cur_chr + cc - 'a' + 10; \
834 }                                           \
835 while (0)
836 /* sec 0360 */
837 #define end_line_char_inactive()  \
838   (end_line_char < 0) || (end_line_char > 255)
839 /* sec 0358 */
840 /* sec 0371 */
841 #define store_new_token(a)  \
842   do                        \
843     {                       \
844       q = get_avail();      \
845       link(p) = q;          \
846       info(q) = a;          \
847       p = q;                \
848     }                       \
849   while (0)
850 #define fast_store_new_token(a) \
851   do                            \
852     {                           \
853       fast_get_avail(q);        \
854       link(p) = q;              \
855       info(q) = a;              \
856       p = q;                    \
857     }                           \
858   while (0)
859 #define no_expand_flag 257
860 /* sec 0382 */
861 #define top_mark_code         0
862 #define first_mark_code       1
863 #define bot_mark_code         2
864 #define split_first_mark_code 3
865 #define split_bot_mark_code   4
866 #define top_mark              cur_mark[top_mark_code]
867 #define first_mark            cur_mark[first_mark_code]
868 #define bot_mark              cur_mark[bot_mark_code]
869 #define split_first_mark      cur_mark[split_first_mark_code]
870 #define split_bot_mark        cur_mark[split_bot_mark_code]
871 /* sec 0400 */
872 #define int_val   0
873 #define dimen_val 1
874 #define glue_val  2
875 #define mu_val    3
876 #define ident_val 4
877 #define tok_val   5
878 /* sec 0413 */
879 #define scanned_result(va, vb) \
880 do                            \
881   {                           \
882     cur_val = va;             \
883     cur_val_level = vb;       \
884   }                           \
885 while (0)
886 /* sec 0416 */
887 #define input_line_no_code (glue_val + 1)
888 #define badness_code       (glue_val + 2)
889 /* sec 0421 */
890 #define max_dimen 07777777777
891 /* sec 0438 */
892 #define octal_token             (other_token + '\'') // 3111
893 #define hex_token               (other_token + '"' ) // 3106
894 #define alpha_token             (other_token + '`' ) // 3168
895 #define point_token             (other_token + '.' ) // 3118
896 #define continental_point_token (other_token + ',' ) // 3116
897 /* sec 0445 */
898 #define zero_token    (other_token  + '0') // 3120
899 #define A_token       (letter_token + 'A') // 2881
900 #define other_A_token (other_token  + 'A') // 3137
901 /* sec 0458 */
902 #define set_conversion(a, b)  \
903   do                          \
904   {                           \
905     num = a;                  \
906     denom = b;                \
907   } while (0)
908 /* sec 0468 */
909 #define number_code        0
910 #define roman_numeral_code 1
911 #define string_code        2
912 #define meaning_code       3
913 #define font_name_code     4
914 #define job_name_code      5
915 /* sec 0480 */
916 #define closed    2
917 #define just_open 1
918 /* sec 0487 */
919 #define if_char_code   0
920 #define if_cat_code    1
921 #define if_int_code    2
922 #define if_dim_code    3
923 #define if_odd_code    4
924 #define if_vmode_code  5
925 #define if_hmode_code  6
926 #define if_mmode_code  7
927 #define if_inner_code  8
928 #define if_void_code   9
929 #define if_hbox_code   10
930 #define if_vbox_code   11
931 #define ifx_code       12
932 #define if_eof_code    13
933 #define if_true_code   14
934 #define if_false_code  15
935 #define if_case_code   16
936 /* sec 0489 */
937 #define if_node_size     2
938 #define if_line_field(a) mem[(a) + 1].cint
939 #define if_code          1
940 #define fi_code          2
941 #define else_code        3
942 #define or_code          4
943 /* sec 0506 */
944 #define get_x_token_or_active_char()                    \
945 do                                                      \
946 {                                                       \
947   get_x_token();                                        \
948                                                         \
949   if (cur_cmd == relax)                                 \
950     if (cur_chr == no_expand_flag)                      \
951     {                                                   \
952       cur_cmd = active_char;                            \
953       cur_chr = cur_tok - cs_token_flag - active_base;  \
954     }                                                   \
955 }                                                       \
956 while (0)
957 /* sec 0519 */
958 #define append_to_name(a)       \
959 do                              \
960 {                               \
961   c = a; incr(k);               \
962                                 \
963   if (k < file_name_size)       \
964     name_of_file[k] = xchr[c];  \
965 }                               \
966 while (0)
967 /* sec 0544 */
968 #define no_tag   0
969 #define lig_tag  1
970 #define list_tag 2
971 #define ext_tag  3
972 /* sec 0545 */
973 #define stop_flag    128
974 #define kern_flag    128
975 #define skip_byte(a) a.b0
976 #define next_char(a) a.b1
977 #define op_byte(a)   a.b2
978 #define rem_byte(a)  a.b3
979 /* sec 0546 */
980 #define ext_top(a) a.b0
981 #define ext_mid(a) a.b1
982 #define ext_bot(a) a.b2
983 #define ext_rep(a) a.b3
984 /* sec 0547 */
985 #define slant_code         1
986 #define space_code         2
987 #define space_stretch_code 3
988 #define space_shrink_code  4
989 #define x_height_code      5
990 #define quad_code          6
991 #define extra_space_code   7
992 /* sec 0549 */
993 #define non_char    256
994 #define non_address 0
995 /* sec 0554 */
996 #define char_info(a, b)   font_info[char_base[a] + b].qqqq
997 #define char_width(a, b)  font_info[width_base[a] + b.b0].cint
998 #define char_exists(a)    (a.b0 > min_quarterword)
999 #define char_italic(a, b) font_info[italic_base[a] + (b.b2) / 4].cint
1000 #define height_depth(a)   (a.b1)
1001 #define char_height(a, b) font_info[height_base[a] + (b) / 16].cint
1002 #define char_depth(a, b)  font_info[depth_base[a] + (b) % 16].cint
1003 #define char_tag(a)       (a.b2 % 4)
1004 /* sec 0557 */
1005 #define char_kern(a, b)        font_info[kern_base[a] + 256 * op_byte(b) + rem_byte(b)].cint
1006 #define kern_base_offset       (256 * (128 + min_quarterword))
1007 #define lig_kern_start(a, b)   lig_kern_base[a] + rem_byte(b)
1008 #define lig_kern_restart(a, b) lig_kern_base[a] + 256 * op_byte(b) + rem_byte(b) + 32768 - kern_base_offset
1009 /* sec 0558 */
1010 #define param(a, b)      font_info[a + param_base[b]].cint
1011 #define slant(f)         param(slant_code, f)
1012 #define space(f)         param(space_code, f)
1013 #define space_stretch(f) param(space_stretch_code, f)
1014 #define space_shrink(f)  param(space_shrink_code, f)
1015 #define x_height(f)      param(x_height_code, f)
1016 #define quad(f)          param(quad_code, f)
1017 #define extra_space(f)   param(extra_space_code, f)
1018 /* sec 0561 */
1019 #define start_font_error_message()  \
1020 do                                  \
1021 {                                   \
1022   print_err("Font ");               \
1023   sprint_cs(u);                     \
1024   print_char('=');                  \
1025   print_file_name(nom, aire, 335);  \
1026                                     \
1027   if (s >= 0)                       \
1028   {                                 \
1029     prints(" at ");                 \
1030     print_scaled(s);                \
1031     prints("pt");                   \
1032   }                                 \
1033   else if (s != -1000)              \
1034   {                                 \
1035     prints(" scaled ");             \
1036     print_int(-(integer)s);         \
1037   }                                 \
1038 }                                   \
1039 while (0)
1040 /* sec 0564 */
1041 #define read_sixteen(a) \
1042 do                      \
1043   {                     \
1044     a = fbyte;          \
1045                         \
1046     if (a > 127)        \
1047       goto bad_tfm;     \
1048                         \
1049     fget();             \
1050     a = a * 256 + fbyte;\
1051   }                     \
1052 while (0)
1053 #define store_four_quarters(val)  \
1054 do                                \
1055   {                               \
1056     fget(); a = fbyte; qw.b0 = a; \
1057     fget(); b = fbyte; qw.b1 = b; \
1058     fget(); c = fbyte; qw.b2 = c; \
1059     fget(); d = fbyte; qw.b3 = d; \
1060     val = qw;                     \
1061   }                               \
1062 while (0)
1063 /* sec 0570 */
1064 #define check_byte_range(a) \
1065 do                          \
1066 {                           \
1067   if ((a < bc) || (a > ec)) \
1068     goto bad_tfm;           \
1069 }                           \
1070   while (0)
1071 /* sec 0571 */
1072 #define store_scaled(a)                                       \
1073 do                                                            \
1074 {                                                             \
1075   fget(); a = fbyte; fget(); b = fbyte;                       \
1076   fget(); c = fbyte; fget(); d = fbyte;                       \
1077   sw = (((((d * z) / 256) + (c * z)) / 256) + (b * z)) / beta;\
1078                                                               \
1079   if (a == 0)                                                 \
1080     a = sw;                                                   \
1081   else if (a == 255)                                          \
1082     a = sw - alpha;                                           \
1083   else                                                        \
1084     goto bad_tfm;                                             \
1085 }                                                             \
1086 while (0)
1087 /* sec 0573 */
1088 #define check_existence(a)  \
1089 do                          \
1090 {                           \
1091   check_byte_range(a);      \
1092                             \
1093   qw = char_info(f, a);     \
1094                             \
1095   if (!char_exists(qw))     \
1096     goto bad_tfm;           \
1097 }                           \
1098 while (0)
1099 /* sec 0576 */
1100 #define adjust(a) a[f] = a[f]
1101 /* sec 0585 */
1102 #define set1      128 // c[1]
1103 #define set2      129 // c[2]
1104 #define set3      130 // c[3]
1105 #define set4      131 // c[4]
1106 #define set_rule  132 // a[4] b[4]
1107 #define put1      133 // c[1]
1108 #define put2      134 // c[2]
1109 #define put3      135 // c[3]
1110 #define put4      136 // c[4]
1111 #define put_rule  137 // a[4] b[4]
1112 #define nop       138 // NULL
1113 #define bop       139 // c0[4] c1[4] ... c9[4] p[4]
1114 #define eop       140 // NULL
1115 #define push      141
1116 #define pop       142
1117 #define right1    143 // b[1]
1118 #define right2    144 // b[2]
1119 #define right3    145 // b[3]
1120 #define right4    146 // b[4]
1121 #define w0        147 //
1122 #define w1        148 // b[1]
1123 #define w2        149 // b[2]
1124 #define w3        150 // b[3]
1125 #define w4        151 // b[4]
1126 #define x0        152 //
1127 #define x1        153 // b[1]
1128 #define x2        154 // b[2]
1129 #define x3        155 // b[3]
1130 #define x4        156 // b[4]
1131 #define down1     157 // a[1]
1132 #define down2     158 // a[2]
1133 #define down3     159 // a[3]
1134 #define down4     160 // a[4]
1135 #define y0        161 //
1136 #define y1        162 // a[1]
1137 #define y2        163 // a[2]
1138 #define y3        164 // a[3]
1139 #define y4        165 // a[4]
1140 #define z0        166 //
1141 #define z1        167 // a[1]
1142 #define z2        168 // a[2]
1143 #define z3        169 // a[3]
1144 #define z4        170 // a[4]
1145 #define fnt_num_0 171 //
1146 #define fnt1      235 // k[1]
1147 #define fnt2      236 // k[2]
1148 #define fnt3      237 // k[3]
1149 #define fnt4      238 // k[4]
1150 #define xxx1      239 // k[1] x[k]
1151 #define xxx2      240 // k[2] x[k]
1152 #define xxx3      241 // k[3] x[k]
1153 #define xxx4      242 // k[4] x[k]
1154 #define fnt_def1  243 // k[1] c[4] s[4] d[4] a[1] l[1] n[a + l]
1155 #define fnt_def2  244 // k[2] c[4] s[4] d[4] a[1] l[1] n[a + l]
1156 #define fnt_def3  245 // k[3] c[4] s[4] d[4] a[1] l[1] n[a + l]
1157 #define fnt_def4  246 // k[4] c[4] s[4] d[4] a[1] l[1] n[a + l]
1158 #define pre       247 // i[1] num[4] den[4] mag[4] k[1] x[k]
1159 #define post      248 //
1160 #define post_post 249 //
1161 /* sec 0587 */
1162 #define id_byte 2
1163 /* sec 0605 */
1164 #define movement_node_size 3
1165 #define location(a) mem[a + 2].cint
1166 /* sec 0608 */
1167 #define y_here  1
1168 #define z_here  2
1169 #define yz_OK   3
1170 #define y_OK    4
1171 #define z_OK    5
1172 #define d_fixed 6
1173 /* sec 0611 */
1174 #define none_seen 0
1175 #define y_seen    6
1176 #define z_seen    12
1177 /* sec 0625 */
1178 #define billion 1000000000.0
1179 #define vet_glue(a)             \
1180 do                              \
1181 {                               \
1182   glue_temp = a;                \
1183   if (glue_temp > billion)      \
1184     glue_temp = billion;        \
1185   else if (glue_temp < -billion)\
1186     glue_temp = -billion;       \
1187 }                               \
1188 while (0)
1189 /* sec 0644 */
1190 #define exactly    0
1191 #define additional 1
1192 #define natural 0, additional
1193 /* sec 0769 */
1194 #define u_part(a)     mem[(a) + height_offset].cint
1195 #define v_part(a)     mem[(a) + depth_offset].cint
1196 #define extra_info(a) info((a) + list_offset)
1197 /* sec 0681 */
1198 #define noad_size      4
1199 #define nucleus(a)     ((a) + 1)
1200 #define supscr(a)      ((a) + 2)
1201 #define subscr(a)      ((a) + 3)
1202 #define math_type      link
1203 #define fam            font
1204 #define math_char      1
1205 #define sub_box        2
1206 #define sub_mlist      3
1207 #define math_text_char 4
1208 /* sec 0682 */
1209 #define ord_noad   (unset_node + 3) // 16
1210 #define op_noad    (ord_noad + 1  ) // 17
1211 #define bin_noad   (ord_noad + 2  ) // 18
1212 #define rel_noad   (ord_noad + 3  ) // 19
1213 #define open_noad  (ord_noad + 4  ) // 20
1214 #define close_noad (ord_noad + 5  ) // 21
1215 #define punct_noad (ord_noad + 6  ) // 22
1216 #define inner_noad (ord_noad + 7  ) // 23
1217 #define limits    1
1218 #define no_limits 2
1219 /* sec 0683 */
1220 #define left_delimiter(a)  ((a) + 4)
1221 #define right_delimiter(a) ((a) + 5)
1222 #define radical_noad       (inner_noad + 1) // 24
1223 #define radical_noad_size  5
1224 #define fraction_noad      (radical_noad + 1) // 25
1225 #define fraction_noad_size 6
1226 #define small_fam(a)       mem[(a)].qqqq.b0
1227 #define small_char(a)      mem[(a)].qqqq.b1
1228 #define large_fam(a)       mem[(a)].qqqq.b2
1229 #define large_char(a)      mem[(a)].qqqq.b3
1230 #define thickness          width
1231 #define default_code       010000000000L
1232 #define numerator          supscr
1233 #define denominator        subscr
1234 /* sec 0687 */
1235 #define under_noad        (fraction_noad + 1) // 26
1236 #define over_noad         (under_noad + 1   ) // 27
1237 #define accent_noad       (over_noad + 1    ) // 28
1238 #define accent_noad_size  5
1239 #define accent_chr(a)     (a) + 4
1240 #define vcenter_noad      (accent_noad + 1  ) // 29
1241 #define left_noad         (vcenter_noad + 1 ) // 30
1242 #define right_noad        (left_noad + 1    ) // 31
1243 #define delimiter         nucleus
1244 #define script_allowed(a) ((type(a) >= ord_noad) && (type(a) < left_noad))
1245 /* sec 0688 */
1246 #define style_node          (unset_node + 1)
1247 #define style_node_size     3
1248 #define display_style       0
1249 #define text_style          2
1250 #define script_style        4
1251 #define script_script_style 6
1252 #define cramped             1
1253 /* sec 0689 */
1254 #define choice_node            (unset_node + 2)
1255 #define display_mlist(a)       info(a + 1)
1256 #define text_mlist(a)          link(a + 1)
1257 #define script_mlist(a)        info(a + 2)
1258 #define script_script_mlist(a) link(a + 2)
1259 /* sec 0699 */
1260 #define text_size          0
1261 #define script_size        16
1262 #define script_script_size 32
1263 /* sec 0700 */
1264 #define mathsy(a, b)        font_info[a + param_base[fam_fnt(2 + b)]].cint
1265 #define math_x_height(a)    mathsy(5, a)
1266 #define math_quad(a)        mathsy(6, a)
1267 #define num1(a)             mathsy(8, a)
1268 #define num2(a)             mathsy(9, a)
1269 #define num3(a)             mathsy(10, a)
1270 #define denom1(a)           mathsy(11, a)
1271 #define denom2(a)           mathsy(12, a)
1272 #define sup1(a)             mathsy(13, a)
1273 #define sup2(a)             mathsy(14, a)
1274 #define sup3(a)             mathsy(15, a)
1275 #define sub1(a)             mathsy(16, a)
1276 #define sub2(a)             mathsy(17, a)
1277 #define sup_drop(a)         mathsy(18, a)
1278 #define sub_drop(a)         mathsy(19, a)
1279 #define delim1(a)           mathsy(20, a)
1280 #define delim2(a)           mathsy(21, a)
1281 #define axis_height(a)      mathsy(22, a)
1282 #define total_mathsy_params 22
1283 /* sec 0701 */
1284 #define mathex(a)              font_info[(a) + param_base[fam_fnt(3 + cur_size)]].cint
1285 #define default_rule_thickness mathex(8)
1286 #define big_op_spacing1        mathex(9)
1287 #define big_op_spacing2        mathex(10)
1288 #define big_op_spacing3        mathex(11)
1289 #define big_op_spacing4        mathex(12)
1290 #define big_op_spacing5        mathex(13)
1291 #define total_mathex_params    13
1292 /* sec 0702 */
1293 #define cramped_style(a) (2 * ((a) / 2) + cramped)
1294 #define sub_style(a)     (2 * ((a) / 4) + script_style + cramped)
1295 #define sup_style(a)     (2 * ((a) / 4) + script_style + ((a) % 2))
1296 #define num_style(a)     ((a) + 2 - 2 * ((a) / 6))
1297 #define denom_style(a)   (2 * ((a) / 2) + cramped + 2 - 2 * ((a) / 6))
1298 /* sec 0716 */
1299 #define mu_mult(a) nx_plus_y(n, a, xn_over_d(a, f, 0200000))
1300 /* sec 0725 */
1301 #define new_hlist(a) mem[nucleus(a)].cint
1302 /* sec 0731 */
1303 #define choose_mlist(a) \
1304 do                      \
1305 {                       \
1306   p = a(q);             \
1307   a(q) = 0;             \
1308 }                       \
1309 while (0)
1310 /* sec 0770 */
1311 #define preamble              link(align_head)
1312 #define align_stack_node_size 5
1313 /* sec 0780 */
1314 #define span_code          256
1315 #define cr_code            257
1316 #define cr_cr_code         (cr_code + 1)
1317 #define end_template_token (cs_token_flag + frozen_end_template)
1318 /* sec 0797 */
1319 #define span_node_size 2
1320 /* sec 0817 */
1321 #define tight_fit      3
1322 #define loose_fit      1
1323 #define very_loose_fit 0
1324 #define decent_fit     2
1325 /* sec 0819 */
1326 #define active_node_size  3
1327 #define fitness           subtype
1328 #define break_node        rlink
1329 #define line_number       llink
1330 #define total_demerits(a) mem[a + 2].cint
1331 #define unhyphenated      0
1332 #define hyphenated        1
1333 #define last_active       active
1334 /* sec 0821 */
1335 #define passive_node_size 2
1336 #define cur_break         rlink
1337 #define prev_break        llink
1338 #define serial            info
1339 /* sec 0822 */
1340 #define delta_node_size 7
1341 #define delta_node      2
1342 /* sec 0823 */
1343 #define do_all_six(a) \
1344 do                    \
1345 {                     \
1346   a(1); a(2); a(3);   \
1347   a(4); a(5); a(6);   \
1348 }                     \
1349 while (0)
1350 /* sec 0825 */
1351 #define check_shrinkage(s)                            \
1352 do                                                    \
1353 {                                                     \
1354   if ((shrink_order(s) != normal) && (shrink(s) != 0))\
1355     s = finite_shrink(s);                             \
1356 }                                                     \
1357 while (0)
1358 /* sec 0829 */
1359 #define copy_to_cur_active(a) cur_active_width[a] = active_width[a]
1360 /* sec 0832 */
1361 #define update_width(a) cur_active_width[a] = cur_active_width[a] + mem[r + (a)].cint
1362 /* sec 0833 */
1363 #define awful_bad 07777777777
1364 /* sec 0837 */
1365 #define set_break_width_to_background(a) break_width[a] = background[a]
1366 /* sec 0843 */
1367 #define convert_to_break_width(a)   mem[prev_r + (a)].cint = mem[prev_r + (a)].cint - cur_active_width[a] + break_width[a]
1368 #define store_break_width(a)        active_width[a] = break_width[a]
1369 #define new_delta_to_break_width(a) mem[q + (a)].cint = break_width[(a)] - cur_active_width[(a)]
1370 /* sec 0844 */
1371 #define new_delta_from_break_width(a) mem[q + (a)].cint = cur_active_width[(a)] - break_width[(a)]
1372 /* sec 0860 */
1373 #define combine_two_deltas(a) mem[prev_r + (a)].cint = mem[prev_r + (a)].cint + mem[r + (a)].cint
1374 #define downdate_width(a)     cur_active_width[(a)] = cur_active_width[(a)] - mem[prev_r + (a)].cint
1375 /* sec 0861 */
1376 #define update_active(a) active_width[(a)] = active_width[(a)] + mem[r + (a)].cint
1377 /* sec 0864 */
1378 #define store_background(a) active_width[a] = background[a]
1379 /* sec 0866 */
1380 #define act_width active_width[1]
1381 #define kern_break()                                \
1382 do                                                  \
1383 {                                                   \
1384   if (!is_char_node(link(cur_p)) && auto_breaking)  \
1385     if (type(link(cur_p)) == glue_node)             \
1386       try_break(0, unhyphenated);                   \
1387                                                     \
1388   act_width = act_width + width(cur_p);             \
1389 }                                                   \
1390 while (0)
1391 /* sec 0877 */
1392 #define next_break prev_break
1393 /* sec 0908 */
1394 #define append_charnode_to_t(a) \
1395 do                              \
1396   {                             \
1397     link(t) = get_avail();      \
1398     t = link(t);                \
1399     font(t) = hf;               \
1400     character(t) = (a);         \
1401   }                             \
1402 while (0)
1403 #define set_cur_r()      \
1404 do                       \
1405   {                      \
1406     if (j < n)           \
1407       cur_r = hu[j + 1]; \
1408     else                 \
1409       cur_r = bchar;     \
1410                          \
1411     if (odd(hyf[j]))     \
1412       cur_rh = hchar;    \
1413     else                 \
1414       cur_rh = non_char; \
1415   }                      \
1416 while (0)
1417 /* sec 0910 */
1418 #define wrap_lig(a)                           \
1419 do                                            \
1420 {                                             \
1421   if (ligature_present)                       \
1422   {                                           \
1423     p = new_ligature(hf, cur_l, link(cur_q)); \
1424                                               \
1425     if (lft_hit)                              \
1426     {                                         \
1427       subtype(p) = 2;                         \
1428       lft_hit = false;                        \
1429     }                                         \
1430                                               \
1431     if ((a))                                  \
1432       if (lig_stack == 0)                     \
1433       {                                       \
1434         incr(subtype(p));                     \
1435         rt_hit = false;                       \
1436       }                                       \
1437                                               \
1438     link(cur_q) = p;                          \
1439     t = p;                                    \
1440     ligature_present = false;                 \
1441   }                                           \
1442 }                                             \
1443 while (0)
1444 #define pop_lig_stack()                       \
1445 do                                            \
1446   {                                           \
1447     if (lig_ptr(lig_stack) != 0)              \
1448     {                                         \
1449       link(t) = lig_ptr(lig_stack);           \
1450       t = link(t);                            \
1451       incr(j);                                \
1452     }                                         \
1453                                               \
1454     p = lig_stack;                            \
1455     lig_stack = link(p);                      \
1456     free_node(p, small_node_size);            \
1457                                               \
1458     if (lig_stack == 0)                       \
1459     {                                         \
1460       set_cur_r();                            \
1461     }                                         \
1462     else                                      \
1463       cur_r = character(lig_stack);           \
1464   }                                           \
1465 while (0)
1466 /* sec 0914 */
1467 #define advance_major_tail()       \
1468 do                                 \
1469   {                                \
1470     major_tail = link(major_tail); \
1471     incr(r_count);                 \
1472   }                                \
1473 while (0)
1474 /* sec 0970 */
1475 #define active_height      active_width
1476 #define cur_height         active_height[1]
1477 #define set_height_zero(a) active_width[(a)] = 0
1478 /* sec 0974 */
1479 #define deplorable 100000L
1480 /* sec 0980 */
1481 #define inserts_only 1
1482 #define box_there    2
1483 /* sec 0981 */
1484 #define page_ins_node_size 4
1485 #define inserting          0
1486 #define split_up           1
1487 #define broken_ptr(a)      link(a + 1)
1488 #define broken_ins(a)      info(a + 1)
1489 #define last_ins_ptr(a)    link(a + 2)
1490 #define best_ins_ptr(a)    info(a + 2)
1491 /* sec 0982 */
1492 #define page_goal   page_so_far[0]
1493 #define page_total  page_so_far[1]
1494 #define page_shrink page_so_far[6]
1495 #define page_depth  page_so_far[7]
1496 /* sec 0987 */
1497 #define set_page_so_far_zero(a) page_so_far[(a)] = 0
1498 /* sec 1034 */
1499 #define adjust_space_factor()   \
1500 do                              \
1501 {                               \
1502   main_s = sf_code(cur_chr);    \
1503   if (main_s == 1000)           \
1504     space_factor = 1000;        \
1505   else if (main_s < 1000)       \
1506   {                             \
1507     if (main_s > 0)             \
1508       space_factor = main_s;    \
1509   }                             \
1510   else if (space_factor < 1000) \
1511     space_factor = 1000;        \
1512   else                          \
1513     space_factor = main_s;      \
1514 }                               \
1515 while (0)
1516 /* sec 1035 */
1517 /* -> false */
1518 #define wrapup(a)                                         \
1519 do                                                        \
1520 {                                                         \
1521   if (cur_l < non_char)                                   \
1522   {                                                       \
1523     if (link(cur_q) != 0)                                 \
1524       if (character(tail) == hyphen_char[main_f])         \
1525         ins_disc = true;                                  \
1526                                                           \
1527     if (ligature_present)                                 \
1528     {                                                     \
1529       main_p = new_ligature(main_f, cur_l, link(cur_q));  \
1530                                                           \
1531       if (lft_hit)                                        \
1532       {                                                   \
1533         subtype(main_p) = 2;                              \
1534         lft_hit = false;                                  \
1535       }                                                   \
1536                                                           \
1537       if (a)                                              \
1538         if (lig_stack == 0)                               \
1539         {                                                 \
1540           incr(subtype(main_p));                          \
1541           rt_hit = false;                                 \
1542         }                                                 \
1543                                                           \
1544       link(cur_q) = main_p;                               \
1545       tail = main_p;                                      \
1546       ligature_present = false;                           \
1547     }                                                     \
1548                                                           \
1549     if (ins_disc)                                         \
1550     {                                                     \
1551       ins_disc = false;                                   \
1552                                                           \
1553       if (mode > 0)                                       \
1554       {                                                   \
1555         tail_append(new_disc());                          \
1556       }                                                   \
1557     }                                                     \
1558   }                                                       \
1559 }                                                         \
1560 while (0)
1561 /* sec 1045 */
1562 #define any_mode(a) vmode + a: case hmode + a: case mmode + a
1563 /* sec 1046 */
1564 #define non_math(a) vmode + a: case hmode + a
1565 /* sec 1058 */
1566 #define fil_code     0
1567 #define fill_code    1
1568 #define ss_code      2
1569 #define fil_neg_code 3
1570 #define skip_code    4
1571 #define mskip_code   5
1572 /* sec 1071 */
1573 #define box_flag      010000000000
1574 #define ship_out_flag (box_flag + 512)
1575 #define leader_flag   (box_flag + 513)
1576 #define box_code      0
1577 #define copy_code     1
1578 #define last_box_code 2
1579 #define vsplit_code   3
1580 #define vtop_code     4
1581 /* sec 1178 */
1582 #define above_code     0
1583 #define over_code      1
1584 #define atop_code      2
1585 #define delimited_code 3
1586 /* sec 1214 */
1587 #define define(p, t, e) \
1588 do                      \
1589 {                       \
1590   if (a >= 4)           \
1591     geq_define(p, t, e);\
1592   else                  \
1593     eq_define(p, t, e); \
1594 }                       \
1595 while (0)
1596 #define word_define(p, w) \
1597 do                        \
1598 {                         \
1599   if (a >= 4)             \
1600     geq_word_define(p, w);\
1601   else                    \
1602     eq_word_define(p, w); \
1603 }                         \
1604 while (0)
1605 /* sec 1222 */
1606 #define char_def_code      0
1607 #define math_char_def_code 1
1608 #define count_def_code     2
1609 #define dimen_def_code     3
1610 #define skip_def_code      4
1611 #define mu_skip_def_code   5
1612 #define toks_def_code      6
1613 /* sec 1290 */
1614 #define show_code     0
1615 #define show_box_code 1
1616 #define show_the_code 2
1617 #define show_lists    3
1618 /* sec 1306 */
1619 #define undump(va, vb, vc)        \
1620 do                                \
1621   {                               \
1622     undump_int(x);                \
1623                                   \
1624     if ((x < (va)) || (x > (vb))) \
1625       goto bad_fmt;               \
1626     else                          \
1627       vc = x;                     \
1628   }                               \
1629 while (0)
1630 /* sec 1342 */
1631 #define write_node_size 2
1632 #define open_node_size  3
1633 #define open_node       0
1634 #define write_node      1
1635 #define close_node      2
1636 #define special_node    3
1637 #define language_node   4
1638 #define what_lang(s)    link(s+1)
1639 #define what_lhm(s)     type(s+1)
1640 #define what_rhm(s)     subtype(s+1)
1641 #define write_tokens(s) link(s+1)
1642 #define write_stream(s) info(s+1)
1643 #define open_name(s)    link(s+1)
1644 #define open_area(s)    info(s+2)
1645 #define open_ext(s)     link(s+2)
1646 /* sec 1344 */
1647 #define immediate_code    4
1648 #define set_language_code 5
1649 /* sec 1371 */
1650 #define end_write_token (cs_token_flag + end_write)
1651
1652 #endif