home *** CD-ROM | disk | FTP | other *** search
/ Atari FTP / ATARI_FTP_0693.zip / ATARI_FTP_0693 / Tex / Tex29 / StTeXsrc.zoo / src / cmds.c < prev    next >
C/C++ Source or Header  |  1988-03-13  |  38KB  |  1,402 lines

  1.  
  2. /*
  3.  * @(#)cmds.c 2.5 EPA
  4.  *
  5.  * Copyright 1987,1988 Pat J Monardo
  6.  *
  7.  * Redistribution of this file is permitted through
  8.  * the specifications in the file COPYING.
  9.  *
  10.  * 
  11.  */
  12.  
  13. #include "tex.h"
  14. #include "texext.h"
  15. #include "eqstack.h"
  16. #include "token.h"
  17. #include "tokenlists.h"
  18. #include "tokenstack.h"
  19. #include "scan.h"
  20. #include "evalstack.h"
  21. #include "def.h"
  22. #include "cond.h"
  23. #include "expand.h"
  24. #include "box.h"
  25. #include "boxlists.h"
  26. #include "tfm.h"
  27. #include "math.h"
  28. #include "mathlists.h"
  29. #include "align.h"
  30.  
  31. #define chr_cmd(S) \
  32.     {print(S);  print_ASCII(chr_code);}
  33.  
  34. show_cur_cmd_chr()
  35. {
  36.     begin_diagnostic();
  37.     print_nl("{");
  38.     if (mode != shown_mode) {
  39.         print_mode(mode);
  40.         print(": ");
  41.         shown_mode = mode;
  42.     }
  43.     print_cmd_chr(cur_cmd, cur_chr);
  44.     print_char('}'); 
  45.     end_diagnostic(FALSE);
  46. }
  47.  
  48. print_cmd_chr (cmd, chr_code)
  49.     qword   cmd;
  50.     hword   chr_code;
  51. {
  52.     switch (cmd)
  53.     {
  54.     case RELAX:
  55.         print_esc("relax"); 
  56.         break;
  57.  
  58.     case LEFT_BRACE:
  59.         chr_cmd("begin-group character "); 
  60.         break;
  61.  
  62.     case RIGHT_BRACE:
  63.         chr_cmd("end-group character "); 
  64.         break;
  65.  
  66.     case MATH_SHIFT:
  67.         chr_cmd("math shift character "); 
  68.         break;
  69.  
  70.     case TAB_MARK:
  71.          if (chr_code == SPAN_CODE)
  72.             print_esc("span");
  73.         else chr_cmd("alignment tab character "); 
  74.         break;
  75.  
  76.     case CAR_RET:
  77.          if (chr_code == CR_CODE)
  78.             print_esc("cr");
  79.         else print_esc("crcr"); 
  80.         break;
  81.  
  82.     case MAC_PARAM:
  83.         chr_cmd("macro parameter character "); 
  84.         break;
  85.  
  86.     case SUP_MARK:
  87.         chr_cmd("superscript character "); 
  88.         break;
  89.  
  90.     case SUB_MARK:
  91.         chr_cmd("subscript character "); 
  92.         break;
  93.  
  94.     case ENDV:
  95.         print("end of alignment template"); 
  96.         break;
  97.  
  98.     case SPACER:
  99.         chr_cmd("blank space "); 
  100.         break;
  101.  
  102.     case LETTER:
  103.         chr_cmd("the letter "); 
  104.         break;
  105.  
  106.     case OTHER_CHAR:
  107.         chr_cmd("the character "); 
  108.         break;
  109.  
  110.     case ASSIGN_GLUE:
  111.     case ASSIGN_MU_GLUE:
  112.         if (chr_code < SKIP_BASE)
  113.             print_skip_param(chr_code - GLUE_BASE);
  114.         else if (chr_code < MU_SKIP_BASE) {
  115.             print_esc("skip"); 
  116.             print_int(chr_code - SKIP_BASE);
  117.         } else {
  118.             print_esc("muskip");
  119.             print_int(chr_code - MU_SKIP_BASE);
  120.         } 
  121.         break;
  122.  
  123.     case ASSIGN_TOKS:
  124.         if (chr_code >= TOKS_BASE) {
  125.             print_esc("toks");
  126.             print_int(chr_code - TOKS_BASE);
  127.         } else {
  128.             switch (chr_code)
  129.             {
  130.             case OUTPUT_ROUTINE_LOC:
  131.                 print_esc("output"); 
  132.                 break;
  133.  
  134.             case EVERY_PAR_LOC:
  135.                 print_esc("everypar"); 
  136.                 break;
  137.  
  138.             case EVERY_MATH_LOC:
  139.                 print_esc("everymath"); 
  140.                 break;
  141.  
  142.             case EVERY_DISPLAY_LOC:
  143.                 print_esc("everydisplay"); 
  144.                 break;
  145.  
  146.             case EVERY_HBOX_LOC:
  147.                 print_esc("everyhbox"); 
  148.                 break;
  149.  
  150.             case EVERY_VBOX_LOC:
  151.                 print_esc("everyvbox"); 
  152.                 break;
  153.  
  154.             case EVERY_JOB_LOC:
  155.                 print_esc("everyjob"); 
  156.                 break;
  157.  
  158.             case EVERY_CR_LOC:
  159.                 print_esc("everycr"); 
  160.                 break;
  161.  
  162.             default:
  163.                 print_esc("errhelp"); 
  164.                 break;
  165.             }
  166.         }
  167.         break;
  168.  
  169.     case ASSIGN_INT:
  170.         if (chr_code < COUNT_BASE)
  171.             print_param(chr_code - INT_BASE);
  172.         else {
  173.             print_esc("count");
  174.             print_int(chr_code - COUNT_BASE);
  175.         } 
  176.         break;
  177.  
  178.     case ASSIGN_DIMEN:
  179.         if (chr_code < SCALED_BASE)
  180.             print_length_param(chr_code - DIMEN_BASE);
  181.         else {
  182.             print_esc("dimen");
  183.             print_int(chr_code - SCALED_BASE);
  184.         } 
  185.         break;
  186.  
  187.     case ACCENT:
  188.         print_esc("accent"); 
  189.         break;
  190.  
  191.     case ADVANCE:
  192.         print_esc("advance"); 
  193.         break;
  194.  
  195.     case AFTER_ASSIGNMENT:
  196.         print_esc("afterassignment"); 
  197.         break;
  198.  
  199.     case AFTER_GROUP:
  200.         print_esc("aftergroup"); 
  201.         break;
  202.  
  203.     case ASSIGN_FONT_DIMEN:
  204.         print_esc("fontdimen"); 
  205.         break;
  206.  
  207.     case BEGIN_GROUP:
  208.         print_esc("begingroup"); 
  209.         break;
  210.  
  211.     case BREAK_PENALTY:
  212.         print_esc("penalty"); 
  213.         break;
  214.  
  215.     case CHAR_NUM:
  216.         print_esc("char"); 
  217.         break;
  218.  
  219.     case CS_NAME:
  220.         print_esc("csname"); 
  221.         break;
  222.  
  223.     case DEF_FONT:
  224.         print_esc("font"); 
  225.         break;
  226.  
  227.     case DELIM_NUM:
  228.         print_esc("delimiter"); 
  229.         break;
  230.  
  231.     case DIVIDE:
  232.         print_esc("divide"); 
  233.         break;
  234.  
  235.     case END_CS_NAME:
  236.         print_esc("endcsname"); 
  237.         break;
  238.  
  239.     case END_GROUP:
  240.         print_esc("endgroup"); 
  241.         break;
  242.  
  243.     case EX_SPACE:
  244.         print_esc(" "); 
  245.         break;
  246.  
  247.     case EXPAND_AFTER:
  248.         print_esc("expandafter"); 
  249.         break;
  250.  
  251.     case INPUT:
  252.          if (chr_code == 0)
  253.             print_esc("input");
  254.         else print_esc("endinput"); 
  255.         break;
  256.  
  257.     case HALIGN:
  258.         print_esc("halign"); 
  259.         break;
  260.  
  261.     case HRULE:
  262.         print_esc("hrule"); 
  263.         break;
  264.  
  265.     case IGNORE_SPACES:
  266.         print_esc("ignorespaces"); 
  267.         break;
  268.  
  269.     case INSERT:
  270.         print_esc("insert"); 
  271.         break;
  272.  
  273.     case ITAL_CORR:
  274.         print_esc("/"); 
  275.         break;
  276.  
  277.     case MARK:
  278.         print_esc("mark"); 
  279.         break;
  280.  
  281.     case TOP_BOT_MARK:
  282.         switch (chr_code)
  283.         {
  284.         case TOP_MARK_CODE:
  285.             print_esc("topmark"); 
  286.             break;
  287.  
  288.         case FIRST_MARK_CODE:
  289.             print_esc("firstmark"); 
  290.             break;
  291.  
  292.         case BOT_MARK_CODE:
  293.             print_esc("botmark"); 
  294.             break;
  295.  
  296.         case SPLIT_FIRST_MARK_CODE:
  297.             print_esc("splitfirstmark"); 
  298.             break;
  299.  
  300.         case SPLIT_BOT_MARK_CODE:
  301.             print_esc("splitbotmark"); 
  302.             break;
  303.         }
  304.         break;
  305.  
  306.     case MATH_ACCENT:
  307.         print_esc("mathaccent"); 
  308.         break;
  309.  
  310.     case MATH_CHAR_NUM:
  311.         print_esc("mathchar"); 
  312.         break;
  313.  
  314.     case MATH_CHOICE:
  315.         print_esc("mathchoice"); 
  316.         break;
  317.  
  318.     case MULTIPLY:
  319.         print_esc("multiply"); 
  320.         break;
  321.  
  322.     case NO_ALIGN:
  323.         print_esc("noalign"); 
  324.         break;
  325.  
  326.     case NO_EXPAND:
  327.         print_esc("noexpand"); 
  328.         break;
  329.  
  330.     case NON_SCRIPT:
  331.         print_esc("nonscript"); 
  332.         break;
  333.  
  334.     case OMIT:
  335.         print_esc("omit"); 
  336.         break;
  337.  
  338.     case RADICAL:
  339.         print_esc("radical"); 
  340.         break;
  341.  
  342.     case READ_TO_CS:
  343.         print_esc("read"); 
  344.         break;
  345.  
  346.     case SET_BOX:
  347.         print_esc("setbox"); 
  348.         break;
  349.  
  350.     case SET_PREV_GRAF:
  351.         print_esc("prevgraf"); 
  352.         break;
  353.  
  354.     case SET_SHAPE:
  355.         print_esc("parshape"); 
  356.         break;
  357.  
  358.     case THE:
  359.         print_esc("the"); 
  360.         break;
  361.  
  362.     case TOKS_REGISTER:
  363.         print_esc("toks"); 
  364.         break;
  365.  
  366.     case VADJUST:
  367.         print_esc("vadjust"); 
  368.         break;
  369.  
  370.     case VALIGN:
  371.         print_esc("valign"); 
  372.         break;
  373.  
  374.     case VCENTER:
  375.         print_esc("vcenter"); 
  376.         break;
  377.  
  378.     case VRULE:
  379.         print_esc("vrule"); 
  380.         break;
  381.  
  382.     case PAR_END:
  383.         print_esc("par"); 
  384.         break;
  385.  
  386.     case SET_AUX:
  387.          if (chr_code == VMODE)
  388.             print_esc("prevdepth");
  389.         else print_esc("spacefactor"); 
  390.         break;
  391.  
  392.     case SET_PAGE_INT:
  393.          if (chr_code == 0)
  394.             print_esc("deadcycles");
  395.         else print_esc("insertpenalties"); 
  396.         break;
  397.  
  398.     case SET_BOX_DIMEN:
  399.         if (chr_code == WIDTH_OFFSET)
  400.             print_esc("wd");
  401.         else if (chr_code == HEIGHT_OFFSET)
  402.             print_esc("ht");
  403.         else print_esc("dp"); 
  404.         break;
  405.  
  406.     case SET_PAGE_DIMEN:
  407.         switch (chr_code)
  408.         {
  409.         case 0:
  410.             print_esc("pagegoal"); 
  411.             break;
  412.  
  413.         case 1:
  414.             print_esc("pagetotal"); 
  415.             break;
  416.  
  417.         case 2:
  418.             print_esc("pagestretch"); 
  419.             break;
  420.  
  421.         case 3:
  422.             print_esc("pagefilstretch"); 
  423.             break;
  424.  
  425.         case 4:
  426.             print_esc("pagefillstretch"); 
  427.             break;
  428.  
  429.         case 5:
  430.             print_esc("pagefilllstretch"); 
  431.             break;
  432.  
  433.         case 6:
  434.             print_esc("pageshrink"); 
  435.             break;
  436.         }
  437.         break;
  438.  
  439.     case LAST_ITEM:
  440.          if (chr_code == INT_VAL)
  441.             print_esc("lastpenalty");
  442.         else if (chr_code == DIMEN_VAL)
  443.             print_esc("lastkern");
  444.         else print_esc("lastskip"); 
  445.         break;
  446.  
  447.     case REGISTER:
  448.          if (chr_code == INT_VAL)
  449.             print_esc("count");
  450.         else if (chr_code == DIMEN_VAL)
  451.             print_esc("dimen");
  452.         else if (chr_code == GLUE_VAL)
  453.             print_esc("skip");
  454.         else print_esc("muskip"); 
  455.         break;
  456.  
  457.     case CONVERT:
  458.         switch (chr_code)
  459.         {
  460.         case NUMBER_CODE:
  461.             print_esc("number"); 
  462.             break;
  463.  
  464.         case ROMAN_NUMERAL_CODE:
  465.             print_esc("romannumeral"); 
  466.             break;
  467.  
  468.         case STRING_CODE:
  469.             print_esc("string"); 
  470.             break;
  471.  
  472.         case MEANING_CODE:
  473.             print_esc("meaning"); 
  474.             break;
  475.  
  476.         case FONT_NAME_CODE:
  477.             print_esc("fontname"); 
  478.             break;
  479.  
  480.         default:
  481.             print_esc("jobname"); 
  482.             break;
  483.         }
  484.         break;
  485.  
  486.     case IF_TEST:
  487.         switch (chr_code)
  488.         {
  489.         case IF_CHAR_CODE:
  490.             print_esc("if"); 
  491.             break;
  492.  
  493.         case IF_CAT_CODE:
  494.             print_esc("ifcat"); 
  495.             break;
  496.  
  497.         case IF_INT_CODE:
  498.             print_esc("ifnum"); 
  499.             break;
  500.  
  501.         case IF_DIM_CODE:
  502.             print_esc("ifdim"); 
  503.             break;
  504.  
  505.         case IF_ODD_CODE:
  506.             print_esc("ifodd"); 
  507.             break;
  508.  
  509.         case IF_VMODE_CODE:
  510.             print_esc("ifvmode"); 
  511.             break;
  512.  
  513.         case IF_HMODE_CODE:
  514.             print_esc("ifhmode"); 
  515.             break;
  516.  
  517.         case IF_MMODE_CODE:
  518.             print_esc("ifmmode"); 
  519.             break;
  520.  
  521.         case IF_INNER_CODE:
  522.             print_esc("ifinner"); 
  523.             break;
  524.  
  525.         case IF_VOID_CODE:
  526.             print_esc("ifvoid"); 
  527.             break;
  528.  
  529.         case IF_HBOX_CODE:
  530.             print_esc("ifhbox"); 
  531.             break;
  532.  
  533.         case IF_VBOX_CODE:
  534.             print_esc("ifvbox"); 
  535.             break;
  536.  
  537.         case IFX_CODE:
  538.             print_esc("ifx"); 
  539.             break;
  540.  
  541.         case IF_EOF_CODE:
  542.             print_esc("ifeof"); 
  543.             break;
  544.  
  545.         case IF_TRUE_CODE:
  546.             print_esc("iftrue"); 
  547.             break;
  548.  
  549.         case IF_FALSE_CODE:
  550.             print_esc("iffalse"); 
  551.             break;
  552.  
  553.         case IF_CASE_CODE:
  554.             print_esc("ifcase"); 
  555.             break;
  556.         }
  557.         break;
  558.  
  559.     case FI_OR_ELSE:
  560.         if (chr_code == FI_CODE)
  561.             print_esc("fi");
  562.         else if (chr_code == OR_CODE)
  563.             print_esc("or");
  564.         else print_esc("else"); 
  565.         break;
  566.  
  567.     case PREFIX:
  568.         if (chr_code == 1)
  569.             print_esc("long");
  570.         else if (chr_code == 2)
  571.             print_esc("outer");
  572.         else print_esc("global"); 
  573.         break;
  574.  
  575.     case DEF:
  576.         if (chr_code == 0)
  577.             print_esc("def");
  578.         else if (chr_code == 1)
  579.             print_esc("gdef");
  580.         else if (chr_code == 2)
  581.             print_esc("edef");
  582.         else print_esc("xdef");
  583.         break;
  584.  
  585.     case LET:
  586.         if (chr_code != NORMAL)
  587.             print_esc("futurelet");
  588.         else print_esc("let"); 
  589.         break;
  590.  
  591.     case SHORTHAND_DEF:
  592.         switch (chr_code)
  593.         {
  594.         case CHAR_DEF_CODE:
  595.             print_esc("chardef"); 
  596.             break;
  597.  
  598.         case MATH_CHAR_DEF_CODE:
  599.             print_esc("mathchardef"); 
  600.             break;
  601.  
  602.         case COUNT_DEF_CODE:
  603.             print_esc("countdef"); 
  604.             break;
  605.  
  606.         case DIMEN_DEF_CODE:
  607.             print_esc("dimendef"); 
  608.             break;
  609.  
  610.         case SKIP_DEF_CODE:
  611.             print_esc("skipdef"); 
  612.             break;
  613.  
  614.         case MU_SKIP_DEF_CODE:
  615.             print_esc("muskipdef"); 
  616.             break;
  617.  
  618.         default:
  619.             print_esc("toksdef"); 
  620.             break;
  621.         }
  622.         break;
  623.  
  624.     case CHAR_GIVEN:
  625.         print_esc("char");
  626.         print_hex((val) chr_code); 
  627.         break;
  628.  
  629.     case MATH_GIVEN:
  630.         print_esc("mathchar");
  631.         print_hex((val) chr_code); 
  632.         break;
  633.  
  634.     case DEF_CODE:
  635.         if (chr_code == CAT_CODE_BASE)
  636.             print_esc("catcode");
  637.         else if (chr_code == MATH_CODE_BASE)
  638.             print_esc("mathcode");
  639.         else if (chr_code == LC_CODE_BASE)
  640.             print_esc("lccode");
  641.         else if (chr_code == UC_CODE_BASE)
  642.             print_esc("uccode");
  643.         else if (chr_code == SF_CODE_BASE)
  644.             print_esc("sfcode");
  645.         else print_esc("delcode"); 
  646.         break;
  647.  
  648.     case DEF_FAMILY:
  649.         print_size(chr_code - MATH_FONT_BASE); 
  650.         break;
  651.  
  652.     case SET_FONT:
  653.         print("select font ");
  654.         print_str(font_name[chr_code]);
  655.         if (font_size[chr_code] != font_dsize[chr_code]) {
  656.             print(" at ");
  657.             print_scaled(font_size[chr_code]);
  658.             print("pt");
  659.         } 
  660.         break;
  661.  
  662.     case ASSIGN_FONT_INT:
  663.         if (chr_code == 1)
  664.             print_esc("skewchar");
  665.         else print_esc("hyphenchar"); 
  666.         break;
  667.  
  668.     case HYPH_DATA:
  669.         if (chr_code == 1)
  670.             print_esc("patterns");
  671.         else print_esc("hyphenation"); 
  672.         break;
  673.  
  674.     case SET_INTERACTION:
  675.         switch (chr_code)
  676.         {
  677.         case BATCH_MODE:
  678.             print_esc("batchmode"); 
  679.             break;
  680.  
  681.         case NONSTOP_MODE:
  682.             print_esc("nonstop"); 
  683.             break;
  684.  
  685.         case SCROLL_MODE:
  686.             print_esc("scrollmode"); 
  687.             break;
  688.  
  689.         default:
  690.             print_esc("errorstopmode"); 
  691.             break;
  692.         }
  693.         break;
  694.  
  695.     case IN_STREAM:
  696.         if (chr_code == 0)
  697.             print_esc("closein");
  698.         else print_esc("openin"); 
  699.         break;
  700.  
  701.     case MESSAGE:
  702.         if (chr_code == 0)
  703.             print_esc("message");
  704.         else print_esc("errmessage"); 
  705.         break;
  706.  
  707.     case CASE_SHIFT:
  708.         if (chr_code == LC_CODE_BASE)   
  709.             print_esc("lowercase");
  710.         else print_esc("uppercase"); 
  711.         break;
  712.  
  713.     case XRAY:
  714.         switch (chr_code)
  715.         {
  716.         case SHOW_BOX_CODE:
  717.             print_esc("showbox"); 
  718.             break;
  719.  
  720.         case SHOW_THE_CODE:
  721.             print_esc("showthe"); 
  722.             break;
  723.  
  724.         case SHOW_LISTS:
  725.             print_esc("showlists"); 
  726.             break;
  727.  
  728.         default:
  729.             print_esc("show"); 
  730.             break;
  731.         }
  732.         break;
  733.  
  734.     case UNDEFINED_CS:
  735.         print("undefined"); 
  736.         break;
  737.  
  738.     case CALL:
  739.         print("macro"); 
  740.         break;
  741.  
  742.     case LONG_CALL:
  743.         print_esc("long macro"); 
  744.         break;
  745.  
  746.     case OUTER_CALL:
  747.         print_esc("outer macro"); 
  748.         break;
  749.  
  750.     case LONG_OUTER_CALL:
  751.         print_esc("long");
  752.         print_esc("outer macro"); 
  753.         break;
  754.  
  755.     case END_TEMPLATE:
  756.         print_esc("outer endtemplate"); 
  757.         break;
  758.  
  759.     case STOP:
  760.         if (chr_code == 1)
  761.             print_esc("dump"); 
  762.         else print_esc("end"); 
  763.         break;
  764.  
  765.     case HSKIP:
  766.         switch (chr_code)
  767.         {
  768.         case SKIP_CODE:
  769.             print_esc("hskip"); 
  770.             break;
  771.  
  772.         case FIL_CODE:
  773.             print_esc("hfil"); 
  774.             break;
  775.  
  776.         case FILL_CODE:
  777.             print_esc("hfill"); 
  778.             break;
  779.  
  780.         case SS_CODE:
  781.             print_esc("hss"); 
  782.             break;
  783.  
  784.         default:
  785.             print_esc("hfilneg"); 
  786.             break;
  787.         }
  788.         break;
  789.  
  790.     case VSKIP:
  791.         switch (chr_code)
  792.         {
  793.         case SKIP_CODE:
  794.             print_esc("vskip"); 
  795.             break;
  796.  
  797.         case FIL_CODE:
  798.             print_esc("vfil"); 
  799.             break;
  800.  
  801.         case FILL_CODE:
  802.             print_esc("vfill"); 
  803.             break;
  804.  
  805.         case SS_CODE:
  806.             print_esc("vss"); 
  807.             break;
  808.  
  809.         default:
  810.             print_esc("vfilneg"); 
  811.             break;
  812.         }
  813.         break;
  814.  
  815.     case MSKIP:
  816.         print_esc("mskip"); 
  817.         break;
  818.  
  819.     case KERN:
  820.         print_esc("kern"); 
  821.         break;
  822.  
  823.     case MKERN:
  824.         print_esc("mkern"); 
  825.         break;
  826.  
  827.     case HMOVE:
  828.         if (chr_code == 1)
  829.             print_esc("moveleft");
  830.         else print_esc("moveright"); 
  831.         break;
  832.  
  833.     case VMOVE:
  834.         if (chr_code == 1)
  835.             print_esc("raise");
  836.         else print_esc("lower"); 
  837.         break;
  838.  
  839.     case MAKE_BOX:
  840.         switch (chr_code)
  841.         {
  842.         case BOX_CODE:
  843.             print_esc("box"); 
  844.             break;
  845.  
  846.         case COPY_CODE:
  847.             print_esc("copy"); 
  848.             break;
  849.  
  850.         case LAST_BOX_CODE:
  851.             print_esc("lastbox"); 
  852.             break;
  853.  
  854.         case VSPLIT_CODE:
  855.             print_esc("vsplit"); 
  856.             break;
  857.  
  858.         case VTOP_CODE:
  859.             print_esc("vtop"); 
  860.             break;
  861.  
  862.         case VTOP_CODE + VMODE:
  863.             print_esc("vbox"); 
  864.             break;
  865.  
  866.         default:
  867.             print_esc("hbox");
  868.             break;
  869.         } 
  870.         break;
  871.  
  872.     case LEADER_SHIP:
  873.         if (chr_code == A_LEADERS)
  874.             print_esc("leaders");
  875.         else if (chr_code == C_LEADERS)
  876.             print_esc("cleaders");
  877.         else if (chr_code == X_LEADERS)
  878.             print_esc("xleaders");
  879.         else print_esc("shipout"); 
  880.         break;
  881.  
  882.     case START_PAR:
  883.         if (chr_code == 0)
  884.             print_esc("noindent");
  885.         else print_esc("indent"); 
  886.         break;
  887.  
  888.     case REMOVE_ITEM:
  889.         if (chr_code == GLUE_NODE)
  890.             print_esc("unskip");
  891.         else if (chr_code == KERN_NODE)
  892.             print_esc("unkern");
  893.         else print_esc("unpenalty"); 
  894.         break;
  895.  
  896.     case UN_HBOX:
  897.         if (chr_code == COPY_CODE)
  898.             print_esc("unhcopy");
  899.         else print_esc("unhbox"); 
  900.         break;
  901.  
  902.     case UN_VBOX:
  903.         if (chr_code == COPY_CODE)
  904.             print_esc("unvcopy");
  905.         else print_esc("unvbox"); 
  906.         break;
  907.  
  908.     case DISCRETIONARY:
  909.         if (chr_code == 1)
  910.             print_esc("-");  
  911.         else print_esc("discretionary"); 
  912.         break;
  913.  
  914.     case EQ_NO:
  915.         if (chr_code == 1)
  916.             print_esc("leqno");
  917.         else print_esc("eqno"); 
  918.         break;
  919.  
  920.     case MATH_COMP:
  921.         switch (chr_code)
  922.         {
  923.         case ORD_NOAD:
  924.             print_esc("mathord"); 
  925.             break;
  926.  
  927.         case OP_NOAD:
  928.             print_esc("mathop"); 
  929.             break;
  930.  
  931.         case BIN_NOAD:
  932.             print_esc("mathbin"); 
  933.             break;
  934.  
  935.         case REL_NOAD:
  936.             print_esc("mathrel"); 
  937.             break;
  938.  
  939.         case OPEN_NOAD:
  940.             print_esc("mathopen"); 
  941.             break;
  942.  
  943.         case CLOSE_NOAD:
  944.             print_esc("mathclose"); 
  945.             break;
  946.  
  947.         case PUNCT_NOAD:
  948.             print_esc("mathpunct"); 
  949.             break;
  950.  
  951.         case INNER_NOAD:
  952.             print_esc("mathinner"); 
  953.             break;
  954.  
  955.         case UNDER_NOAD:
  956.             print_esc("underline"); 
  957.             break;
  958.  
  959.         default:
  960.             print_esc("overline"); 
  961.             break;
  962.         }
  963.         break;
  964.  
  965.     case LIMIT_SWITCH:
  966.          if (chr_code == LIMITS)
  967.             print_esc("limits");
  968.         else if (chr_code == NO_LIMITS)
  969.             print_esc("nolimits");
  970.         else print_esc("displaylimits"); 
  971.         break;
  972.  
  973.     case MATH_STYLE:
  974.         print_style(chr_code); 
  975.         break;
  976.  
  977.     case ABOVE:
  978.         switch (chr_code)
  979.         {
  980.         case OVER_CODE:
  981.             print_esc("over"); 
  982.             break;
  983.  
  984.         case ATOP_CODE:
  985.             print_esc("atop"); 
  986.             break;
  987.  
  988.         case DELIMITED_CODE + ABOVE_CODE:
  989.             print_esc("abovewithdelims"); 
  990.             break;
  991.  
  992.         case DELIMITED_CODE + OVER_CODE:
  993.             print_esc("overwithdelims"); 
  994.             break;
  995.  
  996.         case DELIMITED_CODE + ATOP_CODE:
  997.             print_esc("atopwithdelims"); 
  998.             break;
  999.  
  1000.         default:
  1001.             print_esc("above"); 
  1002.             break;
  1003.         }
  1004.         break;
  1005.  
  1006.     case LEFT_RIGHT:
  1007.          if (chr_code == LEFT_NOAD)
  1008.             print_esc("left");
  1009.         else print_esc("right"); 
  1010.         break;
  1011.  
  1012.     case EXTENSION:
  1013.         switch (chr_code) {
  1014.         case OPEN_NODE:
  1015.             print_esc("openout"); 
  1016.             break;
  1017.  
  1018.         case WRITE_NODE:
  1019.             print_esc("write"); 
  1020.             break;
  1021.  
  1022.         case CLOSE_NODE:
  1023.             print_esc("closeout"); 
  1024.             break;
  1025.  
  1026.         case SPECIAL_NODE:
  1027.             print_esc("special"); 
  1028.             break;
  1029.  
  1030.         case IMMEDIATE_CODE:
  1031.             print_esc("immediate"); 
  1032.             break;
  1033.         }
  1034.         break;
  1035.     }
  1036.  }
  1037.  
  1038. init_cmds ()
  1039. {
  1040. #ifdef INIT
  1041. no_new_control_sequence = FALSE;
  1042. primitive("lineskip", ASSIGN_GLUE, GLUE_BASE + LINE_SKIP_CODE); 
  1043. primitive("baselineskip", ASSIGN_GLUE, GLUE_BASE + BASELINE_SKIP_CODE); 
  1044. primitive("parskip", ASSIGN_GLUE, GLUE_BASE + PAR_SKIP_CODE); 
  1045. primitive("abovedisplayskip", ASSIGN_GLUE,
  1046. GLUE_BASE + ABOVE_DISPLAY_SKIP_CODE); 
  1047. primitive("abovedisplayshortskip", ASSIGN_GLUE,
  1048. GLUE_BASE + ABOVE_DISPLAY_SHORT_SKIP_CODE); 
  1049. primitive("belowdisplayskip", ASSIGN_GLUE,
  1050. GLUE_BASE + BELOW_DISPLAY_SKIP_CODE); 
  1051. primitive("belowdisplayshortskip", ASSIGN_GLUE,
  1052. GLUE_BASE + BELOW_DISPLAY_SHORT_SKIP_CODE); 
  1053. primitive("leftskip", ASSIGN_GLUE, GLUE_BASE + LEFT_SKIP_CODE); 
  1054. primitive("rightskip", ASSIGN_GLUE, GLUE_BASE + RIGHT_SKIP_CODE); 
  1055. primitive("topskip", ASSIGN_GLUE, GLUE_BASE + TOP_SKIP_CODE); 
  1056. primitive("splittopskip", ASSIGN_GLUE, GLUE_BASE + SPLIT_TOP_SKIP_CODE); 
  1057. primitive("tabskip", ASSIGN_GLUE, GLUE_BASE + TAB_SKIP_CODE); 
  1058. primitive("spaceskip", ASSIGN_GLUE, GLUE_BASE + SPACE_SKIP_CODE); 
  1059. primitive("xspaceskip", ASSIGN_GLUE, GLUE_BASE + XSPACE_SKIP_CODE); 
  1060. primitive("parfillskip", ASSIGN_GLUE, GLUE_BASE + PAR_FILL_SKIP_CODE); 
  1061. primitive("thinmuskip", ASSIGN_MU_GLUE, GLUE_BASE + THIN_MU_SKIP_CODE); 
  1062. primitive("medmuskip", ASSIGN_MU_GLUE, GLUE_BASE + MED_MU_SKIP_CODE); 
  1063. primitive("thickmuskip", ASSIGN_MU_GLUE, GLUE_BASE + THICK_MU_SKIP_CODE); 
  1064. primitive("output", ASSIGN_TOKS, OUTPUT_ROUTINE_LOC);
  1065. primitive("everycr", ASSIGN_TOKS, EVERY_CR_LOC);
  1066. primitive("everypar", ASSIGN_TOKS, EVERY_PAR_LOC);
  1067. primitive("everymath", ASSIGN_TOKS, EVERY_MATH_LOC);
  1068. primitive("everydisplay", ASSIGN_TOKS, EVERY_DISPLAY_LOC);
  1069. primitive("everyhbox", ASSIGN_TOKS, EVERY_HBOX_LOC);
  1070. primitive("everyvbox", ASSIGN_TOKS, EVERY_VBOX_LOC);
  1071. primitive("everyjob", ASSIGN_TOKS, EVERY_JOB_LOC);
  1072. primitive("errhelp", ASSIGN_TOKS, ERR_HELP_LOC);
  1073. primitive("pretolerance", ASSIGN_INT, INT_BASE + PRETOLERANCE_CODE);
  1074. primitive("tolerance", ASSIGN_INT, INT_BASE + TOLERANCE_CODE);
  1075. primitive("linepenalty", ASSIGN_INT, INT_BASE + LINE_PENALTY_CODE);
  1076. primitive("hyphenpenalty", ASSIGN_INT, INT_BASE + HYPHEN_PENALTY_CODE);
  1077. primitive("exhyphenpenalty", ASSIGN_INT, INT_BASE + EX_HYPHEN_PENALTY_CODE);
  1078. primitive("clubpenalty", ASSIGN_INT, INT_BASE + CLUB_PENALTY_CODE);
  1079. primitive("widowpenalty", ASSIGN_INT, INT_BASE + WIDOW_PENALTY_CODE);
  1080. primitive("displaywidowpenalty", ASSIGN_INT,
  1081. INT_BASE + DISPLAY_WIDOW_PENALTY_CODE);
  1082. primitive("brokenpenalty", ASSIGN_INT, INT_BASE + BROKEN_PENALTY_CODE);
  1083. primitive("binoppenalty", ASSIGN_INT, INT_BASE + BIN_OP_PENALTY_CODE);
  1084. primitive("relpenalty", ASSIGN_INT, INT_BASE + REL_PENALTY_CODE);
  1085. primitive("predisplaypenalty", ASSIGN_INT,
  1086. INT_BASE + PRE_DISPLAY_PENALTY_CODE);
  1087. primitive("postdisplaypenalty", ASSIGN_INT,
  1088. INT_BASE + POST_DISPLAY_PENALTY_CODE);
  1089. primitive("interlinepenalty", ASSIGN_INT,
  1090. INT_BASE + INTER_LINE_PENALTY_CODE);
  1091. primitive("doublehyphendemerits", ASSIGN_INT,
  1092. INT_BASE + DOUBLE_HYPHEN_DEMERITS_CODE);
  1093. primitive("finalhyphendemerits", ASSIGN_INT,
  1094. INT_BASE + FINAL_HYPHEN_DEMERITS_CODE);
  1095. primitive("adjdemerits", ASSIGN_INT, INT_BASE + ADJ_DEMERITS_CODE);
  1096. primitive("mag", ASSIGN_INT, INT_BASE + MAG_CODE);
  1097. primitive("delimiterfactor", ASSIGN_INT, INT_BASE + DELIMITER_FACTOR_CODE);
  1098. primitive("looseness", ASSIGN_INT, INT_BASE + LOOSENESS_CODE);
  1099. primitive("time", ASSIGN_INT, INT_BASE + TIME_CODE);
  1100. primitive("day", ASSIGN_INT, INT_BASE + DAY_CODE);
  1101. primitive("month", ASSIGN_INT, INT_BASE + MONTH_CODE);
  1102. primitive("year", ASSIGN_INT, INT_BASE + YEAR_CODE);
  1103. primitive("showboxbreadth", ASSIGN_INT, INT_BASE + SHOW_BOX_BREADTH_CODE);
  1104. primitive("showboxdepth", ASSIGN_INT, INT_BASE + SHOW_BOX_DEPTH_CODE);
  1105. primitive("hbadness", ASSIGN_INT, INT_BASE + HBADNESS_CODE);
  1106. primitive("vbadness", ASSIGN_INT, INT_BASE + VBADNESS_CODE);
  1107. primitive("pausing", ASSIGN_INT, INT_BASE + PAUSING_CODE);
  1108. primitive("tracingonline", ASSIGN_INT, INT_BASE + TRACING_ONLINE_CODE);
  1109. primitive("tracingmacros", ASSIGN_INT, INT_BASE + TRACING_MACROS_CODE);
  1110. primitive("tracingstats", ASSIGN_INT, INT_BASE + TRACING_STATS_CODE);
  1111. primitive("tracingoutput", ASSIGN_INT, INT_BASE + TRACING_OUTPUT_CODE);
  1112. primitive("tracingparagraphs", ASSIGN_INT, INT_BASE + TRACING_PARAGRAPHS_CODE);
  1113. primitive("tracingpages", ASSIGN_INT, INT_BASE + TRACING_PAGES_CODE);
  1114. primitive("tracinglostchars", ASSIGN_INT, INT_BASE + TRACING_LOST_CHARS_CODE);
  1115. primitive("tracingcommands", ASSIGN_INT, INT_BASE + TRACING_COMMANDS_CODE);
  1116. primitive("tracingrestores", ASSIGN_INT, INT_BASE + TRACING_RESTORES_CODE);
  1117. primitive("uchyph", ASSIGN_INT, INT_BASE + UC_HYPH_CODE);
  1118. primitive("outputpenalty", ASSIGN_INT, INT_BASE + OUTPUT_PENALTY_CODE);
  1119. primitive("maxdeadcycles", ASSIGN_INT, INT_BASE + MAX_DEAD_CYCLES_CODE);
  1120. primitive("floatingpenalty", ASSIGN_INT, INT_BASE + FLOATING_PENALTY_CODE);
  1121. primitive("globaldefs", ASSIGN_INT, INT_BASE + GLOBAL_DEFS_CODE);
  1122. primitive("fam", ASSIGN_INT, INT_BASE + CUR_FAM_CODE);
  1123. primitive("escapechar", ASSIGN_INT, INT_BASE + ESCAPE_CHAR_CODE);
  1124. primitive("defaulthyphenchar", ASSIGN_INT, INT_BASE + DEFAULT_HYPHEN_CHAR_CODE);
  1125. primitive("defaultskewchar", ASSIGN_INT, INT_BASE + DEFAULT_SKEW_CHAR_CODE);
  1126. primitive("endlinechar", ASSIGN_INT, INT_BASE + END_LINE_CHAR_CODE);
  1127. primitive("newlinechar", ASSIGN_INT, INT_BASE + NEW_LINE_CHAR_CODE);
  1128. primitive("parindent", ASSIGN_DIMEN, DIMEN_BASE + PAR_INDENT_CODE);
  1129. primitive("mathsurround", ASSIGN_DIMEN, DIMEN_BASE + MATH_SURROUND_CODE);
  1130. primitive("lineskiplimit", ASSIGN_DIMEN, DIMEN_BASE + LINE_SKIP_LIMIT_CODE);
  1131. primitive("hsize", ASSIGN_DIMEN, DIMEN_BASE + HSIZE_CODE);
  1132. primitive("vsize", ASSIGN_DIMEN, DIMEN_BASE + VSIZE_CODE);
  1133. primitive("maxdepth", ASSIGN_DIMEN, DIMEN_BASE + MAX_DEPTH_CODE);
  1134. primitive("splitmaxdepth", ASSIGN_DIMEN, DIMEN_BASE + SPLIT_MAX_DEPTH_CODE);
  1135. primitive("boxmaxdepth", ASSIGN_DIMEN, DIMEN_BASE + BOX_MAX_DEPTH_CODE);
  1136. primitive("hfuzz", ASSIGN_DIMEN, DIMEN_BASE + HFUZZ_CODE);
  1137. primitive("vfuzz", ASSIGN_DIMEN, DIMEN_BASE + VFUZZ_CODE);
  1138. primitive("delimitershortfall", ASSIGN_DIMEN,
  1139. DIMEN_BASE + DELIMITER_SHORTFALL_CODE);
  1140. primitive("nulldelimiterspace", ASSIGN_DIMEN,
  1141. DIMEN_BASE + NULL_DELIMITER_SPACE_CODE);
  1142. primitive("scriptspace", ASSIGN_DIMEN, DIMEN_BASE + SCRIPT_SPACE_CODE);
  1143. primitive("predisplaysize", ASSIGN_DIMEN, DIMEN_BASE + PRE_DISPLAY_SIZE_CODE);
  1144. primitive("displaywidth", ASSIGN_DIMEN, DIMEN_BASE + DISPLAY_WIDTH_CODE);
  1145. primitive("displayindent", ASSIGN_DIMEN, DIMEN_BASE + DISPLAY_INDENT_CODE);
  1146. primitive("overfullrule", ASSIGN_DIMEN, DIMEN_BASE + OVERFULL_RULE_CODE);
  1147. primitive("hangafter", ASSIGN_INT, INT_BASE + HANG_AFTER_CODE);
  1148. primitive("hangindent", ASSIGN_DIMEN, DIMEN_BASE + HANG_INDENT_CODE);
  1149. primitive("hoffset", ASSIGN_DIMEN, DIMEN_BASE + H_OFFSET_CODE);
  1150. primitive("voffset", ASSIGN_DIMEN, DIMEN_BASE + V_OFFSET_CODE);
  1151. primitive(" ", EX_SPACE, 0);
  1152. primitive("/", ITAL_CORR, 0);
  1153. primitive("accent", ACCENT, 0);
  1154. primitive("advance", ADVANCE, 0);
  1155. primitive("afterassignment", AFTER_ASSIGNMENT, 0);
  1156. primitive("aftergroup", AFTER_GROUP, 0);
  1157. primitive("begingroup", BEGIN_GROUP, 0);
  1158. primitive("char", CHAR_NUM, 0);
  1159. primitive("csname", CS_NAME, 0);
  1160. primitive("font", DEF_FONT, 0);
  1161. primitive("fontdimen", ASSIGN_FONT_DIMEN, 0);
  1162. primitive("nullfont", SET_FONT, null_font);
  1163. eqtb[FROZEN_NULL_FONT] = eqtb[cur_val];
  1164. font_name[null_font] =
  1165. text(FROZEN_NULL_FONT) = text(cur_val);
  1166. font_area[null_font] = null_str;
  1167. primitive("delimiter", DELIM_NUM, 0);
  1168. primitive("divide", DIVIDE, 0);
  1169. primitive("endcsname", END_CS_NAME, 0);
  1170. primitive("endgroup", END_GROUP, 0);
  1171. text(FROZEN_END_GROUP) = make_str_given("endgroup");
  1172. eqtb[FROZEN_END_GROUP] = eqtb[cur_val];
  1173. primitive("expandafter", EXPAND_AFTER, 0);
  1174. primitive("halign", HALIGN, 0);
  1175. primitive("hrule", HRULE, 0);
  1176. primitive("ignorespaces", IGNORE_SPACES, 0);
  1177. primitive("insert", INSERT, 0);
  1178. primitive("mark", MARK, 0);
  1179. primitive("topmark", TOP_BOT_MARK, TOP_MARK_CODE);
  1180. primitive("firstmark", TOP_BOT_MARK, FIRST_MARK_CODE);
  1181. primitive("botmark", TOP_BOT_MARK, BOT_MARK_CODE);
  1182. primitive("splitfirstmark", TOP_BOT_MARK, SPLIT_FIRST_MARK_CODE);
  1183. primitive("splitbotmark", TOP_BOT_MARK, SPLIT_BOT_MARK_CODE);
  1184. primitive("mathaccent", MATH_ACCENT, 0);
  1185. primitive("mathchar", MATH_CHAR_NUM, 0);
  1186. primitive("mathchoice", MATH_CHOICE, 0);
  1187. primitive("multiply", MULTIPLY, 0);
  1188. primitive("noalign", NO_ALIGN, 0);
  1189. primitive("noexpand", NO_EXPAND, 0);
  1190. eq_type(FROZEN_DONT_EXPAND) = DONT_EXPAND;
  1191. text(FROZEN_DONT_EXPAND) = make_str_given("notexpanded:");
  1192. primitive("nonscript", NON_SCRIPT, 0);
  1193. primitive("omit", OMIT, 0);
  1194. primitive("parshape", SET_SHAPE, 0);
  1195. primitive("penalty", BREAK_PENALTY, 0);
  1196. primitive("prevgraf", SET_PREV_GRAF, 0);
  1197. primitive("radical", RADICAL, 0);
  1198. primitive("read", READ_TO_CS, 0);
  1199. primitive("relax", RELAX, 256);
  1200. text(FROZEN_RELAX) = make_str_given("relax");
  1201. eqtb[FROZEN_RELAX] = eqtb[cur_val];
  1202. primitive("setbox", SET_BOX, 0);
  1203. primitive("the", THE, 0);
  1204. primitive("toks", TOKS_REGISTER, 0);
  1205. primitive("vadjust", VADJUST, 0);
  1206. primitive("valign", VALIGN, 0);
  1207. primitive("vcenter", VCENTER, 0);
  1208. primitive("vrule", VRULE, 0);
  1209. primitive("par", PAR_END, 0);
  1210. par_loc = cur_val; par_token = CS_TOKEN_FLAG + par_loc;
  1211. primitive("count", REGISTER, INT_VAL);
  1212. primitive("dimen", REGISTER, DIMEN_VAL);
  1213. primitive("skip", REGISTER, GLUE_VAL);
  1214. primitive("muskip", REGISTER, MU_VAL);
  1215. primitive("spacefactor", SET_AUX, HMODE);
  1216. primitive("prevdepth", SET_AUX, VMODE);
  1217. primitive("deadcycles", SET_PAGE_INT, 0);
  1218. primitive("insertpenalties", SET_PAGE_INT, 1);
  1219. primitive("wd", SET_BOX_DIMEN, WIDTH_OFFSET);
  1220. primitive("ht", SET_BOX_DIMEN, HEIGHT_OFFSET);
  1221. primitive("dp", SET_BOX_DIMEN, DEPTH_OFFSET);
  1222. primitive("pagegoal", SET_PAGE_DIMEN, 0);
  1223. primitive("pagetotal", SET_PAGE_DIMEN, 1);
  1224. primitive("pagestretch", SET_PAGE_DIMEN, 2);
  1225. primitive("pagefilstretch", SET_PAGE_DIMEN, 3);
  1226. primitive("pagefillstretch", SET_PAGE_DIMEN, 4);
  1227. primitive("pagefilllstretch", SET_PAGE_DIMEN, 5);
  1228. primitive("pageshrink", SET_PAGE_DIMEN, 6);
  1229. primitive("pagedepth", SET_PAGE_DIMEN, 7);
  1230. primitive("lastpenalty", LAST_ITEM, INT_VAL);
  1231. primitive("lastkern", LAST_ITEM, DIMEN_VAL);
  1232. primitive("lastskip", LAST_ITEM, GLUE_VAL);
  1233. primitive("input", INPUT, 0);
  1234. primitive("endinput", INPUT, 1);
  1235. primitive("number", CONVERT, NUMBER_CODE);
  1236. primitive("romannumeral", CONVERT, ROMAN_NUMERAL_CODE);
  1237. primitive("string", CONVERT, STRING_CODE);
  1238. primitive("meaning", CONVERT, MEANING_CODE);
  1239. primitive("fontname", CONVERT, FONT_NAME_CODE);
  1240. primitive("jobname", CONVERT, JOB_NAME_CODE);
  1241. primitive("if", IF_TEST, IF_CHAR_CODE);
  1242. primitive("ifcat", IF_TEST, IF_CAT_CODE);
  1243. primitive("ifnum", IF_TEST, IF_INT_CODE);
  1244. primitive("ifdim", IF_TEST, IF_DIM_CODE);
  1245. primitive("ifodd", IF_TEST, IF_ODD_CODE);
  1246. primitive("ifvmode", IF_TEST, IF_VMODE_CODE);
  1247. primitive("ifhmode", IF_TEST, IF_HMODE_CODE);
  1248. primitive("ifmmode", IF_TEST, IF_MMODE_CODE);
  1249. primitive("ifinner", IF_TEST, IF_INNER_CODE);
  1250. primitive("ifvoid", IF_TEST, IF_VOID_CODE);
  1251. primitive("ifhbox", IF_TEST, IF_HBOX_CODE);
  1252. primitive("ifvbox", IF_TEST, IF_VBOX_CODE);
  1253. primitive("ifx", IF_TEST, IFX_CODE);
  1254. primitive("ifeof", IF_TEST, IF_EOF_CODE);
  1255. primitive("iftrue", IF_TEST, IF_TRUE_CODE);
  1256. primitive("iffalse", IF_TEST, IF_FALSE_CODE);
  1257. primitive("ifcase", IF_TEST, IF_CASE_CODE);
  1258. primitive("fi", FI_OR_ELSE, FI_CODE); 
  1259. text(FROZEN_FI) = make_str_given("fi");
  1260. eqtb[FROZEN_FI] = eqtb[cur_val];
  1261. primitive("or", FI_OR_ELSE, OR_CODE);
  1262. primitive("else", FI_OR_ELSE, ELSE_CODE);
  1263. primitive("hskip", HSKIP, SKIP_CODE);
  1264. primitive("hfil", HSKIP, FIL_CODE);
  1265. primitive("hfill", HSKIP, FILL_CODE);
  1266. primitive("hss", HSKIP, SS_CODE);
  1267. primitive("hfilneg",  HSKIP, FIL_NEG_CODE);
  1268. primitive("vskip", VSKIP, SKIP_CODE);
  1269. primitive("vfil", VSKIP, FIL_CODE);
  1270. primitive("vfill", VSKIP, FILL_CODE);
  1271. primitive("vss", VSKIP, SS_CODE);
  1272. primitive("vfilneg", VSKIP, FIL_NEG_CODE);
  1273. primitive("mskip", MSKIP, MSKIP_CODE);
  1274. primitive("kern", KERN, EXPLICIT);
  1275. primitive("mkern", MKERN, MU_GLUE);
  1276. primitive("moveleft", HMOVE, 1);
  1277. primitive("moveright", HMOVE, 0);
  1278. primitive("raise", VMOVE, 1);
  1279. primitive("lower", VMOVE, 0);
  1280. primitive("box", MAKE_BOX, BOX_CODE);
  1281. primitive("copy", MAKE_BOX, COPY_CODE);
  1282. primitive("lastbox", MAKE_BOX, LAST_BOX_CODE);
  1283. primitive("vsplit", MAKE_BOX, VSPLIT_CODE);
  1284. primitive("vtop", MAKE_BOX, VTOP_CODE);
  1285. primitive("vbox", MAKE_BOX, VTOP_CODE + VMODE);
  1286. primitive("hbox", MAKE_BOX, VTOP_CODE + HMODE);
  1287. primitive("indent", START_PAR, 1);
  1288. primitive("noindent", START_PAR, 0);
  1289. primitive("shipout", LEADER_SHIP, A_LEADERS - 1);
  1290. primitive("leaders", LEADER_SHIP, A_LEADERS);
  1291. primitive("cleaders", LEADER_SHIP, C_LEADERS);
  1292. primitive("xleaders", LEADER_SHIP, X_LEADERS);
  1293. primitive("unpenalty", REMOVE_ITEM, PENALTY_NODE);
  1294. primitive("unkern", REMOVE_ITEM, KERN_NODE);
  1295. primitive("unskip", REMOVE_ITEM, GLUE_NODE);
  1296. primitive("unhbox", UN_HBOX, BOX_CODE);
  1297. primitive("unhcopy", UN_HBOX, COPY_CODE);
  1298. primitive("unvbox", UN_VBOX, BOX_CODE);
  1299. primitive("unvcopy", UN_VBOX, COPY_CODE);
  1300. primitive("discretionary", DISCRETIONARY, 0);
  1301. primitive("-", DISCRETIONARY, 1);
  1302. primitive("eqno", EQ_NO, 0);
  1303. primitive("leqno", EQ_NO, 1);
  1304. primitive("mathord", MATH_COMP, ORD_NOAD);
  1305. primitive("mathop", MATH_COMP, OP_NOAD);
  1306. primitive("mathbin", MATH_COMP, BIN_NOAD);
  1307. primitive("mathrel", MATH_COMP, REL_NOAD);
  1308. primitive("mathopen", MATH_COMP, OPEN_NOAD);
  1309. primitive("mathclose", MATH_COMP, CLOSE_NOAD);
  1310. primitive("mathpunct", MATH_COMP, PUNCT_NOAD);
  1311. primitive("mathinner", MATH_COMP, INNER_NOAD);
  1312. primitive("underline", MATH_COMP, UNDER_NOAD);
  1313. primitive("overline", MATH_COMP, OVER_NOAD);
  1314. primitive("displaylimits", LIMIT_SWITCH, NORMAL);
  1315. primitive("limits", LIMIT_SWITCH, LIMITS);
  1316. primitive("nolimits", LIMIT_SWITCH, NO_LIMITS);
  1317. primitive("displaystyle", MATH_STYLE, DISPLAY_STYLE);
  1318. primitive("textstyle", MATH_STYLE, TEXT_STYLE);
  1319. primitive("scriptstyle", MATH_STYLE, SCRIPT_STYLE);
  1320. primitive("scriptscriptstyle", MATH_STYLE, SCRIPT_SCRIPT_STYLE);
  1321. primitive("above", ABOVE, ABOVE_CODE);
  1322. primitive("over", ABOVE, OVER_CODE);
  1323. primitive("atop", ABOVE, ATOP_CODE);
  1324. primitive("abovewithdelims", ABOVE, DELIMITED_CODE + ABOVE_CODE);
  1325. primitive("overwithdelims", ABOVE, DELIMITED_CODE + OVER_CODE);
  1326. primitive("atopwithdelims", ABOVE, DELIMITED_CODE + ATOP_CODE);
  1327. primitive("left", LEFT_RIGHT, LEFT_NOAD);
  1328. primitive("right", LEFT_RIGHT, RIGHT_NOAD);
  1329. text(FROZEN_RIGHT) = make_str_given("right");
  1330. eqtb[FROZEN_RIGHT] = eqtb[cur_val];
  1331. primitive("span", TAB_MARK, SPAN_CODE);
  1332. primitive("cr", CAR_RET, CR_CODE);
  1333. text(FROZEN_CR) = text(cur_val);
  1334. eqtb[FROZEN_CR] = eqtb[cur_val];
  1335. primitive("crcr", CAR_RET, CR_CR_CODE);
  1336. text(FROZEN_END_TEMPLATE) = make_str_given("endtemplate");
  1337. text(FROZEN_ENDV) = text(FROZEN_END_TEMPLATE);
  1338. eq_type(FROZEN_ENDV) = ENDV;
  1339. equiv(FROZEN_ENDV) = null_list;
  1340. eq_level(FROZEN_ENDV) = LEVEL_ONE;
  1341. eqtb[FROZEN_END_TEMPLATE] = eqtb[FROZEN_ENDV];
  1342. eq_type(FROZEN_END_TEMPLATE) = END_TEMPLATE;
  1343. primitive("long", PREFIX, 1);
  1344. primitive("outer", PREFIX, 2);
  1345. primitive("global", PREFIX, 4);
  1346. primitive("def", DEF, 0);
  1347. primitive("gdef", DEF, 1);
  1348. primitive("edef", DEF, 2);
  1349. primitive("xdef", DEF, 3);
  1350. primitive("let", LET, NORMAL);
  1351. primitive("futurelet", LET, NORMAL + 1);
  1352. primitive("chardef", SHORTHAND_DEF, CHAR_DEF_CODE);
  1353. primitive("mathchardef", SHORTHAND_DEF, MATH_CHAR_DEF_CODE);
  1354. primitive("countdef", SHORTHAND_DEF, COUNT_DEF_CODE);
  1355. primitive("dimendef", SHORTHAND_DEF, DIMEN_DEF_CODE);
  1356. primitive("skipdef", SHORTHAND_DEF, SKIP_DEF_CODE);
  1357. primitive("muskipdef", SHORTHAND_DEF, MU_SKIP_DEF_CODE);
  1358. primitive("toksdef", SHORTHAND_DEF, TOKS_DEF_CODE);
  1359. primitive("catcode", DEF_CODE, CAT_CODE_BASE);
  1360. primitive("mathcode", DEF_CODE, MATH_CODE_BASE);
  1361. primitive("lccode", DEF_CODE, LC_CODE_BASE);
  1362. primitive("uccode", DEF_CODE, UC_CODE_BASE);
  1363. primitive("sfcode", DEF_CODE, SF_CODE_BASE);
  1364. primitive("delcode", DEF_CODE, DEL_CODE_BASE);
  1365. primitive("textfont", DEF_FAMILY, MATH_FONT_BASE); 
  1366. primitive("scriptfont", DEF_FAMILY, MATH_FONT_BASE + SCRIPT_SIZE);
  1367. primitive("scriptscriptfont", DEF_FAMILY, MATH_FONT_BASE + SCRIPT_SCRIPT_SIZE);
  1368. primitive("hyphenation", HYPH_DATA, 0);
  1369. primitive("patterns", HYPH_DATA, 1);
  1370. primitive("hyphenchar", ASSIGN_FONT_INT, 0);
  1371. primitive("skewchar", ASSIGN_FONT_INT, 1);
  1372. primitive("batchmode", SET_INTERACTION,  BATCH_MODE);
  1373. primitive("nonstopmode", SET_INTERACTION, NONSTOP_MODE);
  1374. primitive("scrollmode", SET_INTERACTION, SCROLL_MODE);
  1375. primitive("errorstopmode", SET_INTERACTION, ERROR_STOP_MODE);
  1376. primitive("closein", IN_STREAM, 0);
  1377. primitive("openin", IN_STREAM, 1);
  1378. primitive("message", MESSAGE, 0);
  1379. primitive("errmessage", MESSAGE, 1);
  1380. primitive("lowercase", CASE_SHIFT, LC_CODE_BASE);
  1381. primitive("uppercase", CASE_SHIFT, UC_CODE_BASE);
  1382. primitive("show", XRAY, SHOW_CODE);
  1383. primitive("showbox", XRAY, SHOW_BOX_CODE);
  1384. primitive("showthe", XRAY, SHOW_THE_CODE);
  1385. primitive("showlists", XRAY, SHOW_LISTS);
  1386. primitive("openout", EXTENSION, OPEN_NODE);
  1387. primitive("write", EXTENSION, WRITE_NODE);
  1388. write_loc = cur_val;
  1389. text(END_WRITE) = make_str_given("endwrite");
  1390. eq_level(END_WRITE) = LEVEL_ONE;
  1391. eq_type(END_WRITE) = OUTER_CALL;
  1392. equiv(END_WRITE) = NULL;
  1393. primitive("closeout", EXTENSION, CLOSE_NODE);
  1394. primitive("special", EXTENSION, SPECIAL_NODE);
  1395. primitive("immediate", EXTENSION, IMMEDIATE_CODE);
  1396. primitive("end", STOP, 0);
  1397. primitive("dump", STOP, 1);
  1398. text(FROZEN_PROTECTION) = make_str_given("inaccessible");
  1399. no_new_control_sequence = TRUE;
  1400. #endif
  1401. }
  1402.