home *** CD-ROM | disk | FTP | other *** search
/ Mega Top 1 / os2_top1.zip / os2_top1 / APPS / TEKST / CMTEX330 / SOURCE / CMD.C < prev    next >
C/C++ Source or Header  |  1992-02-19  |  37KB  |  1,579 lines

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