OSDN Git Service

updated wake_up_terminal().
[putex/putex.git] / src / texsourc / tex8.c
index 259fa70..58405e9 100644 (file)
-#ifdef _WINDOWS
-  #define NOCOMM
-  #define NOSOUND
-  #define NODRIVERS
-  #define STRICT
-  #pragma warning(disable:4115) // kill rpcasync.h complaint
-  #include <windows.h>
-  #define MYLIBAPI __declspec(dllexport)
-#endif
-
-#include "texwin.h"
-
-#pragma warning(disable:4996)
-#pragma warning(disable:4131) // old style declarator
-#pragma warning(disable:4135) // conversion between different integral types 
-#pragma warning(disable:4127) // conditional expression is constant
-
-#include <setjmp.h>
-
-#define EXTERN extern
-
-#include "texd.h"
-
-#pragma warning(disable:4244)       /* 96/Jan/10 */
-
-/* *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** */
-
-/* math_fraction etc used to be in tex7.c */
-/* sec 1181 */
-void math_fraction (void) 
-{
-  small_number c; 
-  c = cur_chr; 
-  if (cur_list.aux_field.cint != 0)
-  {
-    if (c >= 3)
-    {
-      scan_delimiter(lig_trick, false); 
-      scan_delimiter(lig_trick, false); 
-    } 
-    if (c % 3 == 0)
-      scan_dimen(false, false, false);
-    print_err("Ambiguous; you need another { and }");
-    help3("I'm ignoring this fraction specification, since I don't",
-      "know whether a construction like `x \\over y \\over z'",
-      "means `{x \\over y} \\over z' or `x \\over {y \\over z}'.");
-    error();
-  } else {
-    cur_list.aux_field.cint = get_node(6);
-    mem[cur_list.aux_field.cint].hh.b0 = 25;
-    mem[cur_list.aux_field.cint].hh.b1 = 0;
-    mem[cur_list.aux_field.cint + 2].hh.v.RH = 3;
-    mem[cur_list.aux_field.cint + 2].hh.v.LH = mem[head].hh.v.RH;
-    mem[cur_list.aux_field.cint + 3].hh = empty_field;
-    mem[cur_list.aux_field.cint + 4].qqqq = null_delimiter;
-    mem[cur_list.aux_field.cint + 5].qqqq = null_delimiter;
-    mem[head].hh.v.RH = 0;
-    tail = head;
-    if (c >= 3) {
-      scan_delimiter(cur_list.aux_field.cint + 4, false);
-      scan_delimiter(cur_list.aux_field.cint + 5, false);
-    }
-    switch(c % 3)
-    {
-    case 0:
-      {
-        scan_dimen(false, false, false);
-        mem[cur_list.aux_field.cint + 1].cint = cur_val;
-      }
-      break;
-    case 1:
-      mem[cur_list.aux_field.cint + 1].cint = 1073741824L;  /* 2^30 */
-      break;
-    case 2:
-      mem[cur_list.aux_field.cint + 1].cint = 0;
-      break;
-    }
-  }
-}
-/* sec 1191 */
-void math_left_right (void) 
-{ 
-  small_number t; 
-  halfword p; 
-  t = cur_chr; 
-  if ((t == 31) && (cur_group != 16)) {
-    if (cur_group == 15) {
-      scan_delimiter(lig_trick, false);
-      print_err("Extra ");
-      print_esc("right");
-      help1("I'm ignoring a \\right that had no matching \\left.");
-      error();
-    } else {
-      off_save();
-    }
-  } else {
-    p = new_noad();
-    mem[p].hh.b0 = t;
-    scan_delimiter(p + 1, false);
-    if (t == 30) {
-      push_math(16);
-      mem[head].hh.v.RH = p;
-      tail = p;
-    } else {
-      p = fin_mlist(p);
-      unsave();
-      {
-        mem[tail].hh.v.RH = new_noad();
-        tail = mem[tail].hh.v.RH;
-      }
-      mem[tail].hh.b0 = 23;
-      mem[tail + 1].hh.v.RH = 3;
-      mem[tail + 1].hh.v.LH = p;
-    }
-  }
-}
-/* sec 1194 */
-void after_math (void) 
-{ 
-  bool l; 
-  bool danger; 
-  integer m; 
-  halfword p; 
-  halfword a; 
-  halfword b; 
-  scaled w; 
-  scaled z; 
-  scaled e; 
-  scaled q; 
-  scaled d; 
-  scaled s; 
-  small_number g1, g2; 
-  halfword r; 
-  halfword t; 
-  danger = false; 
-  if ((font_params[eqtb[(hash_size + 1837)].hh.v.RH]< 22)||
-    (font_params[eqtb[(hash_size + 1853)].hh.v.RH]< 22)||
-    (font_params[eqtb[(hash_size + 1869)].hh.v.RH]< 22)) 
-  {
-         print_err("Math formula deleted: Insufficient symbol fonts");
-         help3("Sorry, but I can't typeset math unless \\textfont Sorry, but I can't typeset math unless \\textfont 2",
-                 "and \\scriptfont 2 and \\scriptscriptfont 2 have and \\scriptfont 2 and \\scriptscriptfont 2 have all",
-                 "the \\fontdimen values needed in math symbol the \\fontdimen values needed in math symbol fonts.."); 
-    error(); 
-    flush_math(); 
-    danger = true; 
-  } 
-  else if ((font_params[eqtb[(hash_size + 1838)].hh.v.RH]< 13)||
-      (font_params[eqtb[(hash_size + 1854)].hh.v.RH]< 13)||
-      (font_params[eqtb[(hash_size + 1870)].hh.v.RH]< 13)) 
-  {
-         print_err("Math formula deleted: Insufficient extension fonts");
-         help3("Sorry, but I can't typeset math unless \\textfont 3",
-                 "and \\scriptfont 3 and \\scriptscriptfont 3 have all",
-                 "the \\fontdimen values needed in math extension fonts.");
-    error(); 
-    flush_math(); 
-    danger = true; 
-  } 
-  m = mode; 
-  l = false; 
-  p = fin_mlist(0); 
-  if (mode == - (integer) m)
-  {
-    {
-      get_x_token(); 
-      if (cur_cmd != 3)
-      {
-                 print_err("Display math should end with $$");
-                 help2("The `$' that I just saw supposedly matches a previous `$$'.",
-                         "So I shall assume that you typed `$$' both times.");
-  back_error(); 
-      } 
-    } 
-    cur_mlist = p; 
-    cur_style = 2; 
-    mlist_penalties = false; 
-    mlist_to_hlist(); 
-    a = hpack(mem[temp_head].hh.v.RH, 0, 1); 
-    unsave(); 
-    decr(save_ptr); 
-    if (save_stack[save_ptr + 0].cint == 1)
-    l = true; 
-    danger = false; 
-    if ((font_params[eqtb[(hash_size + 1837)].hh.v.RH]< 22)||
-    (font_params[eqtb[(hash_size + 1853)].hh.v.RH]< 22)||
-    (font_params[eqtb[(hash_size + 1869)].hh.v.RH]< 22)) 
-    {
-               print_err("Math formula deleted: Insufficient symbol fonts");
-               help3("Sorry, but I can't typeset math unless \\textfont 2",
-                       "and \\scriptfont 2 and \\scriptscriptfont 2 have all",
-                       "the \\fontdimen values needed in math symbol fonts.");
-      error(); 
-      flush_math(); 
-      danger = true; 
-    } 
-    else if ((font_params[eqtb[(hash_size + 1838)].hh.v.RH]< 13)||
-       (font_params[eqtb[(hash_size + 1854)].hh.v.RH]< 13)|| 
-       (font_params[eqtb[(hash_size + 1870)].hh.v.RH]< 13)) 
-    {
-               print_err("Math formula deleted: Insufficient extension fonts");
-               help3("Sorry, but I can't typeset math unless \\textfont 3",
-                       "and \\scriptfont 3 and \\scriptscriptfont 3 have all",
-                       "the \\fontdimen values needed in math extension fonts.");
-      error(); 
-      flush_math(); 
-      danger = true; 
-    } 
-    m = mode; 
-    p = fin_mlist(0); 
-  } 
-  else a = 0; 
-  if (m < 0)
-  {
-    {
-      mem[tail].hh.v.RH = new_math(math_surround, 0); 
-      tail = mem[tail].hh.v.RH; 
-    } 
-    cur_mlist = p; 
-    cur_style = 2; 
-    mlist_penalties =(mode > 0); 
-    mlist_to_hlist(); 
-    mem[tail].hh.v.RH = mem[temp_head].hh.v.RH; 
-    while(mem[tail].hh.v.RH != 0)tail = 
-    mem[tail].hh.v.RH; 
-    {
-      mem[tail].hh.v.RH = new_math(math_surround, 1); 
-      tail = mem[tail].hh.v.RH; 
-    } 
-    space_factor = 1000; 
-    unsave(); 
-  } 
-  else {
-      
-    if (a == 0)
-    {
-      get_x_token(); 
-      if (cur_cmd != 3) {
-                 print_err("Display math should end with $$");
-                 help2("The `$' that I just saw supposedly matches a previous `$$'.",
-                         "So I shall assume that you typed `$$' both times.");
-  back_error(); 
-      } 
-    } 
-    cur_mlist = p; 
-    cur_style = 0; 
-    mlist_penalties = false; 
-    mlist_to_hlist(); 
-    p = mem[temp_head].hh.v.RH; 
-    adjust_tail = adjust_head; 
-    b = hpack(p, 0, 1); 
-    p = mem[b + 5].hh.v.RH; 
-    t = adjust_tail; 
-    adjust_tail = 0; 
-    w = mem[b + 1].cint; 
-    z = display_width; 
-    s = display_indent; 
-    if ((a == 0)|| danger)
-    {
-      e = 0; 
-      q = 0; 
-    } 
-    else {
-  
-      e = mem[a + 1].cint; 
-      q = e + font_info[6 + param_base[eqtb[(hash_size + 1837)].hh.v.RH]].cint; 
-    } 
-    if (w + q > z)
-    {
-      if ((e != 0)&&((w - total_shrink[0]+ q <= z)||(total_shrink 
-     [1]!= 0)||(total_shrink[2]!= 0)||(total_shrink[3]!= 0)
-    )) 
-      {
-  free_node(b, 7); 
-  b = hpack(p, z - q, 0); 
-      } 
-      else {
-    
-  e = 0; 
-  if (w > z)
-  {
-    free_node(b, 7); 
-    b = hpack(p, z, 0); 
-  } 
-      } 
-      w = mem[b + 1].cint; 
-    } 
-    d = half(z - w); 
-    if ((e > 0)&&(d < 2 * e)) 
-    {
-      d = half(z - w - e); 
-      if (p != 0)
-      if (!(p >= hi_mem_min)) 
-      if (mem[p].hh.b0 == 10)
-      d = 0; 
-    } 
-    {
-      mem[tail].hh.v.RH = new_penalty(pre_display_penalty); 
-      tail = mem[tail].hh.v.RH; 
-    } 
-    if ((d + s <= pre_display_size)|| l)
-    {
-      g1 = 3; 
-      g2 = 4; 
-    } 
-    else {
-  
-      g1 = 5; 
-      g2 = 6; 
-    } 
-    if (l &&(e == 0)) 
-    {
-      mem[a + 4].cint = s; 
-      append_to_vlist(a); 
-      {
-  mem[tail].hh.v.RH = new_penalty(10000); 
-  tail = mem[tail].hh.v.RH; 
-      } 
-    } 
-    else {
-  
-      mem[tail].hh.v.RH = new_param_glue(g1); 
-      tail = mem[tail].hh.v.RH; 
-    } 
-    if (e != 0)
-    {
-      r = new_kern(z - w - e - d); 
-      if (l)
-      {
-  mem[a].hh.v.RH = r; 
-  mem[r].hh.v.RH = b; 
-  b = a; 
-  d = 0; 
-      } 
-      else {
-    
-  mem[b].hh.v.RH = r; 
-  mem[r].hh.v.RH = a; 
-      } 
-      b = hpack(b, 0, 1); 
-    } 
-    mem[b + 4].cint = s + d; 
-    append_to_vlist(b); 
-    if ((a != 0)&&(e == 0)&& ! l)
-    {
-      {
-  mem[tail].hh.v.RH = new_penalty(10000); 
-  tail = mem[tail].hh.v.RH; 
-      } 
-      mem[a + 4].cint = s + z - mem[a + 1].cint; 
-      append_to_vlist(a); 
-      g2 = 0; 
-    } 
-    if (t != adjust_head)
-    {
-      mem[tail].hh.v.RH = mem[adjust_head].hh.v.RH; 
-      tail = t; 
-    } 
-    {
-      mem[tail].hh.v.RH = new_penalty(post_display_penalty); 
-      tail = mem[tail].hh.v.RH; 
-    } 
-    if (g2 > 0)
-    {
-      mem[tail].hh.v.RH = new_param_glue(g2); 
-      tail = mem[tail].hh.v.RH; 
-    } 
-    resume_after_display(); 
-  } 
-}
-/* sec 1200 */
-void resume_after_display (void) 
-{
-  if (cur_group != 15) {
-    confusion("display");
-    return;       // abort_flag set
-  }
-  unsave();
-  prev_graf = prev_graf + 3;
-  push_nest();
-  mode = 102;
-  space_factor = 1000;
-/* *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** */
-/* was   clang = 0; etc in 3.141 new stuff follows */
-  if (language <= 0)
-    cur_lang = 0; 
-  else if (language > 255)
-    cur_lang = 0;
-  else cur_lang = language;
-  clang = cur_lang;
-  prev_graf =(norm_min(left_hyphen_min) * 64 +
-     norm_min(right_hyphen_min)) * 65536L + cur_lang; 
-/* eqtb ??? hash_size ? hash_size + hash_extra ? norm_min etc */
-/* *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** */
-  {
-    get_x_token(); 
-    if (cur_cmd != 10) back_input(); 
-  } 
-  if (nest_ptr == 1) {
-    build_page();
-  }
-}
-/* sec 1215 */
-void get_r_token (void) 
-{
-lab20:
-  do {
-    get_token(); 
-  } while (!(cur_tok != 2592));
-/*  if ((cur_cs == 0)||(cur_cs > (hash_size + 514))) */  /* 95/Jan/10 */
-  if ((cur_cs == 0) || (cur_cs > (hash_size + hash_extra + 514))) {
-    print_err("Missing control sequence inserted");
-    help5("Please don't say `\\def cs{...}', say `\\def\\cs{...}'.",
-      "I've inserted an inaccessible control sequence so that your",
-      "definition will be completed without mixing me up too badly.",
-      "You can recover graciously from this error, if you're",
-      "careful; see exercise 27.2 in The TeXbook.");
-    if (cur_cs == 0)
-      back_input(); 
-/*    cur_tok = (hash_size + 4609);  */
-/*    cur_tok = (hash_size + 4095 + 514);  */
-    cur_tok = (hash_size + hash_extra + 4095 + 514); /* 96/Jan/10 */
-    ins_error();
-    goto lab20;
-  }
-}
-/* sec 1229 */
-void trap_zero_glue (void) 
-{
-  if ((mem[cur_val + 1].cint == 0) && (mem[cur_val + 2].cint == 0) &&
-    (mem[cur_val + 3].cint == 0)) {
-    incr(mem[0].hh.v.RH); /* mem[mem_bot]? */ /* mem[null]? */
-    delete_glue_ref(cur_val);
-    cur_val = 0;
-  }
-}
-/* sec 1236 */
-void do_register_command_ (small_number a) 
-{/* 40 10 */ 
-  halfword l, q, r, s; 
-  char p; 
-  q = cur_cmd; 
-  {
-    if (q != 89)
-    {
-      get_x_token(); 
-      if ((cur_cmd >= 73)&&(cur_cmd <= 76)) 
-      {
-  l = cur_chr; 
-  p = cur_cmd - 73; 
-  goto lab40; 
-      } 
-      if (cur_cmd != 89)
-      {
-                 print_err("You can't use `");
-  print_cmd_chr(cur_cmd, cur_chr); 
-  print_string("' after ");
-  print_cmd_chr(q, 0); 
-  help1("I'm forgetting what you said and not changing anything.");
-  error(); 
-  return; 
-      } 
-    } 
-    p = cur_chr; 
-    scan_eight_bit_int(); 
-    switch(p)
-    {case 0 : 
-      l = cur_val + (hash_size + 3218); 
-      break; 
-    case 1 : 
-      l = cur_val + (hash_size + 3751); 
-      break; 
-    case 2 : 
-      l = cur_val + (hash_size + 800); 
-      break; 
-    case 3 : 
-      l = cur_val + (hash_size + 1056); 
-      break; 
-    } 
-  } 
-  lab40:; 
-  if (q == 89)
-  scan_optional_equals(); 
-  else if (scan_keyword("by")); 
-  arith_error = false; 
-  if (q < 91)
-  if (p < 2)
-  {
-    if (p == 0){
-    scan_int();
-  }
-    else {
-    scan_dimen(false, false, false);
-  }
-    if (q == 90)
-    cur_val = cur_val + eqtb[l].cint; 
-  } 
-  else {
-      
-    scan_glue(p); 
-    if (q == 90){
-      q = new_spec(cur_val); 
-      r = eqtb[l].hh.v.RH; 
-      delete_glue_ref(cur_val); 
-      mem[q + 1].cint = mem[q + 1].cint + mem[r + 1].cint; 
-      if (mem[q + 2].cint == 0)
-      mem[q].hh.b0 = 0; 
-      if (mem[q].hh.b0 == mem[r].hh.b0)
-      mem[q + 2].cint = mem[q + 2].cint + mem[r + 2].cint; 
-      else if ((mem[q].hh.b0 < mem[r].hh.b0)&&(mem[r + 2]
-     .cint != 0)) 
-      {
-  mem[q + 2].cint = mem[r + 2].cint; 
-  mem[q].hh.b0 = mem[r].hh.b0; 
-      } 
-      if (mem[q + 3].cint == 0)
-      mem[q].hh.b1 = 0; 
-      if (mem[q].hh.b1 == mem[r].hh.b1)
-      mem[q + 3].cint = mem[q + 3].cint + mem[r + 3].cint; 
-      else if ((mem[q].hh.b1 < mem[r].hh.b1)&&(mem[r + 3]
-     .cint != 0)) 
-      {
-  mem[q + 3].cint = mem[r + 3].cint; 
-  mem[q].hh.b1 = mem[r].hh.b1; 
-      } 
-      cur_val = q; 
-    } 
-  } 
-  else {
-    scan_int(); 
-    if (p < 2)
-    if (q == 91)
-    if (p == 0)
-    cur_val = mult_and_add(eqtb[l].cint, cur_val, 0, 2147483647L); 
-/*  2^31 - 1 */
-    else cur_val = mult_and_add(eqtb[l].cint, cur_val, 0, 1073741823L); 
-/*  2^30 - 1 */
-    else cur_val = x_over_n(eqtb[l].cint, cur_val); 
-    else {
-      s = eqtb[l].hh.v.RH;  /* l may be used ... */
-      r = new_spec(s); 
-      if (q == 91)
-      {
-  mem[r + 1].cint = mult_and_add(mem[s + 1].cint, cur_val, 0, 
-  1073741823L);  /* 2^30 - 1 */
-  mem[r + 2].cint = mult_and_add(mem[s + 2].cint, cur_val, 0, 
-  1073741823L);  /* 2^30 - 1 */
-  mem[r + 3].cint = mult_and_add(mem[s + 3].cint, cur_val, 0, 
-  1073741823L);  /* 2^30 - 1 */
-      } 
-      else {
-  mem[r + 1].cint = x_over_n(mem[s + 1].cint, cur_val); 
-  mem[r + 2].cint = x_over_n(mem[s + 2].cint, cur_val); 
-  mem[r + 3].cint = x_over_n(mem[s + 3].cint, cur_val); 
-      } 
-      cur_val = r; 
-    } 
-  } 
-  if (arith_error){
-         print_err("Arithmetic overflow");
-         help2("I can't carry out that multiplication or division,",
-                 "since the result is out of range.");
-/* 423 in tex82.bug */
-         if (p >= 2) delete_glue_ref(cur_val);
-    error(); 
-    return; 
-  } 
-  if (p < 2)
-  if ((a >= 4)) 
-  geq_word_define(l, cur_val); 
-  else eq_word_define(l, cur_val); 
-  else {
-      
-    trap_zero_glue(); 
-    if ((a >= 4)) 
-    geq_define(l, 117, cur_val); 
-    else eq_define(l, 117, cur_val); 
-  } 
-} 
-/* called only from itex.c */
-/* sec 1243 */
-void alter_aux (void) 
-{
-  halfword c; 
-  if (cur_chr != abs(mode)) {
-    report_illegal_case();
-  }
-  else {
-    c = cur_chr; 
-    scan_optional_equals(); 
-    if (c == 1)
-    {
-      scan_dimen(false, false, false); 
-      cur_list.aux_field.cint = cur_val; 
-    } 
-    else {
-      scan_int(); 
-      if ((cur_val <= 0)||(cur_val > 32767)) 
-      {
-                 print_err("Bad space factor");
-                 help1("I allow only values in the range 1..32767 here.");
-  int_error(cur_val); 
-      } 
-      else space_factor = cur_val; 
-    } 
-  } 
-}
-/* sec 1244 */
-void alter_prev_graf (void) 
-{
-  integer p; 
-  nest[nest_ptr]= cur_list; 
-  p = nest_ptr; 
-  while(abs(nest[p].mode_field)!= 1)decr(p); 
-  scan_optional_equals(); 
-  scan_int(); 
-  if (cur_val < 0)
-  {
-         print_err("Bad ");
-    print_esc("prevgraf");
-       help1("I allow only nonnegative values here.");
-    int_error(cur_val); 
-  } 
-  else {
-      
-    nest[p].pg_field = cur_val; 
-    cur_list = nest[nest_ptr]; 
-  } 
-}
-/* sec 1245 */
-void alter_page_so_far (void) 
-{
-  char c; 
-  c = cur_chr; 
-  scan_optional_equals(); 
-  scan_dimen(false, false, false); 
-  page_so_far[c]= cur_val; 
-}
-/* sec 1246 */
-void alter_integer (void) 
-{
-  char c; 
-  c = cur_chr; 
-  scan_optional_equals(); 
-  scan_int(); 
-  if (c == 0)dead_cycles = cur_val; 
-  else insert_penalties = cur_val; 
-}
-/* sec 1247 */
-void alter_box_dimen (void) 
-{ 
-  small_number c; 
-  eight_bits b; 
-  c = cur_chr; 
-  scan_eight_bit_int(); 
-  b = cur_val; 
-  scan_optional_equals(); 
-  scan_dimen(false, false, false); 
-  if (eqtb[(hash_size + 1578) + b].hh.v.RH != 0)
-  mem[eqtb[(hash_size + 1578) + b].hh.v.RH + c].cint = cur_val; 
-}
-/* sec 1257 */
-void new_font_(small_number a)
-{/* 50 */ 
-  halfword u; 
-  scaled s; 
-  internal_font_number f; 
-  str_number t; 
-  char old_setting; 
-  str_number flushablestring; 
-  if (job_name == 0) open_log_file(); 
-  get_r_token(); 
-  u = cur_cs; 
-  if (u >= hash_base)      /* if u >= hash_base then t <- text(u); p.1257 */
-    t = hash[u].v.RH; 
-  else if (u >= single_base)   /* if u >= single_base then ... */
-/*    if u=null_cs then t:="FONT"@+else t:=u-single_base */
-  if (u == null_cs)
-    t = 1213;     /* FONT */
-  else t = u - single_base;   /* else t <- u - single_base */
-  else {
-    old_setting = selector; 
-    selector = 21; 
-    print_string("FONT");
-    print(u - active_base); 
-    selector = old_setting; 
-    {
-/* *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** */
-#ifdef ALLOCATESTRING
-    if (pool_ptr + 1 > current_pool_size)
-      str_pool = realloc_str_pool (increment_pool_size);
-    if (pool_ptr + 1 > current_pool_size) {     /* 94/Jan/24 */
-      overflow("pool size", current_pool_size - init_pool_ptr); /* 97/Mar/9 */
-      return;     // abort_flag set
-    }
-#else
-/* *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** */
-      if (pool_ptr + 1 > pool_size) {
-      overflow("pool size", pool_size - init_pool_ptr); /* pool size */
-      return;     // abort_flag set
-    }
-#endif
-    } 
-    t = make_string(); 
-  } 
-  if ((a >= 4)) geq_define(u, 87, 0); 
-  else eq_define(u, 87, 0); 
-  scan_optional_equals(); 
-  scan_file_name(); 
-
-/* paragraph 1258 */
-  name_in_progress = true; 
-  if (scan_keyword("at"))  /* at */
-  {
-    scan_dimen(false, false, false); 
-    s = cur_val; 
-    if ((s <= 0)||(s >= 134217728L)) /* 2^27 */
-    {
-      print_err("Improper `at' size(");
-      print_scaled(s); 
-      print_string("pt), replaced by 10pt");
-         help2("I can only handle fonts at positive sizes that are",
-                 "less than 2048pt, so I've changed what you said to 10pt.");
-      error(); 
-      s = 10 * 65536L;    /* 10pt */
-    } 
-  } 
-  else if (scan_keyword("scaled")) /* scaled */
-  {
-    scan_int(); 
-    s = - (integer) cur_val; 
-    if ((cur_val <= 0)||(cur_val > 32768L))  {
-               print_err("Illegal magnification has been changed to 1000");
-               help1("The magnification ratio must be between 1 and 32768.");
-      int_error(cur_val); 
-      s = -1000; 
-    } 
-  } 
-  else s = -1000; 
-  name_in_progress = false; 
-
-  flushablestring = str_ptr - 1; 
-  if (trace_flag) {         /* debugging stuff only 98/Oct/5 */
-    int i, k1, k2, l1, l2;
-    char *sch=log_line;
-    k1 = str_start[cur_area];
-    k2 = str_start[cur_name];
-    l1 = length(cur_area);
-    l2 = length(cur_name);
-    show_char('\n');
-    show_line("FONT ", 0);
-    for (i = 0; i < l1; i++) {
-      *sch++ = str_pool[i+k1];
-    }
-    for (i = 0; i < l2; i++) {
-      *sch++ = str_pool[i+k2];
-    }
-    *sch++ = ' ';
-    *sch++ = '\0';
-    show_line(log_line, 0);
-  }
-/*  if (ignore_frozen) goto lab69; */     /* 98/Oct/5 */
-
-/* paragraph 1260 for f <- fontbase+1 to font_ptr do */
-  {
-    register integer for_end; 
-    f = 1; 
-    for_end = font_ptr; 
-    if (f <= for_end) 
-      do 
-/* if str_eq_str(font_name[f],cur_name) ^ str_eq_str(font_area[f],cur_area) */
-        if (str_eq_str(font_name[f], cur_name)&&
-           str_eq_str(font_area[f], cur_area))  {
-          if (cur_name == flushablestring) {
-            flush_string();
-            cur_name = font_name[f]; 
-          } 
-/*    if (ignore_frozen) continue; */       /* 98/Oct/5 */
-          if (s > 0) {   /* if pt size was specified */
-            if (s == font_size[f]){
-/*              if (ignore_frozen == 0)  */
-              if (ignore_frozen == 0 || f > frozenfontptr) { /* 99/Mar/26 */
-                if (trace_flag) {
-                  sprintf(log_line, "SKIPPING %ld ", s);
-                  show_line(log_line, 0);
-                }
-                goto lab50;
-              }
-            }
-          } 
-/* else if font_size[f] = xn_over_d(font_dsize[f],-s,1000) then goto common_ending */
-          else if (font_size[f]== xn_over_d(font_dsize[f],
-            - (integer) s, 1000)) { /* if using design size */
-/*            if (ignore_frozen == 0) */
-            if (ignore_frozen == 0 || f > frozenfontptr) { /* 99/Mar/26 */
-              if (trace_flag) {
-                sprintf(log_line, "SKIPPING %ld ", s);
-                show_line(log_line, 0);
-              }
-              goto lab50;
-            }
-          }
-        } 
-    while(f++ < for_end);
-  } 
-
-/* lab69: */  /* 98/Oct/5 */
-/* end of paragraph 1257 */
-  if (trace_flag) show_line("READING ", 0);  /* debugging only */
-  f = read_font_info(u, cur_name, cur_area, s); 
-
-/* common_ending: equiv[u] <- f;  */  /* use existing font info */
-  lab50:
-  if (trace_flag) {
-    sprintf(log_line, "NEW FONT %d ", f); /* debugging only */
-    show_line(log_line, 0);
-  }
-  eqtb[u].hh.v.RH = f; 
-/*  eqtb[(hash_size + 524) + f]= eqtb[u];*/ /* eqtb[frozen_null+font+f] */
-  eqtb[(hash_size + hash_extra + 524) + f]= eqtb[u]; /* 96/Jan/10 */
-#ifdef SHORTHASH            /*  debugging only  1996/Jan/20 */
-  if (t > 65535L) {
-    sprintf(log_line, "ERROR: %s too large %d\n",  "hash_used", t);
-    show_line(log_line, 1);
-  }
-#endif
-/*  hash[(hash_size + 524) + f].v.RH = t;  */
-  hash[(hash_size + hash_extra + 524) + f].v.RH = t; /* 96/Jan/10 */
-}
-/* sec 1265 */
-void new_interaction (void) 
-{ 
-  print_ln(); 
-  interaction = cur_chr; 
-  if (interaction == batch_mode) selector = 16; 
-  else selector = 17; 
-  if (log_opened) selector = selector + 2; 
-}
-/* sec 1270 */
-void do_assignments (void) 
-{/* 10 */ 
-  while(true){
-    do {
-    get_x_token(); 
-    } while(!((cur_cmd != 10)&&(cur_cmd != 0))); 
-    if (cur_cmd <= 70)
-    return; 
-    set_box_allowed = false; 
-    prefixed_command(); 
-    set_box_allowed = true; 
-  } 
-}
-/* sec 1275 */
-void open_or_close_in (void) 
-{
-  char c; 
-  char n; 
-  c = cur_chr; 
-  scan_four_bit_int(); 
-  n = cur_val; 
-  if (read_open[n]!= 2)
-  {
-    (void) a_close(read_file[n]); 
-    read_open[n]= 2; 
-  } 
-  if (c != 0)
-  {
-    scan_optional_equals(); 
-    scan_file_name(); 
-    pack_file_name(cur_name, cur_area, cur_ext); 
-/* *** some changes in following in 3.14159 *** */
-/*  if current extension is *not* empty, try to open using name as is */
-/*  string 335 is "" the empty string */
-    if ((cur_ext != 335) && a_open_in(read_file[n], TEXINPUTPATH)) 
-    read_open[n]= 1; 
-/*  we get here if extension is "", or file with extension failed to open */
-/*  if current extension is not `tex,' and `tex' is not irrelevant, try it */
-/*  string 785 is  .tex */
-    else if ((cur_ext != 785)&&(name_length + 5 < PATHMAX)&& 
-/* *** some changes in above file name handling *** */
-/*       (! extensionirrelevantp(name_of_file, "tex"))) */
-       (! extensionirrelevantp(name_of_file, name_length, "tex")))
-  {
-      name_of_file[name_length + 1]= 46;    /* .tex  */
-      name_of_file[name_length + 2]= 116; 
-      name_of_file[name_length + 3]= 101; 
-      name_of_file[name_length + 4]= 120; 
-      name_of_file[name_length + 5]= 32; 
-      name_length = name_length + 4; 
-      if (a_open_in(read_file[n], TEXINPUTPATH)) 
-      read_open[n]= 1; 
-      else {
-/*    more changes here in 3.14159 *** */
-      name_length = name_length - 4;      /* remove ".tex" again */
-      name_of_file[name_length + 1]= 32;  /* '  '  */
-/*    string 335 is "" the empty string */
-      if ((cur_ext == 335)&& a_open_in(read_file[n], TEXINPUTPATH)) 
-        read_open[n]= 1; 
-      else if (maketextex () && a_open_in(read_file[n], TEXINPUTPATH)) 
-        read_open[n]= 1; 
-    } 
-    } 
-  } 
-}
-/* sec 1279 */
-void issue_message (void) 
-{
-  char old_setting; 
-  char c; 
-  str_number s; 
-  c = cur_chr; 
-  mem[lig_trick].hh.v.RH = scan_toks(false, true); 
-  old_setting = selector; 
-  selector = 21; 
-  token_show(def_ref); 
-  selector = old_setting; 
-  flush_list(def_ref); 
-  {
-/* *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** */
-#ifdef ALLOCATESTRING
-  if (pool_ptr + 1 > current_pool_size)
-      str_pool = realloc_str_pool (increment_pool_size);
-  if (pool_ptr + 1 > current_pool_size){ /* in case it failed 94/Jan/24 */
-    overflow("pool size", current_pool_size - init_pool_ptr); /* 97/Mar/7 */
-    return;     // abort_flag set
-  }
-#else
-/* *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** */
-    if (pool_ptr + 1 > pool_size){
-    overflow("pool size", pool_size - init_pool_ptr); /* pool size */
-    return;     // abort_flag set
-  }
-#endif
-  } 
-  s = make_string(); 
-  if (c == 0)
-  {
-    if (term_offset + length(s) > max_print_line - 2)
-      print_ln(); 
-    else if ((term_offset > 0)||(file_offset > 0))
-      print_char(' ');
-    slow_print(s);
-#ifndef f_WINDOWS
-    fflush(stdout);
-#endif
-  } else {
-    print_err("");
-    slow_print(s);
-    if (err_help != 0)
-      use_err_help = true;
-    else if (long_help_seen)
-      help1("(That was another \\errmessage.)");
-    else {
-      if (interaction < 3)
-        long_help_seen = true;
-      help4("This error message was generated by an \\errmessage",
-        "command, so I can't give any explicit help.",
-        "Pretend that you're Hercule Poirot: Examine all clues,",
-        "and deduce the truth by order and method.");
-    }
-    error(); 
-    use_err_help = false; 
-  }
-  flush_string();
-}
-/* sec 1288 */
-void shift_case (void) 
-{
-  halfword b; 
-  halfword p; 
-  halfword t; 
-  eight_bits c; 
-  b = cur_chr; 
-  p = scan_toks(false, false); 
-  p = mem[def_ref].hh.v.RH;
-  while (p != 0) {      /* while p <> null ... p.1288 */
-    t = info(p); /* t <- info(p) p.1289 */ 
-/*    if (t < 4352) */
-    if (t < 4095 + single_base)    /* 4095 + 257 = cs_tokenflag + single_base */
-    {
-      c = t % 256;  
-      if (eqtb[b + c].hh.v.RH != 0)
-      mem[p].hh.v.LH = t - c + eqtb[b + c].hh.v.RH; 
-    } 
-    p = link(p); 
-  } 
-  begin_token_list(mem[def_ref].hh.v.RH, 3); 
-  {
-    mem[def_ref].hh.v.RH = avail; 
-    avail = def_ref; 
-  ;
-#ifdef STAT
-    decr(dyn_used); 
-#endif /* STAT */
-  } 
-}
-/* sec 1293 */
-void show_whatever (void) 
-{
-  halfword p; 
-  switch(cur_chr)
-  {
-  case 3:
-    {
-      begin_diagnostic();
-      show_activities();
-    }
-    break;
-  case 1:
-    {
-      scan_eight_bit_int();
-      begin_diagnostic();
-      print_nl("> \box");
-      print_int(cur_val);
-      print_char('=');
-      if (eqtb[(hash_size + 1578) + cur_val].hh.v.RH == 0)
-        print_string("void");
-      else
-        show_box(eqtb[(hash_size + 1578) + cur_val].hh.v.RH);
-    }
-    break;
-  case 0:
-    {
-      get_token();
-      if (interaction == error_stop_mode)
-        ;
-      print_nl("> ");
-      if (cur_cs != 0)
-      {
-        sprint_cs(cur_cs);
-        print_char('=');
-      }
-      print_meaning();
-      goto lab50;
-    }
-    break;
-  default:
-    {
-      p = the_toks();
-      if (interaction == error_stop_mode)
-        ; 
-      print_nl(" > ");
-      token_show(temp_head);
-      flush_list(mem[temp_head].hh.v.RH);
-      goto lab50;
-    }
-    break;
-  }
-  end_diagnostic(true);
-  print_err("OK");
-  if (selector == 19)
-  if (tracing_online <= 0)
-  {
-    selector = 17;
-    print_string(" (see the transcript file)");
-    selector = 19;
-  }
-lab50:
-  if (interaction < 3) {
-    help_ptr = 0;
-    decr(error_count);
-  } else if (tracing_online > 0) {
-         help3("This isn't an error message; I'm just \\showing something.",
-                 "Type `I\\show...' to show more (e.g., \\show\\cs,",
-                 "\\showthe\\count10, \\showbox255, \\showlists).");
-  } else {
-    help5("This isn't an error message; I'm just \\showing something.",
-      "Type `I\\show...' to show more (e.g., \\show\\cs,",
-      "\\showthe\\count10, \\showbox255, \\showlists).",
-                 "And type `I\\tracingonline=1\\show...' to show boxes and",
-                 "lists on your terminal as well as in the transcript file."); 
-  }
-  error();
-} 
-/* sec 1339 */
-void new_whatsit_(small_number s, small_number w)
-{
-  halfword p; 
-  p = get_node(w); 
-  mem[p].hh.b0 = 8; 
-  mem[p].hh.b1 = s; 
-  mem[tail].hh.v.RH = p; 
-  tail = p; 
-} 
-/* sec 1350 */
-void new_write_whatsit_(small_number w)
-{
-  new_whatsit(cur_chr, w); 
-  if (w != 2) {
-    scan_four_bit_int();
-  } else {
-    scan_int(); 
-    if (cur_val < 0)
-      cur_val = 17; 
-    else if (cur_val > 15)
-      cur_val = 16; 
-  }
-  mem[tail + 1].hh.v.LH = cur_val;
-}
-/* sec 1348 */
-void do_extension (void) 
-{
-/*  integer i, j, k;  */
-  integer k; 
-/*  halfword p, q, r;  */
-  halfword p; 
-  switch(cur_chr)
-  {case 0 : 
-    {
-      new_write_whatsit(3); 
-      scan_optional_equals(); 
-      scan_file_name(); 
-      mem[tail + 1].hh.v.RH = cur_name; 
-      mem[tail + 2].hh.v.LH = cur_area; 
-      mem[tail + 2].hh.v.RH = cur_ext; 
-    } 
-    break; 
-  case 1 : 
-    {
-      k = cur_cs; 
-      new_write_whatsit(2); 
-      cur_cs = k; 
-      p = scan_toks(false, false); 
-      mem[tail + 1].hh.v.RH = def_ref; 
-    } 
-    break; 
-  case 2 : 
-    {
-      new_write_whatsit(2); 
-      mem[tail + 1].hh.v.RH = 0; 
-    } 
-    break; 
-  case 3 : 
-    {
-      new_whatsit(3, 2); 
-      mem[tail + 1].hh.v.LH = 0; 
-      p = scan_toks(false, true); 
-      mem[tail + 1].hh.v.RH = def_ref; 
-    } 
-    break; 
-  case 4 : 
-    {
-      get_x_token(); 
-      if ((cur_cmd == 59)&&(cur_chr <= 2)) 
-      {
-  p = tail; 
-  do_extension(); 
-  out_what(tail);
-  flush_node_list(tail); 
-  tail = p; 
-  mem[p].hh.v.RH = 0; 
-      } 
-      else back_input(); 
-    } 
-    break; 
-  case 5 : 
-    if (abs(mode)!= 102){
-    report_illegal_case();
-  }
-    else {
-      new_whatsit(4, 2); 
-      scan_int(); 
-      if (cur_val <= 0) clang = 0; 
-      else if (cur_val > 255)
-      clang = 0; 
-      else clang = cur_val; 
-      mem[tail + 1].hh.v.RH = clang; 
-      mem[tail + 1].hh.b0 = norm_min(left_hyphen_min); 
-      mem[tail + 1].hh.b1 = norm_min(right_hyphen_min); 
-    } 
-    break; 
-    default: 
-    {
-      confusion("display");
-      return;       // abort_flag set
-    }
-    break; 
-  } 
-} 
-/* sec 1376 */
-void fix_language (void) 
-{ 
-/*  ASCII_code l;  */
-  int l;                  /* 95/Jan/7 */
-  if (language <= 0)
-    l = 0; 
-  else if (language > 255)
-    l = 0;
-  else l = language;
-  if (l != clang) {
-    new_whatsit(4, 2);
-    mem[tail + 1].hh.v.RH = l;
-    clang = l;
-    mem[tail + 1].hh.b0 = norm_min(left_hyphen_min);
-    mem[tail + 1].hh.b1 = norm_min(right_hyphen_min);
-  }
-}
-/* sec 1068 */
-void handle_right_brace (void) 
-{ 
-  halfword p, q; 
-  scaled d; 
-  integer f; 
-
-  switch(cur_group)
-  {case 1 : 
-    unsave(); 
-    break; 
-  case 0 : 
-    {
-                 print_err("Too many }'s");
-               help2("You've closed more groups than you opened.",
-                       "Such booboos are generally harmless, so keep going.");
-        error();
-    } 
-    break; 
-  case 14 : 
-  case 15 : 
-  case 16 : 
-    extra_right_brace();
-    break; 
-  case 2 : 
-    package(0); 
-    break; 
-  case 3 : 
-    {
-      adjust_tail = adjust_head; 
-      package(0); 
-    } 
-    break; 
-  case 4 : 
-    {
-      end_graf(); 
-      package(0); 
-    } 
-    break; 
-  case 5 : 
-    {
-      end_graf();
-      package(4);
-    } 
-    break; 
-  case 11 : 
-    {
-      end_graf(); 
-      q = eqtb[(hash_size + 792)].hh.v.RH; 
-      incr(mem[q].hh.v.RH); 
-      d = split_max_depth; 
-      f = floating_penalty; 
-      unsave(); 
-      decr(save_ptr); 
-      p = vpackage(mem[head].hh.v.RH, 0, 1, 1073741823L);  /* 2^30 - 1 */
-      pop_nest(); 
-      if (save_stack[save_ptr + 0].cint < 255) {
-        {
-          mem[tail].hh.v.RH = get_node(5);
-          tail = mem[tail].hh.v.RH;
-        }
-        mem[tail].hh.b0 = 3;
-        mem[tail].hh.b1 = save_stack[save_ptr + 0].cint;
-        mem[tail + 3].cint = mem[p + 3].cint + mem[p + 2].cint;
-        mem[tail + 4].hh.v.LH = mem[p + 5].hh.v.RH;
-        mem[tail + 4].hh.v.RH = q;
-        mem[tail + 2].cint = d;
-        mem[tail + 1].cint = f; 
-      } else {
-        {
-          mem[tail].hh.v.RH = get_node(2);
-          tail = mem[tail].hh.v.RH;
-        }
-        mem[tail].hh.b0 = 5;
-        mem[tail].hh.b1 = 0;
-        mem[tail + 1].cint = mem[p + 5].hh.v.RH;
-        delete_glue_ref(q);
-      } 
-      free_node(p, 7); 
-      if (nest_ptr == 0) {
-        build_page();
-      }
-    } 
-    break; 
-  case 8 : 
-    {
-      if ((cur_input.loc_field != 0)||((cur_input.index_field != 6)&&(
-      cur_input.index_field != 3)))
-      {
-                 print_err("Unbalanced output routine");
-                 help2("Your sneaky output routine has problematic {'s and/or }'s.",
-                         "I can't handle that very well; good luck.");
-  error(); 
-  do {
-      get_token(); 
-  } while(!(cur_input.loc_field == 0)); 
-      } 
-      end_token_list(); 
-      end_graf(); 
-      unsave(); 
-      output_active = false; 
-      insert_penalties = 0; 
-      if (eqtb[(hash_size + 1833)].hh.v.RH != 0)
-      {
-                 print_err("Output routine didn't use all of ");
-      print_esc("box");
-      print_int(255); 
-         help3("Your \\output commands should empty \\box255,",
-                 "e.g., by saying `\\ship_out\\box255'.",
-                 "Proceed; I'll discard its present contents.");
-      box_error(255); 
-    }
-      if (tail != head)
-      {
-  mem[page_tail].hh.v.RH = mem[head].hh.v.RH; 
-  page_tail = tail; 
-      } 
-      if (mem[page_head].hh.v.RH != 0)
-      {
-  if (mem[contrib_head].hh.v.RH == 0)
-  nest[0].tail_field = page_tail; 
-  mem[page_tail].hh.v.RH = mem[contrib_head].hh.v.RH; 
-  mem[contrib_head].hh.v.RH = mem[page_head].hh.v.RH; 
-  mem[page_head].hh.v.RH = 0; 
-  page_tail = page_head; 
-      } 
-      pop_nest(); 
-      build_page(); 
-    } 
-    break; 
-  case 10 : 
-    build_discretionary(); 
-    break; 
-  case 6 : 
-/* align_group: begin back_input; cur_tok:=cs_token_flag+frozen_cr; */
-    {
-      back_input(); 
-/*      cur_tok = (hash_size + 4610);  */
-/*      cur_tok = (hash_size + 4095 + 515);  */
-      cur_tok = (hash_size + hash_extra + 4095 + 515);
-         print_err("Missing ");
-      print_esc("cr");
-      print_string("inserted");
-         help1("I'm guessing that you meant to end an alignment here.");
-      ins_error(); 
-    } 
-    break; 
-  case 7 : 
-    {
-      end_graf(); 
-      unsave(); 
-      align_peek(); 
-    } 
-    break; 
-  case 12 : 
-    {
-      end_graf(); 
-      unsave(); 
-      save_ptr = save_ptr - 2; 
-      p = vpackage(mem[head].hh.v.RH, save_stack[
-      save_ptr + 1].cint, save_stack[save_ptr + 0].cint,
-      1073741823L);   /* 2^30 - 1 */
-      pop_nest(); 
-      {
-  mem[tail].hh.v.RH = new_noad(); 
-  tail = mem[tail].hh.v.RH; 
-      } 
-      mem[tail].hh.b0 = 29; 
-      mem[tail + 1].hh.v.RH = 2; 
-      mem[tail + 1].hh.v.LH = p; 
-    } 
-    break; 
-  case 13 : 
-    build_choices(); 
-    break; 
-  case 9 : 
-    {
-      unsave(); 
-      decr(save_ptr); 
-      mem[save_stack[save_ptr + 0].cint].hh.v.RH = 3; 
-      p = fin_mlist(0); 
-      mem[save_stack[save_ptr + 0].cint].hh.v.LH = p; 
-      if (p != 0)
-      if (mem[p].hh.v.RH == 0)
-      if (mem[p].hh.b0 == 16)
-      {
-  if (mem[p + 3].hh.v.RH == 0)
-  if (mem[p + 2].hh.v.RH == 0)
-  {
-    mem[save_stack[save_ptr + 0].cint].hh = mem[p + 1].hh; 
-    free_node(p, 4); 
-  } 
-      } 
-      else if (mem[p].hh.b0 == 28)
-      if (save_stack[save_ptr + 0].cint == tail + 1)
-      if (mem[tail].hh.b0 == 16)
-      {
-  q = head; 
-  while(mem[q].hh.v.RH != tail)q = mem[q].hh 
-  .v.RH; 
-  mem[q].hh.v.RH = p; 
-  free_node(tail, 4); 
-  tail = p; 
-      } 
-    } 
-    break; 
-    default: 
-    {
-      confusion("rightbrace");
-      return;       // abort_flag set
-    }
-    break; 
-  } 
-} 
-/* sec 1030 */
-/* main control loop */
-void main_control (void) 
-{/* 60 21 70 80 90 91 92 95 100 101 110 111 112 120 10 */
-    integer t; 
-  integer bSuppress;    /* 199/Jan/5 */
-
-  if (every_job != 0)/* everyjob */
-    begin_token_list(every_job, 12); 
-
-lab60:
-  get_x_token();       /* big_switch */
-lab21:
-  if (interrupt != 0)
-    if (OK_to_interrupt){
-      back_input(); 
-      {
-        if (interrupt != 0){
-          pause_for_instructions();
-        }
-      }  
-      goto lab60; 
-    } 
-  ;
-#ifdef DEBUG
-  if (panicking)check_mem(false); 
-#endif /* DEBUG */
-  if (tracing_commands > 0)
-    show_cur_cmd_chr(); 
-
-/*  the big switch --- don't bother to test abort_flag ??? */
-  switch(abs(mode)+ cur_cmd){
-       case 113 : 
-       case 114 : 
-       case 170 : 
-         goto lab70; 
-         break; 
-       case 118 : 
-       {
-         scan_char_num(); 
-         cur_chr = cur_val; 
-         goto lab70; 
-       } 
-       break; 
-       case 167 : 
-       {
-         get_x_token(); 
-         if ((cur_cmd == 11)||(cur_cmd == 12)||(cur_cmd == 68)||(
-           cur_cmd == 16)) 
-           cancel_boundary = true; 
-         goto lab21; 
-       } 
-       break; 
-  case 112 : 
-    if (space_factor == 1000)goto lab120; 
-    else {
-    app_space();
-  }
-    break; 
-  case 166 : 
-  case 267 : 
-    goto lab120; 
-    break; 
-  case 1 : 
-  case 102 : 
-  case 203 : 
-  case 11 : 
-  case 213 : 
-  case 268 : 
- ; 
-    break; 
-  case 40 : 
-  case 141 : 
-  case 242 : 
-    {
-      do {
-      get_x_token(); 
-      } while(!(cur_cmd != 10)); 
-      goto lab21; 
-    } 
-    break; 
-  case 15 : 
-    if (its_all_over ())return; 
-    break; 
-  case 23 : 
-  case 123 : 
-  case 224 : 
-  case 71 : 
-  case 172 : 
-  case 273 : 
-  case 39 : 
-  case 45 : 
-  case 49 : 
-  case 150 : 
-  case 7 : 
-  case 108 : 
-  case 209 : 
-    report_illegal_case(); 
-    break; 
-  case 8 : 
-  case 109 : 
-  case 9 : 
-  case 110 : 
-  case 18 : 
-  case 119 : 
-  case 70 : 
-  case 171 : 
-  case 51 : 
-  case 152 : 
-  case 16 : 
-  case 117 : 
-  case 50 : 
-  case 151 : 
-  case 53 : 
-  case 154 : 
-  case 67 : 
-  case 168 : 
-  case 54 : 
-  case 155 : 
-  case 55 : 
-  case 156 : 
-  case 57 : 
-  case 158 : 
-  case 56 : 
-  case 157 : 
-  case 31 : 
-  case 132 : 
-  case 52 : 
-  case 153 : 
-  case 29 : 
-  case 130 : 
-  case 47 : 
-  case 148 : 
-  case 212 : 
-  case 216 : 
-  case 217 : 
-  case 230 : 
-  case 227 : 
-  case 236 : 
-  case 239 : 
-    insert_dollar_sign(); 
-    break; 
-  case 37 : 
-  case 137 : 
-  case 238 : 
-    {
-      {
-      mem[tail].hh.v.RH = scan_rule_spec(); 
-      tail = mem[tail].hh.v.RH; 
-      } 
-      if (abs(mode)== 1)
-      cur_list.aux_field.cint = ignore_depth; 
-      else if (abs(mode)== 102)
-      space_factor = 1000; 
-    } 
-    break; 
-  case 28 : 
-  case 128 : 
-  case 229 : 
-  case 231 : 
-    append_glue(); 
-    break; 
-  case 30 : 
-  case 131 : 
-  case 232 : 
-  case 233 : 
-    append_kern(); 
-    break; 
-  case 2 : 
-  case 103 : 
-    new_save_level(1); 
-    break; 
-  case 62 : 
-  case 163 : 
-  case 264 : 
-    new_save_level(14); 
-    break; 
-  case 63 : 
-  case 164 : 
-  case 265 : 
-    if (cur_group == 14) unsave(); 
-    else off_save();
-    break; 
-  case 3 : 
-  case 104 : 
-  case 205 : 
-    handle_right_brace(); 
-    break; 
-  case 22 : 
-  case 124 : 
-  case 225 : 
-    {
-      t = cur_chr; 
-      scan_dimen(false, false, false); 
-      if (t == 0)scan_box(cur_val);
-      else scan_box(- (integer) cur_val);
-    } 
-    break; 
-  case 32 : 
-  case 133 : 
-  case 234 : 
-/* scan_box(leader_flag-a_leaders+cur_chr); */
-    scan_box(1073742237L + cur_chr); /* 2^30 + 513 - 100 ? */
-    break; 
-  case 21 : 
-  case 122 : 
-  case 223 : 
-    begin_box(0); 
-    break; 
-  case 44 : 
-    new_graf(cur_chr > 0); 
-    break; 
-  case 12 : 
-  case 13 : 
-  case 17 : 
-  case 69 : 
-  case 4 : 
-  case 24 : 
-  case 36 : 
-  case 46 : 
-  case 48 : 
-  case 27 : 
-  case 34 : 
-  case 65 : 
-  case 66 : 
-    {
-      back_input(); 
-      new_graf(true); 
-    } 
-    break; 
-  case 145 : 
-  case 246 : 
-    indent_in_hmode(); 
-    break; 
-  case 14 : 
-    {
-      normal_paragraph(); 
-      if (mode > 0){
-      build_page();
-    }
-    } 
-    break; 
-  case 115 : 
-    {
-      if (align_state < 0){
-      off_save();
-    }
-      end_graf(); 
-      if (mode == 1){
-      build_page();
-    }
-    } 
-    break; 
-  case 116 : 
-  case 129 : 
-  case 138 : 
-  case 126 : 
-  case 134 : 
-    head_for_vmode(); 
-    break; 
-  case 38 : 
-  case 139 : 
-  case 240 : 
-  case 140 : 
-  case 241 : 
-    begin_insert_or_adjust(); 
-    break; 
-  case 19 : 
-  case 120 : 
-  case 221 : 
-    make_mark(); 
-    break; 
-  case 43 : 
-  case 144 : 
-  case 245 : 
-    append_penalty(); 
-    break; 
-  case 26 : 
-  case 127 : 
-  case 228 : 
-    delete_last(); 
-    break; 
-  case 25 : 
-  case 125 : 
-  case 226 : 
-    unpackage(); 
-    break; 
-  case 146 : 
-    append_italic_correction(); 
-    break; 
-  case 247 : 
-    {
-      mem[tail].hh.v.RH = new_kern(0); 
-      tail = mem[tail].hh.v.RH; 
-    } 
-    break; 
-  case 149 : 
-  case 250 : 
-    append_discretionary(); 
-    break; 
-  case 147 : 
-    make_accent(); 
-    break; 
-  case 6 : 
-  case 107 : 
-  case 208 : 
-  case 5 : 
-  case 106 : 
-  case 207 : 
-    align_error(); 
-    break; 
-  case 35 : 
-  case 136 : 
-  case 237 : 
-    noalign_error(); 
-    break; 
-  case 64 : 
-  case 165 : 
-  case 266 : 
-    omit_error(); 
-    break; 
-  case 33 : 
-  case 135 : 
-    init_align(); 
-    break; 
-  case 235 : 
-    if (privileged ())
-    if (cur_group == 15)init_align();
-    else off_save();
-
-    break; 
-  case 10 : 
-  case 111 : 
-    do_endv(); 
-    break; 
-  case 68 : 
-  case 169 : 
-  case 270 : 
-    cs_error(); 
-    break; 
-  case 105 : 
-    init_math(); 
-    break; 
-  case 251 : 
-    if (privileged ())
-    if (cur_group == 15) start_eq_no(); 
-    else off_save();
-    break; 
-  case 204 : 
-    {
-      {
-  mem[tail].hh.v.RH = new_noad(); 
-  tail = mem[tail].hh.v.RH; 
-      } 
-      back_input(); 
-      scan_math(tail + 1); 
-    } 
-    break; 
-  case 214 : 
-  case 215 : 
-  case 271 : 
-    set_math_char(eqtb[(hash_size + 2907) + cur_chr].hh.v.RH); 
-    break; 
-  case 219 : 
-    {
-      scan_char_num(); 
-      cur_chr = cur_val; 
-      set_math_char(eqtb[(hash_size + 2907) + cur_chr].hh.v.RH); 
-    } 
-    break; 
-  case 220 : 
-    {
-      scan_fifteen_bit_int(); 
-      set_math_char(cur_val); 
-    } 
-    break; 
-  case 272 : 
-    set_math_char(cur_chr); 
-    break; 
-  case 218 : 
-    {
-      scan_twenty_seven_bit_int(); 
-      set_math_char(cur_val / 4096);  
-/*      set_math_char(cur_val >> 12); */
-    } 
-    break; 
-  case 253 : 
-    {
-      {
-      mem[tail].hh.v.RH = new_noad(); 
-      tail = mem[tail].hh.v.RH; 
-      } 
-      mem[tail].hh.b0 = cur_chr; 
-      scan_math(tail + 1); 
-    } 
-    break; 
-  case 254 : 
-    math_limit_switch(); 
-    break; 
-  case 269 : 
-    math_radical(); 
-    break; 
-  case 248 : 
-  case 249 : 
-    math_ac(); 
-    break; 
-  case 259 : 
-    {
-      scan_spec(12, false); 
-      normal_paragraph(); 
-      push_nest(); 
-      mode = -1; 
-      cur_list.aux_field.cint = ignore_depth; 
-      if (every_vbox != 0)/* everyvbox */
-      begin_token_list(every_vbox, 11); 
-    } 
-    break; 
-  case 256 : 
-    {
-      mem[tail].hh.v.RH = new_style(cur_chr); 
-      tail = mem[tail].hh.v.RH; 
-    } 
-    break; 
-  case 258 : 
-    {
-      {
-      mem[tail].hh.v.RH = new_glue(0); 
-      tail = mem[tail].hh.v.RH; 
-      } 
-      mem[tail].hh.b1 = 98; 
-    } 
-    break; 
-  case 257 : 
-    append_choices(); 
-    break; 
-  case 211 : 
-  case 210 : 
-    sub_sup(); 
-    break; 
-  case 255 : 
-    math_fraction(); 
-    break; 
-  case 252 : 
-    math_left_right(); 
-    break; 
-  case 206 : 
-    if (cur_group == 15)after_math(); 
-    else off_save();
-    break; 
-  case 72 : 
-  case 173 : 
-  case 274 : 
-  case 73 : 
-  case 174 : 
-  case 275 : 
-  case 74 : 
-  case 175 : 
-  case 276 : 
-  case 75 : 
-  case 176 : 
-  case 277 : 
-  case 76 : 
-  case 177 : 
-  case 278 : 
-  case 77 : 
-  case 178 : 
-  case 279 : 
-  case 78 : 
-  case 179 : 
-  case 280 : 
-  case 79 : 
-  case 180 : 
-  case 281 : 
-  case 80 : 
-  case 181 : 
-  case 282 : 
-  case 81 : 
-  case 182 : 
-  case 283 : 
-  case 82 : 
-  case 183 : 
-  case 284 : 
-  case 83 : 
-  case 184 : 
-  case 285 : 
-  case 84 : 
-  case 185 : 
-  case 286 : 
-  case 85 : 
-  case 186 : 
-  case 287 : 
-  case 86 : 
-  case 187 : 
-  case 288 : 
-  case 87 : 
-  case 188 : 
-  case 289 : 
-  case 88 : 
-  case 189 : 
-  case 290 : 
-  case 89 : 
-  case 190 : 
-  case 291 : 
-  case 90 : 
-  case 191 : 
-  case 292 : 
-  case 91 : 
-  case 192 : 
-  case 293 : 
-  case 92 : 
-  case 193 : 
-  case 294 : 
-  case 93 : 
-  case 194 : 
-  case 295 : 
-  case 94 : 
-  case 195 : 
-  case 296 : 
-  case 95 : 
-  case 196 : 
-  case 297 : 
-  case 96 : 
-  case 197 : 
-  case 298 : 
-  case 97 : 
-  case 198 : 
-  case 299 : 
-  case 98 : 
-  case 199 : 
-  case 300 : 
-  case 99 : 
-  case 200 : 
-  case 301 : 
-  case 100 : 
-  case 201 : 
-  case 302 : 
-  case 101 : 
-  case 202 : 
-  case 303 : 
-    prefixed_command(); 
-    break; 
-  case 41 : 
-  case 142 : 
-  case 243 : 
-    {
-      get_token(); 
-      after_token = cur_tok; 
-    } 
-    break; 
-  case 42 : 
-  case 143 : 
-  case 244 : 
-    {
-      get_token(); 
-      save_for_after(cur_tok); 
-    } 
-    break; 
-  case 61 : 
-  case 162 : 
-  case 263 : 
-    open_or_close_in(); 
-    break; 
-  case 59 : 
-  case 160 : 
-  case 261 : 
-    issue_message(); 
-    break; 
-  case 58 : 
-  case 159 : 
-  case 260 : 
-    shift_case(); 
-    break; 
-  case 20 : 
-  case 121 : 
-  case 222 : 
-    show_whatever(); 
-    break; 
-  case 60 : 
-  case 161 : 
-  case 262 : 
-    do_extension(); 
-    break; 
-  } /* end of big switch */
-  goto lab60; /*  main_loop */
-
-lab70:
-  main_s = eqtb[(hash_size + 2651) + cur_chr].hh.v.RH; 
-  if (main_s == 1000)
-    space_factor = 1000; 
-  else if (main_s < 1000)
-  {
-    if (main_s > 0)
-    space_factor = main_s; 
-  } 
-  else if (space_factor < 1000)
-    space_factor = 1000; 
-  else space_factor = main_s; 
-  main_f = eqtb[(hash_size + 1834)].hh.v.RH; 
-  bchar = font_bchar[main_f]; 
-  false_bchar = font_false_bchar[main_f]; 
-  if (mode > 0)
-  if (language != clang)
-  fix_language(); 
-  {
-    lig_stack = avail; 
-    if (lig_stack == 0)
-    lig_stack = get_avail(); 
-    else {
-      avail = mem[lig_stack].hh.v.RH; 
-      mem[lig_stack].hh.v.RH = 0; 
-  ;
-#ifdef STAT
-      incr(dyn_used); 
-#endif /* STAT */
-    } 
-  } 
-  mem[lig_stack].hh.b0 = main_f; 
-  cur_l = cur_chr; 
-  mem[lig_stack].hh.b1 = cur_l; 
-  cur_q = tail; 
-  if (cancel_boundary)
-  {
-/*  begin cancel_boundary:=false; main_k:=non_address; l.20093 */
-    cancel_boundary = false; 
-/* main_k:=non_address 3.14159 */
-/*    main_k = font_mem_size; */    /* OK ? 1993/Nov/29 */
-    main_k = non_address;     /* i.e. --- 1995/Jan/15 3.14159 */
-  } 
-  else main_k = bchar_label[main_f]; 
-/* if main_k=non_address then goto main_loop_move+2; l.20096 */
-/*  if (main_k == font_mem_size) */
-  if (main_k == non_address)   /* i.e. 0 --- 1995/Jan/15 */
-/* cur_r:=cur_l; cur_l:=non_char; */
-  goto lab92; 
-  cur_r = cur_l; 
-  cur_l = 256;            /* cur_l:=non_char; */
-/* goto main_lig_loop+1; l.20071 */
-  goto lab111; 
-
-/* main_loop_wrapup:@<Make a ligature node, if |ligature_present|;
-  insert a null discretionary, if appropriate@>; */
-/* @d wrapup(#)==if cur_l<non_char then */
-/*  main_loop_wrapup */
-lab80: if (cur_l < 256)
-  {
-/*  begin if character(tail)=qi(hyphen_char[main_f]) then
-  if link(cur_q)>null then ... l.20107 */
-    if (mem[tail].hh.b1 == hyphen_char[main_f])
-/*    if (mem[cur_q].hh.v.RH > 0) */ /* NO! */
-    if (mem[cur_q].hh.v.RH != 0) /* BUG FIX l.20107 */
-    ins_disc = true; 
-    if (ligature_present)
-    {
-      main_p = new_ligature(main_f, cur_l, mem[cur_q].hh.v.RH); 
-      if (lft_hit)
-      {
-  mem[main_p].hh.b1 = 2; 
-  lft_hit = false; 
-      } 
-      if (rt_hit)
-      if (lig_stack == 0)
-      {
-  incr(mem[main_p].hh.b1); 
-  rt_hit = false; 
-      } 
-      mem[cur_q].hh.v.RH = main_p; 
-      tail = main_p; 
-      ligature_present = false; 
-    } 
-/*   if ins_disc then l.20110 */
-    if (ins_disc)
-    {
-      ins_disc = false; 
-/*   if mode>0 then tail_append(new_disc); l.20112 */
-      if (mode > 0)
-      {
-  mem[tail].hh.v.RH = new_disc(); 
-  tail = mem[tail].hh.v.RH; 
-      } 
-    } 
-  } 
-
-/*  main_loop_move */
-lab90:
-  if (lig_stack == 0) goto lab21; 
-  cur_q = tail; 
-  cur_l = mem[lig_stack].hh.b1; 
-
-lab91:
-  if (!(lig_stack >= hi_mem_min)) goto lab95; 
-
-lab92: if ((cur_chr < font_bc[main_f])||(cur_chr > font_ec[main_f])) 
-  {
-    char_warning(main_f, cur_chr); 
-    {
-      mem[lig_stack].hh.v.RH = avail; 
-      avail = lig_stack; 
-  ;
-#ifdef STAT
-      decr(dyn_used); 
-#endif /* STAT */
-    } 
-    goto lab60; 
-  } 
-  main_i = font_info[char_base[main_f]+ cur_l].qqqq; 
-  if (!(main_i.b0 > 0)) 
-  {
-    char_warning(main_f, cur_chr); 
-    {
-      mem[lig_stack].hh.v.RH = avail; 
-      avail = lig_stack; 
-  ;
-#ifdef STAT
-      decr(dyn_used); 
-#endif /* STAT */
-    } 
-    goto lab60; 
-  } 
-  {
-    link(tail) = lig_stack; 
-    tail = lig_stack; 
-  } 
-
-/*  main_loop_lookahead */
-lab100:
-  get_next(); 
-  if (cur_cmd == 11) goto lab101; 
-  if (cur_cmd == 12) goto lab101; 
-  if (cur_cmd == 68) goto lab101; 
-  x_token(); 
-  if (cur_cmd == 11) goto lab101; 
-  if (cur_cmd == 12) goto lab101; 
-  if (cur_cmd == 68) goto lab101; 
-  if (cur_cmd == 16) {
-    scan_char_num(); 
-    cur_chr = cur_val; 
-    goto lab101; 
-  } 
-  if (cur_cmd == 65) bchar = 256; 
-  cur_r = bchar; 
-  lig_stack = 0; 
-  goto lab110; 
-
-lab101: main_s = eqtb[(hash_size + 2651) + cur_chr].hh.v.RH; 
-  if (main_s == 1000)
-  space_factor = 1000; 
-  else if (main_s < 1000)
-  {
-    if (main_s > 0)
-    space_factor = main_s; 
-  } 
-  else if (space_factor < 1000)
-  space_factor = 1000; 
-  else space_factor = main_s; 
-  {
-    lig_stack = avail; 
-    if (lig_stack == 0)
-    lig_stack = get_avail(); 
-    else {
-      avail = mem[lig_stack].hh.v.RH; 
-      mem[lig_stack].hh.v.RH = 0; 
-  ;
-#ifdef STAT
-      incr(dyn_used); 
-#endif /* STAT */
-    } 
-  } 
-  mem[lig_stack].hh.b0 = main_f; 
-  cur_r = cur_chr; 
-  mem[lig_stack].hh.b1 = cur_r; 
-  if (cur_r == false_bchar)
-    cur_r = 256; 
-
-// main_lig_loop:@<If there's a ligature/kern command relevant to |cur_l| and
-//  |cur_r|, adjust the text appropriately; exit to |main_loop_wrapup|@>;
-lab110:
-/*  if char_tag(main_i)<>lig_tag then goto main_loop_wrapup; */
-  if (((main_i.b2) % 4)!= 1)
-    goto lab80;
-/* 425 in tex82.bug */
-  if (cur_r == 256)
-         goto lab80;
-/*  main_k:=lig_kern_start(main_f)(main_i); */
-  main_k = lig_kern_base[main_f]+ main_i.b3; 
-/*  main_j:=font_info[main_k].qqqq; */
-  main_j = font_info[main_k].qqqq; 
-/* if skip_byte(main_j)<=stop_flag then goto main_lig_loop+2; */
-  if (main_j.b0 <= 128)goto lab112; 
-/* main_k:=lig_kern_restart(main_f)(main_j); */
-  main_k = lig_kern_base[main_f]+ 256 * main_j.b2 + main_j.b3 + 32768L - 256 * 
- (128); 
-
-/* main_lig_loop+1:main_j:=font_info[main_k].qqqq; */
-lab111: main_j = font_info[main_k].qqqq; 
-
-/* main_lig_loop+2:if next_char(main_j)=cur_r then l.20184 */
-lab112:
-/*  provide for suppression of f-ligatures 99/Jan/5 */
-  bSuppress = 0;
-  if (suppress_f_ligs && main_j.b1 == cur_r && main_j.b2 == 0) {
-    if (cur_l == 'f') 
-        bSuppress = 1;
-  }
-
-/*  if (main_j.b1 == cur_r)*/
-  if (main_j.b1 == cur_r && bSuppress == 0)  /* 99/Jan/5 */
-/*  if skip_byte(main_j)<=stop_flag then l.20185 */
-//   @<Do ligature or kern command, returning to |main_lig_loop|
-//    or |main_loop_wrapup| or |main_loop_move|@>;
-  if (main_j.b0 <= 128)
-  {
-/* begin if op_byte(main_j)>=kern_flag then l.20225 */
-    if (main_j.b2 >= 128)
-    {
-/* @d wrapup(#)==if cur_l<non_char then */
-      if (cur_l < 256)
-      {
-/* if character(tail)=qi(hyphen_char[main_f]) then if link(cur_q)>null */
-  if (mem[tail].hh.b1 == hyphen_char[main_f])
-/*  if (mem[cur_q].hh.v.RH > 0) */ /* 94/Mar/22 ?????????????? */
-  if (mem[cur_q].hh.v.RH != 0) /* BUG FIX l.20107l.20186  */
-  ins_disc = true; 
-/*   if ligature_present then pack_lig(#); */
-  if (ligature_present)
-  {
-    main_p = new_ligature(main_f, cur_l, mem[cur_q].hh.v.RH); 
-    if (lft_hit)
-    {
-      mem[main_p].hh.b1 = 2; 
-      lft_hit = false; 
-    } 
-    if (rt_hit)
-    if (lig_stack == 0)
-    {
-      incr(mem[main_p].hh.b1); 
-      rt_hit = false; 
-    } 
-    mem[cur_q].hh.v.RH = main_p; 
-    tail = main_p; 
-    ligature_present = false; 
-  } 
-  if (ins_disc)
-  {
-    ins_disc = false; 
-    if (mode > 0)
-    {
-      mem[tail].hh.v.RH = new_disc(); 
-      tail = mem[tail].hh.v.RH; 
-    } 
-  } 
-      } 
-      {
-  mem[tail].hh.v.RH = new_kern(font_info[kern_base[
-  main_f]+ 256 * main_j.b2 + main_j.b3].cint); 
-  tail = mem[tail].hh.v.RH; 
-      } 
-      goto lab90; 
-    } 
-/* begin if cur_l=non_char then lft_hit:=true; */
-    if (cur_l == 256)
-    lft_hit = true; 
-    else if (lig_stack == 0)
-    rt_hit = true; 
-    {
-      if (interrupt != 0){
-      pause_for_instructions();
-    }
-    } 
-    switch(main_j.b2)
-    {case 1 : 
-    case 5 : 
-      {
-  cur_l = main_j.b3; 
-  main_i = font_info[char_base[main_f]+ cur_l].qqqq; 
-  ligature_present = true; 
-      } 
-      break; 
-    case 2 : 
-    case 6 : 
-      {
-  cur_r = main_j.b3; 
-  if (lig_stack == 0)
-  {
-    lig_stack = new_lig_item(cur_r); 
-    bchar = 256; 
-  } 
-  else if ((lig_stack >= hi_mem_min)) 
-  {
-    main_p = lig_stack; 
-    lig_stack = new_lig_item(cur_r); 
-    mem[lig_stack + 1].hh.v.RH = main_p; 
-  } 
-  else mem[lig_stack].hh.b1 = cur_r; 
-      } 
-      break; 
-    case 3 : 
-      {
-  cur_r = main_j.b3; 
-  main_p = lig_stack; 
-  lig_stack = new_lig_item(cur_r); 
-  mem[lig_stack].hh.v.RH = main_p; 
-      } 
-      break; 
-    case 7 : 
-    case 11 : 
-      {
-  if (cur_l < 256) /* if cur_l<non_char then  */
-/*  begin if character(tail)=qi(hyphen_char[main_f]) then if link(cur_q)>null
-then */
-  {
-    if (mem[tail].hh.b1 == hyphen_char[main_f])
-/*    if (mem[cur_q].hh.v.RH > 0) */  /* 94/Mar/22 */
-    if (mem[cur_q].hh.v.RH != 0) /* BUG FIX ???????????? */
-    ins_disc = true; 
-    if (ligature_present)
-    {
-      main_p = new_ligature(main_f, cur_l, mem[cur_q].hh.v.RH); 
-      if (lft_hit)
-      {
-        mem[main_p].hh.b1 = 2; 
-        lft_hit = false; 
-      } 
-/*      if (false)
-      if (lig_stack == 0){
-        incr(mem[main_p].hh.b1); 
-        rt_hit = false; 
-      } */              /* removed 99/Jan/6 */
-    mem[cur_q].hh.v.RH = main_p; 
-      tail = main_p; 
-      ligature_present = false; 
-    } 
-    if (ins_disc)
-    {
-      ins_disc = false; 
-      if (mode > 0)
-      {
-        mem[tail].hh.v.RH = new_disc(); 
-        tail = mem[tail].hh.v.RH; 
-      } 
-    } 
-  } 
-  cur_q = tail; 
-  cur_l = main_j.b3; 
-  main_i = font_info[char_base[main_f]+ cur_l].qqqq; 
-  ligature_present = true; 
-      } 
-      break; 
-      default: 
-      {
-  cur_l = main_j.b3; 
-  ligature_present = true; 
-  if (lig_stack == 0)
-  goto lab80; 
-  else goto lab91; 
-      } 
-      break; 
-    } 
-    if (main_j.b2 > 4)
-    if (main_j.b2 != 7)
-    goto lab80; 
-    if (cur_l < 256)
-    goto lab110; 
-    main_k = bchar_label[main_f]; 
-    goto lab111; 
-  } 
-  if (main_j.b0 == 0)
-  incr(main_k); 
-  else {
-    if (main_j.b0 >= 128)
-    goto lab80; 
-    main_k = main_k + main_j.b0 + 1; 
-  } 
-  goto lab111; 
-
-/*  main_move_log */
-lab95: main_p = mem[lig_stack + 1].hh.v.RH; 
-/* if main_p>null then tail_append(main_p); l.20137 */
-/*  if (main_p > 0) */ /* 92/Mar/22 */
-  if (main_p != 0)     /* BUG FIX */
-  {
-    mem[tail].hh.v.RH = main_p; 
-    tail = mem[tail].hh.v.RH; 
-  } 
-  temp_ptr = lig_stack; 
-  lig_stack = mem[temp_ptr].hh.v.RH; 
-  free_node(temp_ptr, 2); 
-  main_i = font_info[char_base[main_f]+ cur_l].qqqq; 
-  ligature_present = true; 
-  if (lig_stack == 0)
-/*   if main_p>null then goto main_loop_lookahead l.20142 */
-/*  if (main_p > 0) */ /* 94/Mar/2 */
-  if (main_p != 0)   /* BUG FIX */
-  goto lab100; 
-  else cur_r = bchar; 
-  else cur_r = mem[lig_stack].hh.b1; 
-  goto lab110; 
-
-/*  append_normal_space */
-lab120: if (eqtb[(hash_size + 794)].hh.v.RH == 0)
-  {
-    {
-      main_p = font_glue[eqtb[(hash_size + 1834)].hh.v.RH]; 
-      if (main_p == 0)
-      {
-  main_p = new_spec(0); 
-  main_k = param_base[eqtb[(hash_size + 1834)].hh.v.RH]+ 2; 
-  mem[main_p + 1].cint = font_info[main_k].cint; 
-  mem[main_p + 2].cint = font_info[main_k + 1].cint; 
-  mem[main_p + 3].cint = font_info[main_k + 2].cint; 
-  font_glue[eqtb[(hash_size + 1834)].hh.v.RH]= main_p; 
-      } 
-    } 
-    temp_ptr = new_glue(main_p); 
-  } 
-  else temp_ptr = new_param_glue(12); 
-  mem[tail].hh.v.RH = temp_ptr; 
-  tail = temp_ptr; 
-  goto lab60; 
-} /* end of main_control */
-/* give_err_help etc followed here in the old tex8.c */
+/*\r
+   Copyright 2014 Clerk Ma\r
+\r
+   This program is free software; you can redistribute it and/or modify\r
+   it under the terms of the GNU General Public License as published by\r
+   the Free Software Foundation; either version 2 of the License, or\r
+   (at your option) any later version.\r
+\r
+   This program is distributed in the hope that it will be useful, but\r
+   WITHOUT ANY WARRANTY; without even the implied warranty of\r
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r
+   General Public License for more details.\r
+\r
+   You should have received a copy of the GNU General Public License\r
+   along with this program; if not, write to the Free Software\r
+   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA\r
+   02110-1301 USA.\r
+*/\r
+\r
+#define EXTERN extern\r
+\r
+#include "yandytex.h"\r
+\r
+/* sec 1181 */\r
+void math_fraction (void)\r
+{\r
+  small_number c;\r
+\r
+  c = cur_chr;\r
+\r
+  if (incompleat_noad != 0)\r
+  {\r
+    if (c >= delimited_code)\r
+    {\r
+      scan_delimiter(garbage, false);\r
+      scan_delimiter(garbage, false);\r
+    }\r
+\r
+    if (c % delimited_code == 0)\r
+      scan_dimen(false, false, false);\r
+\r
+    print_err("Ambiguous; you need another { and }");\r
+    help3("I'm ignoring this fraction specification, since I don't",\r
+      "know whether a construction like `x \\over y \\over z'",\r
+      "means `{x \\over y} \\over z' or `x \\over {y \\over z}'.");\r
+    error();\r
+  }\r
+  else\r
+  {\r
+    incompleat_noad = get_node(fraction_noad_size);\r
+    type(incompleat_noad) = fraction_noad;\r
+    subtype(incompleat_noad) = normal;\r
+    math_type(numerator(incompleat_noad)) = sub_mlist;\r
+    info(numerator(incompleat_noad)) = link(head);\r
+    mem[denominator(incompleat_noad)].hh = empty_field;\r
+    mem[left_delimiter(incompleat_noad)].qqqq = null_delimiter;\r
+    mem[right_delimiter(incompleat_noad)].qqqq = null_delimiter;\r
+    link(head) = 0;\r
+    tail = head;\r
+\r
+    if (c >= delimited_code)\r
+    {\r
+      scan_delimiter(left_delimiter(incompleat_noad), false);\r
+      scan_delimiter(right_delimiter(incompleat_noad), false);\r
+    }\r
+\r
+    switch (c % delimited_code)\r
+    {\r
+      case above_code:\r
+        scan_dimen(false, false, false);\r
+        thickness(incompleat_noad) = cur_val;\r
+        break;\r
+\r
+      case over_code:\r
+        thickness(incompleat_noad) = default_code;\r
+        break;\r
+\r
+      case atop_code:\r
+        thickness(incompleat_noad) = 0;\r
+        break;\r
+    }\r
+  }\r
+}\r
+/* sec 1191 */\r
+void math_left_right (void)\r
+{\r
+  small_number t;\r
+  pointer p;\r
+\r
+  t = cur_chr;\r
+\r
+  if ((t == right_noad) && (cur_group != math_left_group))\r
+  {\r
+    if (cur_group == math_shift_group)\r
+    {\r
+      scan_delimiter(garbage, false);\r
+      print_err("Extra ");\r
+      print_esc("right");\r
+      help1("I'm ignoring a \\right that had no matching \\left.");\r
+      error();\r
+    }\r
+    else\r
+      off_save();\r
+  }\r
+  else\r
+  {\r
+    p = new_noad();\r
+    type(p) = t;\r
+    scan_delimiter(delimiter(p), false);\r
+\r
+    if (t == left_noad)\r
+    {\r
+      push_math(math_left_group);\r
+      link(tail) = p;\r
+      tail = p;\r
+    }\r
+    else\r
+    {\r
+      p = fin_mlist(p);\r
+      unsave();\r
+      tail_append(new_noad());\r
+      type(tail) = inner_noad;\r
+      math_type(nucleus(tail)) = sub_mlist;\r
+      info(nucleus(tail)) = p;\r
+    }\r
+  }\r
+}\r
+/* sec 1194 */\r
+void after_math (void)\r
+{\r
+  boolean l;\r
+  boolean danger;\r
+  integer m;\r
+  pointer p;\r
+  pointer a;\r
+  pointer b;\r
+  scaled w;\r
+  scaled z;\r
+  scaled e;\r
+  scaled q;\r
+  scaled d;\r
+  scaled s;\r
+  small_number g1, g2;\r
+  pointer r;\r
+  pointer t;\r
+\r
+  danger = false;\r
+  \r
+  if ((font_params[fam_fnt(2 + text_size)] < total_mathsy_params) ||\r
+    (font_params[fam_fnt(2 + script_size)] < total_mathsy_params) ||\r
+    (font_params[fam_fnt(2 + script_script_size)] < total_mathsy_params))\r
+  {\r
+    print_err("Math formula deleted: Insufficient symbol fonts");\r
+    help3("Sorry, but I can't typeset math unless \\textfont 2",\r
+        "and \\scriptfont 2 and \\scriptscriptfont 2 have all",\r
+        "the \\fontdimen values needed in math symbol fonts.");\r
+    error();\r
+    flush_math();\r
+    danger = true;\r
+  }\r
+  else if ((font_params[fam_fnt(3 + text_size)] < total_mathex_params) ||\r
+    (font_params[fam_fnt(3 + script_size)] < total_mathex_params) ||\r
+    (font_params[fam_fnt(3 + script_script_size)] < total_mathex_params))\r
+  {\r
+    print_err("Math formula deleted: Insufficient extension fonts");\r
+    help3("Sorry, but I can't typeset math unless \\textfont 3",\r
+        "and \\scriptfont 3 and \\scriptscriptfont 3 have all",\r
+        "the \\fontdimen values needed in math extension fonts.");\r
+    error();\r
+    flush_math();\r
+    danger = true;\r
+  }\r
+\r
+  m = mode;\r
+  l = false;\r
+  p = fin_mlist(0);\r
+\r
+  if (mode == -m)\r
+  {\r
+    {\r
+      get_x_token();\r
+\r
+      if (cur_cmd != math_shift)\r
+      {\r
+        print_err("Display math should end with $$");\r
+        help2("The `$' that I just saw supposedly matches a previous `$$'.",\r
+            "So I shall assume that you typed `$$' both times.");\r
+        back_error();\r
+      }\r
+    }\r
+\r
+    cur_mlist = p;\r
+    cur_style = text_style;\r
+    mlist_penalties = false;\r
+    mlist_to_hlist();\r
+    a = hpack(link(temp_head), 0, 1);\r
+    unsave();\r
+    decr(save_ptr);\r
+\r
+    if (saved(0) == 1)\r
+      l = true;\r
+\r
+    danger = false;\r
+\r
+    if ((font_params[fam_fnt(2 + text_size)] < total_mathsy_params) ||\r
+      (font_params[fam_fnt(2 + script_size)] < total_mathsy_params) ||\r
+      (font_params[fam_fnt(2 + script_script_size)] < total_mathsy_params))\r
+    {\r
+      print_err("Math formula deleted: Insufficient symbol fonts");\r
+      help3("Sorry, but I can't typeset math unless \\textfont 2",\r
+          "and \\scriptfont 2 and \\scriptscriptfont 2 have all",\r
+          "the \\fontdimen values needed in math symbol fonts.");\r
+      error();\r
+      flush_math();\r
+      danger = true;\r
+    }\r
+    else if ((font_params[fam_fnt(3 + text_size)] < total_mathex_params) ||\r
+      (font_params[fam_fnt(3 + script_size)] < total_mathex_params) ||\r
+      (font_params[fam_fnt(3 + script_script_size)] < total_mathex_params))\r
+    {\r
+      print_err("Math formula deleted: Insufficient extension fonts");\r
+      help3("Sorry, but I can't typeset math unless \\textfont 3",\r
+        "and \\scriptfont 3 and \\scriptscriptfont 3 have all",\r
+        "the \\fontdimen values needed in math extension fonts.");\r
+      error();\r
+      flush_math();\r
+      danger = true;\r
+    }\r
+\r
+    m = mode;\r
+    p = fin_mlist(0);\r
+  }\r
+  else\r
+    a = 0;\r
+\r
+  if (m < 0)\r
+  {\r
+    tail_append(new_math(math_surround, before));\r
+    cur_mlist = p;\r
+    cur_style = text_style;\r
+    mlist_penalties = (mode > 0);\r
+    mlist_to_hlist();\r
+    link(tail) = link(temp_head);\r
+\r
+    while (link(tail) != 0)\r
+      tail = link(tail);\r
+\r
+    tail_append(new_math(math_surround, after));\r
+    space_factor = 1000;\r
+    unsave();\r
+  }\r
+  else\r
+  {\r
+    if (a == 0)\r
+    {\r
+      get_x_token();\r
+\r
+      if (cur_cmd != math_shift)\r
+      {\r
+        print_err("Display math should end with $$");\r
+        help2("The `$' that I just saw supposedly matches a previous `$$'.",\r
+            "So I shall assume that you typed `$$' both times.");\r
+        back_error();\r
+      }\r
+    }\r
+\r
+    cur_mlist = p;\r
+    cur_style = display_style;\r
+    mlist_penalties = false;\r
+    mlist_to_hlist();\r
+    p = link(temp_head);\r
+    adjust_tail = adjust_head;\r
+    b = hpack(p, 0, 1);\r
+    p = list_ptr(b);\r
+    t = adjust_tail;\r
+    adjust_tail = 0;\r
+    w = width(b);\r
+    z = display_width;\r
+    s = display_indent;\r
+\r
+    if ((a == 0) || danger)\r
+    {\r
+      e = 0;\r
+      q = 0;\r
+    }\r
+    else\r
+    {\r
+      e = width(a);\r
+      q = e + math_quad(text_size);\r
+    }\r
+\r
+    if (w + q > z)\r
+    {\r
+      if ((e != 0) && ((w - total_shrink[normal] + q <= z) || (total_shrink[fil] != 0) ||\r
+        (total_shrink[fill] != 0) || (total_shrink[filll] != 0)))\r
+      {\r
+        free_node(b, box_node_size);\r
+        b = hpack(p, z - q, 0);\r
+      }\r
+      else\r
+      {\r
+        e = 0;\r
+\r
+        if (w > z)\r
+        {\r
+          free_node(b, box_node_size);\r
+          b = hpack(p, z, 0);\r
+        }\r
+      }\r
+      w = width(b);\r
+    }\r
+\r
+    d = half(z - w);\r
+\r
+    if ((e > 0) && (d < 2 * e))\r
+    {\r
+      d = half(z - w - e);\r
+\r
+      if (p != 0)\r
+        if (!is_char_node(p))\r
+          if (type(p) == glue_node)\r
+            d = 0;\r
+    }\r
+\r
+    tail_append(new_penalty(pre_display_penalty));\r
+\r
+    if ((d + s <= pre_display_size) || l)\r
+    {\r
+      g1 = above_display_skip_code;\r
+      g2 = below_display_skip_code;\r
+    }\r
+    else\r
+    {\r
+      g1 = above_display_short_skip_code;\r
+      g2 = below_display_short_skip_code;\r
+    }\r
+    if (l && (e == 0))\r
+    {\r
+      shift_amount(a) = s;\r
+      append_to_vlist(a);\r
+      tail_append(new_penalty(10000));\r
+    }\r
+    else\r
+    {\r
+      tail_append(new_param_glue(g1));\r
+    }\r
+\r
+    if (e != 0)\r
+    {\r
+      r = new_kern(z - w - e - d);\r
+\r
+      if (l)\r
+      {\r
+        link(a) = r;\r
+        link(r) = b;\r
+        b = a;\r
+        d = 0;\r
+      }\r
+      else\r
+      {\r
+        link(b) = r;\r
+        link(r) = a;\r
+      }\r
+      b = hpack(b, 0, 1);\r
+    }\r
+\r
+    shift_amount(b) = s + d;\r
+    append_to_vlist(b);\r
+\r
+    if ((a != 0) && (e == 0) && !l)\r
+    {\r
+      tail_append(new_penalty(10000));\r
+      shift_amount(a) = s + z - width(a);\r
+      append_to_vlist(a);\r
+      g2 = 0;\r
+    }\r
+\r
+    if (t != adjust_head)\r
+    {\r
+      link(tail) = link(adjust_head);\r
+      tail = t;\r
+    }\r
+\r
+    tail_append(new_penalty(post_display_penalty));\r
+\r
+    if (g2 > 0)\r
+    {\r
+      tail_append(new_param_glue(g2));\r
+    }\r
+\r
+    resume_after_display();\r
+  }\r
+}\r
+/* sec 1200 */\r
+void resume_after_display (void)\r
+{\r
+  if (cur_group != math_shift_group)\r
+  {\r
+    confusion("display");\r
+    return;\r
+  }\r
+\r
+  unsave();\r
+  prev_graf = prev_graf + 3;\r
+  push_nest();\r
+  mode = hmode;\r
+  space_factor = 1000;\r
+  set_cur_lang();\r
+  clang = cur_lang;\r
+  prev_graf =(norm_min(left_hyphen_min) * 64 + norm_min(right_hyphen_min)) * 65536L + cur_lang;\r
+\r
+  {\r
+    get_x_token();\r
+\r
+    if (cur_cmd != spacer)\r
+      back_input();\r
+  }\r
+\r
+  if (nest_ptr == 1)\r
+    build_page();\r
+}\r
+/* sec 1215 */\r
+void get_r_token (void)\r
+{\r
+restart:\r
+  do\r
+    {\r
+      get_token();\r
+    }\r
+  while (!(cur_tok != space_token));\r
+\r
+  if ((cur_cs == 0) || (cur_cs > frozen_control_sequence))\r
+  {\r
+    print_err("Missing control sequence inserted");\r
+    help5("Please don't say `\\def cs{...}', say `\\def\\cs{...}'.",\r
+      "I've inserted an inaccessible control sequence so that your",\r
+      "definition will be completed without mixing me up too badly.",\r
+      "You can recover graciously from this error, if you're",\r
+      "careful; see exercise 27.2 in The TeXbook.");\r
+\r
+    if (cur_cs == 0)\r
+      back_input();\r
+\r
+    cur_tok = cs_token_flag + frozen_protection;\r
+    ins_error();\r
+    goto restart;\r
+  }\r
+}\r
+/* sec 1229 */\r
+void trap_zero_glue (void)\r
+{\r
+  if ((width(cur_val) == 0) && (stretch(cur_val) == 0) && (shrink(cur_val) == 0))\r
+  {\r
+    add_glue_ref(zero_glue);\r
+    delete_glue_ref(cur_val);\r
+    cur_val = 0;\r
+  }\r
+}\r
+/* sec 1236 */\r
+void do_register_command (small_number a)\r
+{\r
+  pointer l, q, r, s;\r
+  char p;\r
+\r
+  q = cur_cmd;\r
+\r
+  {\r
+    if (q != tex_register)\r
+    {\r
+      get_x_token();\r
+\r
+      if ((cur_cmd >= assign_int) && (cur_cmd <= assign_mu_glue))\r
+      {\r
+        l = cur_chr;\r
+        p = cur_cmd - assign_int;\r
+        goto found;\r
+      }\r
+\r
+      if (cur_cmd != tex_register)\r
+      {\r
+        print_err("You can't use `");\r
+        print_cmd_chr(cur_cmd, cur_chr);\r
+        prints("' after ");\r
+        print_cmd_chr(q, 0);\r
+        help1("I'm forgetting what you said and not changing anything.");\r
+        error();\r
+        return;\r
+      }\r
+    }\r
+\r
+    p = cur_chr;\r
+    scan_eight_bit_int();\r
+\r
+    switch (p)\r
+    {\r
+      case int_val:\r
+        l = cur_val + count_base;\r
+        break;\r
+\r
+      case dimen_val:\r
+        l = cur_val + scaled_base;\r
+        break;\r
+\r
+      case glue_val:\r
+        l = cur_val + skip_base;\r
+        break;\r
+\r
+      case mu_val:\r
+        l = cur_val + mu_skip_base;\r
+        break;\r
+    }\r
+  }\r
+\r
+found:\r
+  if (q == tex_register)\r
+    scan_optional_equals();\r
+  else if (scan_keyword("by"))\r
+    do_nothing();\r
+\r
+  arith_error = false;\r
+\r
+  if (q < multiply)\r
+    if (p < glue_val)\r
+    {\r
+      if (p == int_val)\r
+        scan_int();\r
+      else\r
+        scan_dimen(false, false, false);\r
+\r
+      if (q == advance)\r
+        cur_val = cur_val + eqtb[l].cint;\r
+    }\r
+    else\r
+    {\r
+      scan_glue(p);\r
+\r
+      if (q == advance)\r
+      {\r
+        q = new_spec(cur_val);\r
+        r = equiv(l);\r
+        delete_glue_ref(cur_val);\r
+        width(q) = width(q) + width(r);\r
+\r
+        if (stretch(q) == 0)\r
+          stretch_order(q) = normal;\r
+\r
+        if (stretch_order(q) == stretch_order(r))\r
+          stretch(q) = stretch(q) + stretch(r);\r
+        else if ((stretch_order(q) < stretch_order(r)) && (stretch(r) != 0))\r
+        {\r
+          stretch(q) = stretch(r);\r
+          stretch_order(q) = stretch_order(r);\r
+        }\r
+\r
+        if (shrink(q) == 0)\r
+          shrink_order(q) = normal;\r
+\r
+        if (shrink_order(q) == shrink_order(r))\r
+          shrink(q) = shrink(q) + shrink(r);\r
+        else if ((shrink_order(q) < shrink_order(r)) && (shrink(r) != 0))\r
+        {\r
+          shrink(q) = shrink(r);\r
+          shrink_order(q) = shrink_order(r);\r
+        }\r
+        cur_val = q;\r
+      }\r
+    }\r
+  else\r
+  {\r
+    scan_int();\r
+\r
+    if (p < glue_val)\r
+      if (q == multiply)\r
+        if (p == int_val)\r
+          cur_val = mult_integers(eqtb[l].cint, cur_val);\r
+        else\r
+          cur_val = nx_plus_y(eqtb[l].cint, cur_val, 0);\r
+      else\r
+        cur_val = x_over_n(eqtb[l].cint, cur_val);\r
+    else\r
+    {\r
+      s = equiv(l);\r
+      r = new_spec(s);\r
+\r
+      if (q == multiply)\r
+      {\r
+        width(r) = nx_plus_y(width(s), cur_val, 0);\r
+        stretch(r) = nx_plus_y(stretch(s), cur_val, 0);\r
+        shrink(r) = nx_plus_y(shrink(s), cur_val, 0);\r
+      }\r
+      else\r
+      {\r
+        width(r) = x_over_n(width(s), cur_val);\r
+        stretch(r) = x_over_n(stretch(s), cur_val);\r
+        shrink(r) = x_over_n(shrink(s), cur_val);\r
+      }\r
+      cur_val = r;\r
+    }\r
+  }\r
+\r
+  if (arith_error)\r
+  {\r
+    print_err("Arithmetic overflow");\r
+    help2("I can't carry out that multiplication or division,",\r
+        "since the result is out of range.");\r
+\r
+    if (p >= glue_val)\r
+      delete_glue_ref(cur_val);\r
+\r
+    error();\r
+    return;\r
+  }\r
+\r
+  if (p < glue_val)\r
+    word_define(l, cur_val);\r
+  else\r
+  {\r
+    trap_zero_glue();\r
+    define(l, glue_ref, cur_val);\r
+  }\r
+}\r
+/* sec 1243 */\r
+void alter_aux (void)\r
+{\r
+  halfword c;\r
+\r
+  if (cur_chr != abs(mode))\r
+    report_illegal_case();\r
+  else\r
+  {\r
+    c = cur_chr;\r
+    scan_optional_equals();\r
+\r
+    if (c == vmode)\r
+    {\r
+      scan_dimen(false, false, false);\r
+      prev_depth = cur_val;\r
+    }\r
+    else\r
+    {\r
+      scan_int();\r
+\r
+      if ((cur_val <= 0) || (cur_val > 32767))\r
+      {\r
+        print_err("Bad space factor");\r
+        help1("I allow only values in the range 1..32767 here.");\r
+        int_error(cur_val);\r
+      }\r
+      else\r
+        space_factor = cur_val;\r
+    }\r
+  }\r
+}\r
+/* sec 1244 */\r
+void alter_prev_graf (void)\r
+{\r
+  integer p;\r
+\r
+  nest[nest_ptr] = cur_list;\r
+  p = nest_ptr;\r
+\r
+  while (abs(nest[p].mode_field) != vmode)\r
+    decr(p);\r
+\r
+  scan_optional_equals();\r
+  scan_int();\r
+\r
+  if (cur_val < 0)\r
+  {\r
+    print_err("Bad ");\r
+    print_esc("prevgraf");\r
+    help1("I allow only nonnegative values here.");\r
+    int_error(cur_val);\r
+  }\r
+  else\r
+  {\r
+    nest[p].pg_field = cur_val;\r
+    cur_list = nest[nest_ptr];\r
+  }\r
+}\r
+/* sec 1245 */\r
+void alter_page_so_far (void)\r
+{\r
+  char c;\r
+\r
+  c = cur_chr;\r
+  scan_optional_equals();\r
+  scan_dimen(false, false, false);\r
+  page_so_far[c] = cur_val;\r
+}\r
+/* sec 1246 */\r
+void alter_integer (void)\r
+{\r
+  char c;\r
+\r
+  c = cur_chr;\r
+  scan_optional_equals();\r
+  scan_int();\r
+\r
+  if (c == 0)\r
+    dead_cycles = cur_val;\r
+  else\r
+    insert_penalties = cur_val;\r
+}\r
+/* sec 1247 */\r
+void alter_box_dimen (void)\r
+{\r
+  small_number c;\r
+  eight_bits b;\r
+\r
+  c = cur_chr;\r
+  scan_eight_bit_int();\r
+  b = cur_val;\r
+  scan_optional_equals();\r
+  scan_dimen(false, false, false);\r
+\r
+  if (box(b) != 0)\r
+    mem[box(b) + c].cint = cur_val;\r
+}\r
+/* sec 1257 */\r
+void new_font (small_number a)\r
+{\r
+  pointer u;\r
+  scaled s;\r
+  internal_font_number f;\r
+  str_number t;\r
+  char old_setting;\r
+  str_number flushable_string;\r
+\r
+  if (job_name == 0)\r
+    open_log_file();\r
+\r
+  get_r_token();\r
+  u = cur_cs;\r
+\r
+  if (u >= hash_base)\r
+    t = text(u);\r
+  else if (u >= single_base)\r
+    if (u == null_cs)\r
+      t = 1213; /* FONT */\r
+    else\r
+      t = u - single_base;\r
+  else\r
+  {\r
+    old_setting = selector;\r
+    selector = new_string;\r
+    prints("FONT");\r
+    print(u - active_base);\r
+    selector = old_setting;\r
+    str_room(1);\r
+    t = make_string();\r
+  }\r
+\r
+  define(u, set_font, null_font);\r
+  scan_optional_equals();\r
+  scan_file_name();\r
+\r
+  name_in_progress = true;\r
+\r
+  if (scan_keyword("at"))\r
+  {\r
+    scan_dimen(false, false, false);\r
+    s = cur_val; \r
+\r
+    if ((s <= 0) || (s >= 134217728L)) /* 2^27 */\r
+    {\r
+      print_err("Improper `at' size (");\r
+      print_scaled(s);\r
+      prints("pt), replaced by 10pt");\r
+      help2("I can only handle fonts at positive sizes that are",\r
+        "less than 2048pt, so I've changed what you said to 10pt.");\r
+      error();\r
+      s = 10 * unity;\r
+    }\r
+  }\r
+  else if (scan_keyword("scaled"))\r
+  {\r
+    scan_int();\r
+    s = -cur_val;\r
+\r
+    if ((cur_val <= 0) || (cur_val > 32768L))\r
+    {\r
+      print_err("Illegal magnification has been changed to 1000");\r
+      help1("The magnification ratio must be between 1 and 32768.");\r
+      int_error(cur_val);\r
+      s = -1000;\r
+    }\r
+  }\r
+  else\r
+    s = -1000;\r
+\r
+  name_in_progress = false;\r
+\r
+  flushable_string = str_ptr - 1;\r
+\r
+  if (trace_flag)\r
+  {\r
+    int i, k1, k2, l1, l2;\r
+    char *sch = log_line;\r
+    k1 = str_start[cur_area];\r
+    k2 = str_start[cur_name];\r
+    l1 = length(cur_area);\r
+    l2 = length(cur_name);\r
+    wterm_cr();\r
+    puts("FONT ");\r
+\r
+    for (i = 0; i < l1; i++)\r
+    {\r
+      *sch++ = str_pool[i + k1];\r
+    }\r
+\r
+    for (i = 0; i < l2; i++)\r
+    {\r
+      *sch++ = str_pool[i + k2];\r
+    }\r
+\r
+    *sch++ = ' ';\r
+    *sch++ = '\0';\r
+    show_line(log_line, 0);\r
+  }\r
+\r
+  for (f = font_base + 1; f < font_ptr; f++)\r
+  {\r
+    if (str_eq_str(font_name[f], cur_name) && str_eq_str(font_area[f], cur_area))\r
+    {\r
+      if (cur_name == flushable_string)\r
+      {\r
+        flush_string();\r
+        cur_name = font_name[f];\r
+      }\r
+\r
+      if (s > 0)\r
+      {\r
+        if (s == font_size[f])\r
+        {\r
+          if (ignore_frozen == 0 || f > frozen_font_ptr)\r
+          {\r
+            if (trace_flag)\r
+              printf("SKIPPING %lld ", s);\r
+\r
+            goto common_ending;\r
+          }\r
+        }\r
+      }\r
+      else if (font_size[f] == xn_over_d(font_dsize[f], - (integer) s, 1000))\r
+      {\r
+        if (ignore_frozen == 0 || f > frozen_font_ptr)\r
+        {\r
+          if (trace_flag)\r
+            printf("SKIPPING %lld ", s);\r
+          goto common_ending;\r
+        }\r
+      }\r
+    }\r
+  }\r
+\r
+  if (trace_flag)\r
+    show_line("READING ", 0);\r
+\r
+  f = read_font_info(u, cur_name, cur_area, s); \r
+\r
+common_ending:\r
+  if (trace_flag)\r
+    printf("NEW FONT %lld ", f);\r
+\r
+  equiv(u) = f;\r
+  eqtb[font_id_base + f] = eqtb[u];\r
+  font_id_text(f) = t;\r
+}\r
+/* sec 1265 */\r
+void new_interaction (void)\r
+{\r
+  print_ln();\r
+  interaction = cur_chr;\r
+\r
+  if (interaction == batch_mode)\r
+    selector = no_print;\r
+  else\r
+    selector = term_only;\r
+\r
+  if (log_opened)\r
+    selector = selector + 2;\r
+}\r
+/* sec 1270 */\r
+void do_assignments (void)\r
+{\r
+  while (true)\r
+  {\r
+    do\r
+      {\r
+        get_x_token();\r
+      }\r
+    while (!((cur_cmd != spacer) && (cur_cmd != relax)));\r
+\r
+    if (cur_cmd <= max_non_prefixed_command)\r
+      return;\r
+\r
+    set_box_allowed = false;\r
+    prefixed_command();\r
+    set_box_allowed = true;\r
+  }\r
+}\r
+/* sec 1275 */\r
+void open_or_close_in (void)\r
+{\r
+  char c;\r
+  char n;\r
+\r
+  c = cur_chr;\r
+  scan_four_bit_int();\r
+  n = cur_val;\r
+\r
+  if (read_open[n] != closed)\r
+  {\r
+    a_close(read_file[n]);\r
+    read_open[n] = closed;\r
+  }\r
+\r
+  if (c != 0)\r
+  {\r
+    scan_optional_equals();\r
+    scan_file_name();\r
+    pack_file_name(cur_name, cur_area, cur_ext);\r
+\r
+    if ((cur_ext != 335) && a_open_in(read_file[n], kpse_tex_format))\r
+      read_open[n] = 1;\r
+    else if ((cur_ext != 785) && (name_length + 5 < file_name_size))\r
+    {\r
+      strncpy((char *) name_of_file + name_length + 1, ".tex ", 5);\r
+      name_length = name_length + 4;\r
+\r
+      if (a_open_in(read_file[n], kpse_tex_format))\r
+        read_open[n] = just_open;\r
+      else\r
+      {\r
+        name_length = name_length - 4;\r
+        name_of_file[name_length + 1] = ' ';\r
+\r
+        if ((cur_ext == 335) && a_open_in(read_file[n], kpse_tex_format))\r
+          read_open[n] = just_open;\r
+      }\r
+    }\r
+  }\r
+}\r
+/* sec 1279 */\r
+void issue_message (void)\r
+{\r
+  char old_setting;\r
+  char c;\r
+  str_number s;\r
+\r
+  c = cur_chr;\r
+  link(garbage) = scan_toks(false, true);\r
+  old_setting = selector;\r
+  selector = new_string;\r
+  token_show(def_ref);\r
+  selector = old_setting;\r
+  flush_list(def_ref);\r
+  str_room(1);\r
+  s = make_string();\r
+\r
+  if (c == 0)\r
+  {\r
+    if (term_offset + length(s) > max_print_line - 2)\r
+      print_ln();\r
+    else if ((term_offset > 0) || (file_offset > 0))\r
+      print_char(' ');\r
+\r
+    slow_print(s);\r
+    update_terminal();\r
+  }\r
+  else\r
+  {\r
+    print_err("");\r
+    slow_print(s);\r
+\r
+    if (err_help != 0)\r
+      use_err_help = true;\r
+    else if (long_help_seen)\r
+      help1("(That was another \\errmessage.)");\r
+    else\r
+    {\r
+      if (interaction < error_stop_mode)\r
+        long_help_seen = true;\r
+\r
+      help4("This error message was generated by an \\errmessage",\r
+        "command, so I can't give any explicit help.",\r
+        "Pretend that you're Hercule Poirot: Examine all clues,",\r
+        "and deduce the truth by order and method.");\r
+    }\r
+\r
+    error();\r
+    use_err_help = false;\r
+  }\r
+\r
+  flush_string();\r
+}\r
+/* sec 1288 */\r
+void shift_case (void)\r
+{\r
+  pointer b;\r
+  pointer p;\r
+  halfword t;\r
+  eight_bits c;\r
+\r
+  b = cur_chr;\r
+  p = scan_toks(false, false);\r
+  p = link(def_ref);\r
+\r
+  while (p != 0)\r
+  {\r
+    t = info(p); \r
+\r
+    if (t < cs_token_flag + single_base)\r
+    {\r
+      c = t % 256;\r
+\r
+      if (equiv(b + c) != 0)\r
+        info(p) = t - c + equiv(b + c);\r
+    }\r
+\r
+    p = link(p);\r
+  }\r
+\r
+  begin_token_list(link(def_ref), 3);\r
+  free_avail(def_ref);\r
+}\r
+/* sec 1293 */\r
+void show_whatever (void)\r
+{\r
+  pointer p;\r
+\r
+  switch (cur_chr)\r
+  {\r
+    case show_lists:\r
+      {\r
+        begin_diagnostic();\r
+        show_activities();\r
+      }\r
+      break;\r
+\r
+    case show_box_code:\r
+      {\r
+        scan_eight_bit_int();\r
+        begin_diagnostic();\r
+        print_nl("> \\box");\r
+        print_int(cur_val);\r
+        print_char('=');\r
+\r
+        if (box(cur_val) == 0)\r
+          prints("void");\r
+        else\r
+          show_box(box(cur_val));\r
+      }\r
+      break;\r
+\r
+    case show_code:\r
+      {\r
+        get_token();\r
+\r
+        if (interaction == error_stop_mode)\r
+          wake_up_terminal();\r
+\r
+        print_nl("> ");\r
+\r
+        if (cur_cs != 0)\r
+        {\r
+          sprint_cs(cur_cs);\r
+          print_char('=');\r
+        }\r
+\r
+        print_meaning();\r
+        goto common_ending;\r
+      }\r
+      break;\r
+\r
+    default:\r
+      {\r
+        p = the_toks();\r
+\r
+        if (interaction == error_stop_mode)\r
+          wake_up_terminal();\r
+\r
+        print_nl("> ");\r
+        token_show(temp_head);\r
+        flush_list(link(temp_head));\r
+        goto common_ending;\r
+      }\r
+      break;\r
+  }\r
+\r
+  end_diagnostic(true);\r
+  print_err("OK");\r
+\r
+  if (selector == term_and_log)\r
+    if (tracing_online <= 0)\r
+    {\r
+      selector = term_only;\r
+      prints(" (see the transcript file)");\r
+      selector = term_and_log;\r
+    }\r
+\r
+common_ending:\r
+\r
+  if (interaction < error_stop_mode)\r
+  {\r
+    help_ptr = 0;\r
+    decr(error_count);\r
+  }\r
+  else if (tracing_online > 0)\r
+  {\r
+    help3("This isn't an error message; I'm just \\showing something.",\r
+      "Type `I\\show...' to show more (e.g., \\show\\cs,",\r
+      "\\showthe\\count10, \\showbox255, \\showlists).");\r
+  }\r
+  else\r
+  {\r
+    help5("This isn't an error message; I'm just \\showing something.",\r
+      "Type `I\\show...' to show more (e.g., \\show\\cs,",\r
+      "\\showthe\\count10, \\showbox255, \\showlists).",\r
+      "And type `I\\tracingonline=1\\show...' to show boxes and",\r
+      "lists on your terminal as well as in the transcript file.");\r
+  }\r
+\r
+  error();\r
+}\r
+/* sec 1349 */\r
+void new_whatsit_(small_number s, small_number w)\r
+{\r
+  pointer p;\r
+\r
+  p = get_node(w);\r
+  type(p) = whatsit_node;\r
+  subtype(p) = s;\r
+  link(tail) = p;\r
+  tail = p;\r
+}\r
+/* sec 1350 */\r
+void new_write_whatsit (small_number w)\r
+{\r
+  new_whatsit(cur_chr, w);\r
+\r
+  if (w != write_node_size)\r
+    scan_four_bit_int();\r
+  else\r
+  {\r
+    scan_int();\r
+\r
+    if (cur_val < 0)\r
+      cur_val = 17;\r
+    else if (cur_val > 15)\r
+      cur_val = 16;\r
+  }\r
+\r
+  write_stream(tail) = cur_val;\r
+}\r
+/* sec 1348 */\r
+void do_extension (void)\r
+{\r
+  integer k;\r
+  pointer p;\r
+\r
+  switch (cur_chr)\r
+  {\r
+    case open_node:\r
+      {\r
+        new_write_whatsit(open_node_size);\r
+        scan_optional_equals();\r
+        scan_file_name();\r
+        open_name(tail) = cur_name;\r
+        open_area(tail) = cur_area;\r
+        open_ext(tail) = cur_ext;\r
+      }\r
+      break;\r
+\r
+    case write_node:\r
+      {\r
+        k = cur_cs;\r
+        new_write_whatsit(write_node_size);\r
+        cur_cs = k;\r
+        p = scan_toks(false, false);\r
+        write_tokens(tail) = def_ref;\r
+      }\r
+      break;\r
+\r
+    case close_node:\r
+      {\r
+        new_write_whatsit(write_node_size);\r
+        write_tokens(tail) = 0;\r
+      }\r
+      break;\r
+\r
+    case special_node:\r
+      {\r
+        new_whatsit(special_node, write_node_size);\r
+        write_stream(tail) = 0;\r
+        p = scan_toks(false, true);\r
+        write_tokens(tail) = def_ref;\r
+      }\r
+      break;\r
+\r
+    case immediate_code:\r
+      {\r
+        get_x_token();\r
+\r
+        if ((cur_cmd == extension) && (cur_chr <= close_node))\r
+        {\r
+          p = tail;\r
+          do_extension();\r
+          out_what(tail);\r
+          flush_node_list(tail);\r
+          tail = p;\r
+          link(p) = 0;\r
+        }\r
+        else\r
+          back_input();\r
+      }\r
+      break;\r
+\r
+    case set_language_code:\r
+      if (abs(mode) != hmode)\r
+      {\r
+        report_illegal_case();\r
+      }\r
+      else\r
+      {\r
+        new_whatsit(language_node, small_node_size);\r
+        scan_int();\r
+\r
+        if (cur_val <= 0)\r
+          clang = 0;\r
+        else if (cur_val > 255)\r
+          clang = 0;\r
+        else\r
+          clang = cur_val;\r
+\r
+        what_lang(tail) = clang;\r
+        what_lhm(tail) = norm_min(left_hyphen_min);\r
+        what_rhm(tail) = norm_min(right_hyphen_min);\r
+      }\r
+      break;\r
+\r
+    default:\r
+      {\r
+        confusion("ext1");\r
+        return;\r
+      }\r
+      break;\r
+  }\r
+}\r
+/* sec 1376 */\r
+void fix_language (void)\r
+{\r
+  /* ASCII_code l; */\r
+  int l;\r
+\r
+  if (language <= 0)\r
+    l = 0; \r
+  else if (language > 255)\r
+    l = 0;\r
+  else\r
+    l = language;\r
+\r
+  if (l != clang)\r
+  {\r
+    new_whatsit(language_node, small_node_size);\r
+    what_lang(tail) = l;\r
+    clang = l;\r
+    what_lhm(tail) = norm_min(left_hyphen_min);\r
+    what_rhm(tail) = norm_min(right_hyphen_min);\r
+  }\r
+}\r
+/* sec 1068 */\r
+void handle_right_brace (void)\r
+{\r
+  pointer p, q;\r
+  scaled d;\r
+  integer f;\r
+\r
+  switch (cur_group)\r
+  {\r
+    case simple_group:\r
+      unsave();\r
+      break;\r
+\r
+    case bottom_level:\r
+      {\r
+        print_err("Too many }'s");\r
+        help2("You've closed more groups than you opened.",\r
+          "Such booboos are generally harmless, so keep going.");\r
+        error();\r
+      }\r
+      break;\r
+\r
+    case semi_simple_group:\r
+    case math_shift_group:\r
+    case math_left_group:\r
+      extra_right_brace();\r
+      break;\r
+\r
+    case hbox_group:\r
+      package(0);\r
+      break;\r
+\r
+    case adjust_hbox_group:\r
+      {\r
+        adjust_tail = adjust_head;\r
+        package(0);\r
+      }\r
+      break;\r
+\r
+    case vbox_group:\r
+      {\r
+        end_graf();\r
+        package(0);\r
+      }\r
+      break;\r
+\r
+    case vtop_group:\r
+      {\r
+        end_graf();\r
+        package(vtop_code);\r
+      }\r
+      break;\r
+\r
+    case insert_group:\r
+      {\r
+        end_graf();\r
+        q = split_top_skip;\r
+        add_glue_ref(q);\r
+        d = split_max_depth;\r
+        f = floating_penalty;\r
+        unsave();\r
+        decr(save_ptr);\r
+        p = vpackage(link(head), 0, 1, max_dimen);\r
+        pop_nest();\r
+\r
+        if (saved(0) < 255)\r
+        {\r
+          tail_append(get_node(ins_node_size));\r
+          type(tail) = ins_node;\r
+          subtype(tail) = saved(0);\r
+          height(tail) = height(p) + depth(p);\r
+          ins_ptr(tail) = list_ptr(p);\r
+          split_top_ptr(tail) = q;\r
+          depth(tail) = d;\r
+          float_cost(tail) = f;\r
+        }\r
+        else\r
+        {\r
+          tail_append(get_node(small_node_size));\r
+          type(tail) = adjust_node;\r
+          subtype(tail) = 0;\r
+          adjust_ptr(tail) = list_ptr(p);\r
+          delete_glue_ref(q);\r
+        }\r
+        free_node(p, box_node_size);\r
+\r
+        if (nest_ptr == 0)\r
+          build_page();\r
+      }\r
+      break;\r
+\r
+    case output_group:\r
+      {\r
+        if ((loc != 0) || ((token_type != output_text) && (token_type != backed_up)))\r
+        {\r
+          print_err("Unbalanced output routine");\r
+          help2("Your sneaky output routine has problematic {'s and/or }'s.",\r
+            "I can't handle that very well; good luck.");\r
+          error();\r
+\r
+          do\r
+            {\r
+              get_token();\r
+            }\r
+          while (!(loc == 0));\r
+        }\r
+\r
+        end_token_list();\r
+        end_graf();\r
+        unsave();\r
+        output_active = false;\r
+        insert_penalties = 0;\r
+\r
+        if (box(255) != 0)\r
+        {\r
+          print_err("Output routine didn't use all of ");\r
+          print_esc("box");\r
+          print_int(255);\r
+          help3("Your \\output commands should empty \\box255,",\r
+            "e.g., by saying `\\shipout\\box255'.",\r
+            "Proceed; I'll discard its present contents.");\r
+          box_error(255);\r
+        }\r
+\r
+        if (tail != head)\r
+        {\r
+          link(page_tail) = link(head);\r
+          page_tail = tail;\r
+        }\r
+\r
+        if (link(page_head) != 0)\r
+        {\r
+          if (link(contrib_head) == 0)\r
+            nest[0].tail_field = page_tail;\r
+\r
+          link(page_tail) = link(contrib_head);\r
+          link(contrib_head) = link(page_head);\r
+          link(page_head) = 0;\r
+          page_tail = page_head;\r
+        }\r
+\r
+        pop_nest();\r
+        build_page();\r
+      }\r
+      break;\r
+\r
+    case disc_group:\r
+      build_discretionary();\r
+      break;\r
+\r
+    case align_group:\r
+      {\r
+        back_input();\r
+        cur_tok = cs_token_flag + frozen_cr;\r
+        print_err("Missing ");\r
+        print_esc("cr");\r
+        prints("inserted");\r
+        help1("I'm guessing that you meant to end an alignment here.");\r
+        ins_error();\r
+      }\r
+      break;\r
+\r
+    case no_align_group:\r
+      {\r
+        end_graf();\r
+        unsave();\r
+        align_peek();\r
+      }\r
+      break;\r
+\r
+    case vcenter_group:\r
+      {\r
+        end_graf();\r
+        unsave();\r
+        save_ptr = save_ptr - 2;\r
+        p = vpackage(link(head), saved(1), saved(0), max_dimen);\r
+        pop_nest();\r
+        tail_append(new_noad());\r
+        type(tail) = vcenter_noad;\r
+        math_type(nucleus(tail)) = sub_box;\r
+        info(nucleus(tail)) = p;\r
+      }\r
+      break;\r
+\r
+    case math_choice_group:\r
+      build_choices();\r
+      break;\r
+\r
+    case math_group:\r
+      {\r
+        unsave();\r
+        decr(save_ptr);\r
+        math_type(saved(0)) = sub_mlist;\r
+        p = fin_mlist(0);\r
+        info(saved(0)) = p;\r
+\r
+        if (p != 0)\r
+          if (link(p) == 0)\r
+            if (type(p) == ord_noad)\r
+            {\r
+              if (math_type(subscr(p)) == 0)\r
+                if (math_type(supscr(p)) == 0)\r
+                {\r
+                  mem[saved(0)].hh = mem[nucleus(p)].hh;\r
+                  free_node(p, noad_size);\r
+                }\r
+            }\r
+            else if (type(p) == accent_noad)\r
+              if (saved(0) == nucleus(tail))\r
+                if (type(tail) == ord_noad)\r
+                {\r
+                  q = head;\r
+\r
+                  while (link(q) != tail)\r
+                    q = link(q);\r
+\r
+                  link(q) = p;\r
+                  free_node(tail, noad_size);\r
+                  tail = p;\r
+                }\r
+      }\r
+      break;\r
+    default:\r
+      {\r
+        confusion("rightbrace");\r
+        return;\r
+      }\r
+      break;\r
+  }\r
+}\r
+/* sec 1030 */\r
+void main_control (void) \r
+{\r
+  integer t;\r
+  boolean bSuppress;\r
+\r
+  if (every_job != 0)\r
+    begin_token_list(every_job, every_job_text);\r
+\r
+big_switch:\r
+  get_x_token();\r
+\r
+reswitch:\r
+  if (interrupt != 0)\r
+    if (OK_to_interrupt)\r
+    {\r
+      back_input();\r
+      check_interrupt();\r
+      goto big_switch;\r
+    }\r
+\r
+#ifdef DEBUG\r
+  if (panicking)\r
+    check_mem(false);\r
+#endif\r
+\r
+  if (tracing_commands > 0)\r
+    show_cur_cmd_chr();\r
+\r
+  switch (abs(mode) + cur_cmd)\r
+  {\r
+    case hmode + letter:\r
+    case hmode + other_char:\r
+    case hmode + char_given:\r
+      goto main_loop;\r
+      break;\r
+\r
+    case hmode + char_num:\r
+      {\r
+        scan_char_num();\r
+        cur_chr = cur_val;\r
+        goto main_loop;\r
+      }\r
+      break;\r
+\r
+    case hmode + no_boundary:\r
+      {\r
+        get_x_token();\r
+\r
+        if ((cur_cmd == letter) || (cur_cmd == other_char) ||\r
+          (cur_cmd == char_given) || (cur_cmd == char_num))\r
+          cancel_boundary = true;\r
+        goto reswitch;\r
+      }\r
+      break;\r
+\r
+    case hmode + spacer:\r
+      if (space_factor == 1000)\r
+        goto append_normal_space;\r
+      else\r
+        app_space();\r
+      break;\r
+\r
+    case hmode + ex_space:\r
+    case mmode + ex_space:\r
+      goto append_normal_space;\r
+      break;\r
+\r
+    case any_mode(relax):\r
+    case vmode + spacer:\r
+    case mmode + spacer:\r
+    case mmode + no_boundary:\r
+      do_nothing();\r
+      break;\r
+\r
+    case any_mode(ignore_spaces):\r
+      {\r
+        do\r
+          {\r
+            get_x_token();\r
+          }\r
+        while (!(cur_cmd != spacer));\r
+        goto reswitch;\r
+      }\r
+      break;\r
+\r
+    case vmode + stop:\r
+      if (its_all_over())\r
+        return;\r
+      break;\r
+\r
+    case vmode + vmove:\r
+    case hmode + hmove:\r
+    case mmode + hmove:\r
+    case any_mode(last_item):\r
+    case vmode + vadjust:\r
+    case vmode + ital_corr:\r
+    case non_math(eq_no):\r
+    case any_mode(mac_param):\r
+      report_illegal_case();\r
+      break;\r
+\r
+    case non_math(sup_mark):\r
+    case non_math(sub_mark):\r
+    case non_math(math_char_num):\r
+    case non_math(math_given):\r
+    case non_math(math_comp):\r
+    case non_math(delim_num):\r
+    case non_math(left_right):\r
+    case non_math(above):\r
+    case non_math(radical):\r
+    case non_math(math_style):\r
+    case non_math(math_choice):\r
+    case non_math(vcenter):\r
+    case non_math(non_script):\r
+    case non_math(mkern):\r
+    case non_math(limit_switch):\r
+    case non_math(mskip):\r
+    case non_math(math_accent):\r
+    case mmode + endv:\r
+    case mmode + par_end:\r
+    case mmode + stop:\r
+    case mmode + vskip:\r
+    case mmode + un_vbox:\r
+    case mmode + valign:\r
+    case mmode + hrule:\r
+      insert_dollar_sign();\r
+      break;\r
+\r
+    case vmode + hrule:\r
+    case hmode + vrule:\r
+    case mmode + vrule:\r
+      {\r
+        tail_append(scan_rule_spec());\r
+\r
+        if (abs(mode) == vmode)\r
+          prev_depth = ignore_depth;\r
+        else if (abs(mode) == hmode)\r
+          space_factor = 1000;\r
+      }\r
+      break;\r
+\r
+    case vmode + vskip:\r
+    case hmode + hskip:\r
+    case mmode + hskip:\r
+    case mmode + mskip:\r
+      append_glue();\r
+      break;\r
+\r
+    case any_mode(kern):\r
+    case mmode + mkern:\r
+      append_kern();\r
+      break;\r
+\r
+    case non_math(left_brace):\r
+      new_save_level(simple_group);\r
+      break;\r
+\r
+    case any_mode(begin_group):\r
+      new_save_level(semi_simple_group);\r
+      break;\r
+\r
+    case any_mode(end_group):\r
+      if (cur_group == semi_simple_group)\r
+        unsave();\r
+      else\r
+        off_save();\r
+      break;\r
+\r
+    case any_mode(right_brace):\r
+      handle_right_brace();\r
+      break;\r
+\r
+    case vmode + hmove:\r
+    case hmode + vmove:\r
+    case mmode + vmove:\r
+      {\r
+        t = cur_chr;\r
+        scan_dimen(false, false, false);\r
+\r
+        if (t == 0)\r
+          scan_box(cur_val);\r
+        else\r
+          scan_box(- (integer) cur_val);\r
+      }\r
+      break;\r
+\r
+    case any_mode(leader_ship):\r
+      scan_box(leader_flag - a_leaders + cur_chr);\r
+      break;\r
+\r
+    case any_mode(make_box):\r
+      begin_box(0);\r
+      break;\r
+\r
+    case vmode + start_par:\r
+      new_graf(cur_chr > 0);\r
+      break;\r
+\r
+    case vmode + letter:\r
+    case vmode + other_char:\r
+    case vmode + char_num:\r
+    case vmode + char_given:\r
+    case vmode + math_shift:\r
+    case vmode + un_hbox:\r
+    case vmode + vrule:\r
+    case vmode + accent:\r
+    case vmode + discretionary:\r
+    case vmode + hskip:\r
+    case vmode + valign:\r
+    case vmode + ex_space:\r
+    case vmode + no_boundary:\r
+      {\r
+        back_input();\r
+        new_graf(true);\r
+      }\r
+      break;\r
+\r
+    case hmode + start_par:\r
+    case mmode + start_par:\r
+      indent_in_hmode();\r
+      break;\r
+\r
+    case vmode + par_end:\r
+      {\r
+        normal_paragraph();\r
+\r
+        if (mode > 0)\r
+          build_page();\r
+      }\r
+      break;\r
+\r
+    case hmode + par_end:\r
+      {\r
+        if (align_state < 0)\r
+          off_save();\r
+\r
+        end_graf();\r
+\r
+        if (mode == 1)\r
+          build_page();\r
+      }\r
+      break;\r
+\r
+    case hmode + stop:\r
+    case hmode + vskip:\r
+    case hmode + hrule:\r
+    case hmode + un_vbox:\r
+    case hmode + halign:\r
+      head_for_vmode();\r
+      break;\r
+\r
+    case any_mode(insert):\r
+    case hmode + vadjust:\r
+    case mmode + vadjust:\r
+      begin_insert_or_adjust();\r
+      break;\r
+\r
+    case any_mode(mark):\r
+      make_mark();\r
+      break;\r
+\r
+    case any_mode(break_penalty):\r
+      append_penalty();\r
+      break;\r
+\r
+    case any_mode(remove_item):\r
+      delete_last();\r
+      break;\r
+\r
+    case vmode + un_vbox:\r
+    case hmode + un_hbox:\r
+    case mmode + un_hbox:\r
+      unpackage();\r
+      break;\r
+\r
+    case hmode + ital_corr:\r
+      append_italic_correction();\r
+      break;\r
+\r
+    case mmode + ital_corr:\r
+      tail_append(new_kern(0));\r
+      break;\r
+\r
+    case hmode + discretionary:\r
+    case mmode + discretionary:\r
+      append_discretionary();\r
+      break;\r
+\r
+    case hmode + accent:\r
+      make_accent();\r
+      break;\r
+\r
+    case any_mode(car_ret):\r
+    case any_mode(tab_mark):\r
+      align_error();\r
+      break;\r
+\r
+    case any_mode(no_align):\r
+      noalign_error();\r
+      break;\r
+\r
+    case any_mode(omit):\r
+      omit_error();\r
+      break;\r
+\r
+    case vmode + halign:\r
+    case hmode + valign:\r
+      init_align();\r
+      break;\r
+\r
+    case mmode + halign:\r
+      if (privileged ())\r
+        if (cur_group == math_shift_group)\r
+          init_align();\r
+        else\r
+          off_save();\r
+      break;\r
+\r
+    case vmode + endv:\r
+    case hmode + endv:\r
+      do_endv();\r
+      break;\r
+\r
+    case any_mode(end_cs_name):\r
+      cs_error();\r
+      break;\r
+\r
+    case hmode + math_shift:\r
+      init_math();\r
+      break;\r
+\r
+    case mmode + eq_no:\r
+      if (privileged ())\r
+        if (cur_group == math_shift_group)\r
+          start_eq_no();\r
+        else\r
+          off_save();\r
+      break;\r
+\r
+    case mmode + left_brace:\r
+      {\r
+        tail_append(new_noad());\r
+        back_input();\r
+        scan_math(nucleus(tail));\r
+      }\r
+      break;\r
+\r
+    case mmode + letter:\r
+    case mmode + other_char:\r
+    case mmode + char_given:\r
+      set_math_char(math_code(cur_chr));\r
+      break;\r
+\r
+    case mmode + char_num:\r
+      {\r
+        scan_char_num();\r
+        cur_chr = cur_val;\r
+        set_math_char(math_code(cur_chr));\r
+      }\r
+      break;\r
+\r
+    case mmode + math_char_num:\r
+      {\r
+        scan_fifteen_bit_int();\r
+        set_math_char(cur_val);\r
+      }\r
+      break;\r
+\r
+    case mmode + math_given:\r
+      set_math_char(cur_chr);\r
+      break;\r
+\r
+    case mmode + delim_num:\r
+      {\r
+        scan_twenty_seven_bit_int();\r
+        set_math_char(cur_val / 4096);\r
+      }\r
+      break;\r
+\r
+    case mmode + math_comp:\r
+      {\r
+        tail_append(new_noad());\r
+        type(tail) = cur_chr;\r
+        scan_math(nucleus(tail));\r
+      }\r
+      break;\r
+\r
+    case mmode + limit_switch:\r
+      math_limit_switch();\r
+      break;\r
+\r
+    case mmode + radical:\r
+      math_radical();\r
+      break;\r
+\r
+    case mmode + accent:\r
+    case mmode + math_accent:\r
+      math_ac();\r
+      break;\r
+\r
+    case mmode + vcenter:\r
+      {\r
+        scan_spec(vcenter_group, false);\r
+        normal_paragraph();\r
+        push_nest();\r
+        mode = -1;\r
+        prev_depth = ignore_depth;\r
+\r
+        if (every_vbox != 0)\r
+          begin_token_list(every_vbox, every_vbox_text);\r
+      }\r
+      break;\r
+\r
+    case mmode + math_style:\r
+      tail_append(new_style(cur_chr));\r
+      break;\r
+\r
+    case mmode + non_script:\r
+      {\r
+        tail_append(new_glue(zero_glue));\r
+        subtype(tail) = cond_math_glue;\r
+      }\r
+      break;\r
+\r
+    case mmode + math_choice:\r
+      append_choices();\r
+      break;\r
+\r
+    case mmode + sub_mark:\r
+    case mmode + sup_mark:\r
+      sub_sup();\r
+      break;\r
+\r
+    case mmode + above:\r
+      math_fraction();\r
+      break;\r
+\r
+    case mmode + left_right:\r
+      math_left_right();\r
+      break;\r
+\r
+    case mmode + math_shift:\r
+      if (cur_group == math_shift_group)\r
+        after_math();\r
+      else\r
+        off_save();\r
+      break;\r
+\r
+    case any_mode(toks_register):\r
+    case any_mode(assign_toks):\r
+    case any_mode(assign_int):\r
+    case any_mode(assign_dimen):\r
+    case any_mode(assign_glue):\r
+    case any_mode(assign_mu_glue):\r
+    case any_mode(assign_font_dimen):\r
+    case any_mode(assign_font_int):\r
+    case any_mode(set_aux):\r
+    case any_mode(set_prev_graf):\r
+    case any_mode(set_page_dimen):\r
+    case any_mode(set_page_int):\r
+    case any_mode(set_box_dimen):\r
+    case any_mode(set_shape):\r
+    case any_mode(def_code):\r
+    case any_mode(def_family):\r
+    case any_mode(set_font):\r
+    case any_mode(def_font):\r
+    case any_mode(tex_register):\r
+    case any_mode(advance):\r
+    case any_mode(multiply):\r
+    case any_mode(divide):\r
+    case any_mode(prefix):\r
+    case any_mode(let):\r
+    case any_mode(shorthand_def):\r
+    case any_mode(read_to_cs):\r
+    case any_mode(def):\r
+    case any_mode(set_box):\r
+    case any_mode(hyph_data):\r
+    case any_mode(set_interaction):\r
+      prefixed_command();\r
+      break;\r
+\r
+    case any_mode(after_assignment):\r
+      {\r
+        get_token();\r
+        after_token = cur_tok;\r
+      }\r
+      break;\r
+\r
+    case any_mode(after_group):\r
+      {\r
+        get_token();\r
+        save_for_after(cur_tok);\r
+      }\r
+      break;\r
+\r
+    case any_mode(in_stream):\r
+      open_or_close_in();\r
+      break;\r
+\r
+    case any_mode(message):\r
+      issue_message();\r
+      break;\r
+\r
+    case any_mode(case_shift):\r
+      shift_case();\r
+      break;\r
+\r
+    case any_mode(xray):\r
+      show_whatever();\r
+      break;\r
+\r
+    case any_mode(extension):\r
+      do_extension();\r
+      break;\r
+  }\r
+\r
+  goto big_switch;\r
+\r
+main_loop:\r
+  adjust_space_factor();\r
+  main_f = cur_font;\r
+  bchar = font_bchar[main_f];\r
+  false_bchar = font_false_bchar[main_f];\r
+\r
+  if (mode > 0)\r
+    if (language != clang)\r
+      fix_language();\r
+\r
+  fast_get_avail(lig_stack);\r
+  font(lig_stack) = main_f;\r
+  cur_l = cur_chr;\r
+  character(lig_stack) = cur_l;\r
+  cur_q = tail;\r
+\r
+  if (cancel_boundary)\r
+  {\r
+    cancel_boundary = false;\r
+    main_k = non_address;\r
+  }\r
+  else\r
+    main_k = bchar_label[main_f];\r
+\r
+  if (main_k == non_address)\r
+    goto main_loop_move_2;\r
+\r
+  cur_r = cur_l;\r
+  cur_l = non_char;\r
+  goto main_lig_loop_1;\r
+\r
+main_loop_wrapup: \r
+  wrapup(rt_hit);\r
+\r
+main_loop_move:\r
+  if (lig_stack == 0)\r
+    goto reswitch;\r
+\r
+  cur_q = tail;\r
+  cur_l = character(lig_stack);\r
+\r
+main_loop_move_1:\r
+  if (!is_char_node(lig_stack))\r
+    goto main_loop_move_lig;\r
+\r
+main_loop_move_2:\r
+  if ((cur_chr < font_bc[main_f]) || (cur_chr > font_ec[main_f]))\r
+  {\r
+    char_warning(main_f, cur_chr);\r
+    free_avail(lig_stack);\r
+    goto big_switch;\r
+  }\r
+\r
+  main_i = char_info(main_f, cur_l);\r
+\r
+  if (!char_exists(main_i))\r
+  {\r
+    char_warning(main_f, cur_chr);\r
+    free_avail(lig_stack);\r
+    goto big_switch; \r
+  }\r
+\r
+  link(tail) = lig_stack;\r
+  tail = lig_stack;\r
+\r
+main_loop_lookahead:\r
+  get_next();\r
+\r
+  if (cur_cmd == letter)\r
+    goto main_loop_lookahead_1;\r
+\r
+  if (cur_cmd == other_char)\r
+    goto main_loop_lookahead_1;\r
+\r
+  if (cur_cmd == char_given)\r
+    goto main_loop_lookahead_1;\r
+\r
+  x_token();\r
+\r
+  if (cur_cmd == letter)\r
+    goto main_loop_lookahead_1;\r
+\r
+  if (cur_cmd == other_char)\r
+    goto main_loop_lookahead_1;\r
+\r
+  if (cur_cmd == char_given)\r
+    goto main_loop_lookahead_1;\r
+\r
+  if (cur_cmd == char_num)\r
+  {\r
+    scan_char_num();\r
+    cur_chr = cur_val;\r
+    goto main_loop_lookahead_1;\r
+  }\r
+\r
+  if (cur_cmd == no_boundary)\r
+    bchar = non_char;\r
+\r
+  cur_r = bchar;\r
+  lig_stack = 0;\r
+  goto main_lig_loop;\r
+\r
+main_loop_lookahead_1:\r
+  adjust_space_factor();\r
+  fast_get_avail(lig_stack);\r
+  font(lig_stack) = main_f;\r
+  cur_r = cur_chr;\r
+  character(lig_stack) = cur_r;\r
+\r
+  if (cur_r == false_bchar)\r
+    cur_r = non_char;\r
+\r
+main_lig_loop:\r
+  if (char_tag(main_i) != lig_tag)\r
+    goto main_loop_wrapup;\r
+\r
+  if (cur_r == non_char)\r
+    goto main_loop_wrapup;\r
+\r
+  main_k = lig_kern_start(main_f, main_i);\r
+  main_j = font_info[main_k].qqqq;\r
+\r
+  if (skip_byte(main_j) <= stop_flag)\r
+    goto main_lig_loop_2;\r
+\r
+  main_k = lig_kern_restart(main_f, main_j);\r
+\r
+main_lig_loop_1:\r
+  main_j = font_info[main_k].qqqq;\r
+\r
+main_lig_loop_2:\r
+  bSuppress = false;\r
+\r
+  if (suppress_f_ligs && next_char(main_j) == cur_r && op_byte(main_j) == no_tag)\r
+  {\r
+    if (cur_l == 'f')\r
+      bSuppress = true;\r
+  }\r
+\r
+  if (next_char(main_j) == cur_r && bSuppress == false)\r
+    if (skip_byte(main_j) <= stop_flag)\r
+    {\r
+      if (op_byte(main_j) >= kern_flag)\r
+      {\r
+        wrapup(rt_hit);\r
+        tail_append(new_kern(char_kern(main_f, main_j)));\r
+        goto main_loop_move;\r
+      }\r
+\r
+      if (cur_l == non_char)\r
+        lft_hit = true;\r
+      else if (lig_stack == 0)\r
+        rt_hit = true;\r
+\r
+      check_interrupt();\r
+\r
+      switch (op_byte(main_j))\r
+      {\r
+        case 1:\r
+        case 5:\r
+          {\r
+            cur_l = rem_byte(main_j);\r
+            main_i = char_info(main_f, cur_l);\r
+            ligature_present = true;\r
+          }\r
+          break;\r
+        case 2:\r
+        case 6:\r
+          {\r
+            cur_r = rem_byte(main_j);\r
+\r
+            if (lig_stack == 0)\r
+            {\r
+              lig_stack = new_lig_item(cur_r);\r
+              bchar = non_char;\r
+            }\r
+            else if (is_char_node(lig_stack))\r
+            {\r
+              main_p = lig_stack;\r
+              lig_stack = new_lig_item(cur_r);\r
+              lig_ptr(lig_stack) = main_p;\r
+            }\r
+            else\r
+              character(lig_stack) = cur_r;\r
+          }\r
+          break;\r
+        case 3:\r
+          {\r
+            cur_r = rem_byte(main_j);\r
+            main_p = lig_stack;\r
+            lig_stack = new_lig_item(cur_r);\r
+            link(lig_stack) = main_p;\r
+          }\r
+          break;\r
+        case 7:\r
+        case 11:\r
+          {\r
+            wrapup(false);\r
+            cur_q = tail;\r
+            cur_l = rem_byte(main_j);\r
+            main_i = char_info(main_f, cur_l);\r
+            ligature_present = true;\r
+          }\r
+          break;\r
+        default:\r
+          {\r
+            cur_l = rem_byte(main_j);\r
+            ligature_present = true;\r
\r
+            if (lig_stack == 0)\r
+              goto main_loop_wrapup;\r
+            else\r
+              goto main_loop_move_1;\r
+          }\r
+          break;\r
+      }\r
+\r
+      if (op_byte(main_j) > 4)\r
+        if (op_byte(main_j) != 7)\r
+          goto main_loop_wrapup;\r
+\r
+      if (cur_l < non_char)\r
+        goto main_lig_loop;\r
+\r
+      main_k = bchar_label[main_f];\r
+      goto main_lig_loop_1;\r
+    }\r
+\r
+    if (skip_byte(main_j) == 0)\r
+      incr(main_k);\r
+    else\r
+    {\r
+      if (skip_byte(main_j) >= stop_flag)\r
+        goto main_loop_wrapup;\r
+\r
+      main_k = main_k + skip_byte(main_j) + 1;\r
+    }\r
+\r
+    goto main_lig_loop_1;\r
+\r
+main_loop_move_lig:\r
+  main_p = lig_ptr(lig_stack);\r
+\r
+  if (main_p != 0)\r
+    tail_append(main_p);\r
+\r
+  temp_ptr = lig_stack;\r
+  lig_stack = link(temp_ptr);\r
+  free_node(temp_ptr, small_node_size);\r
+  main_i = char_info(main_f, cur_l);\r
+  ligature_present = true;\r
+\r
+  if (lig_stack == 0)\r
+    if (main_p != 0)\r
+      goto main_loop_lookahead;\r
+    else\r
+      cur_r = bchar;\r
+  else\r
+    cur_r = character(lig_stack);\r
+\r
+  goto main_lig_loop;\r
+\r
+append_normal_space:\r
+  if (space_skip == 0)\r
+  {\r
+    {\r
+      main_p = font_glue[cur_font];\r
+\r
+      if (main_p == 0)\r
+      {\r
+        main_p = new_spec(zero_glue);\r
+        main_k = param_base[cur_font] + space_code;\r
+        width(main_p) = font_info[main_k].cint;\r
+        stretch(main_p) = font_info[main_k + 1].cint;\r
+        shrink(main_p) = font_info[main_k + 2].cint;\r
+        font_glue[cur_font] = main_p;\r
+      }\r
+    }\r
+\r
+    temp_ptr = new_glue(main_p);\r
+  }\r
+  else\r
+    temp_ptr = new_param_glue(space_skip_code);\r
+\r
+  link(tail) = temp_ptr;\r
+  tail = temp_ptr;\r
+\r
+  goto big_switch;\r
+}
\ No newline at end of file