OSDN Git Service

removed libmd5.
[putex/putex.git] / src / texsourc / tex1.c
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 \r
18 #define EXTERN extern\r
19 \r
20 #include "yandytex.h"\r
21 \r
22 /* sec 0198 */\r
23 void show_box_(pointer p)\r
24 {\r
25   depth_threshold = show_box_depth;\r
26   breadth_max = show_box_breadth;\r
27 \r
28   if (breadth_max <= 0)\r
29     breadth_max = 5;\r
30 \r
31 #ifdef ALLOCATESTRING\r
32   if (pool_ptr + depth_threshold >= current_pool_size)\r
33     str_pool = realloc_str_pool(increment_pool_size);\r
34 \r
35   if (pool_ptr + depth_threshold >= current_pool_size)\r
36     depth_threshold = current_pool_size - pool_ptr - 1;\r
37 #else\r
38   if (pool_ptr + depth_threshold >= pool_size)\r
39     depth_threshold = pool_size - pool_ptr - 1;\r
40 #endif\r
41 \r
42   show_node_list(p);\r
43   print_ln();\r
44 }\r
45 /* sec 0200 */\r
46 void delete_token_ref_(pointer p)\r
47 {\r
48   if (token_ref_count(p) == 0)\r
49     flush_list(p);\r
50   else\r
51     decr(token_ref_count(p));\r
52 }\r
53 /* sec 0201 */\r
54 void delete_glue_ref_(pointer p)\r
55 {\r
56   if (glue_ref_count(p) == 0)\r
57     free_node(p, glue_spec_size);\r
58   else\r
59     decr(glue_ref_count(p));\r
60 }\r
61 /* sec 0202 */\r
62 void flush_node_list_(pointer p)\r
63 {\r
64   pointer q;\r
65 \r
66   while (is_char_node(p))\r
67   {\r
68     q = link(p);\r
69 \r
70     if (is_char_node(p))\r
71       free_avail(p);\r
72     else\r
73     {\r
74       switch (type(p))\r
75       {\r
76         case hlist_node:\r
77         case vlist_node:\r
78         case unset_node:\r
79           {\r
80             flush_node_list(list_ptr(p));\r
81             free_node(p, box_node_size);\r
82             goto done;\r
83           }\r
84           break;\r
85         case rule_node:\r
86           {\r
87             free_node(p, rule_node_size);\r
88             goto done;\r
89           }\r
90           break;\r
91         case ins_node:\r
92           {\r
93             flush_node_list(ins_ptr(p));\r
94             delete_glue_ref(split_top_ptr(p));\r
95             free_node(p, ins_node_size);\r
96             goto done;\r
97           }\r
98           break;\r
99         case whatsit_node:\r
100           {\r
101             switch (subtype(p))\r
102             {\r
103               case open_node:\r
104                 free_node(p, open_node_size);\r
105                 break;\r
106               case write_node:\r
107               case special_node:\r
108                 {\r
109                   delete_token_ref(write_tokens(p));\r
110                   free_node(p, write_node_size);\r
111                   goto done;\r
112                 }\r
113                 break;\r
114               case close_node:\r
115               case set_language_code:\r
116                 free_node(p, small_node_size);\r
117                 break;\r
118               default:\r
119                 {\r
120                   confusion("ext3");\r
121                   return;\r
122                 }\r
123                 break;\r
124             }\r
125             goto done;\r
126           }\r
127           break;\r
128         case glue_node:\r
129           delete_glue_ref(p);\r
130 \r
131           if (leader_ptr(p) != 0)\r
132             flush_node_list(leader_ptr(p));\r
133           break;\r
134         case kern_node:\r
135         case math_node:\r
136         case penalty_node:\r
137           break;\r
138         case ligature_node:\r
139           flush_node_list(lig_ptr(p));\r
140           break;\r
141         case mark_node:\r
142           delete_token_ref(mark_ptr(p));\r
143           break;\r
144         case disc_node:\r
145           flush_node_list(pre_break(p));\r
146           flush_node_list(post_break(p));\r
147           break;\r
148         case adjust_node:\r
149           flush_node_list(adjust_ptr(p));\r
150           break;\r
151         case style_node:\r
152           {\r
153             free_node(p, style_node_size);\r
154             goto done;\r
155           }\r
156           break;\r
157         case choice_node:\r
158           {\r
159             flush_node_list(display_mlist(p));\r
160             flush_node_list(text_mlist(p));\r
161             flush_node_list(script_mlist(p));\r
162             flush_node_list(script_script_mlist(p));\r
163             free_node(p, style_node_size);\r
164             goto done;\r
165           }\r
166           break;\r
167         case ord_noad:\r
168         case op_noad:\r
169         case bin_noad:\r
170         case rel_noad:\r
171         case open_noad:\r
172         case close_noad:\r
173         case punct_noad:\r
174         case inner_noad:\r
175         case radical_noad:\r
176         case over_noad:\r
177         case under_noad:\r
178         case vcenter_noad:\r
179         case accent_noad:\r
180           {\r
181             if (math_type(nucleus(p)) >= sub_box)\r
182               flush_node_list(info(nucleus(p)));\r
183 \r
184             if (math_type(supscr(p)) >= sub_box)\r
185               flush_node_list(info(supscr(p)));\r
186 \r
187             if (math_type(subscr(p)) >= sub_box)\r
188               flush_node_list(info(subscr(p)));\r
189 \r
190             if (type(p) == radical_noad)\r
191               free_node(p, radical_noad_size);\r
192             else\r
193             {\r
194               if (type(p) == accent_noad)\r
195                 free_node(p, accent_noad_size);\r
196               else\r
197                 free_node(p, noad_size);\r
198             }\r
199 \r
200             goto done;\r
201           }\r
202           break;\r
203         case left_noad:\r
204         case right_noad:\r
205           {\r
206             free_node(p, noad_size);\r
207             goto done;\r
208           }\r
209           break;\r
210         case fraction_noad:\r
211           {\r
212             flush_node_list(info(numerator(p)));\r
213             flush_node_list(info(denominator(p)));\r
214             free_node(p, fraction_noad_size);\r
215             goto done;\r
216           }\r
217           break;\r
218         default:\r
219           {\r
220             confusion("flushing");\r
221             return;\r
222           }\r
223           break;\r
224       }\r
225 \r
226       free_node(p, small_node_size);\r
227 done:;\r
228     }\r
229 \r
230     p = q;\r
231   }\r
232 }\r
233 /* sec 0204 */\r
234 pointer copy_node_list_(pointer p)\r
235 {\r
236   pointer h;\r
237   pointer q;\r
238   pointer r;\r
239   char words;\r
240 \r
241   h = get_avail();\r
242   q = h;\r
243 \r
244   while (p != 0)\r
245   {\r
246     words = 1;\r
247 \r
248     if (is_char_node(p)) \r
249       r = get_avail();\r
250     else switch (type(p))\r
251     {\r
252       case hlist_node:\r
253       case vlist_node:\r
254       case unset_node:\r
255         {\r
256           r = get_node(box_node_size);\r
257           mem[r + 6] = mem[p + 6];\r
258           mem[r + 5] = mem[p + 5];\r
259           list_ptr(r) = copy_node_list(list_ptr(p));\r
260           words = 5;\r
261         }\r
262         break;\r
263       case rule_node:\r
264         {\r
265           r = get_node(rule_node_size);\r
266           words = rule_node_size;\r
267         }\r
268         break;\r
269       case ins_node:\r
270         {\r
271           r = get_node(ins_node_size);\r
272           mem[r + 4] = mem[p + 4];\r
273           add_glue_ref(split_top_ptr(p));\r
274           ins_ptr(r) = copy_node_list(ins_ptr(p));\r
275           words = ins_node_size - 1;\r
276         }\r
277         break;\r
278       case whatsit_node:\r
279         switch (subtype(p))\r
280         {\r
281           case open_node:\r
282             {\r
283               r = get_node(open_node_size);\r
284               words = open_node_size;\r
285             }\r
286             break;\r
287 \r
288           case write_node:\r
289           case special_node:\r
290             {\r
291               r = get_node(write_node_size);\r
292               add_token_ref(write_tokens(p));\r
293               words = write_node_size;\r
294             }\r
295             break;\r
296 \r
297           case close_node:\r
298           case language_node:\r
299             {\r
300               r = get_node(small_node_size);\r
301               words = small_node_size;\r
302             }\r
303             break;\r
304 \r
305           default:\r
306             {\r
307               confusion("ext2");\r
308               return 0;\r
309             }\r
310             break;\r
311         }\r
312         break;\r
313 \r
314       case glue_node:\r
315         {\r
316           r = get_node(small_node_size);\r
317           add_glue_ref(glue_ptr(p));\r
318           glue_ptr(r) = glue_ptr(p);\r
319           leader_ptr(r) = copy_node_list(leader_ptr(p));\r
320         }\r
321         break;\r
322 \r
323       case kern_node:\r
324       case math_node:\r
325       case penalty_node:\r
326         {\r
327           r = get_node(small_node_size);\r
328           words = small_node_size;\r
329         }\r
330         break;\r
331 \r
332       case ligature_node:\r
333         {\r
334           r = get_node(small_node_size);\r
335           mem[lig_char(r)] = mem[lig_char(p)];\r
336           lig_ptr(r) = copy_node_list(lig_ptr(p));\r
337         }\r
338         break;\r
339 \r
340       case disc_node:\r
341         {\r
342           r = get_node(small_node_size);\r
343           pre_break(r) = copy_node_list(pre_break(p));\r
344           post_break(r) = copy_node_list(pre_break(p));\r
345         }\r
346         break;\r
347 \r
348       case mark_node:\r
349         {\r
350           r = get_node(small_node_size);\r
351           add_token_ref(mark_ptr(p));\r
352           words = small_node_size;\r
353         }\r
354         break;\r
355 \r
356       case adjust_node:\r
357         {\r
358           r = get_node(small_node_size);\r
359           adjust_ptr(r) = copy_node_list(adjust_ptr(p));\r
360         }\r
361         break;\r
362 \r
363       default:\r
364         {\r
365           confusion("copying");\r
366           return 0;\r
367         }\r
368         break;\r
369     }\r
370 \r
371     while (words > 0)\r
372     {\r
373       decr(words);\r
374       mem[r + words] = mem[p + words];\r
375     }\r
376 \r
377     link(q) = r;\r
378     q = r;\r
379     p = link(p);\r
380   }\r
381 \r
382   link(q) = 0;\r
383   q = link(h);\r
384   free_avail(h);\r
385 \r
386   return q;\r
387 }\r
388 /* sec 0211 */\r
389 void print_mode_(integer m)\r
390\r
391   if (m > 0)\r
392   {\r
393     switch (m / (max_command + 1))\r
394     {\r
395       case 0:\r
396         prints("vertical");\r
397         break;\r
398       case 1:\r
399         prints("horizontal");\r
400         break;\r
401       case 2:\r
402         prints("display math");\r
403         break;\r
404     }\r
405   }\r
406   else\r
407   {\r
408     if (m == 0)\r
409       prints("no");\r
410     else\r
411     {\r
412       switch ((- (integer) m) / (max_command + 1))\r
413       {\r
414         case 0:\r
415           prints("internal vertical");\r
416           break;\r
417         case 1:\r
418           prints("restricted horizontal");\r
419           break;\r
420         case 2:\r
421           prints("math");\r
422           break;\r
423       }\r
424     }\r
425   }\r
426 \r
427   prints(" mode");\r
428 }\r
429 /* sec 0216 */\r
430 void push_nest (void) \r
431 {\r
432   if (nest_ptr > max_nest_stack)\r
433   {\r
434     max_nest_stack = nest_ptr;\r
435 \r
436 #ifdef ALLOCATEINPUTSTACK\r
437     if (nest_ptr == current_nest_size)\r
438       nest = realloc_nest_stack(increment_nest_size);\r
439 \r
440     if (nest_ptr == current_nest_size)\r
441     {\r
442       overflow("semantic nest size", current_nest_size);\r
443       return;\r
444     }\r
445 #else\r
446     if (nest_ptr == nest_size)\r
447     {\r
448       overflow("semantic nest size", nest_size);\r
449       return;\r
450     }\r
451 #endif\r
452   }\r
453 \r
454   nest[nest_ptr]= cur_list;\r
455   incr(nest_ptr);\r
456   head = get_avail();\r
457   tail = head;\r
458   prev_graf = 0;\r
459   mode_line = line;\r
460 }\r
461 /* sec 0217 */\r
462 void pop_nest (void) \r
463 {\r
464   free_avail(head);\r
465   decr(nest_ptr);\r
466   cur_list = nest[nest_ptr];\r
467 }\r
468 /* sec 0218 */\r
469 void show_activities (void)\r
470 {\r
471   integer p;\r
472   short m;\r
473   memory_word a;\r
474   halfword q, r;\r
475   integer t;\r
476 \r
477   nest[nest_ptr] = cur_list;\r
478   print_nl("");\r
479   print_ln();\r
480 \r
481   for (p = nest_ptr; p >= 0; p--)\r
482   {\r
483     m = nest[p].mode_field;\r
484     a = nest[p].aux_field;\r
485     print_nl("### ");\r
486     print_mode(m);\r
487     prints(" entered at line ");\r
488     print_int(abs(nest[p].ml_field));\r
489 \r
490     if (m == hmode)\r
491     {\r
492       if (nest[p].pg_field != 040600000)\r
493       {\r
494         prints(" (language");\r
495         print_int(nest[p].pg_field % 65536L);\r
496         prints(":hyphenmin");\r
497         print_int(nest[p].pg_field / 4194304L);\r
498         print_char(',');\r
499         print_int((nest[p].pg_field / 65536L) % 64);\r
500         print_char(')');\r
501       }\r
502     }\r
503 \r
504     if (nest[p].ml_field < 0)\r
505       prints(" (\\output routine)");\r
506 \r
507     if (p == 0)\r
508     {\r
509       if (page_head != page_tail)\r
510       {\r
511         print_nl("### current page:");\r
512         \r
513         if (output_active)\r
514           prints(" (held over for next output)");\r
515 \r
516         show_box(link(page_head));\r
517 \r
518         if (page_contents > 0)\r
519         {\r
520           print_nl("total height ");\r
521           print_totals();\r
522           print_nl(" goal height ");\r
523           print_scaled(page_so_far[0]);\r
524           r = link(page_ins_head);\r
525           \r
526           while (r != mem_top)\r
527           {\r
528             print_ln();\r
529             print_esc("insert");\r
530             t = subtype(r);\r
531             print_int(t);\r
532             prints(" adds ");\r
533 \r
534             if (count(t) == 1000)\r
535               t = height(r);\r
536             else\r
537               t = x_over_n(height(r), 1000) * count(t);\r
538 \r
539             print_scaled(t);\r
540 \r
541             if (type(r) == split_up)\r
542             {\r
543               q = page_head;\r
544               t = 0;\r
545 \r
546               do\r
547                 {\r
548                   q = link(q);\r
549 \r
550                   if ((type(q) == ins_node) && (subtype(q) == subtype(r)))\r
551                     incr(t);\r
552                 }\r
553               while (!(q == broken_ins(r)));\r
554 \r
555               prints(", #");\r
556               print_int(t);\r
557               prints(" might split");\r
558             }\r
559             r = link(r);\r
560           }\r
561         }\r
562       }\r
563 \r
564       if (link(contrib_head) != 0)\r
565         print_nl("### recent contributions:");\r
566     }\r
567 \r
568     show_box(link(nest[p].head_field));\r
569 \r
570     switch (abs(m) / (max_command + 1))\r
571     {\r
572       case 0:\r
573         {\r
574           print_nl("prevdepth ");\r
575 \r
576           if  (a.cint <= ignore_depth)\r
577             prints("ignored");\r
578           else\r
579             print_scaled(a.cint);\r
580 \r
581           if (nest[p].pg_field != 0)\r
582           {\r
583             prints(", prevgraf ");\r
584             print_int(nest[p].pg_field);\r
585             prints(" line");\r
586 \r
587             if (nest[p].pg_field != 1)\r
588               print_char('s');\r
589           }\r
590         }\r
591         break;\r
592 \r
593       case 1:\r
594         {\r
595           print_nl("spacefactor ");\r
596           print_int(a.hh.lh);\r
597 \r
598           if (m > 0)\r
599           {\r
600             if (a.hh.rh > 0)\r
601             {\r
602               prints(", current language ");\r
603               print_int(a.hh.rh);\r
604             }\r
605           }\r
606         }\r
607         break;\r
608 \r
609       case 2:\r
610         if (a.cint != 0)\r
611         {\r
612           prints("this will be denominator of:");\r
613           show_box(a.cint);\r
614         }\r
615         break;\r
616     }\r
617   }\r
618 }\r
619 /* sec 0237 */\r
620 void print_param_(integer n)\r
621 {\r
622   switch (n)\r
623   {\r
624     case pretolerance_code:\r
625       print_esc("pretolerance");\r
626       break;\r
627 \r
628     case tolerance_code:\r
629       print_esc("tolerance");\r
630       break;\r
631 \r
632     case line_penalty_code:\r
633       print_esc("linepenalty");\r
634       break;\r
635 \r
636     case hyphen_penalty_code:\r
637       print_esc("hyphenpenalty");\r
638       break;\r
639 \r
640     case ex_hyphen_penalty_code:\r
641       print_esc("exhyphenpenalty");\r
642       break;\r
643 \r
644     case club_penalty_code:\r
645       print_esc("clubpenalty");\r
646       break;\r
647 \r
648     case widow_penalty_code:\r
649       print_esc("widowpenalty");\r
650       break;\r
651 \r
652     case display_widow_penalty_code:\r
653       print_esc("displaywidowpenalty");\r
654       break;\r
655 \r
656     case broken_penalty_code:\r
657       print_esc("brokenpenalty");\r
658       break;\r
659 \r
660     case bin_op_penalty_code:\r
661       print_esc("binoppenalty");\r
662       break;\r
663 \r
664     case rel_penalty_code:\r
665       print_esc("relpenalty");\r
666       break;\r
667 \r
668     case pre_display_penalty_code:\r
669       print_esc("predisplaypenalty");\r
670       break;\r
671 \r
672     case post_display_penalty_code:\r
673       print_esc("postdisplaypenalty");\r
674       break;\r
675 \r
676     case inter_line_penalty_code:\r
677       print_esc("interlinepenalty");\r
678       break;\r
679 \r
680     case double_hyphen_demerits_code:\r
681       print_esc("doublehyphendemerits");\r
682       break;\r
683 \r
684     case final_hyphen_demerits_code:\r
685       print_esc("finalhyphendemerits");\r
686       break;\r
687 \r
688     case adj_demerits_code:\r
689       print_esc("adjdemerits");\r
690       break;\r
691 \r
692     case mag_code:\r
693       print_esc("mag");\r
694       break;\r
695 \r
696     case delimiter_factor_code:\r
697       print_esc("delimiterfactor");\r
698       break;\r
699 \r
700     case looseness_code:\r
701       print_esc("looseness");\r
702       break;\r
703 \r
704     case time_code:\r
705       print_esc("time");\r
706       break;\r
707 \r
708     case day_code:\r
709       print_esc("day");\r
710       break;\r
711 \r
712     case month_code:\r
713       print_esc("month");\r
714       break;\r
715 \r
716     case year_code:\r
717       print_esc("year");\r
718       break;\r
719 \r
720     case show_box_breadth_code:\r
721       print_esc("showboxbreadth");\r
722       break;\r
723 \r
724     case show_box_depth_code:\r
725       print_esc("showboxdepth");\r
726       break;\r
727 \r
728     case hbadness_code:\r
729       print_esc("hbadness");\r
730       break;\r
731 \r
732     case vbadness_code:\r
733       print_esc("vbadness");\r
734       break;\r
735 \r
736     case pausing_code:\r
737       print_esc("pausing");\r
738       break;\r
739 \r
740     case tracing_online_code:\r
741       print_esc("tracingonline");\r
742       break;\r
743 \r
744     case tracing_macros_code:\r
745       print_esc("tracingmacros");\r
746       break;\r
747 \r
748     case tracing_stats_code:\r
749       print_esc("tracingstats");\r
750       break;\r
751 \r
752     case tracing_paragraphs_code:\r
753       print_esc("tracingparagraphs");\r
754       break;\r
755 \r
756     case tracing_pages_code:\r
757       print_esc("tracingpages");\r
758       break;\r
759 \r
760     case tracing_output_code:\r
761       print_esc("tracingoutput");\r
762       break;\r
763 \r
764     case tracing_lost_chars_code:\r
765       print_esc("tracinglostchars");\r
766       break;\r
767 \r
768     case tracing_commands_code:\r
769       print_esc("tracingcommands");\r
770       break;\r
771 \r
772     case tracing_restores_code:\r
773       print_esc("tracingrestores");\r
774       break;\r
775 \r
776     case uc_hyph_code:\r
777       print_esc("uchyph");\r
778       break;\r
779 \r
780     case output_penalty_code:\r
781       print_esc("outputpenalty");\r
782       break;\r
783 \r
784     case max_dead_cycles_code:\r
785       print_esc("maxdeadcycles");\r
786       break;\r
787 \r
788     case hang_after_code:\r
789       print_esc("hangafter");\r
790       break;\r
791 \r
792     case floating_penalty_code:\r
793       print_esc("floatingpenalty");\r
794       break;\r
795 \r
796     case global_defs_code:\r
797       print_esc("globaldefs");\r
798       break;\r
799 \r
800     case cur_fam_code:\r
801       print_esc("fam");\r
802       break;\r
803 \r
804     case escape_char_code:\r
805       print_esc("escapechar");\r
806       break;\r
807 \r
808     case default_hyphen_char_code:\r
809       print_esc("defaulthyphenchar");\r
810       break;\r
811 \r
812     case default_skew_char_code:\r
813       print_esc("defaultskewchar");\r
814       break;\r
815 \r
816     case end_line_char_code:\r
817       print_esc("endlinechar");\r
818       break;\r
819 \r
820     case new_line_char_code:\r
821       print_esc("newlinechar");\r
822       break;\r
823 \r
824     case language_code:\r
825       print_esc("language");\r
826       break;\r
827 \r
828     case left_hyphen_min_code:\r
829       print_esc("lefthyphenmin");\r
830       break;\r
831 \r
832     case right_hyphen_min_code:\r
833       print_esc("righthyphenmin");\r
834       break;\r
835 \r
836     case holding_inserts_code:\r
837       print_esc("holdinginserts");\r
838       break;\r
839 \r
840     case error_context_lines_code:\r
841       print_esc("errorcontextlines");\r
842       break;\r
843 \r
844     default:\r
845       prints("[unknown integer parameter!]");\r
846       break;\r
847   }\r
848 }\r
849 /* sec 0245 */\r
850 void begin_diagnostic (void)\r
851 {\r
852   old_setting = selector;\r
853 \r
854   if ((tracing_online <= 0) && (selector == term_and_log))\r
855   {\r
856     decr(selector);\r
857 \r
858     if (history == spotless)\r
859       history = warning_issued;\r
860   }\r
861 }\r
862 /* sec 0245 */\r
863 void end_diagnostic(boolean blank_line)\r
864 {\r
865   print_nl("");\r
866 \r
867   if (blank_line)\r
868     print_ln();\r
869 \r
870   selector = old_setting;\r
871 }\r
872 /* sec 0247 */\r
873 void print_length_param_ (integer n)\r
874 {\r
875   switch (n)\r
876   {\r
877     case par_indent_code:\r
878       print_esc("parindent");\r
879       break;\r
880 \r
881     case math_surround_code:\r
882       print_esc("mathsurround");\r
883       break;\r
884 \r
885     case line_skip_limit_code:\r
886       print_esc("lineskiplimit");\r
887       break;\r
888 \r
889     case hsize_code:\r
890       print_esc("hsize");\r
891       break;\r
892 \r
893     case vsize_code:\r
894       print_esc("vsize");\r
895       break;\r
896 \r
897     case max_depth_code:\r
898       print_esc("maxdepth");\r
899       break;\r
900 \r
901     case split_max_depth_code:\r
902       print_esc("splitmaxdepth");\r
903       break;\r
904 \r
905     case box_max_depth_code:\r
906       print_esc("boxmaxdepth");\r
907       break;\r
908 \r
909     case hfuzz_code:\r
910       print_esc("hfuzz");\r
911       break;\r
912 \r
913     case vfuzz_code:\r
914       print_esc("vfuzz");\r
915       break;\r
916 \r
917     case delimiter_shortfall_code:\r
918       print_esc("delimitershortfall");\r
919       break;\r
920 \r
921     case null_delimiter_space_code:\r
922       print_esc("nulldelimiterspace");\r
923       break;\r
924 \r
925     case script_space_code:\r
926       print_esc("scriptspace");\r
927       break;\r
928 \r
929     case pre_display_size_code:\r
930       print_esc("predisplaysize");\r
931       break;\r
932 \r
933     case display_width_code:\r
934       print_esc("displaywidth");\r
935       break;\r
936 \r
937     case display_indent_code:\r
938       print_esc("displayindent");\r
939       break;\r
940 \r
941     case overfull_rule_code:\r
942       print_esc("overfullrule");\r
943       break;\r
944 \r
945     case hang_indent_code:\r
946       print_esc("hangindent");\r
947       break;\r
948 \r
949     case h_offset_code:\r
950       print_esc("hoffset");\r
951       break;\r
952 \r
953     case v_offset_code:\r
954       print_esc("voffset");\r
955       break;\r
956 \r
957     case emergency_stretch_code:\r
958       print_esc("emergencystretch");\r
959       break;\r
960 \r
961     default:\r
962       prints("[unknown dimen parameter!]");\r
963       break;\r
964   }\r
965 }\r
966 /* sec 0298 */\r
967 void print_cmd_chr_ (quarterword cmd, halfword chr_code)\r
968 {\r
969   switch (cmd)\r
970   {\r
971     case left_brace:\r
972       chr_cmd("begin-group character ");\r
973       break;\r
974 \r
975     case right_brace:\r
976       chr_cmd("end-group character ");\r
977       break;\r
978 \r
979     case math_shift:\r
980       chr_cmd("math shift character ");\r
981       break;\r
982 \r
983     case mac_param:\r
984       chr_cmd("macro parameter character ");\r
985       break;\r
986 \r
987     case sup_mark:\r
988       chr_cmd("superscript character ");\r
989       break;\r
990 \r
991     case sub_mark:\r
992       chr_cmd("subscript character ");\r
993       break;\r
994 \r
995     case endv:\r
996       chr_cmd("end of alignment template");\r
997       break;\r
998 \r
999     case spacer:\r
1000       chr_cmd("blank space ");\r
1001       break;\r
1002 \r
1003     case letter:\r
1004       chr_cmd("the letter ");\r
1005       break;\r
1006 \r
1007     case other_char:\r
1008       chr_cmd("the character ");\r
1009       break;\r
1010 \r
1011     case assign_glue:\r
1012     case assign_mu_glue:\r
1013       if (chr_code < skip_base)\r
1014         print_skip_param(chr_code - glue_base);\r
1015       else if (chr_code < mu_skip_base)\r
1016       {\r
1017         print_esc("skip");\r
1018         print_int(chr_code - skip_base);\r
1019       }\r
1020       else\r
1021       {\r
1022         print_esc("muskip");\r
1023         print_int(chr_code - mu_skip_base);\r
1024       }\r
1025       break;\r
1026 \r
1027     case assign_toks:\r
1028       if (chr_code >= toks_base)\r
1029       {\r
1030         print_esc("toks");\r
1031         print_int(chr_code - toks_base);\r
1032       }\r
1033       else\r
1034       {\r
1035         switch (chr_code)\r
1036         {\r
1037           case output_routine_loc:\r
1038             print_esc("output");\r
1039             break;\r
1040 \r
1041           case every_par_loc:\r
1042             print_esc("everypar");\r
1043             break;\r
1044 \r
1045           case every_math_loc:\r
1046             print_esc("everymath");\r
1047             break;\r
1048 \r
1049           case every_display_loc:\r
1050             print_esc("everydisplay");\r
1051             break;\r
1052 \r
1053           case every_hbox_loc:\r
1054             print_esc("everyhbox");\r
1055             break;\r
1056 \r
1057           case every_vbox_loc:\r
1058             print_esc("everyvbox");\r
1059             break;\r
1060 \r
1061           case every_job_loc:\r
1062             print_esc("everyjob");\r
1063             break;\r
1064 \r
1065           case every_cr_loc:\r
1066             print_esc("everycr");\r
1067             break;\r
1068 \r
1069           default:\r
1070             print_esc("errhelp");\r
1071             break;\r
1072         }\r
1073       }\r
1074       break;\r
1075 \r
1076     case assign_int:\r
1077       if (chr_code < count_base)\r
1078         print_param(chr_code - int_base);\r
1079       else\r
1080       {\r
1081         print_esc("count");\r
1082         print_int(chr_code - count_base);\r
1083       }\r
1084       break;\r
1085 \r
1086     case assign_dimen:\r
1087       if (chr_code < scaled_base)\r
1088         print_length_param(chr_code - dimen_base);\r
1089       else\r
1090       {\r
1091         print_esc("dimen");\r
1092         print_int(chr_code - scaled_base);\r
1093       }\r
1094       break;\r
1095 \r
1096     case accent:\r
1097       print_esc("accent");\r
1098       break;\r
1099 \r
1100     case advance:\r
1101       print_esc("advance");\r
1102       break;\r
1103 \r
1104     case after_assignment:\r
1105       print_esc("afterassignment");\r
1106       break;\r
1107 \r
1108     case after_group:\r
1109       print_esc("aftergroup");\r
1110       break;\r
1111 \r
1112     case assign_font_dimen:\r
1113       print_esc("fontdimen");\r
1114       break;\r
1115 \r
1116     case begin_group:\r
1117       print_esc("begingroup");\r
1118       break;\r
1119 \r
1120     case break_penalty:\r
1121       print_esc("penalty");\r
1122       break;\r
1123 \r
1124     case char_num:\r
1125       print_esc("char");\r
1126       break;\r
1127 \r
1128     case cs_name:\r
1129       print_esc("csname");\r
1130       break;\r
1131 \r
1132     case def_font:\r
1133       print_esc("font");\r
1134       break;\r
1135 \r
1136     case delim_num:\r
1137       print_esc("delimiter");\r
1138       break;\r
1139 \r
1140     case divide:\r
1141       print_esc("divide");\r
1142       break;\r
1143 \r
1144     case end_cs_name:\r
1145       print_esc("endcsname");\r
1146       break;\r
1147 \r
1148     case end_group:\r
1149       print_esc("endgroup");\r
1150       break;\r
1151 \r
1152     case ex_space:\r
1153       print_esc(" ");\r
1154       break;\r
1155 \r
1156     case expand_after:\r
1157       print_esc("expandafter");\r
1158       break;\r
1159 \r
1160     case halign:\r
1161       print_esc("halign");\r
1162       break;\r
1163 \r
1164     case hrule:\r
1165       print_esc("hrule");\r
1166       break;\r
1167 \r
1168     case ignore_spaces:\r
1169       print_esc("ignorespaces");\r
1170       break;\r
1171 \r
1172     case insert:\r
1173       print_esc("insert");\r
1174       break;\r
1175 \r
1176     case ital_corr:\r
1177       print_esc("/");\r
1178       break;\r
1179 \r
1180     case mark:\r
1181       print_esc("mark");\r
1182       break;\r
1183 \r
1184     case math_accent:\r
1185       print_esc("mathaccent");\r
1186       break;\r
1187 \r
1188     case math_char_num:\r
1189       print_esc("mathchar");\r
1190       break;\r
1191 \r
1192     case math_choice:\r
1193       print_esc("mathchoice");\r
1194       break;\r
1195 \r
1196     case multiply:\r
1197       print_esc("multiply");\r
1198       break;\r
1199 \r
1200     case no_align:\r
1201       print_esc("noalign");\r
1202       break;\r
1203 \r
1204     case no_boundary:\r
1205       print_esc("noboundary");\r
1206       break;\r
1207 \r
1208     case no_expand:\r
1209       print_esc("noexpand");\r
1210       break;\r
1211 \r
1212     case non_script:\r
1213       print_esc("nonscript");\r
1214       break;\r
1215 \r
1216     case omit:\r
1217       print_esc("omit");\r
1218       break;\r
1219 \r
1220     case radical:\r
1221       print_esc("radical");\r
1222       break;\r
1223 \r
1224     case read_to_cs:\r
1225       print_esc("read");\r
1226       break;\r
1227 \r
1228     case relax:\r
1229       print_esc("relax");\r
1230       break;\r
1231 \r
1232     case set_box:\r
1233       print_esc("setbox");\r
1234       break;\r
1235 \r
1236     case set_prev_graf:\r
1237       print_esc("prevgraf");\r
1238       break;\r
1239 \r
1240     case set_shape:\r
1241       print_esc("parshape");\r
1242       break;\r
1243 \r
1244     case the:\r
1245       print_esc("the");\r
1246       break;\r
1247 \r
1248     case toks_register:\r
1249       print_esc("toks");\r
1250       break;\r
1251 \r
1252     case vadjust:\r
1253       print_esc("vadjust");\r
1254       break;\r
1255 \r
1256     case valign:\r
1257       print_esc("valign");\r
1258       break;\r
1259 \r
1260     case vcenter:\r
1261       print_esc("vcenter");\r
1262       break;\r
1263 \r
1264     case vrule:\r
1265       print_esc("vrule");\r
1266       break;\r
1267 \r
1268     case par_end:\r
1269       print_esc("par");\r
1270       break;\r
1271 \r
1272     case input:\r
1273       if (chr_code == 0)\r
1274         print_esc("input");\r
1275       else\r
1276         print_esc("endinput");\r
1277       break;\r
1278 \r
1279     case top_bot_mark:\r
1280       switch (chr_code)\r
1281       {\r
1282         case first_mark_code:\r
1283           print_esc("firstmark");\r
1284           break;\r
1285 \r
1286         case bot_mark_code:\r
1287           print_esc("botmark");\r
1288           break;\r
1289 \r
1290         case split_first_mark_code:\r
1291           print_esc("splitfirstmark");\r
1292           break;\r
1293 \r
1294         case split_bot_mark_code:\r
1295           print_esc("splitbotmark");\r
1296           break;\r
1297 \r
1298         default:\r
1299           print_esc("topmark");\r
1300           break;\r
1301       }\r
1302       break;\r
1303 \r
1304     case tex_register:\r
1305       if (chr_code == int_val)\r
1306         print_esc("count");\r
1307       else if (chr_code == dimen_val)\r
1308         print_esc("dimen");\r
1309       else if (chr_code == glue_val)\r
1310         print_esc("skip");\r
1311       else\r
1312         print_esc("muskip");\r
1313       break;\r
1314 \r
1315     case set_aux:\r
1316       if (chr_code == vmode)\r
1317         print_esc("prevdepth");\r
1318       else\r
1319         print_esc("spacefactor");\r
1320       break;\r
1321 \r
1322     case set_page_int:\r
1323       if (chr_code == 0)\r
1324         print_esc("deadcycles");\r
1325       else\r
1326         print_esc("insertpenalties");\r
1327       break;\r
1328 \r
1329     case set_box_dimen:\r
1330       if (chr_code == width_offset)\r
1331         print_esc("wd");\r
1332       else if (chr_code == height_offset)\r
1333         print_esc("ht");\r
1334       else\r
1335         print_esc("dp");\r
1336       break;\r
1337 \r
1338     case last_item:\r
1339       switch (chr_code)\r
1340       {\r
1341         case int_val:\r
1342           print_esc("lastpenalty");\r
1343           break;\r
1344 \r
1345         case dimen_val:\r
1346           print_esc("lastkern");\r
1347           break;\r
1348 \r
1349         case glue_val:\r
1350           print_esc("lastskip");\r
1351           break;\r
1352 \r
1353         case input_line_no_code:\r
1354           print_esc("inputlineno");\r
1355           break;\r
1356 \r
1357         default:\r
1358           print_esc("badness");\r
1359           break;\r
1360       }\r
1361       break;\r
1362 \r
1363     case convert:\r
1364       switch (chr_code)\r
1365       {\r
1366         case number_code:\r
1367           print_esc("number");\r
1368           break;\r
1369 \r
1370         case roman_numeral_code:\r
1371           print_esc("romannumeral");\r
1372           break;\r
1373 \r
1374         case string_code:\r
1375           print_esc("string");\r
1376           break;\r
1377 \r
1378         case meaning_code:\r
1379           print_esc("meaning");\r
1380           break;\r
1381 \r
1382         case font_name_code:\r
1383           print_esc("fontname");\r
1384           break;\r
1385 \r
1386         default:\r
1387           print_esc("jobname");\r
1388           break;\r
1389       }\r
1390       break;\r
1391 \r
1392     case if_test:\r
1393       switch (chr_code)\r
1394       {\r
1395         case if_cat_code:\r
1396           print_esc("ifcat");\r
1397           break;\r
1398 \r
1399         case if_int_code:\r
1400           print_esc("ifnum");\r
1401           break;\r
1402 \r
1403         case if_dim_code:\r
1404           print_esc("ifdim");\r
1405           break;\r
1406 \r
1407         case if_odd_code:\r
1408           print_esc("ifodd");\r
1409           break;\r
1410 \r
1411         case if_vmode_code:\r
1412           print_esc("ifvmode");\r
1413           break;\r
1414 \r
1415         case if_hmode_code:\r
1416           print_esc("ifhmode");\r
1417           break;\r
1418 \r
1419         case if_mmode_code:\r
1420           print_esc("ifmmode");\r
1421           break;\r
1422 \r
1423         case if_inner_code:\r
1424           print_esc("ifinner");\r
1425           break;\r
1426 \r
1427         case if_void_code:\r
1428           print_esc("ifvoid");\r
1429           break;\r
1430 \r
1431         case if_hbox_code:\r
1432           print_esc("ifhbox");\r
1433           break;\r
1434 \r
1435         case if_vbox_code:\r
1436           print_esc("ifvbox");\r
1437           break;\r
1438 \r
1439         case ifx_code:\r
1440           print_esc("ifx");\r
1441           break;\r
1442 \r
1443         case if_eof_code:\r
1444           print_esc("ifeof");\r
1445           break;\r
1446 \r
1447         case if_true_code:\r
1448           print_esc("iftrue");\r
1449           break;\r
1450 \r
1451         case if_false_code:\r
1452           print_esc("iffalse");\r
1453           break;\r
1454 \r
1455         case if_case_code:\r
1456           print_esc("ifcase");\r
1457           break;\r
1458 \r
1459         default:\r
1460           print_esc("if");\r
1461           break;\r
1462       }\r
1463       break;\r
1464 \r
1465     case fi_or_else:\r
1466       if (chr_code == fi_code)\r
1467         print_esc("fi");\r
1468       else if (chr_code == or_code)\r
1469         print_esc("or");\r
1470       else\r
1471         print_esc("else");\r
1472       break;\r
1473 \r
1474     case tab_mark:\r
1475       if (chr_code == span_code)\r
1476         print_esc("span");\r
1477       else\r
1478       {\r
1479         prints("alignment tab character ");\r
1480         print(chr_code);\r
1481       }\r
1482       break;\r
1483 \r
1484     case car_ret:\r
1485       if (chr_code == cr_code)\r
1486         print_esc("cr");\r
1487       else\r
1488         print_esc("crcr");\r
1489       break;\r
1490 \r
1491     case set_page_dimen:\r
1492       switch (chr_code)\r
1493       {\r
1494         case 0:\r
1495           print_esc("pagegoal");\r
1496           break;\r
1497 \r
1498         case 1:\r
1499           print_esc("pagetotal");\r
1500           break;\r
1501 \r
1502         case 2:\r
1503           print_esc("pagestretch");\r
1504           break;\r
1505 \r
1506         case 3:\r
1507           print_esc("pagefilstretch");\r
1508           break;\r
1509 \r
1510         case 4:\r
1511           print_esc("pagefillstretch");\r
1512           break;\r
1513 \r
1514         case 5:\r
1515           print_esc("pagefilllstretch");\r
1516           break;\r
1517 \r
1518         case 6:\r
1519           print_esc("pageshrink");\r
1520           break;\r
1521 \r
1522         default:\r
1523           print_esc("pagedepth");\r
1524           break;\r
1525       }\r
1526       break;\r
1527 \r
1528     case stop:\r
1529       if (chr_code == 1)\r
1530         print_esc("dump");\r
1531       else\r
1532         print_esc("end");\r
1533       break;\r
1534 \r
1535     case hskip:\r
1536       switch (chr_code)\r
1537       {\r
1538         case skip_code:\r
1539           print_esc("hskip");\r
1540           break;\r
1541 \r
1542         case fil_code:\r
1543           print_esc("hfil");\r
1544           break;\r
1545 \r
1546         case fill_code:\r
1547           print_esc("hfill");\r
1548           break;\r
1549 \r
1550         case ss_code:\r
1551           print_esc("hss");\r
1552           break;\r
1553 \r
1554         default:\r
1555           print_esc("hfilneg");\r
1556           break;\r
1557       }\r
1558       break;\r
1559 \r
1560     case vskip:\r
1561       switch (chr_code)\r
1562       {\r
1563         case skip_code:\r
1564           print_esc("vskip");\r
1565           break;\r
1566 \r
1567         case fil_code:\r
1568           print_esc("vfil");\r
1569           break;\r
1570 \r
1571         case fill_code:\r
1572           print_esc("vfill");\r
1573           break;\r
1574 \r
1575         case ss_code:\r
1576           print_esc("vss");\r
1577           break;\r
1578 \r
1579         default:\r
1580           print_esc("vfilneg");\r
1581           break;\r
1582       }\r
1583       break;\r
1584 \r
1585     case mskip:\r
1586       print_esc("mskip");\r
1587       break;\r
1588 \r
1589     case kern:\r
1590       print_esc("kern");\r
1591       break;\r
1592 \r
1593     case mkern:\r
1594       print_esc("mkern");\r
1595       break;\r
1596 \r
1597     case hmove:\r
1598       if (chr_code == 1)\r
1599         print_esc("moveleft");\r
1600       else\r
1601         print_esc("moveright");\r
1602       break;\r
1603 \r
1604     case vmove:\r
1605       if (chr_code == 1)\r
1606         print_esc("raise");\r
1607       else\r
1608         print_esc("lower");\r
1609       break;\r
1610 \r
1611     case make_box:\r
1612       switch (chr_code)\r
1613       {\r
1614         case box_code:\r
1615           print_esc("box");\r
1616           break;\r
1617 \r
1618         case copy_code:\r
1619           print_esc("copy");\r
1620           break;\r
1621 \r
1622         case last_box_code:\r
1623           print_esc("lastbox");\r
1624           break;\r
1625 \r
1626         case vsplit_code:\r
1627           print_esc("vsplit");\r
1628           break;\r
1629 \r
1630         case vtop_code:\r
1631           print_esc("vtop");\r
1632           break;\r
1633 \r
1634         case vtop_code + vmode:\r
1635           print_esc("vbox");\r
1636           break;\r
1637 \r
1638         default:\r
1639           print_esc("hbox");\r
1640           break;\r
1641       }\r
1642       break;\r
1643 \r
1644     case leader_ship:\r
1645       if (chr_code == a_leaders)\r
1646         print_esc("leaders");\r
1647       else if (chr_code == c_leaders)\r
1648         print_esc("cleaders");\r
1649       else if (chr_code == x_leaders)\r
1650         print_esc("xleaders");\r
1651       else\r
1652         print_esc("shipout");\r
1653       break;\r
1654 \r
1655     case start_par:\r
1656       if (chr_code == 0)\r
1657         print_esc("noindent");\r
1658       else\r
1659         print_esc("indent");\r
1660       break;\r
1661 \r
1662     case remove_item:\r
1663       if (chr_code == glue_node)\r
1664         print_esc("unskip");\r
1665       else if (chr_code == kern_node)\r
1666         print_esc("unkern");\r
1667       else\r
1668         print_esc("unpenalty");\r
1669       break;\r
1670 \r
1671     case un_hbox:\r
1672       if (chr_code == copy_code)\r
1673         print_esc("unhcopy");\r
1674       else\r
1675         print_esc("unhbox");\r
1676       break;\r
1677 \r
1678     case un_vbox:\r
1679       if (chr_code == copy_code)\r
1680         print_esc("unvcopy");\r
1681       else\r
1682         print_esc("unvbox");\r
1683       break;\r
1684 \r
1685     case discretionary:\r
1686       if (chr_code == 1)\r
1687         print_esc("-");\r
1688       else\r
1689         print_esc("discretionary");\r
1690       break;\r
1691 \r
1692     case eq_no:\r
1693       if (chr_code == 1)\r
1694         print_esc("leqno");\r
1695       else\r
1696         print_esc("eqno");\r
1697       break;\r
1698 \r
1699     case math_comp:\r
1700       switch (chr_code)\r
1701       {\r
1702         case ord_noad:\r
1703           print_esc("mathord");\r
1704           break;\r
1705 \r
1706         case op_noad:\r
1707           print_esc("mathop");\r
1708           break;\r
1709 \r
1710         case bin_noad:\r
1711           print_esc("mathbin");\r
1712           break;\r
1713 \r
1714         case rel_noad:\r
1715           print_esc("mathrel");\r
1716           break;\r
1717 \r
1718         case open_noad:\r
1719           print_esc("mathopen");\r
1720           break;\r
1721 \r
1722         case close_noad:\r
1723           print_esc("mathclose");\r
1724           break;\r
1725 \r
1726         case punct_noad:\r
1727           print_esc("mathpunct");\r
1728           break;\r
1729 \r
1730         case inner_noad:\r
1731           print_esc("mathinner");\r
1732           break;\r
1733 \r
1734         case under_noad:\r
1735           print_esc("underline");\r
1736           break;\r
1737 \r
1738         default:\r
1739           print_esc("overline");\r
1740           break;\r
1741       }\r
1742       break;\r
1743 \r
1744     case limit_switch:\r
1745       if (chr_code == limits)\r
1746         print_esc("limits");\r
1747       else if (chr_code == no_limits)\r
1748         print_esc("nolimits");\r
1749       else\r
1750         print_esc("displaylimits");\r
1751       break;\r
1752 \r
1753     case math_style:\r
1754       print_style(chr_code);\r
1755       break;\r
1756 \r
1757     case above:\r
1758       switch (chr_code)\r
1759       {\r
1760         case over_code:\r
1761           print_esc("over");\r
1762           break;\r
1763 \r
1764         case atop_code:\r
1765           print_esc("atop");\r
1766           break;\r
1767 \r
1768         case delimited_code + above_code:\r
1769           print_esc("abovewithdelims");\r
1770           break;\r
1771 \r
1772         case delimited_code + over_code:\r
1773           print_esc("overwithdelims");\r
1774           break;\r
1775 \r
1776         case delimited_code + atop_code:\r
1777           print_esc("atopwithdelims");\r
1778           break;\r
1779 \r
1780         default:\r
1781           print_esc("above");\r
1782           break;\r
1783       }\r
1784       break;\r
1785 \r
1786     case left_right:\r
1787       if (chr_code == left_noad)\r
1788         print_esc("left");\r
1789       else\r
1790         print_esc("right");\r
1791       break;\r
1792 \r
1793     case prefix:\r
1794       if (chr_code == 1)\r
1795         print_esc("long");\r
1796       else if (chr_code == 2)\r
1797         print_esc("outer");\r
1798       else\r
1799         print_esc("global");\r
1800       break;\r
1801 \r
1802     case def:\r
1803       if (chr_code == 0)\r
1804         print_esc("def");\r
1805       else if (chr_code == 1)\r
1806         print_esc("gdef");\r
1807       else if (chr_code == 2)\r
1808         print_esc("edef");\r
1809       else\r
1810         print_esc("xdef");\r
1811       break;\r
1812 \r
1813     case let:\r
1814       if (chr_code != normal)\r
1815         print_esc("futurelet");\r
1816       else\r
1817         print_esc("let");\r
1818       break;\r
1819 \r
1820     case shorthand_def:\r
1821       switch (chr_code)\r
1822       {\r
1823         case char_def_code:\r
1824           print_esc("chardef");\r
1825           break;\r
1826 \r
1827         case math_char_def_code:\r
1828           print_esc("mathchardef");\r
1829           break;\r
1830 \r
1831         case count_def_code:\r
1832           print_esc("countdef");\r
1833           break;\r
1834 \r
1835         case dimen_def_code:\r
1836           print_esc("dimendef");\r
1837           break;\r
1838 \r
1839         case skip_def_code:\r
1840           print_esc("skipdef");\r
1841           break;\r
1842 \r
1843         case mu_skip_def_code:\r
1844           print_esc("muskipdef");\r
1845           break;\r
1846 \r
1847         default:\r
1848           print_esc("toksdef");\r
1849           break;\r
1850       }\r
1851       break;\r
1852 \r
1853     case char_given:\r
1854       print_esc("char");\r
1855       print_hex(chr_code);\r
1856       break;\r
1857 \r
1858     case math_given:\r
1859       print_esc("mathchar");\r
1860       print_hex(chr_code);\r
1861       break;\r
1862 \r
1863     case def_code:\r
1864       if (chr_code == cat_code_base)\r
1865         print_esc("catcode");\r
1866       else if (chr_code == math_code_base)\r
1867         print_esc("mathcode");\r
1868       else if (chr_code == lc_code_base)\r
1869         print_esc("lccode");\r
1870       else if (chr_code == uc_code_base)\r
1871         print_esc("uccode");\r
1872       else if (chr_code == sf_code_base)\r
1873         print_esc("sfcode");\r
1874       else\r
1875         print_esc("delcode");\r
1876       break;\r
1877 \r
1878     case def_family:\r
1879       print_size(chr_code - math_font_base);\r
1880       break; \r
1881 \r
1882     case hyph_data:\r
1883       if (chr_code == 1)\r
1884         print_esc("patterns");\r
1885       else\r
1886         print_esc("hyphenation");\r
1887       break;\r
1888 \r
1889     case assign_font_int:\r
1890       if (chr_code == 0)\r
1891         print_esc("hyphenchar");\r
1892       else\r
1893         print_esc("skewchar");\r
1894       break;\r
1895 \r
1896     case set_font:\r
1897       prints("select font ");\r
1898       slow_print(font_name[chr_code]);\r
1899 \r
1900       if (font_size[chr_code] != font_dsize[chr_code])\r
1901       {\r
1902         prints(" at ");\r
1903         print_scaled(font_size[chr_code]);\r
1904         prints("pt");\r
1905       }\r
1906       break;\r
1907 \r
1908     case set_interaction:\r
1909       switch (chr_code)\r
1910       {\r
1911         case batch_mode:\r
1912           print_esc("batchmode");\r
1913           break;\r
1914 \r
1915         case nonstop_mode:\r
1916           print_esc("nonstopmode");\r
1917           break;\r
1918 \r
1919         case scroll_mode:\r
1920           print_esc("scrollmode");\r
1921           break;\r
1922 \r
1923         default:\r
1924           print_esc("errorstopmode");\r
1925           break;\r
1926       }\r
1927       break;\r
1928 \r
1929     case in_stream:\r
1930       if (chr_code == 0)\r
1931         print_esc("closein");\r
1932       else\r
1933         print_esc("openin");\r
1934       break;\r
1935 \r
1936     case message:\r
1937       if (chr_code == 0)\r
1938         print_esc("message");\r
1939       else\r
1940         print_esc("errmessage");\r
1941       break;\r
1942 \r
1943     case case_shift:\r
1944       if (chr_code == lc_code_base)\r
1945         print_esc("lowercase");\r
1946       else\r
1947         print_esc("uppercase");\r
1948       break;\r
1949 \r
1950     case xray:\r
1951       switch (chr_code)\r
1952       {\r
1953         case show_box_code:\r
1954           print_esc("showbox");\r
1955           break;\r
1956 \r
1957         case show_the_code:\r
1958           print_esc("showthe");\r
1959           break;\r
1960 \r
1961         case show_lists:\r
1962           print_esc("showlists");\r
1963           break;\r
1964 \r
1965         default:\r
1966           print_esc("show");\r
1967           break;\r
1968       }\r
1969       break;\r
1970 \r
1971     case undefined_cs:\r
1972       prints("undefined");\r
1973       break;\r
1974 \r
1975     case call:\r
1976       prints("macro");\r
1977       break;\r
1978 \r
1979     case long_call:\r
1980       print_esc("long macro");\r
1981       break;\r
1982 \r
1983     case outer_call:\r
1984       print_esc("outer macro");\r
1985       break;\r
1986 \r
1987     case long_outer_call:\r
1988       print_esc("long");\r
1989       print_esc("outer macro");\r
1990       break;\r
1991 \r
1992     case end_template:\r
1993       print_esc("outer endtemplate");\r
1994       break;\r
1995 \r
1996     case extension:\r
1997       switch (chr_code)\r
1998       {\r
1999         case open_node:\r
2000           print_esc("openout");\r
2001           break;\r
2002 \r
2003         case write_node:\r
2004           print_esc("write");\r
2005           break;\r
2006 \r
2007         case close_node:\r
2008           print_esc("closeout");\r
2009           break;\r
2010 \r
2011         case special_node:\r
2012           print_esc("special");\r
2013           break;\r
2014 \r
2015         case immediate_code:\r
2016           print_esc("immediate");\r
2017           break;\r
2018 \r
2019         case set_language_code:\r
2020           print_esc("setlanguage");\r
2021           break;\r
2022 \r
2023         default:\r
2024           prints("[unknown extension!]");\r
2025           break;\r
2026       }\r
2027       break;\r
2028 \r
2029     default:\r
2030       prints("[unknown command code!]");\r
2031       break;\r
2032   }\r
2033 }\r
2034 #ifdef STAT\r
2035 /* sec 0252 */\r
2036 void show_eqtb (pointer n)\r
2037\r
2038   if (n < active_base)\r
2039     print_char('?');\r
2040   else if (n < glue_base)\r
2041   {\r
2042     sprint_cs(n);\r
2043     print_char('=');\r
2044     print_cmd_chr(eq_type(n), equiv(n));\r
2045     \r
2046     if (eq_type(n) >= call)\r
2047     {\r
2048       print_char(':');\r
2049       show_token_list(link(equiv(n)), 0, 32);\r
2050     }\r
2051   }\r
2052   else if (n < local_base)\r
2053     if (n < skip_base)\r
2054     {\r
2055       print_skip_param(n - glue_base);\r
2056       print_char('=');\r
2057       \r
2058       if (n < glue_base + thin_mu_skip_code)\r
2059         print_spec(equiv(n), "pt");\r
2060       else\r
2061         print_spec(equiv(n), "mu");\r
2062     }\r
2063     else if (n < mu_skip_base)\r
2064     {\r
2065       print_esc("skip");\r
2066       print_int(n - skip_base);\r
2067       print_char('=');\r
2068       print_spec(equiv(n), "pt");\r
2069     }\r
2070     else\r
2071     {\r
2072       print_esc("muskip");\r
2073       print_int(n - mu_skip_base);\r
2074       print_char('=');\r
2075       print_spec(equiv(n), "mu");\r
2076     }\r
2077   else if (n < int_base)\r
2078     if (n == par_shape_loc)\r
2079     {\r
2080       print_esc("parshape");\r
2081       print_char('=');\r
2082       \r
2083       if (par_shape_ptr == 0)\r
2084         print_char('0');\r
2085       else\r
2086         print_int(info(par_shape_ptr));\r
2087     }\r
2088     else if (n < toks_base)\r
2089     {\r
2090       print_cmd_chr(assign_toks, n);\r
2091       print_char('=');\r
2092       \r
2093       if (equiv(n) != 0)\r
2094         show_token_list(link(equiv(n)), 0, 32);\r
2095     }\r
2096     else if (n < box_base)\r
2097     {\r
2098       print_esc("toks");\r
2099       print_int(n - toks_base);\r
2100       print_char('=');\r
2101       \r
2102       if (equiv(n) != 0)\r
2103         show_token_list(link(equiv(n)), 0, 32);\r
2104     }\r
2105     else if (n < cur_font_loc)\r
2106     {\r
2107       print_esc("box");\r
2108       print_int(n - box_base);\r
2109       print_char('=');\r
2110       \r
2111       if (equiv(n) == 0)\r
2112         prints("void");\r
2113       else\r
2114       {\r
2115         depth_threshold = 0;\r
2116         breadth_max = 1;\r
2117         show_node_list(equiv(n));\r
2118       }\r
2119     }\r
2120     else if (n < cat_code_base)\r
2121     {\r
2122       if (n == cur_font_loc)\r
2123         prints("current font");\r
2124       else if (n < math_font_base + 16)\r
2125       {\r
2126         print_esc("textfont");\r
2127         print_int(n - math_font_base);\r
2128       }\r
2129       else if (n < math_font_base + 32)\r
2130       {\r
2131         print_esc("scriptfont");\r
2132         print_int(n - math_font_base - 16);\r
2133       }\r
2134       else\r
2135       {\r
2136         print_esc("scriptscriptfont");\r
2137         print_int(n - math_font_base - 32);\r
2138       }\r
2139       \r
2140       print_char('=');\r
2141       print_esc("");\r
2142       print(hash[font_id_base + equiv(n)].rh);\r
2143     }\r
2144     else if (n < math_code_base)\r
2145     {\r
2146       if (n < lc_code_base)\r
2147       {\r
2148         print_esc("catcode");\r
2149         print_int(n - cat_code_base);\r
2150       }\r
2151       else if (n < uc_code_base)\r
2152       {\r
2153         print_esc("lccode");\r
2154         print_int(n - lc_code_base);\r
2155       }\r
2156       else if (n < sf_code_base)\r
2157       {\r
2158         print_esc("uccode");\r
2159         print_int(n - uc_code_base);\r
2160       }\r
2161       else\r
2162       {\r
2163         print_esc("sfcode");\r
2164         print_int(n - sf_code_base);\r
2165       }\r
2166       \r
2167       print_char('=');\r
2168       print_int(equiv(n));\r
2169     }\r
2170     else\r
2171     {\r
2172       print_esc("mathcode");\r
2173       print_int(n - math_code_base);\r
2174       print_char('=');\r
2175       print_int(equiv(n));\r
2176     }\r
2177   else if (n < dimen_base)\r
2178   {\r
2179     if (n < count_base)\r
2180       print_param(n - int_base);\r
2181     else if (n < del_code_base)\r
2182     {\r
2183       print_esc("count");\r
2184       print_int(n - count_base);\r
2185     }\r
2186     else\r
2187     {\r
2188       print_esc("delcode");\r
2189       print_int(n - del_code_base);\r
2190     }\r
2191     \r
2192     print_char('=');\r
2193     print_int(eqtb[n].cint);\r
2194   }\r
2195   else if (n <= eqtb_size)\r
2196   {\r
2197     if (n < scaled_base)\r
2198       print_length_param(n - dimen_base);\r
2199     else\r
2200     {\r
2201       print_esc("dimen");\r
2202       print_int(n - scaled_base);\r
2203     }\r
2204     \r
2205     print_char('=');\r
2206     print_scaled(eqtb[n].cint);\r
2207     prints("pt");\r
2208   }\r
2209   else\r
2210     print_char('?');\r
2211 }\r
2212 #endif\r
2213 /* sec 0259 */\r
2214 pointer id_lookup_(integer j, integer l)\r
2215 {\r
2216   integer h;\r
2217   integer d;\r
2218   pointer p;\r
2219   pointer k;\r
2220 \r
2221   h = buffer[j];\r
2222 \r
2223   for (k = j + 1; k <= j + l - 1; k++)\r
2224   {\r
2225     h = h + h + buffer[k];\r
2226 \r
2227     while (h >= hash_prime)\r
2228       h = h - hash_prime;\r
2229   }\r
2230 \r
2231   p = h + hash_base;\r
2232 \r
2233   while (true)\r
2234   {\r
2235     if (text(p) > 0)\r
2236       if (length(text(p)) == l)\r
2237         if (str_eq_buf(text(p), j))\r
2238           goto found;\r
2239 \r
2240     if (next(p) == 0)\r
2241     {\r
2242       if (no_new_control_sequence)\r
2243         p = undefined_control_sequence;\r
2244       else\r
2245       {\r
2246         if (text(p) > 0)\r
2247         {\r
2248           do\r
2249             {\r
2250               if (hash_is_full)\r
2251               {\r
2252                 overflow("hash size", hash_size + hash_extra);\r
2253                 /* not dynamic        ^~~~~~~~~~~~~~~~~~~~~~*/\r
2254                 return 0;\r
2255               }\r
2256 \r
2257               decr(hash_used);\r
2258             }\r
2259           while (!(text(hash_used) == 0));\r
2260 \r
2261           next(p) = hash_used;\r
2262           p = hash_used;\r
2263         }\r
2264 \r
2265         str_room(l);\r
2266         d = cur_length;\r
2267 \r
2268         while (pool_ptr > str_start[str_ptr])\r
2269         {\r
2270           decr(pool_ptr);\r
2271           str_pool[pool_ptr + l] = str_pool[pool_ptr];\r
2272         }\r
2273 \r
2274         for (k = j; k <= j + l - 1; k++)\r
2275           append_char(buffer[k]);\r
2276 \r
2277         text(p) = make_string();\r
2278         pool_ptr = pool_ptr + d;\r
2279 \r
2280 #ifdef STAT\r
2281         incr(cs_count);\r
2282 \r
2283         if (trace_flag)\r
2284         {\r
2285           str_pool[pool_ptr] = '\0';\r
2286           printf(" tex1.c incr(cs_count): '%s' ", &str_pool[pool_ptr - l - d]);\r
2287         }\r
2288 #endif\r
2289       }\r
2290 \r
2291       goto found;\r
2292     }\r
2293 \r
2294     p = next(p);\r
2295   } \r
2296 \r
2297 found:\r
2298   return p;\r
2299 }\r
2300 /* sec 0274 */\r
2301 void new_save_level (group_code c)\r
2302 {\r
2303   check_full_save_stack();\r
2304   save_type(save_ptr) = level_boundary;\r
2305   save_level(save_ptr) = (quarterword) cur_group; \r
2306   save_index(save_ptr) = cur_boundary;\r
2307 \r
2308   if (cur_level == max_quarterword)\r
2309   {\r
2310     overflow("grouping levels", max_quarterword - min_quarterword);\r
2311     return;\r
2312   }\r
2313 \r
2314   cur_boundary = save_ptr;\r
2315   incr(cur_level);\r
2316   incr(save_ptr);\r
2317   cur_group = c;\r
2318 }\r
2319 /* sec 0275 */\r
2320 void eq_destroy (memory_word w)\r
2321 {\r
2322   pointer q;\r
2323 \r
2324   switch (eq_type_field(w))\r
2325   {\r
2326     case call:\r
2327     case long_call:\r
2328     case outer_call:\r
2329     case long_outer_call:\r
2330       delete_token_ref(equiv_field(w));\r
2331       break;\r
2332 \r
2333     case glue_ref:\r
2334       delete_glue_ref(equiv_field(w));\r
2335       break;\r
2336 \r
2337     case shape_ref:\r
2338       q = equiv_field(w);\r
2339 \r
2340       if (q != 0)\r
2341         free_node(q, info(q) + info(q) + 1);\r
2342       break;\r
2343 \r
2344     case box_ref:\r
2345       flush_node_list(equiv_field(w));\r
2346       break;\r
2347 \r
2348     default:\r
2349       break;\r
2350   }\r
2351 }\r
2352 /* sec 0276 */\r
2353 void eq_save (pointer p, quarterword l)\r
2354 {\r
2355   check_full_save_stack();\r
2356 \r
2357   if (l == level_zero)\r
2358     save_type(save_ptr) = restore_zero;\r
2359   else\r
2360   {\r
2361     save_stack[save_ptr] = eqtb[p];\r
2362     incr(save_ptr);\r
2363     save_type(save_ptr) = restore_old_value;\r
2364   }\r
2365 \r
2366   save_level(save_ptr) = l;\r
2367   save_index(save_ptr) = p;\r
2368   incr(save_ptr);\r
2369 }\r
2370 /* sec 0277 */\r
2371 void eq_define_(pointer p, quarterword t, halfword e)\r
2372 {\r
2373   if (eq_level(p) == cur_level)\r
2374     eq_destroy(eqtb[p]);\r
2375   else if (cur_level > level_one)\r
2376     eq_save(p, eq_level(p));\r
2377 \r
2378   eq_level(p) = (quarterword) cur_level;\r
2379   eq_type(p) = t;\r
2380   equiv(p) = e;\r
2381 }\r
2382 /* sec 0278 */\r
2383 void eq_word_define_(pointer p, integer w)\r
2384 {\r
2385   if (xeq_level[p] != cur_level)\r
2386   {\r
2387     eq_save(p, xeq_level[p]);\r
2388     xeq_level[p] = (quarterword) cur_level;\r
2389   }\r
2390 \r
2391   eqtb[p].cint = w;\r
2392 }\r
2393 /* sec 0279 */\r
2394 void geq_define_(pointer p, quarterword t, halfword e)\r
2395 {\r
2396   eq_destroy(eqtb[p]);\r
2397   eq_level(p) = level_one;\r
2398   eq_type(p) = t;\r
2399   equiv(p) = e;\r
2400 }\r
2401 /* sec 0279 */\r
2402 void geq_word_define_(pointer p, integer w)\r
2403 {\r
2404   eqtb[p].cint = w;\r
2405   xeq_level[p]= level_one;\r
2406 }\r
2407 /* sec 0280 */\r
2408 void save_for_after (halfword t)\r
2409\r
2410   if (cur_level > level_one)\r
2411   {\r
2412     check_full_save_stack();\r
2413     save_type(save_ptr) = insert_token;\r
2414     save_level(save_ptr) = level_zero;\r
2415     save_index(save_ptr) = t;\r
2416     incr(save_ptr);\r
2417   }\r
2418 }