OSDN Git Service

removed DOS-related codes.
[putex/putex.git] / src / texsourc / macros.h
1 /* Copyright 2014 Clerk Ma\r
2 \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
7 \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
12 \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
16    02110-1301 USA.  */\r
17 #ifndef _YANDYTEX_MACROS_H\r
18 #define _YANDYTEX_MACROS_H\r
19 \r
20 #define font_base 0\r
21 /* sec 0022 */\r
22 #define null_code       0     // 0\r
23 #define carriage_return 015   // 13\r
24 #define invalid_code    0177  // 127\r
25 /* sec 0036 */\r
26 #define loc cur_input.loc_field\r
27 /* sec 0040 */\r
28 #define length(s) (str_start[(s) + 1] - str_start[(s)])\r
29 /* sec 0041 */\r
30 #define cur_length (pool_ptr - str_start[str_ptr])\r
31 /* sec 0054 */\r
32 enum \r
33 {\r
34   no_print     = 16,\r
35   term_only    = 17,\r
36   log_only     = 18,\r
37   term_and_log = 19,\r
38   pseudo       = 20,\r
39   new_string   = 21,\r
40   max_selector = 21,\r
41 };\r
42 /* sec 0073 */\r
43 enum\r
44 {\r
45   batch_mode      = 0,\r
46   nonstop_mode    = 1,\r
47   scroll_mode     = 2,\r
48   error_stop_mode = 3,\r
49 };\r
50 /* sec 0076 */\r
51 enum\r
52 {\r
53   spotless             = 0,\r
54   warning_issued       = 1,\r
55   error_message_issued = 2,\r
56   fatal_error_stop     = 3,\r
57 };\r
58 /* sec 0079 */\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
66 /* sec 0096 */\r
67 #define check_interrupt()     \\r
68 do                            \\r
69 {                             \\r
70   if (interrupt != 0)         \\r
71     pause_for_instructions(); \\r
72 }                             \\r
73 while (0)\r
74 /* sec 0101 */\r
75 #define unity 0200000\r
76 #define two   0400000\r
77 /* sec 0105 */\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
80 /* sec 0108 */\r
81 #define inf_bad 10000L\r
82 /* sec 0109 */\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
88 /* sec 0115 */\r
89 //#define pointer halfword\r
90 #define null    min_halfword\r
91 /* sec 0118 */\r
92 #define link(p) mem[p].hh.rh\r
93 #define info(p) mem[p].hh.lh\r
94 /* sec 0122 */\r
95 #ifdef STAT\r
96 #define fast_get_avail(a) \\r
97   do                      \\r
98     {                     \\r
99       a = avail;          \\r
100                           \\r
101       if (a == 0)         \\r
102         a = get_avail();  \\r
103       else                \\r
104       {                   \\r
105         avail = link(a);  \\r
106         link(a) = 0;      \\r
107         incr(dyn_used);   \\r
108       }                   \\r
109     }                     \\r
110   while (0)\r
111 #else\r
112 #define fast_get_avail(a) \\r
113   do                      \\r
114     {                     \\r
115       a = avail;          \\r
116                           \\r
117       if (a == 0)         \\r
118         a = get_avail();  \\r
119       else                \\r
120       {                   \\r
121         avail = link(a);  \\r
122         link(a) = 0;      \\r
123       }                   \\r
124     }                     \\r
125   while (0)\r
126 #endif\r
127 /* sec 0124 */\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
133 /* sec 0133 */\r
134 #define type(a)    mem[a].hh.b0\r
135 #define subtype(a) mem[a].hh.b1\r
136 /* sec 0134 */\r
137 #define is_char_node(a) (a >= hi_mem_min)\r
138 #define font            type\r
139 #define character       subtype\r
140 /* sec 0135 */\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
154 #define normal          0\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
159 /* sec 0137 */\r
160 #define vlist_node 1\r
161 /* sec 0138 */\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
166 /* sec 0140 */\r
167 #define ins_node         3\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
172 /* sec 0141 */\r
173 #define mark_node       4\r
174 #define small_node_size 2\r
175 #define mark_ptr(a)     mem[a + 1].cint\r
176 /* sec 0142 */\r
177 #define adjust_node 5\r
178 #define adjust_ptr  mark_ptr\r
179 /* sec 0143 */\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
183 /* sec 0145 */\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
188 /* sec 0146 */\r
189 #define whatsit_node 8\r
190 /* sec 0147 */\r
191 #define math_node 9\r
192 #define before    0\r
193 #define after     1\r
194 /* sec 0148 */\r
195 #define precedes_break(a)  (type(a) < math_node)\r
196 #define non_discardable(a) (type(a) < math_node)\r
197 /* sec 0149 */\r
198 #define glue_node      10\r
199 #define cond_math_glue 98\r
200 #define mu_glue        99\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
206 /* sec 0150 */\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
213 #define fil               1\r
214 #define fill              2\r
215 #define filll             3\r
216 /* sec 0155 */\r
217 #define kern_node 11\r
218 #define explicit  1\r
219 #define acc_kern  2\r
220 /* sec 0157 */\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
225 /* sec 0159 */\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
230 /* sec 0162 */\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
253 /* sec 0200 */\r
254 #define token_ref_count(a) info(a)\r
255 /* sec 0203 */\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
258 /* sec 0207 */\r
259 #define escape        0\r
260 #define relax         0\r
261 #define left_brace    1\r
262 #define right_brace   2\r
263 #define math_shift    3\r
264 #define tab_mark      4\r
265 #define car_ret       5\r
266 #define out_param     5\r
267 #define mac_param     6\r
268 #define sup_mark      7\r
269 #define sub_mark      8\r
270 #define ignore        9\r
271 #define endv          9\r
272 #define spacer        10\r
273 #define letter        11\r
274 #define other_char    12\r
275 #define active_char   13\r
276 #define par_end       13\r
277 #define match         13\r
278 #define comment       14\r
279 #define end_match     14\r
280 #define stop          14\r
281 #define invalid_char  15\r
282 #define delim_num     15\r
283 #define max_char_code 15\r
284 /* sec 0208 */\r
285 #define char_num      16\r
286 #define math_char_num 17\r
287 #define mark          18\r
288 #define xray          19\r
289 #define make_box      20\r
290 #define hmove         21\r
291 #define vmove         22\r
292 #define un_hbox       23\r
293 #define un_vbox       24\r
294 #define remove_item   25\r
295 #define hskip         26\r
296 #define vskip         27\r
297 #define mskip         28\r
298 #define kern          29\r
299 #define mkern         30\r
300 #define leader_ship   31\r
301 #define halign        32\r
302 #define valign        33\r
303 #define no_align      34\r
304 #define vrule         35\r
305 #define hrule         36\r
306 #define insert        37\r
307 #define vadjust       38\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
314 #define accent           45\r
315 #define math_accent      46\r
316 #define discretionary    47\r
317 #define eq_no            48\r
318 #define left_right       49\r
319 #define math_comp        50\r
320 #define limit_switch     51\r
321 #define above            52\r
322 #define math_style       53\r
323 #define math_choice      54\r
324 #define non_script       55\r
325 #define vcenter          56\r
326 #define case_shift       57\r
327 #define message          58\r
328 #define extension        59\r
329 #define in_stream        60\r
330 #define begin_group      61\r
331 #define end_group        62\r
332 #define omit             63\r
333 #define ex_space         64\r
334 #define no_boundary      65\r
335 #define radical          66\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
342 /* sec 0209 */\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
351 #define set_aux           79\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
363 #define advance           90\r
364 #define multiply          91\r
365 #define divide            92\r
366 #define prefix            93\r
367 #define let               94\r
368 #define shorthand_def     95\r
369 #define read_to_cs        96\r
370 #define def               97\r
371 #define set_box           98\r
372 #define hyph_data         99\r
373 #define set_interaction   100\r
374 #define max_command       100\r
375 /* sec 0210 */\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
396 /* sec 0211 */\r
397 #define vmode 1\r
398 #define hmode (vmode + max_command + 1)\r
399 #define mmode (hmode + max_command + 1)\r
400 /* sec 0212 */\r
401 #define ignore_depth -65536000L\r
402 /* sec 0213 */\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
413 /* sec 0221 */\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
422 /* sec 0222 */\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
442 /* sec 0224 */\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
465 // #\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
487 /* sec 0230 */\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
508 // #\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
528 /* sec 0232 */\r
529 #define null_font font_base\r
530 #define var_code 070000\r
531 /* sec 0236 */\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
591 // #\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
650 /* sec 0247 */\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
675 // #\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
699 /* sec 0256 */\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
704 /* sec 0268 */\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
712 /* sec 0269 */\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
731 /* sec 0274 */\r
732 #define saved(a) save_stack[save_ptr + (a)].cint\r
733 /* sec 0289 */\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
747 /* sec 0298 */\r
748 #define chr_cmd(s)  \\r
749 do                  \\r
750 {                   \\r
751   prints(s);        \\r
752   print(chr_code);  \\r
753 }                   \\r
754 while (0)\r
755 /* sec 0302 */\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
761 /* sec 0303 */\r
762 #define mid_line    1\r
763 #define skip_blanks 2 + max_char_code // 17\r
764 #define new_line    3 + max_char_code + max_char_code // 33\r
765 /* sec 0304 */\r
766 #define cur_file input_file[index]\r
767 /* sec 0305 */\r
768 #define skipping  1\r
769 #define defining  2\r
770 #define matching  3\r
771 #define aligning  4\r
772 #define absorbing 5\r
773 /* sec 0307 */\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
781 #define inserted           4\r
782 #define macro              5\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
793 /* sec 0316 */\r
794 #define begin_pseudoprint() \\r
795 do                          \\r
796 {                           \\r
797   l = tally;                \\r
798   tally = 0;                \\r
799   selector = pseudo;        \\r
800   trick_count = 1000000L;   \\r
801 }                           \\r
802 while (0)\r
803 #define set_trick_count()                                 \\r
804 do                                                        \\r
805 {                                                         \\r
806   first_count = tally;                                    \\r
807   trick_count = tally + 1 + error_line - half_error_line; \\r
808                                                           \\r
809   if (trick_count < error_line)                           \\r
810     trick_count = error_line;                             \\r
811 }                                                         \\r
812 while (0)\r
813 /* sec 0322 */\r
814 /* sec 0323 */\r
815 #define back_list(a) begin_token_list(a, backed_up)\r
816 #define ins_list(a)  begin_token_list(a, inserted)\r
817 /* sec 0344 */\r
818 #define any_state_plus(a) mid_line + (a): case skip_blanks + (a): case new_line + (a)\r
819 /* sec 0347 */\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
827 /* sec 0352 */\r
828 #define is_hex(a) \\r
829   (((a >= '0') && (a <= '9')) || ((a >= 'a') && (a <= 'f')))\r
830 #define hex_to_cur_chr()                    \\r
831 do                                          \\r
832 {                                           \\r
833   if (c <= '9')                             \\r
834     cur_chr = c - '0';                      \\r
835   else                                      \\r
836     cur_chr = c - 'a' + 10;                 \\r
837                                             \\r
838   if (cc <= '9')                            \\r
839     cur_chr = 16 * cur_chr + cc - '0';      \\r
840   else                                      \\r
841     cur_chr = 16 * cur_chr + cc - 'a' + 10; \\r
842 }                                           \\r
843 while (0)\r
844 /* sec 0360 */\r
845 #define end_line_char_inactive()  \\r
846   (end_line_char < 0) || (end_line_char > 255)\r
847 /* sec 0358 */\r
848 /* sec 0371 */\r
849 #define store_new_token(a)  \\r
850   do                        \\r
851     {                       \\r
852       q = get_avail();      \\r
853       link(p) = q;          \\r
854       info(q) = a;          \\r
855       p = q;                \\r
856     }                       \\r
857   while (0)\r
858 #define fast_store_new_token(a) \\r
859   do                            \\r
860     {                           \\r
861       fast_get_avail(q);        \\r
862       link(p) = q;              \\r
863       info(q) = a;              \\r
864       p = q;                    \\r
865     }                           \\r
866   while (0)\r
867 #define no_expand_flag 257\r
868 /* sec 0382 */\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
879 /* sec 0400 */\r
880 #define int_val   0\r
881 #define dimen_val 1\r
882 #define glue_val  2\r
883 #define mu_val    3\r
884 #define ident_val 4\r
885 #define tok_val   5\r
886 /* sec 0413 */\r
887 #define scanned_result(va, vb) \\r
888 do                            \\r
889   {                           \\r
890     cur_val = va;             \\r
891     cur_val_level = vb;       \\r
892   }                           \\r
893 while (0)\r
894 /* sec 0416 */\r
895 #define input_line_no_code (glue_val + 1)\r
896 #define badness_code       (glue_val + 2)\r
897 /* sec 0421 */\r
898 #define max_dimen 07777777777\r
899 /* sec 0438 */\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
905 /* sec 0445 */\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
909 /* sec 0458 */\r
910 #define set_conversion(a, b)  \\r
911   do                          \\r
912   {                           \\r
913     num = a;                  \\r
914     denom = b;                \\r
915   } while (0)\r
916 /* sec 0468 */\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
923 /* sec 0480 */\r
924 #define closed    2\r
925 #define just_open 1\r
926 /* sec 0487 */\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
944 /* sec 0489 */\r
945 #define if_node_size     2\r
946 #define if_line_field(a) mem[(a) + 1].cint\r
947 #define if_code          1\r
948 #define fi_code          2\r
949 #define else_code        3\r
950 #define or_code          4\r
951 /* sec 0506 */\r
952 #define get_x_token_or_active_char()                    \\r
953 do                                                      \\r
954 {                                                       \\r
955   get_x_token();                                        \\r
956                                                         \\r
957   if (cur_cmd == relax)                                 \\r
958     if (cur_chr == no_expand_flag)                      \\r
959     {                                                   \\r
960       cur_cmd = active_char;                            \\r
961       cur_chr = cur_tok - cs_token_flag - active_base;  \\r
962     }                                                   \\r
963 }                                                       \\r
964 while (0)\r
965 /* sec 0519 */\r
966 #define append_to_name(a)       \\r
967 do                              \\r
968 {                               \\r
969   c = a; incr(k);               \\r
970                                 \\r
971   if (k < file_name_size)       \\r
972     name_of_file[k] = xchr[c];  \\r
973 }                               \\r
974 while (0)\r
975 /* sec 0544 */\r
976 #define no_tag   0\r
977 #define lig_tag  1\r
978 #define list_tag 2\r
979 #define ext_tag  3\r
980 /* sec 0545 */\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
987 /* sec 0546 */\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
992 /* sec 0547 */\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
1000 /* sec 0549 */\r
1001 #define non_char    256\r
1002 #define non_address 0\r
1003 /* sec 0554 */\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
1012 /* sec 0557 */\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
1017 /* sec 0558 */\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
1026 /* sec 0561 */\r
1027 #define start_font_error_message()  \\r
1028 do                                  \\r
1029 {                                   \\r
1030   print_err("Font ");               \\r
1031   sprint_cs(u);                     \\r
1032   print_char('=');                  \\r
1033   print_file_name(nom, aire, 335);  \\r
1034                                     \\r
1035   if (s >= 0)                       \\r
1036   {                                 \\r
1037     prints(" at ");                 \\r
1038     print_scaled(s);                \\r
1039     prints("pt");                   \\r
1040   }                                 \\r
1041   else if (s != -1000)              \\r
1042   {                                 \\r
1043     prints(" scaled ");             \\r
1044     print_int(-(integer)s);         \\r
1045   }                                 \\r
1046 }                                   \\r
1047 while (0)\r
1048 /* sec 0564 */\r
1049 #define read_sixteen(a) \\r
1050 do                      \\r
1051   {                     \\r
1052     a = fbyte;          \\r
1053                         \\r
1054     if (a > 127)        \\r
1055       goto bad_tfm;     \\r
1056                         \\r
1057     fget();             \\r
1058     a = a * 256 + fbyte;\\r
1059   }                     \\r
1060 while (0)\r
1061 #define store_four_quarters(val)  \\r
1062 do                                \\r
1063   {                               \\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
1068     val = qw;                     \\r
1069   }                               \\r
1070 while (0)\r
1071 /* sec 0570 */\r
1072 #define check_byte_range(a) \\r
1073 do                          \\r
1074 {                           \\r
1075   if ((a < bc) || (a > ec)) \\r
1076     goto bad_tfm;           \\r
1077 }                           \\r
1078   while (0)\r
1079 /* sec 0571 */\r
1080 #define store_scaled(a)                                       \\r
1081 do                                                            \\r
1082 {                                                             \\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
1086                                                               \\r
1087   if (a == 0)                                                 \\r
1088     a = sw;                                                   \\r
1089   else if (a == 255)                                          \\r
1090     a = sw - alpha;                                           \\r
1091   else                                                        \\r
1092     goto bad_tfm;                                             \\r
1093 }                                                             \\r
1094 while (0)\r
1095 /* sec 0573 */\r
1096 #define check_existence(a)  \\r
1097 do                          \\r
1098 {                           \\r
1099   check_byte_range(a);      \\r
1100                             \\r
1101   qw = char_info(f, a);     \\r
1102                             \\r
1103   if (!char_exists(qw))     \\r
1104     goto bad_tfm;           \\r
1105 }                           \\r
1106 while (0)\r
1107 /* sec 0576 */\r
1108 #define adjust(a) a[f] = a[f]\r
1109 /* sec 0585 */\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
1123 #define push      141\r
1124 #define pop       142\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
1129 #define w0        147 //\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
1134 #define x0        152 //\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
1143 #define y0        161 //\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
1148 #define z0        166 //\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
1169 /* sec 0587 */\r
1170 #define id_byte 2\r
1171 /* sec 0605 */\r
1172 #define movement_node_size 3\r
1173 #define location(a) mem[a + 2].cint\r
1174 /* sec 0608 */\r
1175 #define y_here  1\r
1176 #define z_here  2\r
1177 #define yz_OK   3\r
1178 #define y_OK    4\r
1179 #define z_OK    5\r
1180 #define d_fixed 6\r
1181 /* sec 0611 */\r
1182 #define none_seen 0\r
1183 #define y_seen    6\r
1184 #define z_seen    12\r
1185 /* sec 0625 */\r
1186 #define billion 1000000000.0\r
1187 #define vet_glue(a)             \\r
1188 do                              \\r
1189 {                               \\r
1190   glue_temp = 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
1195 }                               \\r
1196 while (0)\r
1197 /* sec 0644 */\r
1198 #define exactly    0\r
1199 #define additional 1\r
1200 #define natural 0, additional\r
1201 /* sec 0769 */\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
1205 /* sec 0681 */\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
1211 #define fam            font\r
1212 #define math_char      1\r
1213 #define sub_box        2\r
1214 #define sub_mlist      3\r
1215 #define math_text_char 4\r
1216 /* sec 0682 */\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
1225 #define limits    1\r
1226 #define no_limits 2\r
1227 /* sec 0683 */\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
1242 /* sec 0687 */\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
1253 /* sec 0688 */\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
1260 #define cramped             1\r
1261 /* sec 0689 */\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
1267 /* sec 0699 */\r
1268 #define text_size          0\r
1269 #define script_size        16\r
1270 #define script_script_size 32\r
1271 /* sec 0700 */\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
1291 /* sec 0701 */\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
1300 /* sec 0702 */\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
1306 /* sec 0716 */\r
1307 #define mu_mult(a) nx_plus_y(n, a, xn_over_d(a, f, 0200000))\r
1308 /* sec 0725 */\r
1309 #define new_hlist(a) mem[nucleus(a)].cint\r
1310 /* sec 0731 */\r
1311 #define choose_mlist(a) \\r
1312 do                      \\r
1313 {                       \\r
1314   p = a(q);             \\r
1315   a(q) = 0;             \\r
1316 }                       \\r
1317 while (0)\r
1318 /* sec 0770 */\r
1319 #define preamble              link(align_head)\r
1320 #define align_stack_node_size 5\r
1321 /* sec 0780 */\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
1326 /* sec 0797 */\r
1327 #define span_node_size 2\r
1328 /* sec 0817 */\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
1333 /* sec 0819 */\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
1342 /* sec 0821 */\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
1347 /* sec 0822 */\r
1348 #define delta_node_size 7\r
1349 #define delta_node      2\r
1350 /* sec 0823 */\r
1351 #define do_all_six(a) \\r
1352 do                    \\r
1353 {                     \\r
1354   a(1); a(2); a(3);   \\r
1355   a(4); a(5); a(6);   \\r
1356 }                     \\r
1357 while (0)\r
1358 /* sec 0825 */\r
1359 #define check_shrinkage(s)                            \\r
1360 do                                                    \\r
1361 {                                                     \\r
1362   if ((shrink_order(s) != normal) && (shrink(s) != 0))\\r
1363     s = finite_shrink(s);                             \\r
1364 }                                                     \\r
1365 while (0)\r
1366 /* sec 0829 */\r
1367 #define copy_to_cur_active(a) cur_active_width[a] = active_width[a]\r
1368 /* sec 0832 */\r
1369 #define update_width(a) cur_active_width[a] = cur_active_width[a] + mem[r + (a)].cint\r
1370 /* sec 0833 */\r
1371 #define awful_bad 07777777777\r
1372 /* sec 0837 */\r
1373 #define set_break_width_to_background(a) break_width[a] = background[a]\r
1374 /* sec 0843 */\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
1378 /* sec 0844 */\r
1379 #define new_delta_from_break_width(a) mem[q + (a)].cint = cur_active_width[(a)] - break_width[(a)]\r
1380 /* sec 0860 */\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
1383 /* sec 0861 */\r
1384 #define update_active(a) active_width[(a)] = active_width[(a)] + mem[r + (a)].cint\r
1385 /* sec 0864 */\r
1386 #define store_background(a) active_width[a] = background[a]\r
1387 /* sec 0866 */\r
1388 #define act_width active_width[1]\r
1389 #define kern_break()                                \\r
1390 do                                                  \\r
1391 {                                                   \\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
1395                                                     \\r
1396   act_width = act_width + width(cur_p);             \\r
1397 }                                                   \\r
1398 while (0)\r
1399 /* sec 0877 */\r
1400 #define next_break prev_break\r
1401 /* sec 0908 */\r
1402 #define append_charnode_to_t(a) \\r
1403 do                              \\r
1404   {                             \\r
1405     link(t) = get_avail();      \\r
1406     t = link(t);                \\r
1407     font(t) = hf;               \\r
1408     character(t) = (a);         \\r
1409   }                             \\r
1410 while (0)\r
1411 #define set_cur_r()      \\r
1412 do                       \\r
1413   {                      \\r
1414     if (j < n)           \\r
1415       cur_r = hu[j + 1]; \\r
1416     else                 \\r
1417       cur_r = bchar;     \\r
1418                          \\r
1419     if (odd(hyf[j]))     \\r
1420       cur_rh = hchar;    \\r
1421     else                 \\r
1422       cur_rh = non_char; \\r
1423   }                      \\r
1424 while (0)\r
1425 /* sec 0910 */\r
1426 #define wrap_lig(a)                           \\r
1427 do                                            \\r
1428 {                                             \\r
1429   if (ligature_present)                       \\r
1430   {                                           \\r
1431     p = new_ligature(hf, cur_l, link(cur_q)); \\r
1432                                               \\r
1433     if (lft_hit)                              \\r
1434     {                                         \\r
1435       subtype(p) = 2;                         \\r
1436       lft_hit = false;                        \\r
1437     }                                         \\r
1438                                               \\r
1439     if ((a))                                  \\r
1440       if (lig_stack == 0)                     \\r
1441       {                                       \\r
1442         incr(subtype(p));                     \\r
1443         rt_hit = false;                       \\r
1444       }                                       \\r
1445                                               \\r
1446     link(cur_q) = p;                          \\r
1447     t = p;                                    \\r
1448     ligature_present = false;                 \\r
1449   }                                           \\r
1450 }                                             \\r
1451 while (0)\r
1452 #define pop_lig_stack()                       \\r
1453 do                                            \\r
1454   {                                           \\r
1455     if (lig_ptr(lig_stack) != 0)              \\r
1456     {                                         \\r
1457       link(t) = lig_ptr(lig_stack);           \\r
1458       t = link(t);                            \\r
1459       incr(j);                                \\r
1460     }                                         \\r
1461                                               \\r
1462     p = lig_stack;                            \\r
1463     lig_stack = link(p);                      \\r
1464     free_node(p, small_node_size);            \\r
1465                                               \\r
1466     if (lig_stack == 0)                       \\r
1467     {                                         \\r
1468       set_cur_r();                            \\r
1469     }                                         \\r
1470     else                                      \\r
1471       cur_r = character(lig_stack);           \\r
1472   }                                           \\r
1473 while (0)\r
1474 /* sec 0914 */\r
1475 #define advance_major_tail()       \\r
1476 do                                 \\r
1477   {                                \\r
1478     major_tail = link(major_tail); \\r
1479     incr(r_count);                 \\r
1480   }                                \\r
1481 while (0)\r
1482 /* sec 0970 */\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
1486 /* sec 0974 */\r
1487 #define deplorable 100000L\r
1488 /* sec 0980 */\r
1489 #define inserts_only 1\r
1490 #define box_there    2\r
1491 /* sec 0981 */\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
1499 /* sec 0982 */\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
1504 /* sec 0987 */\r
1505 #define set_page_so_far_zero(a) page_so_far[(a)] = 0\r
1506 /* sec 1034 */\r
1507 #define adjust_space_factor()   \\r
1508 do                              \\r
1509 {                               \\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
1514   {                             \\r
1515     if (main_s > 0)             \\r
1516       space_factor = main_s;    \\r
1517   }                             \\r
1518   else if (space_factor < 1000) \\r
1519     space_factor = 1000;        \\r
1520   else                          \\r
1521     space_factor = main_s;      \\r
1522 }                               \\r
1523 while (0)\r
1524 /* sec 1035 */\r
1525 /* -> false */\r
1526 #define wrapup(a)                                         \\r
1527 do                                                        \\r
1528 {                                                         \\r
1529   if (cur_l < non_char)                                   \\r
1530   {                                                       \\r
1531     if (link(cur_q) != 0)                                 \\r
1532       if (character(tail) == hyphen_char[main_f])         \\r
1533         ins_disc = true;                                  \\r
1534                                                           \\r
1535     if (ligature_present)                                 \\r
1536     {                                                     \\r
1537       main_p = new_ligature(main_f, cur_l, link(cur_q));  \\r
1538                                                           \\r
1539       if (lft_hit)                                        \\r
1540       {                                                   \\r
1541         subtype(main_p) = 2;                              \\r
1542         lft_hit = false;                                  \\r
1543       }                                                   \\r
1544                                                           \\r
1545       if (a)                                              \\r
1546         if (lig_stack == 0)                               \\r
1547         {                                                 \\r
1548           incr(subtype(main_p));                          \\r
1549           rt_hit = false;                                 \\r
1550         }                                                 \\r
1551                                                           \\r
1552       link(cur_q) = main_p;                               \\r
1553       tail = main_p;                                      \\r
1554       ligature_present = false;                           \\r
1555     }                                                     \\r
1556                                                           \\r
1557     if (ins_disc)                                         \\r
1558     {                                                     \\r
1559       ins_disc = false;                                   \\r
1560                                                           \\r
1561       if (mode > 0)                                       \\r
1562       {                                                   \\r
1563         tail_append(new_disc());                          \\r
1564       }                                                   \\r
1565     }                                                     \\r
1566   }                                                       \\r
1567 }                                                         \\r
1568 while (0)\r
1569 /* sec 1045 */\r
1570 #define any_mode(a) vmode + a: case hmode + a: case mmode + a\r
1571 /* sec 1046 */\r
1572 #define non_math(a) vmode + a: case hmode + a\r
1573 /* sec 1058 */\r
1574 #define fil_code     0\r
1575 #define fill_code    1\r
1576 #define ss_code      2\r
1577 #define fil_neg_code 3\r
1578 #define skip_code    4\r
1579 #define mskip_code   5\r
1580 /* sec 1071 */\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
1589 /* sec 1178 */\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
1594 /* sec 1214 */\r
1595 #define define(p, t, e) \\r
1596 do                      \\r
1597 {                       \\r
1598   if (a >= 4)           \\r
1599     geq_define(p, t, e);\\r
1600   else                  \\r
1601     eq_define(p, t, e); \\r
1602 }                       \\r
1603 while (0)\r
1604 #define word_define(p, w) \\r
1605 do                        \\r
1606 {                         \\r
1607   if (a >= 4)             \\r
1608     geq_word_define(p, w);\\r
1609   else                    \\r
1610     eq_word_define(p, w); \\r
1611 }                         \\r
1612 while (0)\r
1613 /* sec 1222 */\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
1621 /* sec 1290 */\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
1626 /* sec 1306 */\r
1627 #define undump(va, vb, vc)        \\r
1628 do                                \\r
1629   {                               \\r
1630     undump_int(x);                \\r
1631                                   \\r
1632     if ((x < (va)) || (x > (vb))) \\r
1633       goto bad_fmt;               \\r
1634     else                          \\r
1635       vc = x;                     \\r
1636   }                               \\r
1637 while (0)\r
1638 /* sec 1342 */\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
1654 /* sec 1344 */\r
1655 #define immediate_code    4\r
1656 #define set_language_code 5\r
1657 /* sec 1371 */\r
1658 #define end_write_token (cs_token_flag + end_write)\r
1659 \r
1660 #endif