home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 22 gnu / 22-gnu.zip / fweb153.zip / fweb-1.53 / web / reserved.web < prev    next >
Text File  |  1995-09-23  |  50KB  |  2,183 lines

  1. @z --- reserved.web ---
  2.  
  3. FWEB version 1.53 (September 23, 1995)
  4.  
  5. Based on version 0.5 of S. Levy's CWEB [copyright (C) 1987 Princeton University]
  6.  
  7. @x-----------------------------------------------------------------------------
  8.  
  9. \Title{RESERVED}
  10.  
  11. @c
  12. @* INTRODUCTION. Reserved words are defined in this separate
  13. file, as they are used for both \FWEAVE\ and \FTANGLE.  
  14.  
  15. @m _RESERVED_ // Identifies this module to the \.{*.hweb} header files.
  16.  
  17. @A
  18. @<Possibly split into parts@>@;
  19.  
  20. @<Include files@>@;
  21. @<Typedef declarations@>@;
  22. @<Prototypes@>@;
  23. @<Global variables@>@;
  24.  
  25. $ASSERT(!(defined _FTANGLE_ || defined _FWEAVE_))@;
  26.  
  27. /* For pc's, the file is split into two compilable parts using the
  28. compiler-line macro |part|, which must equal either~1 or~2. */
  29. #if(part != 2)
  30.     @<Part 1@>@;
  31. #endif /* Part 1 */
  32.  
  33. #if(part != 1)
  34.     @<Part 2@>@;
  35. #endif /* Part 2 */
  36.  
  37. @I typedefs.hweb
  38. @I xrefs.hweb
  39. @i ccodes.hweb
  40.  
  41. @ The function prototypes must appear before the global variables.
  42. @<Proto...@>=
  43.  
  44. #include "c_type.h" /* Function prototypes for \.{common} (includes
  45.                 reserved words). */
  46.  
  47. @ We have to get the reserved words into the hash table, and the simplest
  48. way to do this is to insert them every time \FWEAVE\ is run.  That is
  49. done via the following lists and the function |save_words|. Note that
  50. (unlike Levy's original design) preprocessor commands are stored with the
  51. `\.{\#}' token, because the preprocessor vocabulary is separate from the
  52. language proper.  
  53. @^reserved words@>
  54.  
  55. Here we have a function which stores an array of reserved words.
  56.  
  57. @<Part 1@>=@[
  58.  
  59. SRTN save_words FCN((language0,words))
  60.     LANGUAGE language0 C0("The words are to be attached to this language.")@;
  61.     CONST RESERVED_WORD HUGE *words C1("Array of words to be stored.")@;
  62. {
  63. CONST RESERVED_WORD HUGE *r;
  64. LANGUAGE outer_language;
  65.  
  66. outer_language = language;
  67. language = language0;
  68. language_num = (short)lan_num(language);
  69. word_type = RESERVED_WD; // Set global flag for |id_lookup|.
  70.  
  71. for(r=words; r->type != 0; ++r)
  72.     id_lookup(x_to_ASCII(OC(r->reserved_word)),NULL,
  73.        (eight_bits)CHOICE(r->type==(eight_bits)expr, normal, r->type)); 
  74.         // Enter as reserved word.
  75.  
  76. language = outer_language;
  77. language_num = (short)lan_num(language);
  78. }
  79.  
  80. @ Here we store the reserved words, intrinsic names or keywords.
  81.  
  82. @d SAVE_ID(word_type0,language0,words)
  83.     save_id(word_type0,language0,(CONST outer_char HUGE **)(words))
  84.  
  85. @<Part 1@>=@[
  86.  
  87. SRTN save_id FCN((word_type0,language0,words))
  88.     WORD_TYPE word_type0 C0("|INTRINSIC_FCN| or |KEYWD|")@;
  89.     LANGUAGE language0 C0("They're for this language.")@;
  90.     CONST outer_char HUGE **words C1("Intrinsic names to be stored.")@;
  91. {
  92. CONST outer_char HUGE **i;
  93. LANGUAGE outer_language;
  94.  
  95. outer_language = language;
  96. language = language0;
  97. language_num = (short)lan_num(language);
  98. word_type = word_type0;
  99.  
  100. for(i=words; **i; i++)
  101.     id_lookup(x_to_ASCII(*i),
  102.         NULL,normal); /* Mark as intrinsic.
  103.                 It's an ordinary identifier; will be
  104.                 entered in index. */ 
  105.  
  106. language = outer_language;
  107. language_num = (short)lan_num(language);
  108. }
  109.  
  110. @ This routine puts a special token into the lookup table and initializes
  111. the length of the keyword. 
  112. @<Part 1@>=@[
  113.  
  114. SRTN ini_special_tokens FCN((language0,tokens))
  115.     LANGUAGE language0 C0("")@;
  116.     SPEC HUGE *tokens C1("Array of tokens to be initialized.")@;
  117. {
  118. SPEC HUGE *s;
  119. int n;
  120. name_pointer np;
  121.  
  122. /* Fill in id token for keyword. */
  123. for(s=tokens; (n=STRLEN(s->name)) != 0; s++)
  124.     {
  125.     ASCII HUGE *p = x_to_ASCII(OC(s->name));
  126.  
  127.     s->len = n;
  128.     *s->pid = ID_NUM_ptr(np,p,p+n);
  129.     np->expandable |= language0;
  130.     if(!np->x_translate) np->x_translate = 
  131.         (X_FCN (HUGE_FCN_PTR * HUGE *)(VOID))get_mem0(OC("x array"),
  132.             (unsigned long)(NUM_LANGUAGES),
  133.             sizeof(X_FCN (HUGE_FCN_PTR *)(VOID)));
  134.     np->x_translate[lan_num(language0)] = s->expand;
  135.     }
  136. }
  137.  
  138. @
  139. @<Part 1@>=@[
  140.  
  141. SRTN ini_out_tokens FCN((tokens))
  142.     SPEC HUGE *tokens C1("")@;
  143. {
  144. SPEC HUGE *s;
  145.  
  146. /* Fill in id token for keyword. */
  147. for(s=tokens; (s->len=STRLEN(s->name)) != 0; s++)
  148.     {
  149.     ASCII HUGE *p;
  150.     char HUGE *name, HUGE *p0, HUGE *p1;
  151.  
  152. /* We need a new memory area both in order to convert to |ASCII| and
  153. possibly to convert to lower case. */
  154.     name = (char HUGE *)(mod_text + 1);
  155.  
  156. /* When the \.{-U} option is used, the output tokens must be converted to
  157. lower case. */
  158.     if(lowercase_tokens)
  159.         for(p1=name, p0=(char HUGE *)s->name; *p0; p0++)
  160.             *p1++ = (ASCII)tolower(*p0);
  161.     else
  162.         STRCPY(name, s->name);
  163.  
  164.     p = to_ASCII(OC(name));
  165.  
  166.     *s->pid = ID_NUM(p,p + s->len);
  167.     }
  168.  
  169. }
  170.  
  171. @* TABLES of RESERVED WORDS.  Here are the reserved words for each language.
  172.  
  173. @*1 General identifiers.
  174. Some tokens are sufficiently special that they must be put into the table
  175. no matter what the language.
  176.  
  177. @<Part 1@>=@[
  178.  
  179. static SPEC general_tokens[] = {
  180.     {"defined",0,NULL,&id_defined}, // For the expression evaluator.
  181.     {"",0,NULL,NULL}
  182.     };
  183.  
  184. @*1 Built-in macros.
  185. @<Part 1@>=@[
  186.  
  187. static RESERVED_WORD old_WEB_words[] = {
  188.     {"_A",built_in},
  189.     {"_ABS",built_in},
  190.     {"_ASSERT",built_in},
  191.     {"_COMMENT",built_in},
  192.     {"_DATE",built_in},
  193.     {"_DAY",built_in},
  194.     {"_DECR",built_in},
  195.     {"_DEFINE",built_in},
  196.     {"_DEFINED",built_in},
  197.     {"_DO",built_in},
  198.     {"_DUMPDEF",built_in},
  199.     {"_ERROR",built_in},
  200.     {"_EVAL",built_in},
  201.     {"_GETENV",built_in},
  202.     {"_HOME",built_in},
  203.     {"_IF",built_in},
  204.     {"_IFCASE",built_in},
  205.     {"_IFDEF",built_in},
  206.     {"_IFELSE",built_in},
  207.     {"_IFNDEF",built_in},
  208.     {"_INCR",built_in},
  209.     {"_INPUT_LINE",built_in},
  210.     {"_L",built_in},
  211.     {"_LANGUAGE",built_in},
  212.     {"_LANGUAGE_NUM",built_in},
  213.     {"_LEN",built_in},
  214.     {"_M",built_in},
  215.     {"_MAX",built_in},
  216.     {"_MIN",built_in},
  217.     {"_MODULES",built_in},
  218.     {"_MODULE_NAME",built_in},
  219.     {"_NARGS",built_in},
  220.     {"_OUTPUT_LINE",built_in},
  221.     {"_P",built_in},
  222.     {"_POW",built_in},
  223.     {"_ROUTINE",built_in},
  224.     {"_SECTION_NUM",built_in},
  225.     {"_SECTIONS",built_in},
  226.     {"_STRING",built_in},
  227.     {"_TIME",built_in},
  228.     {"_TRANSLIT",built_in},
  229.     {"_U",built_in},
  230.     {"_UNDEF",built_in},
  231.     {"_UNQUOTE",built_in},
  232.     {"_VERBATIM",built_in},
  233.     {"_VERSION",built_in},
  234.     {"",0}
  235.     };
  236.  
  237. static RESERVED_WORD WEB_words[] = {
  238.     {"$A",built_in},
  239.     {"$ABS",built_in},
  240.     {"$ASSERT",built_in},
  241.     {"$_BINOP_",BINOP},
  242.     {"$_COMMA_",COMMA},
  243.     {"$COMMENT",built_in},
  244.     {"$DATE",built_in},
  245.     {"$DAY",built_in},
  246.     {"$DECR",built_in},
  247.     {"$DEFINE",built_in},
  248.     {"$DEFINED",built_in},
  249.     {"defined",EXPR_},
  250.     {"$DO",built_in},
  251.     {"$DUMPDEF",built_in},
  252.     {"$ERROR",built_in},
  253.     {"$EVAL",built_in},
  254.     {"$_EXPR",_EXPR},
  255.     {"$_EXPR_",_EXPR_},
  256.     {"$EXPR_",EXPR_},
  257.     {"$GETENV",built_in},
  258.     {"$HOME",built_in},
  259.     {"$IF",built_in},
  260.     {"$IFCASE",built_in},
  261.     {"$IFDEF",built_in},
  262.     {"$IFELSE",built_in},
  263.     {"$IFNDEF",built_in},
  264.     {"$INCR",built_in},
  265.     {"$INPUT_LINE",built_in},
  266.     {"$L",built_in},
  267.     {"$LANGUAGE",built_in},
  268.     {"$LANGUAGE_NUM",built_in},
  269.     {"$LEN",built_in},
  270.     {"$M",built_in},
  271.     {"$MAX",built_in},
  272.     {"$MIN",built_in},
  273.     {"$MODULES",built_in},
  274.     {"$MODULE_NAME",built_in},
  275.     {"$NARGS",built_in},
  276.     {"$OUTPUT_LINE",built_in},
  277.     {"$P",built_in},
  278.     {"$POW",built_in},
  279.     {"$ROUTINE",built_in},
  280.     {"$SECTION_NUM",built_in},
  281.     {"$SECTIONS",built_in},
  282.     {"$STRING",built_in},
  283.     {"$TIME",built_in},
  284.     {"$TRANSLIT",built_in},
  285.     {"$UNOP_",UNOP},
  286.     {"$U",built_in},
  287.     {"$UNDEF",built_in},
  288.     {"$UNQUOTE",built_in},
  289.     {"$VERBATIM",built_in},
  290.     {"$VERSION",built_in},
  291.     {"",0}
  292.     };
  293.  
  294. @
  295. @<Part 1@>=@[
  296.  
  297. SRTN save_WEB FCN((language0))
  298.     LANGUAGE language0 C1("")@;
  299. {
  300. save_words(language0, old_WEB_words);
  301. save_words(language0, WEB_words);
  302. }
  303.  
  304. @*1 M4 identifiers.
  305.  We don't store reserved words for \.{m4} unless the user has set
  306. the appropriate flag from the command line, namely~\.{-c++} or~\.{-m4}.
  307.  
  308. @<Part 1@>=@[
  309.  
  310. static RESERVED_WORD M4_words[] = {
  311.     {"changequote",built_in},
  312.     {"define",built_in},        
  313.     {"divert",built_in},        
  314.     {"divnum",built_in},
  315.     {"dnl",built_in},    
  316.     {"dumpdef",built_in},
  317.     {"errprint",built_in},
  318.     {"eval",built_in},    
  319.     {"ifdef",built_in},        
  320.     {"ifelse",built_in},
  321.     {"include",built_in},
  322.     {"incr",built_in},    
  323.     {"index",built_in},
  324.     {"len",built_in},    
  325.     {"maketemp",built_in},    
  326.     {"sinclude",built_in},
  327.     {"substr",built_in},     
  328.     {"syscmd",built_in},
  329.     {"translit",built_in},     
  330.     {"undefine",built_in},        
  331.     {"undivert",built_in},
  332.     {"",0}
  333.     };
  334.  
  335.  
  336. @*1 |C| identifiers.
  337.  
  338. @*2 |C| reserved words.
  339. @<Part 1@>=@[
  340.  
  341. static RESERVED_WORD C_words[] = {
  342.     {"auto",int_like}, 
  343.     {"break",case_like},
  344.     {"case",case_like}, 
  345.     {"char",int_like},
  346.     {"clock_t",int_like},    // ANSI.
  347.     {"complex",int_like},    // EXTENSION.
  348.     {"const",modifier},    // ANSI.
  349.     {"continue",case_like}, 
  350.     {"default",case_like},
  351.     {"#define",define_like}, // (Preprocessor).
  352.     {"div_t",int_like},    // ANSI.
  353.     {"do",do_like},
  354.     {"double",int_like},
  355.     {"#elif",else_like},    // ANSI (Preprocessor).
  356.     {"else",else_like},
  357.     {"#else",else_like},    // (Preprocessor).
  358.     {"#endif",if_like},     // (Preprocessor).
  359.     {"#error",if_like},    // ANSI (Preprocessor).
  360. @%    {"EXTERN",int_like},    // EXTENSION.
  361.     {"extern",extern_like}, 
  362.     {"FILE",int_like},
  363.     {"float",int_like}, 
  364.     {"fortran",int_like},    // EXTENSION.
  365.     {"fpos_t",int_like},    // ANSI.
  366.     {"for",for_like}, {"FOR",for_like}, // JAK.
  367.     {"goto",case_like}, 
  368.     {"huge",huge_like},    // EXTENSION for personal computers.
  369.     {"if",if_like},
  370.     {"#if",if_like},    // (Preprocessor).
  371.     {"#ifdef",if_like},     // (Preprocessor).
  372.     {"#ifndef",if_like},    // (Preprocessor).
  373.     {"#include",if_like},    // (Preprocesor).
  374.     {"int",int_like}, 
  375.     {"ldiv_t",int_like},    // ANSI.
  376.     {"long",int_like},
  377.     {"#line",if_like},     // (Preprocessor).
  378.     {"noalias",int_like},    // ANSI.
  379.     {"#pragma",if_like},    // ANSI (Preprocessor).
  380.     {"ptrdiff_t",int_like},    // ANSI.
  381. @%    {"REAL",int_like},    // EXTENSION.
  382.     {"register",int_like}, 
  383. @%    {"RETURN",case_like},
  384.     {"return",case_like},
  385.     {"short",int_like}, 
  386.     {"sig_atomic_t",int_like}, // ANSI.
  387.     {"signed",int_like},    // ANSI.
  388.     {"size_t",int_like},    // ANSI.
  389.     {"sizeof",sizeof_like},
  390. @%    {"STATIC",int_like},
  391.     {"static",int_like}, 
  392.     {"switch",for_like}, 
  393.     {"time_t",int_like},    // ANSI.
  394.     {"typedef",typedef_like},
  395.     {"#undef",if_like},    // (Preprocessor).
  396. @%    {"UNSIGNED",int_like},    // EXTENSION.
  397.     {"unsigned",int_like}, 
  398.     {"va_list",int_like},     // ANSI.
  399.     {"volatile",modifier},    // ANSI.
  400.     {"void",int_like},     // ANSI.
  401.     {"wchar_t",int_like}, // ANSI.
  402.     {"while",for_like},
  403.     {"",0}
  404.     };
  405.  
  406. static RESERVED_WORD C_words1[] = 
  407.     {
  408.     {"enum",struct_like},
  409.     {"struct",struct_like},
  410.     {"union",struct_like}, 
  411.     {"",0}
  412.     };
  413.     
  414. @*2 |C| Intrinsic functions.
  415. @<Part 1@>=@[
  416.  
  417. CONST char *C_intrinsics[] = {
  418.     "abort","atexit","exit","getenv","system",
  419.     "abs","div","labs","ldiv",
  420.     "acos","asin","atan","atan2","cos","sin","tan",
  421.     "asctime","ctime","gmtime","localtime","strftime","clock","difftime",
  422.         "mktime","time",
  423.     "assert",
  424.     "atof","atoi","atol","strtod","strtol","strtoul",
  425.     "bsearch","qsort",
  426.     "calloc","free","malloc","realloc",
  427.     "ceil","fabs","floor","fmod",
  428.     "fclose","fflush","fopen","freopen","setbuf","setvbuf",
  429.     "clearerr","feof","ferror","perror",
  430.     "cosh","sinh","tanh",
  431.     "exp","frexp","ldexp","log","log10","modf",
  432.     "fgetc","fgets","fprintf","fputc","fputs","fread","fscanf",
  433.         "fwrite","getc","getchar","gets","printf","putc","putchar",
  434.         "puts","scanf","sprintf","sscanf","ungetc",
  435.         "vfprintf","vprintf","vsprintf",
  436.     "fgetpos","fseek","fsetpos","ftell","rewind",
  437.     "printf","sprintf",
  438.     "isalnum","isalpha","iscntrl","isdigit","isgraph","islower",
  439.         "isprint","ispunct","isspace","isupper","isxdigit", 
  440.     "localeconv","setlocale",
  441.     "longjmp","setjmp",
  442.     "mblen","mbstowcs","mbtowc","wcstombs","wctomb",
  443.     "memcmp","strcmp","strcoll","strncmp","strxfrm","strcat","strncat",
  444.         "memcpy","memmove","strcpy","strncpy",
  445.         "memset","strerror","strlen",
  446.         "memchr","strchr","strcspn","strpbrk","strrchr",
  447.         "strspn","strstr","strtok",
  448.     "offsetof",
  449.     "pow","sqrt",
  450.     "raise",
  451.     "rand","srand",
  452.     "remove","rename","tmpfile","tmpnam",
  453.     "strcpy","strcmp","strncpy","strlen",
  454.     "tolower","toupper",
  455.     "ungetc",
  456.     "va_arg","va_end","va_start",
  457.     "write",
  458.     ""
  459.     };
  460.  
  461. @*1 |C++|.
  462.  
  463. @*2 |C++| reserved words.
  464. @<Part 1@>=@[
  465.  
  466. static RESERVED_WORD Cpp_words[] = 
  467.     {
  468.     {"bool", int_like},    // ANSI.
  469.     {"catch",expr},        // \Cpp--3.0
  470.     {"class",class_like},
  471.     {"const_cast", int_like}, // ANSI
  472.     {"delete",new_like},
  473.     {"dynamic_cast", int_like}, // ANSI RTTI.
  474.     {"friend",int_like},
  475.     {"inline",int_like},
  476.     {"mutable", int_like}, // ANSI.
  477.     {"namespace", namespace}, // ANSI.
  478.     {"new",new_like},
  479.     {"operator",op_like},
  480.     {"private",case_like},
  481.     {"protected",case_like},
  482.     {"public",case_like},
  483.     {"reinterpret_cast", int_like}, // ANSI
  484.     {"static_cast", int_like}, // ANSI
  485.     {"template",template},     // \Cpp--3.0.
  486.     {"this",expr},
  487.     {"throw", case_like},    // \Cpp--3.0; it's like |return|.
  488.     {"try", fn_decl},    // \Cpp--3.0
  489.     {"typeid", int_like},    // ANSI RTTI.
  490.     {"using", int_like},    // ANSI namespaces.
  491.     {"virtual",virtual},
  492.     {"",0}
  493.     };
  494.  
  495. static RESERVED_WORD Cpp_words1[] = 
  496.     {
  497.     {"enum", class_like},
  498.     {"struct", class_like}, // Overrides C ilk.
  499.     {"union", class_like}, 
  500.     {"",0}
  501.     };
  502.  
  503. CONST char *Cpp_intrinsics[] = 
  504.     {
  505.     "set_new_handler",
  506.     ""
  507.     };
  508.  
  509. @*1 |FORTRAN| identifers.
  510.  
  511. @*2 |FORTRAN| Reserved words.
  512. @<Part 1@>=@[
  513.  
  514. static RESERVED_WORD F77_words[] = {
  515.     {"accept",read_like},
  516.     {"assign",assign_like},
  517.     {"backspace",read_like},
  518.     {"block",program_like},
  519.     {"blockdata",program_like},
  520.     {"call",case_like},
  521.     {"character",int_like},
  522.     {"close",read_like},
  523.     {"common",common_like},
  524.     {"complex",int_like},
  525.     {"continue",case_like}, 
  526.     {"data",no_order},
  527.     {"$decl_hd",decl_hd},
  528.     {"dimension",int_like},
  529.     {"do",Rdo_like}, {"DO",for_like},
  530.     {"double",int_like},
  531.     {"doubleprecision",int_like},
  532.     {"else",else_like},
  533.     {"elseif",else_like},
  534.     {"end",end_like},
  535.     {"enddo",endif_like},
  536.     {"endif",endif_like}, 
  537.     {"endfile",read_like},
  538.     {"endfunction",end_like},
  539.     {"endprogram",end_like},
  540.     {"endsubroutine",end_like},
  541.     {"entry",entry_like},
  542.     {"equivalence",int_like},
  543.     {"external",int_like},
  544.     {"format",read_like},
  545.     {"function",program_like},
  546.     {"go",go_like}, // Can be combined with \&{to}.
  547.     {"goto",case_like},
  548.     {"if",if_like},
  549.     {"implicit",implicit_like},
  550.     {"integer",int_like}, 
  551.     {"inquire",read_like},
  552.     {"intrinsic",int_like},
  553.     {"logical",int_like},
  554.     {"open",read_like},
  555.     {"parameter",int_like},
  556.     {"pause",case_like},
  557.     {"precision",int_like},
  558.     {"print",read_like},
  559.     {"program",program_like},
  560.     {"read",read_like},
  561.     {"REAL",int_like},    // EXTENSION.
  562.     {"real",int_like},
  563.     {"return",case_like},
  564.     {"rewind",read_like},
  565.     {"save",common_like},
  566.     {"subroutine",program_like},
  567.     {"stop",case_like},
  568.     {"then",built_in},
  569.     {"to",built_in},
  570.     {"TYPE",read_like},    /* Conflicts with \FORTRAN-88's |@r type|
  571. statement. */
  572.     {"write",read_like},
  573.     {"",0}
  574.     };
  575.  
  576. @*2  VAX extensions for \FORTRAN\ reserved words.
  577. @<Part 1@>=
  578.  
  579. #ifdef VAXC
  580. @[static RESERVED_WORD VAX_words[] = {
  581.     {"decode",read_like},
  582.     {"delete",read_like},
  583.     {"dictionary",int_like},
  584.     {"encode",read_like},
  585.     {"endmap",end_like},
  586.     {"endstructure",end_like},
  587.     {"endunion",end_like},
  588.     {"find",read_like},
  589.     {"INCLUDE",no_order},
  590.     {"map",struct_like},
  591.     {"namelist",common_like},
  592.     {"options",int_like},
  593.     {"record",common_like},
  594.     {"rewrite",read_like},
  595.     {"union",struct_like},
  596.     {"unlock",read_like},
  597.     {"virtual",int_like},
  598.     {"volatile",common_like},
  599.     {"",0}
  600.     };
  601. #endif // |VAXC|
  602.  
  603. @*2 |FORTRAN| intrinsic functions.
  604. @<Part 1@>=@[
  605.  
  606. CONST char *F77_intrinsics[] = {
  607.     "abs","dabs","cabs",
  608.     "acos","dacos",
  609.     "aimag",
  610.     "aint","dint",
  611.     "amax0",
  612.     "amin0",
  613.     "anint","dnint",
  614.     "areal",
  615.     "asin","dasin",
  616.     "atan","datan",
  617.     "atan2","datan2","atan2d",
  618.     "char",
  619.     "cmplx",
  620.     "conjg",
  621.     "cos","dcos","ccos",
  622.     "cosh","dcosh",
  623.     "dble",
  624.     "dfloat",
  625.     "dim","ddim",
  626.     "dprod",
  627.     "exp","dexp","cexp",
  628.     "float",
  629.     "iabs", 
  630.     "iand","ior","ieor","not",
  631.     "ichar",
  632.     "idim",
  633.     "idint","iqint",
  634.     "idnint","iqnint",
  635.     "ifix",
  636.     "int",
  637.     "isign",
  638.     "jnint",
  639.     "llt","lle","lgt","lge",
  640.     "log","alog","dlog","clog",
  641.     "log10","alog10","dlog10",
  642.     "max","amax1","dmax1",
  643.     "max0",
  644.     "max1",
  645.     "min","amin1","dmin1",
  646.     "min0",
  647.     "min1",
  648.     "mod","amod","dmod",
  649.     "Real",
  650.     "sngl",
  651.     "sign","dsign",
  652.     "sin","dsin","csin",
  653.     "sinh","dsinh",
  654.     "sqrt","dsqrt","csqrt",
  655.     "tan","dtan",
  656.     "tanh","dtanh",
  657.     "%val","%loc","%descr",
  658.     ""
  659.     };
  660.  
  661. @ More intrinsic functions for the VAX.
  662.  
  663. @<Part 1@>=
  664.  
  665. #ifdef VAXC
  666. @[CONST char *VAX_intrinsics[] = {
  667.     "qsqrt","cdsqrt",
  668.     "qlog","cdlog","qlog10",
  669.     "qexp","cdexp",
  670.     "qsin","cdsin",
  671.     "sind","dsind","qsind",
  672.     "qcos","cdcod",
  673.     "cods","dcods","qcods",
  674.     "qtan",
  675.     "tand","dtand","qtand",
  676.     "qasin",
  677.     "asind","dasind","qasind",
  678.     "qacos",
  679.     "acosd","dacosd","qacosd",
  680.     "qatan",
  681.     "atand","datand","qatand",
  682.     "qatan2",
  683.     "atan2d","datan2d","qatan2d",
  684.     "qsinh","qcosh","qtanh",
  685.     "iiabs","jiabs","qabs","cdabs",
  686.     "iint","jint","iidint","jidint","iiqint","jiqint","qint",
  687.     "nint","inint","iidnnt","jidnnt","iiqnnt","jiqnnt","qnint",
  688.     "zext","izext","jzext",
  689.     "floati","floatj","snglq","dbleq",
  690.     "qext","qextd",
  691.     "iifix","jifix",
  692.     "floati","floatj",
  693.     "dfloti","dflotj",
  694.     "qfloat",
  695.     "dcmplx",
  696.     "dreal","dimag","dconjg",
  697.     "imax0","jmax0","qmax1","aimax0","ajmax0",
  698.     "imin0","jmin0","qmin1","aimin0","ajmin0",
  699.     "iidim","jidim","qdim",
  700.     "imod","jmod","qmod",
  701.     "iisign","jisign","qsign",
  702.     "iiand","jiand",
  703.     "iior","jior",
  704.     "iieor","jieor",
  705.     "inot","jnot",
  706.     "ishft","iishft","jishft",
  707.     "ibits","iibits","jibits",
  708.     "ibset","iibset","jibset",
  709.     "btest","bitest","bjtest",
  710.     "ibclr","iibclr","jibclr",
  711.     "ishftc","iishftc","jishftc",
  712.     ""
  713.     };
  714. #endif // |VAXC|
  715.  
  716. @*2 |FORTRAN| keywords.  The upper-case versions are always loaded.
  717. Lower-case forms are loaded only when the `\.{-k}' option is used.
  718.  
  719. @<Part 1@>=@[
  720.  
  721. CONST char *F77_Keywords[] = {
  722.     "ACCESS",
  723.     "ASSOCIATEVARIABLE",
  724.     "BLANK",
  725.     "BLOCKSIZE",
  726.     "BUFFERCOUNT",
  727.     "CARRIAGECONTROL",
  728.     "DEFAULTFILE",
  729.     "DIRECT",
  730.     "DISP",
  731.     "END",
  732.     "ERR",
  733.     "EXIST",
  734.     "FILE",
  735.     "FMT",
  736.     "FORM",
  737.     "FORMATTED",
  738.     "IOSTAT",
  739.     "NAME",
  740.     "NAMED",
  741.     "NEXTREC",
  742.     "NUMBER",
  743.     "OPENED",
  744.     "RECL",
  745.     "SEQUENTIAL",
  746.     "STATUS",
  747.     "UNFORMATTED",
  748.     "UNIT",
  749.     ""
  750.     };
  751.  
  752. CONST char *F77_keywords[] = {
  753.     "access",
  754.     "associatevariable",
  755.     "blank",
  756.     "blocksize",
  757.     "buffercount",
  758.     "carriagecontrol",
  759.     "defaultfile",
  760.     "direct",
  761.     "disp",
  762. #if 0
  763.     "end", // This has special meaning to \Fortran.
  764. #endif
  765.     "err",
  766.     "exist",
  767.     "file",
  768.     "fmt",
  769.     "form",
  770.     "formatted",
  771.     "iostat",
  772.     "name",
  773.     "named",
  774.     "nextrec",
  775.     "number",
  776.     "opened",
  777.     "recl",
  778.     "sequential",
  779.     "status",
  780.     "unformatted",
  781.     "unit",
  782.     ""
  783.     };
  784.  
  785. @ VAX extensions for \Fortran\ keywords.
  786. @<Part 1@>=
  787.  
  788. #ifdef VAXC
  789. @[CONST char *VAX_Keywords[] = {
  790.     "DISPOSE",
  791.     "EXTENDSIZE",
  792.     "INITIALSIZE",
  793.     "KEY",
  794.     "KEYED",
  795.     "MAXREC",
  796.     "NML",
  797.     "NOSPANBLOCKS",
  798.     "ORGANIZATION",
  799.     "READONLY",
  800.     "REC",
  801.     "RECORDSIZE","RECORDTYPE","RECORDSIZE",
  802.     "SHARED",
  803.     "TYPE",
  804.     "USEROPEN",
  805.     ""
  806.     };
  807. #endif // |VAXC|
  808.  
  809. @*1 |FORTRAN_90| identifiers.
  810.  
  811. @*2 |FORTRAN_90| reserved words.
  812. @<Part 1@>=@[
  813.  
  814. static RESERVED_WORD F90_words[] = {
  815.     {"allocate",read_like},
  816.     {"allocatable",int_like},
  817.     {"assignment",op_like},
  818.     {"contains",entry_like},
  819.     {"cycle",case_like},
  820.     {"deallocate",read_like},
  821.     {"elsewhere",else_like},
  822.     {"endinterface",end_like},
  823.     {"endmodule",end_like},
  824.     {"endselect",end_like},
  825.     {"endtype",end_like},
  826.     {"endwhere",end_like},
  827.     {"exit",case_like},
  828.     {"include",no_order},
  829.     {"intent",int_like},
  830.     {"interface",struct_like},
  831.     {"module",program_like},
  832.     {"only",built_in},
  833.     {"optional",int_like},
  834.     {"nullify",read_like},
  835.     {"operator",op_like},
  836.     {"pointer",int_like},
  837.     {"private",private_like},
  838.     {"procedure",proc_like},
  839.     {"public",private_like},
  840.     {"recursive",int_like},
  841.     {"result",_EXPR},
  842.     {"save",int_like},
  843.     {"select",if_like},
  844.     {"sequence",private_like},
  845.     {"target",int_like},
  846.     {"type",struct_like},
  847.     {"use",no_order},
  848.     {"where",if_like},
  849.     {"while",for_like},
  850.     {"",0}
  851.     };
  852.  
  853. @*2 |FORTRAN_90| intrinsic functions.
  854. @<Part 1@>=@[
  855.  
  856. CONST char *F90_intrinsics[] = {
  857.     "achar",
  858.     "adjustl","adjustr",
  859.     "all","any",
  860.     "associated",
  861.     "bit_size",
  862.     "btest",
  863.     "ceiling",
  864.     "count",
  865.     "cshift",
  866.     "date_and_time",
  867.     "floor",
  868.     "digits",
  869.     "dotproduct",
  870.     "eoshift",
  871.     "epsilon",
  872.     "exponent","fraction",
  873.     "huge",
  874.     "iachar",
  875.     "ibclr","ibits","ibset","ishft","ishftc",
  876.     "kind",
  877.     "len_trim",
  878.     "LOGICAL",
  879.     "matmul",
  880.     "maxexponent","minexponent",
  881.     "maxloc","minloc",
  882.     "maxval","minval",
  883.     "merge",
  884.     "modulo",
  885.     "mvbits",
  886.     "nearest",
  887.     "pack",
  888.     "PRECISION",
  889.     "present",
  890.     "product",
  891.     "radix",
  892.     "random","randomseed",
  893.     "range",
  894.     "REPEAT",
  895.     "reshape",
  896.     "rrspacing",
  897.     "scale",
  898.     "scan",
  899.     "selected_int_kind","selected_real_kind",
  900.     "setexponent",
  901.     "spacing",
  902.     "spread",
  903.     "sum",
  904.     "system_clock",
  905.     "tiny",
  906.     "transfer",
  907.     "transpose",
  908.     "trim",
  909.     "ubound",
  910.     "unpack",
  911.     "verify",
  912.     ""
  913.     };
  914.  
  915. @*2 |FORTRAN_90| keywords.
  916. @<Part 1@>=@[
  917.  
  918. CONST char *F90_Keywords[] = {
  919.     "ACTION",
  920.     "ADVANCE",
  921.     "DELIM",
  922.     "EOR",
  923.     "IN","INOUT","OUT",
  924.     "KIND",
  925.     "LEN",
  926.     "NML",
  927.     "NULLS",
  928.     "ONLY",
  929.     "PAD",
  930.     "POSITION",
  931.     "READ","READWRITE",
  932.     "REC",
  933.     "SIZE",
  934.     "STAT",
  935.     "WRITE",
  936.     ""
  937.     };
  938.  
  939. CONST char *F90_keywords[] = {
  940.     "action",
  941.     "advance",
  942.     "delim",
  943.     "eor",
  944.     "in","inout","out",
  945.     "kind",
  946.     "len",
  947.     "nml",
  948.     "nulls",
  949.     "only",
  950.     "pad",
  951.     "position",
  952. #if 0
  953.     "read",
  954. #endif
  955.     "readwrite",
  956.     "rec",
  957.     "size",
  958.     "stat",
  959. #if 0
  960.     "write",
  961. #endif
  962.     ""
  963.     };
  964.  
  965. @*1 |RATFOR| identifiers.
  966.  
  967. @*2 |RATFOR| reserved words.
  968. @<Part 1@>=@[
  969.  
  970. static RESERVED_WORD RATFOR_words[] = {
  971.     {"break",case_like},
  972.     {"case",CASE_like},
  973.     {"default",case_like},
  974.     {"for",for_like}, {"FOR",for_like},
  975.     {"next",case_like},
  976.     {"repeat",do_like},
  977.     {"switch",for_like},
  978.     {"until",until_like},
  979.     {"while",for_like},
  980.     {"",0}
  981.     };
  982.  
  983. @*2 |RATFOR| keywords.
  984. @<Part 1@>=@[
  985.  
  986. CONST char *R77_keywords[] = {
  987.     "end",
  988.     ""
  989.     };
  990.  
  991. @*1 |TEX| identifiers.
  992.  
  993. @*2 |TEX| reserved words.
  994. @<Part 1@>=
  995.  
  996. extern RESERVED_WORD TEX_words[];
  997.  
  998. @
  999. @<Part 2@>=@[
  1000.  
  1001. RESERVED_WORD TEX_words[] = {
  1002.     @<\TeX\ words \.{\\a}\dots@>,
  1003.     @<\TeX\ words \.{\\b}\dots@>,
  1004.     @<\TeX\ words \.{\\c}\dots@>,
  1005.     @<\TeX\ words \.{\\d}\dots@>,
  1006.     @<\TeX\ words \.{\\e}\dots@>,
  1007.     @<\TeX\ words \.{\\f,g,h}\dots@>,
  1008.     @<\TeX\ words \.{\\i,j,k}\dots@>,
  1009.     @<\TeX\ words \.{\\l}\dots@>,
  1010.     @<\TeX\ words \.{\\m,n}\dots@>,
  1011.     @<\TeX\ words \.{\\o}\dots@>,
  1012.     @<\TeX\ words \.{\\p,q,r}\dots@>,
  1013.     @<\TeX\ words \.{\\s}\dots@>,
  1014.     @<\TeX\ words \.{\\t}\dots@>,
  1015.     @<\TeX\ words \.{\\u,v,w,x,y,z}\dots@>,
  1016.     {"",0}
  1017.     };
  1018.     
  1019. @
  1020. @<\TeX\ words \.{\\a}\dots@>=
  1021.     {"\\above",built_in},
  1022.     {"\\abovedisplayshortskip",built_in},
  1023.     {"\\abovedisplayskip",built_in},
  1024.     {"\\abovewithdelims",built_in},
  1025.     {"\\accent",built_in},
  1026.     {"\\adjdemerits",built_in},
  1027.     {"\\advance",built_in},
  1028.     {"\\afterassignment",built_in},
  1029.     {"\\aftergroup",built_in},
  1030.     {"\\atop",built_in},
  1031.     {"\\atopwithdelims",built_in}@;
  1032.  
  1033. @
  1034. @<\TeX\ words \.{\\b}\dots@>=
  1035.     {"\\baselineskip",built_in},
  1036.     {"\\batchmode",built_in},
  1037.     {"\\begingroup",built_in},
  1038.     {"\\belowdisplayshortskip",built_in},
  1039.     {"\\belowdisplayskip",built_in},
  1040.     {"\\binoppenalty",built_in},
  1041.     {"\\botmark",built_in},
  1042.     {"\\box",built_in},{"\\bowmaxdepth",built_in},
  1043.     {"\\brokenpenalty",built_in}@;
  1044.  
  1045. @
  1046. @<\TeX\ words \.{\\c}\dots@>=
  1047.     {"\\catcode",built_in},
  1048.     {"\\char",built_in},{"\\chardef",typedef_like},
  1049.     {"\\cleaders",built_in},
  1050.     {"\\closein",built_in},{"\\closeout",built_in},
  1051.     {"\\clubpenalty",built_in},
  1052.     {"\\copy",built_in},
  1053.     {"\\count",built_in},{"\\countdef",typedef_like},
  1054.     {"\\cr",built_in},{"\\crcr",built_in},
  1055.     {"\\csname",built_in}@;
  1056.  
  1057. @
  1058. @<\TeX\ words \.{\\d}\dots@>=
  1059.     {"\\day",built_in},     // \rm\the\day
  1060.     {"\\deadcycles",built_in},
  1061.     {"\\def",typedef_like},
  1062.     {"\\defaulthyphenchar",built_in},{"\\defaultskewchar",built_in},
  1063.     {"\\delcode",built_in},
  1064.     {"\\delimiter",built_in},{"\\delimiterfactor",built_in},
  1065.     {"\\deflimitershortfall",built_in},
  1066.     {"\\dimen",built_in},{"\\dimendef",typedef_like},
  1067.     {"\\discretionary",built_in},
  1068.     {"\\displayindent",built_in},
  1069.     {"\\displaylimits",built_in},
  1070.     {"\\displaystyle",built_in},
  1071.     {"\\displaywidowpenalty",built_in},
  1072.     {"\\displaywidth",built_in},
  1073.     {"\\divide",built_in},
  1074.     {"\\doublehyphendemerits",built_in},
  1075.     {"\\dp",built_in},
  1076.     {"\\dump",built_in}@;
  1077.  
  1078. @
  1079. @<\TeX\ words \.{\\e}\dots@>=
  1080.     {"\\edef",typedef_like},
  1081.     {"\\eject",built_in},
  1082.     {"\\else",built_in},
  1083.     {"\\end",built_in},{"\\endcsname",built_in},
  1084.     {"\\endcsname",built_in},
  1085.     {"\\endgroup",built_in},
  1086.     {"\\endinput",built_in},
  1087.     {"\\endlinechar",built_in},
  1088.     {"\\eqno",built_in},
  1089.     {"\\errhelp",built_in},{"\\errmessage",built_in},
  1090.     {"\\errorstopmode",built_in},
  1091.     {"\\escapechar",built_in},
  1092.     {"\\everycr",built_in},{"\\everydisplay",built_in},
  1093.     {"\\everyhbox",built_in},{"\\everyjob",built_in},
  1094.     {"\\everymath",built_in},{"\\everypar",built_in},
  1095.     {"\\everyvbox",built_in},
  1096.     {"\\exhyphenpenalty",built_in},
  1097.     {"\\expandafter",built_in}@;
  1098.  
  1099. @
  1100. @<\TeX\ words \.{\\f,g,h}\dots@>=
  1101.     {"\\fam",built_in},
  1102.     {"\\fi",built_in},
  1103.     {"\\finalhyphendemerits",built_in},
  1104.     {"\\firstmark",built_in},
  1105.     {"\\floatingpenalty",built_in},
  1106.     {"\\font",built_in},{"\\fontdimen",built_in},
  1107.     {"\\fontname",built_in},
  1108.     {"\\futurelet",typedef_like},
  1109.     {"\\gdef",typedef_like},
  1110.     {"\\global",built_in},{"\\globaldefs",built_in},
  1111.     {"\\halign",built_in},
  1112.     {"\\hangafter",built_in},{"\\hangindent",built_in},
  1113.     {"\\hbadness",built_in},
  1114.     {"\\hbox",built_in},
  1115.     {"\\hfil",built_in},{"\\hfill",built_in},
  1116.     {"\\hfilneg",built_in},
  1117.     {"\\hfuzz",built_in},
  1118.     {"\\hoffset",built_in},
  1119.     {"\\hrule",built_in},
  1120.     {"\\hskip",built_in},
  1121.     {"\\hss",built_in},
  1122.     {"\\ht",built_in},
  1123.     {"\\hyphenation",built_in},
  1124.     {"\\hyphenchar",built_in},{"\\hyphenpenalty",built_in}@;
  1125.  
  1126. @
  1127. @<\TeX\ words \.{\\i,j,k}\dots@>=
  1128.     {"\\if",built_in},{"\\ifcase",built_in},
  1129.     {"\\ifcat",built_in},{"\\ifdim",built_in},{"\\ifeof",built_in},
  1130.     {"\\iffalse",built_in},{"\\ifhbox",built_in},
  1131.     {"\\ifhmode",built_in},{"\\ifinner",built_in},{"\\ifmmode",built_in},
  1132.     {"\\ifnum",built_in},{"\\ifodd",built_in},
  1133.     {"\\iftrue",built_in},
  1134.     {"\\ifvbox",built_in},{"\\ifvmode",built_in},{"\\ifvoid",built_in},
  1135.     {"\\ifx",built_in},
  1136.     {"\\ignorespaces",built_in},
  1137.     {"\\immediate",built_in},
  1138.     {"\\indent",built_in},
  1139.     {"\\input",built_in},
  1140.     {"\\insert",built_in},{"\\insertpenalties",built_in},
  1141.     {"\\interlinepenalty",built_in},
  1142.     {"\\jobname",built_in}, // \rm \jobname
  1143.     {"\\kern",built_in}@;
  1144.  
  1145. @
  1146. @<\TeX\ words \.{\\l}\dots@>=
  1147.     {"\\lastbox",built_in},{"\\lastkern",built_in},
  1148.     {"\\lastpenalty",built_in},{"\\lastskip",built_in},
  1149.     {"\\lccode",built_in},
  1150.     {"\\leaders",built_in},
  1151.     {"\\left",built_in},
  1152.     {"\\leqno",built_in},
  1153.     {"\\leftskip",built_in},
  1154.     {"\\let",typedef_like},
  1155.     {"\\limits",built_in},
  1156.     {"\\linepenalty",built_in},{"\\lineskip",built_in},
  1157.     {"\\lineskiplimit",built_in},
  1158.     {"\\llap",built_in},
  1159.     {"\\long",built_in},
  1160.     {"\\looseness",built_in},
  1161.     {"\\lower",built_in},{"\\lowercase",built_in}@;
  1162.  
  1163. @
  1164. @<\TeX\ words \.{\\m,n}\dots@>=
  1165.     {"\\mag",built_in},
  1166.     {"\\mark",built_in},
  1167.     {"\\mathaccent",built_in},
  1168.     {"\\mathbin",built_in},
  1169.     {"\\mathchar",built_in},
  1170.     {"\\mathchardef",built_in},
  1171.     {"\\mathchoice",built_in},
  1172.     {"\\mathclose",built_in},
  1173.     {"\\mathcode",built_in},
  1174.     {"\\mathinner",built_in},{"\\mathop",built_in},
  1175.     {"\\mathop",built_in},{"\\mathopen",built_in},
  1176.     {"\\mathord",built_in},
  1177.     {"\\mathpunc",built_in},
  1178.     {"\\mathrel",built_in},
  1179.     {"\\mathsurround",built_in},
  1180.     {"\\maxdeadcycles",built_in},
  1181.     {"\\maxdepth",built_in},
  1182.     {"\\meaning",built_in},
  1183.     {"\\medmuskip",built_in},
  1184.     {"\\message",built_in},
  1185.     {"\\mkern",built_in},
  1186.     {"\\month",built_in}, // \rm\the\month
  1187.     {"\\moveleft",built_in},{"\\moveright",built_in},
  1188.     {"\\mskip",built_in},
  1189.     {"\\multiply",built_in},
  1190.     {"\\muskip",built_in},
  1191.     {"\\muskipdef",built_in},
  1192.     {"\\newlinechar",built_in},
  1193.     {"\\noalign",built_in},
  1194.     {"\\noexpand",built_in},
  1195.     {"\\noindent",built_in},
  1196.     {"\\nolimits",built_in},
  1197.     {"\\nonscript",built_in},
  1198.     {"\\nonstopmode",built_in},
  1199.     {"\\nulldelimiterspace",built_in},
  1200.     {"\\number",built_in}@;
  1201.  
  1202. @
  1203. @<\TeX\ words \.{\\o}\dots@>=
  1204.     {"\\omit",built_in},
  1205.     {"\\openin",built_in},{"\\openout",built_in},
  1206.     {"\\or",built_in},
  1207.     {"\\outer",built_in},
  1208.     {"\\output",built_in},{"\\outputpenalty",built_in},
  1209.     {"\\over",built_in},
  1210.     {"\\overfullrule",built_in},
  1211.     {"\\overline",built_in},
  1212.     {"\\overwithdelims",built_in}@;
  1213.  
  1214. @
  1215. @<\TeX\ words \.{\\p,q,r}\dots@>=
  1216.     {"\\pagedepth",built_in},
  1217.     {"\\pagefilllstretch",built_in},{"\\pagefillstretch",built_in},
  1218.     {"\\pagefilstretch",built_in},
  1219.     {"\\pagegoal",built_in},
  1220.     {"\\pageshrink",built_in},{"\\pagestretch",built_in},
  1221.     {"\\pagetotal",built_in},
  1222.     {"\\par",built_in},
  1223.     {"\\parfillskip",built_in},
  1224.     {"\\parindent",built_in},
  1225.     {"\\parshape",built_in},{"\\parskip",built_in},
  1226.     {"\\patterns",built_in},
  1227.     {"\\pausing",built_in},
  1228.     {"\\penalty",built_in},
  1229.     {"\\postdisplaypenalty",built_in},
  1230.     {"\\predisplaypenalty",built_in},
  1231.     {"\\predisplaysize",built_in},
  1232.     {"\\pretolerance",built_in},
  1233.     {"\\prevdepth",built_in},
  1234.     {"\\prevgraf",built_in},
  1235.     {"\\radical",built_in},
  1236.     {"\\raise",built_in},
  1237.     {"\\read",built_in},
  1238.     {"\\relax",built_in},
  1239.     {"\\relpenalty",built_in},
  1240.     {"\\right",built_in},
  1241.     {"\\rightskip",built_in},
  1242.     {"\\romannumeral",built_in}@; // \romannumeral4
  1243.  
  1244. @
  1245. @<\TeX\ words \.{\\s}\dots@>=
  1246.     {"\\scripfont",built_in},{"\\scripscripfont",built_in},
  1247.     {"\\scripscriptstyle",built_in},{"\\scriptspace",built_in},
  1248.     {"\\scripstyle",built_in},
  1249.     {"\\scrollmode",built_in},
  1250.     {"\\setbox",built_in},
  1251.     {"\\sfcode",built_in},
  1252.     {"\\shipout",built_in},
  1253.     {"\\show",built_in},{"\\showbox",built_in},
  1254.     {"\\showboxbreadth",built_in},{"\\showboxdepth",built_in},
  1255.     {"\\showhyphens",built_in},{"\\showlists",built_in},
  1256.     {"\\showthe",built_in},
  1257.     {"\\skewchar",built_in},
  1258.     {"\\skip",built_in},{"\\skipdepth",built_in},
  1259.     {"\\spacefactor",built_in},{"\\spaceskip",built_in},
  1260.     {"\\span",built_in},
  1261.     {"\\special",built_in},
  1262.     {"\\splitbotmark",built_in},{"\\splitfirstmark",built_in},
  1263.     {"\\splitmaxdepth",built_in},
  1264.     {"\\splittopskip",built_in},
  1265.     {"\\string",built_in},
  1266.     {"\\tabskip",built_in}@;
  1267.  
  1268. @
  1269. @<\TeX\ words \.{\\t}\dots@>=
  1270.     {"\\textfont",built_in},
  1271.     {"\\textstyle",built_in},
  1272.     {"\\the",built_in},
  1273.     {"\\thickmuskip",built_in},{"\\thinmuskip",built_in},
  1274.     {"\\time",built_in},
  1275.     {"\\toks",built_in},{"\\toksdef",built_in},
  1276.     {"\\tolerance",built_in},
  1277.     {"\\topmark",built_in},{"\\topskip",built_in},
  1278.     {"\\tracingcommands",built_in},
  1279.     {"\\tracinglostchars",built_in},
  1280.     {"\\tracingmacros",built_in},
  1281.     {"\\tracingonline",built_in},
  1282.     {"\\tracingoutput",built_in},
  1283.     {"\\tracingpages",built_in},
  1284.     {"\\tracingparagraphs",built_in},
  1285.     {"\\tracingrestores",built_in},
  1286.     {"\\tracingstats",built_in}@;
  1287.  
  1288. @
  1289. @<\TeX\ words \.{\\u,v,w,x,y,z}\dots@>=
  1290.     {"\\ucode",built_in},{"\\uchyph",built_in},
  1291.     {"\\underline",built_in}, // $\underline{\hbox{Underlined}}$
  1292.     {"\\unhbox",built_in},
  1293.     {"\\unhcopy",built_in},{"\\unkern",built_in},
  1294.     {"\\unpenalty",built_in},{"\\unskip",built_in},
  1295.     {"\\unvbox",built_in},{"\\unvcopy",built_in},
  1296.     {"\\uppercase",built_in}, // \rm\uppercase{abc}
  1297.     {"\\vadjust",built_in},{"\\valign",built_in},
  1298.     {"\\vbadness",built_in},
  1299.     {"\\vbox",built_in},{"\\vcenter",built_in},
  1300.     {"\\vfil",built_in},{"\\vfill",built_in},
  1301.     {"\\vfilneg",built_in},
  1302.     {"\\vfuzz",built_in},
  1303.     {"\\voffset",built_in},
  1304.     {"\\vskip",built_in},
  1305.     {"\\vrule",built_in},
  1306.     {"\\vsize",built_in},
  1307.     {"\\vskip",built_in},
  1308.     {"\\vskip",built_in},
  1309.     {"\\vss",built_in},
  1310.     {"\\vtop",built_in},
  1311.     {"\\wd",built_in},
  1312.     {"\\widowpenalty",built_in},
  1313.     {"\\write",built_in},
  1314.     {"\\xdef",typedef_like},
  1315.     {"\\xleaders",built_in},
  1316.     {"\\xspaceskip",built_in},
  1317.     {"\\year",built_in}@; // \rm\the\year
  1318.  
  1319.  
  1320. @*2 |TEX| intrinsic functions.
  1321. @<Part 1@>=
  1322.  
  1323. extern CONST char *TEX_intrinsics[];
  1324.  
  1325. @
  1326. @<Part 2@>=@[
  1327.  
  1328. CONST char *TEX_intrinsics[] = {
  1329.     @<\TeX\ intrinsics \.{\\a}\dots@>,
  1330.     @<\TeX\ intrinsics \.{\\b}\dots@>,
  1331.     @<\TeX\ intrinsics \.{\\c}\dots@>,
  1332.     @<\TeX\ intrinsics \.{\\d}\dots@>,
  1333.     @<\TeX\ intrinsics \.{\\e}\dots@>,
  1334.     @<\TeX\ intrinsics \.{\\f,g,h}\dots@>,
  1335.     @<\TeX\ intrinsics \.{\\i,j,k}\dots@>,
  1336.     @<\TeX\ intrinsics \.{\\l}\dots@>,
  1337.     @<\TeX\ intrinsics \.{\\m,n}\dots@>,
  1338.     @<\TeX\ intrinsics \.{\\o}\dots@>,
  1339.     @<\TeX\ intrinsics \.{\\p,q,r}\dots@>,
  1340.     @<\TeX\ intrinsics \.{\\s}\dots@>,
  1341.     @<\TeX\ intrinsics \.{\\t}\dots@>,
  1342.     @<\TeX\ intrinsics \.{\\u,v,w,x,y,z}\dots@>,
  1343.     ""
  1344.     };
  1345.  
  1346.  
  1347. @
  1348. @<\TeX\ intrinsics \.{\\a}\dots@>=
  1349.     "\\aa",        //\rm \aa
  1350.     "\\AA",        //\rm \AA
  1351.     "\\active",    
  1352.     "\\acute",    // $\acute x$
  1353.     "\\advancepageno",@/
  1354.     "\\ae",        // \rm \ae
  1355.     "\\AE",        // \rm \AE
  1356.     "\\aleph",    // $\aleph$
  1357.     "\\allowbreak",@/
  1358.     "\\allowhyphens",@/
  1359.     "\\alpha",    // $\alpha$
  1360.     "\\amalg",    // $\amalg$
  1361.     "\\angle",    // $\angle$
  1362.     "\\approx",    // $\approx$
  1363.     "\\arccos",    // $\arccos$
  1364.     "\\arcsin",    // $\arcsin$
  1365.     "\\arctan",    // $\arctan$
  1366.     "\\arg",    // $\arg$
  1367.     "\\arrowvert",    // $\arrowvert$
  1368.     "\\Arrowvert",    // $\Arrowvert$
  1369.     "\\ast",    // $\ast$
  1370.     "\\asymp"@;    // $\asymp$
  1371.  
  1372. @
  1373. @<\TeX\ intrinsics \.{\\b}\dots@>=
  1374.     "\\b",        //\rm \b b
  1375.     "\\backslash",    // $\backslash$
  1376.     "\\bar",    // $\bar x$
  1377.     "\\beta",    // $\beta$
  1378.     "\\bf",        // \bf boldface
  1379.     "\\bffam",@/
  1380.     "\\bgroup",@/
  1381.     "\\big",    // $\big[$
  1382.     "\\Big",    // $\Big[$
  1383.     "\\bigbreak",@/
  1384.     "\\bigcap",    // $\bigcap$    
  1385.     "\\bigcirc",    // $\bigcirc$
  1386.     "\\bigcup",    // $\bigcup$
  1387.     "\\bigg",    // $\bigg[$
  1388.     "\\Bigg",    // $\Bigg[$
  1389.     "\\biggl",    // $\biggl[$
  1390.     "\\Biggl",    // $\Biggl[$
  1391.     "\\biggm",    // $\biggm\vert$
  1392.     "\\Biggm",    // $\Biggm\vert$
  1393.     "\\biggr",    // $\biggr]$
  1394.     "\\Biggr",    // $\Biggr]$
  1395.     "\\bigl",    // $\bigl[$
  1396.     "\\Bigl",    // $\Bigl[$
  1397.     "\\bigm",    // $\bigm\vert$
  1398.     "\\Bigm",    // $\Bigm\vert$
  1399.     "\\bigodot",    // $\bigodot$
  1400.     "\\bigoplus",    // $\bigoplus$
  1401.     "\\bigotimes",    // $\bigotimes$
  1402.     "\\bigr",    // $\bigr]$
  1403.     "\\Bigr",    // $\Bigr]$
  1404.     "\\bigskip","\\bigskipamount",
  1405.     "\\bigsqcup",    // $\bigsqcup$
  1406.     "\\bigtriangledown",    // $\bigtriangledown$
  1407.     "\\bigtriangleup",    // $\bigtriangleup$
  1408.     "\\biguplus",    // $\biguplus$
  1409.     "\\bigvee",    // $\bigvee$
  1410.     "\\bigwedge",    // $\bigwedge$
  1411.     "\\bmod",@/
  1412.     "\\body",    // $\bmod$
  1413.     "\\bordermatrix",/* $\bordermatrix{&C&I&C'\cr
  1414.                 C&1&0&0\cr
  1415.                 I&b&1-b&0\cr
  1416.                 C'&0&a&1-a\cr}$ */
  1417.     "\\bot",    // $\bot$
  1418.     "\\bowtie",    // $\bowtie$
  1419.     "\\brace",    // $n\brace k$
  1420.     "\\braceld",    // $\braceld$
  1421.     "\\bracelu",    // $\bracelu$
  1422.     "\\bracerd",    // $\bracerd$
  1423.     "\\braceru",    // $\braceru$
  1424.     "\\bracevert",    // $\bracevert$
  1425.     "\\brack",    // $n\brack k$
  1426.     "\\break",@/
  1427.     "\\breve",    // $\breve x$
  1428.     "\\buildrel",@/
  1429.     "\\bullet",    // $\bullet$
  1430.     "\\bye"@;
  1431.  
  1432. @
  1433. @<\TeX\ intrinsics \.{\\c}\dots@>=
  1434.     "\\c",        // \rm\c x
  1435.     "\\cal",    // $\cal A$
  1436.     "\\cap",    // $\cap$
  1437.     "\\cases",    // $x = \cases{a&test\cr b&no test\cr}$
  1438.     "\\cdot",    // $a\cdot b$
  1439.     "\\cdotp",@/
  1440.     "\\cdots",    // $a + \cdots$
  1441.     "\\centering",@/
  1442.     "\\centerline",@/
  1443.     "\\check",    // $\check x$
  1444.     "\\chi",    // $\chi$
  1445.     "\\choose",    // $n\choose k$
  1446.     "\\circ",    // $\circ$
  1447.     "\\cleartabs",@/
  1448.     "\\clubsuit",    // $\clubsuit$
  1449.     "\\colon",    // $\colon$
  1450.     "\\cong",    // $\cong$
  1451.     "\\coprod",    // $\coprod$
  1452.     "\\copyright",    //\rm\copyright
  1453.     "\\cos",    // $\cos$
  1454.     "\\cosh",    // $\cosh$
  1455.     "\\cot",    // $\cot$
  1456.     "\\coth",    // $\coth$
  1457.     "\\csc",    // $\csc$
  1458.     "\\cup"@;    // $\cup$
  1459.  
  1460. @
  1461. @<\TeX\ intrinsics \.{\\d}\dots@>=
  1462.     "\\d",        // \rm\d x
  1463.     "\\dag",    // $\dag$
  1464.     "\\dagger",    // $\dagger$
  1465.     "\\dashv",    // $\dashv$
  1466.     "\\ddag",    // $\ddag$
  1467.     "\\ddagger",    // $\ddagger$
  1468.     "\\ddot",    // $\ddot x$
  1469.     "\\ddots",    // $\ddots$
  1470.     "\\deg",    // $\deg$
  1471.     "\\delta",    // $\delta$
  1472.     "\\Delta",    // $\Delta$
  1473.     "\\det",    // $\det$
  1474.     "\\diamond",    // $\diamond$
  1475.     "\\diamondsuit", // $\diamondsuit$
  1476.     "\\dim",    // $\dim$
  1477.     "\\displaylines",@/
  1478.     "\\div",    // $\div$
  1479.     "\\dospecials",@/
  1480.     "\\dosupereject",@/
  1481.     "\\dot",    // $\dot x$
  1482.     "\\doteq",    // $\doteq$
  1483.     "\\dotfill",@/
  1484.     "\\dots",    // $\dots$
  1485.     "\\downarrow",    // $\downarrow$
  1486.     "\\Downarrow",    // $\Downarrow$
  1487.     "\\downbracefill" // \hbox to 100pt{\downbracefill}
  1488.     @;
  1489.  
  1490. @
  1491. @<\TeX\ intrinsics \.{\\e}\dots@>=
  1492.     "\\egroup",@/
  1493.     "\\eject",@/
  1494.     "\\ell",    // $\ell$
  1495.     "\\empty",@/
  1496.     "\\emptyset",    // $\emptyset$
  1497.     "\\endgraf",@/
  1498.     "\\endline",@/
  1499.     "\\enskip","\\enspace",
  1500.     "\\epsilon",    // $\epsilon$
  1501.     "\\eqalign","\\eqalignno",
  1502.     "\\equiv",    // $\equiv$
  1503.     "\\eta",    // $\eta$
  1504.     "\\exists",    // $\exists$
  1505.     "\\exp"@;    // $\exp$
  1506.  
  1507. @
  1508. @<\TeX\ intrinsics \.{\\f,g,h}\dots@>=
  1509.     "\\filbreak",@/
  1510.     "\\fiverm",    // \rm\fiverm Fiverm
  1511.     "\\flat",    // $\flat$
  1512.     "\\folio",@/
  1513.     "\\footins",@/
  1514.     "\\footline","\\footnote","\\footnoterule",
  1515.     "\\forall",    // $\forall$
  1516.     "\\frenchspacing",// \rm This is French spacing
  1517.     "\\frown",    // $\frown$    
  1518.     "\\fullhsize","\\fullline",
  1519.     "\\gamma",    // $\gamma$
  1520.     "\\Gamma",    // $\Gamma$
  1521.     "\\gcd",    // $\gcd$
  1522.     "\\ge",        // $\ge$
  1523.     "\\geq",    // $\geq$
  1524.     "\\getfactor",@/
  1525.     "\\gets",    // $\gets$
  1526.     "\\gg",    // $\gg$
  1527.     "\\glue",@/
  1528.     "\\goodbreak",@/
  1529.     "\\grave",    // $\grave x$
  1530.     "\\hang",@/
  1531.     "\\hat",    // $\hat x$
  1532.     "\\hbar",    // $\hbar$
  1533.     "\\headline",@/
  1534.     "\\heartsuit",    // $\heartsuit$
  1535.     "\\hglue",@/
  1536.     "\\hideskip",@/
  1537.     "\\hidewidth",@/
  1538.     "\\hookleftarrow",    // $\hookleftarrow$
  1539.     "\\hookrightarrow",    // $\hookrightarrow$
  1540.     "\\hphantom",@/
  1541.     "\\hrulefill"@;
  1542.  
  1543. @
  1544. @<\TeX\ intrinsics \.{\\i,j,k}\dots@>=
  1545.     "\\ialign",@/
  1546.     "\\iff",    // $\iff$
  1547.     "\\Im",        // $\Im$
  1548.     "\\imath",@/
  1549.     "\\in",        // $\in$
  1550.     "\\inf",    // $\inf$
  1551.     "\\infty",    // $\infty$
  1552.     "\\int",    // $\int$
  1553.     "\\interdisplaylinepenalty",@/
  1554.     "\\interfootnotelinepenalty",@/
  1555.     "\\iota",    // $\iota$
  1556.     "\\it",        // \it Italics
  1557.     "\\item",@/
  1558.     "\\itemitem",
  1559.     "\\itfam",@/
  1560.     "\\j",    // $\j$
  1561.     "\\jmath",    // $\jmath$
  1562.     "\\joinrel",@/
  1563.     "\\jot",@/
  1564.     "\\kappa",    // $\kappa$
  1565.     "\\ker"@;    // $\ker$
  1566.  
  1567. @
  1568. @<\TeX\ intrinsics \.{\\l}\dots@>=
  1569.     "\\l",        // $\l$
  1570.     "\\L",        // $\L$
  1571.     "\\lambda",    // $\lambda$
  1572.     "\\Lambda",    // $\Lambda$
  1573.     "\\land",    // $\land$
  1574.     "\\langle",    // $\langle$
  1575.     "\\lbrace",    // $\lbrace$
  1576.     "\\lbrack",    // $\lbrack$
  1577.     "\\lceil",    // $\lceil$
  1578.     "\\ldotp",@/
  1579.     "\\ldots",    // $\ldots$
  1580.     "\\le",    // $\le$
  1581.     "\\leavevmode",@/
  1582.     "\\leftarrow",    // $\leftarrow$
  1583.     "\\Leftarrow",    // $\Leftarrow$
  1584.     "\\leftarrowfill", // \hbox to 100pt{\leftarrowfill}
  1585.     "\\leftharpoondown",    // $\leftharpoondown$
  1586.     "\\leftharpoonup",    // $\leftharpoonup$
  1587.     "\\leftline",@/
  1588.     "\\leftrightarrow",    // $\leftrightarrow$
  1589.     "\\Leftrightarrow",    // $\Leftrightarrow$
  1590.     "\\leq",    // $\leq$
  1591.     "\\leqalignno",@/
  1592.     "\\lfloor",    // $\lfloor$
  1593.     "\\lg",    // $\lg$
  1594.     "\\lgroup",@/
  1595.     "\\lhook",    // $\lhook$
  1596.     "\\lim",    // $\lim$
  1597.     "\\liminf",    // $\liminf$
  1598.     "\\limsup",    // $\limsup$
  1599.     "\\line",@/
  1600.     "\\ll",    // $\ll$
  1601.     "\\llap",@/
  1602.     "\\lmoustache",    // $\lmoustache$
  1603.     "\\ln",    // $\ln$
  1604.     "\\lnot",    // $\lnot$
  1605.     "\\log",    // $\log$
  1606.     "\\longindentation",@/
  1607.     "\\longleftarrow",    // $\longleftarrow$
  1608.     "\\Longleftarrow",    // $\Longleftarrow$
  1609.     "\\longleftrightarrow",    // $\longleftrightarrow$
  1610.     "\\Longleftrightarrow",    // $\Longleftrightarrow$
  1611.     "\\longmapsto",    // $\longmapsto$
  1612.     "\\longrightarrow",    // $\longrightarrow$
  1613.     "\\Longrightarrow",    // $\Longrightarrow$
  1614.     "\\loop",@/
  1615.     "\\lor",    // $\lor$
  1616.     "\\lq"@;    // $\lq$
  1617.  
  1618. @
  1619. @<\TeX\ intrinsics \.{\\m,n}\dots@>=
  1620.     "\\magnification","\\magstep","\\magstephalf",
  1621.     "\\maintoks",@/
  1622.     "\\makefootline","\\makeheadline",@/
  1623.     "\\mapsto",    // $\mapsto$
  1624.     "\\mapstochar",    // $\mapstochar$
  1625.     "\\mathhexbox",@/
  1626.     "\\mathpalette",@/
  1627.     "\\mathstrut",@/
  1628.     "\\matrix",    // $\matrix{a&b\cr c&d\cr}$
  1629.     "\\max",    // $\max$
  1630.     "\\maxdimen",@/
  1631.     "\\medbreak",@/
  1632.     "\\medskip","\\medskipamount",@/
  1633.     "\\mid",    // $\mid$
  1634.     "\\midinsert",@/
  1635.     "\\min",    // $\min$
  1636.     "\\mit",    //\mit abc
  1637.     "\\models",    // $\models$
  1638.     "\\mp",    // $\mp$
  1639.     "\\mu",    // $\mu$
  1640.     "\\multispan",@/
  1641.     "\\nabla",    // $\nabla$
  1642.     "\\narrower",@/
  1643.     "\\natural",    // $\natural$
  1644.     "\\ne",    // $\ne$
  1645.     "\\nearrow",    // $\nearrow$
  1646.     "\\neg",    // $\neg$
  1647.     "\\negthinspace",@/
  1648.     "\\neq",    // $\neq$
  1649.     "\\newbox","\\newcount","\\newdimen","\\newfam",
  1650.     "\\newhelp","\\newif","\\newinsert",
  1651.     "\\newmuskip",@/
  1652.     "\\newread","\\newskip","\\newtoks","\\newwrite",
  1653.     "\\next",@/
  1654.     "\\ni",@/
  1655.     "\\ninepoint",@/
  1656.     "\\ninerm",    //\ninerm Ninerm
  1657.     "\\nobreak",@/
  1658.     "\\nointerlineskip",@/
  1659.     "\\nonfrenchspacing",@/
  1660.     "\\nopagenumbers",@/
  1661.     "\\normalbaselines","\\normalbaselineskip",
  1662.     "\\normalbottom","\\normallineskip","\\normallineskiplimit",@/
  1663.     "\\not",    // $\not$
  1664.     "\\notin",    // $\notin$
  1665.     "\\nu",    // $\nu$
  1666.     "\\null",@/
  1667.     "\\nullfont",@/
  1668.     "\\nwarrow"@;    // $\nwarrow$
  1669.  
  1670. @
  1671. @<\TeX\ intrinsics \.{\\o}\dots@>=
  1672.     "\\o",    // $\o$
  1673.     "\\O",    // $\O$
  1674.     "\\oalign",@/
  1675.     "\\obeylines","\\obeyspaces",@/
  1676.     "\\odot",    // $\odot$
  1677.     "\\oe",    // \oe
  1678.     "\\OE",    // \OE
  1679.     "\\offinterlineskip",@/
  1680.     "\\oint",    // $\oint$
  1681.     "\\oldstyle",@/
  1682.     "\\omega",    // $\omega$
  1683.     "\\Omega",    // $\Omega$
  1684.     "\\ominus",    // $\ominus$
  1685.     "\\ooalign",@/
  1686.     "\\openup",@/
  1687.     "\\oplus",    // $\oplus$
  1688.     "\\oslash",    // $\oslash$
  1689.     "\\other",@/
  1690.     "\\otimes",    // $\otimes$
  1691.     "\\overbrace",     // $\overbrace{x+\cdots+x}^{k\rm\;times}$
  1692.     "\\overleftarrow", // $\overleftarrow{abc}$
  1693.     "\\overrightarrow", // $\overrightarrow{abc}$
  1694.     "\\owns"@;    // $\owns$
  1695.  
  1696. @
  1697. @<\TeX\ intrinsics \.{\\p,q,r}\dots@>=
  1698.     "\\P",    // \P
  1699.     "\\pagebody","\\pagecontents",
  1700.     "\\pageinsert","\\pageno",
  1701.     "\\parallel",    // $\parallel$
  1702.     "\\partial",    // $\partial$
  1703.     "\\perp",    // $\perp$
  1704.     "\\phantom",@/
  1705.     "\\phi",    // $\phi$
  1706.     "\\Phi",    // $\Phi$
  1707.     "\\pi",    // $\pi$
  1708.     "\\Pi",    // $\Pi$
  1709.     "\\plainoutput",
  1710.     "\\pm",    // $\pm$
  1711.     "\\pmatrix",    // $\pmatrix{a&b\cr c&d\cr}$
  1712.     "\\pmod",    // $\pmod$
  1713.     "\\Pr",    // $\Pr$
  1714.     "\\prec",    // $\prec$
  1715.     "\\preceq",    // $\preceq$
  1716.     "\\preloaded",@/
  1717.     "\\prime",@/
  1718.     "\\proclaim",@/
  1719.     "\\prod",    // $\prod$
  1720.     "\\propto",    // $\propto$
  1721.     "\\ps",@/
  1722.     "\\psi",    // $\psi$
  1723.     "\\Psi",    // $\Psi$
  1724.     "\\qquad",    // $x\qquad y$
  1725.     "\\quad",    // $x\quad y$
  1726.     "\\raggedbottom","\\raggedcenter","\\raggedright",@/
  1727.     "\\rangle",    // $\rangle$
  1728.     "\\rbrace",    // $\rbrace$
  1729.     "\\rbrack",    // $\rbrack$
  1730.     "\\rceil",    // $\rceil$
  1731.     "\\Re",    // $\Re$
  1732.     "\\relbar",    // $\relbar$
  1733.     "\\Relbar",    // $\Relbar$
  1734.     "\\removelastskip",@/
  1735.     "\\repeat",@/
  1736.     "\\rfloor",    // $\rfloor$
  1737.     "\\rgroup",@/
  1738.     "\\rho",    // $\rho$
  1739.     "\\rhook",    // $\rhook$
  1740.     "\\rightarrow",    // $\rightarrow$
  1741.     "\\Rightarrow",    // $\Rightarrow$
  1742.     "\\rightarrowfill", // \hbox to 100pt{\rightarrowfill}
  1743.     "\\rightharpoondown",    // $\rightharpoondown$
  1744.     "\\rightharpoonup",    // $\rightharpoonup$
  1745.     "\\rightleftharpoons",    // $\rightleftharpoons$
  1746.     "\\rightline",@/
  1747.     "\\rlap",@/
  1748.     "\\rm",        // \rm Roman
  1749.     "\\rmoustache",    // $\rmoustache$
  1750.     "\\root",@/
  1751.     "\\rq"@;    // $\rq$
  1752.  
  1753. @
  1754. @<\TeX\ intrinsics \.{\\s}\dots@>=
  1755.     "\\S",    // \S
  1756.     "\\sb",@/
  1757.     "\\sc",  // \SC Small CAPS
  1758.     "\\searrow",    // $\searrow$
  1759.     "\\sec",    // $\sec$
  1760.     "\\setminus",    // $\setminus$
  1761.     "\\settabs",@/
  1762.     "\\setupverbatim",@/
  1763.     "\\sevenrm",    // \sevenrm Sevenrm
  1764.     "\\sharp",    // $\sharp$
  1765.     "\\sigma",    // $\sigma$
  1766.     "\\Sigma",    // $\Sigma$
  1767.     "\\sim",    // $\sim$
  1768.     "\\simeq",    // $\simeq$
  1769.     "\\sin",    // $\sin$
  1770.     "\\sinh",    // $\sinh$
  1771.     "\\skew",@/
  1772.     "\\sl",        // \sl Slanted
  1773.     "\\slash",    // $\slash$
  1774.     "\\slfam",@/
  1775.     "\\smallbreak",@/
  1776.     "\\smallint",    // $\smallint$
  1777.     "\\smallskip","\\smallskipamount","\\smalltype",
  1778.     "\\smash",@/
  1779.     "\\smile",    // $\smile$
  1780.     "\\sp",@/
  1781.     "\\space",@/
  1782.     "\\spadesuit",    // $\spadesuit$
  1783.     "\\sqcap",    // $\sqcap$
  1784.     "\\sqcup",    // $\sqcup$
  1785.     "\\sqrt",    // $\sqrt\pi$
  1786.     "\\sqsubseteq",    // $\sqsubseteq$
  1787.     "\\sqsupseteq",    // $\sqsupseteq$
  1788.     "\\ss",        // \rm\ss
  1789.     "\\star",    // $\star$
  1790.     "\\strut","\\strutbox",@/
  1791.     "\\subset",    // $\subset$
  1792.     "\\subseteq",    // $\subseteq$
  1793.     "\\succ",    // $\succ$
  1794.     "\\succeq",    // $\succeq$
  1795.     "\\sum",    // $\sum$
  1796.     "\\sup",    // $\sup$
  1797.     "\\supereject",@/
  1798.     "\\supset",    // $\supset$
  1799.     "\\supseteq",    // $\supseteq$
  1800.     "\\surd",    // $\surd$
  1801.     "\\swarrow"@;    // $\swarrow$
  1802.  
  1803. @
  1804. @<\TeX\ intrinsics     \.{\\t}\dots@>=
  1805.     "\\t",        // \rm \t x
  1806.     "\\tabalign",@/
  1807.     "\\tabs",@/
  1808.     "\\tan",    // $\tan$
  1809.     "\\tanh",    // $\tanh$
  1810.     "\\tau",    // $\tau$
  1811.     "\\tenex",@/
  1812.     "\\tenpoint",@/
  1813.     "\\tenrm",@/
  1814.     "\\tensl",@/
  1815.     "\\tensy",@/
  1816.     "\\TeX",    // \TeX
  1817.     "\\textindent",@/
  1818.     "\\theta",    // $\theta$
  1819.     "\\Theta",    // $\Theta$
  1820.     "\\thinspace",@/
  1821.     "\\tilde",    // $\tilde x$
  1822.     "\\times",    // $\times$
  1823.     "\\to",    // $\to$
  1824.     "\\top",    // $\top$
  1825.     "\\topins","\\topinsert",
  1826.     "\\tracingall",@/
  1827.     "\\triangle",    // $\triangle$
  1828.     "\\triangleleft",    // $\triangleleft$
  1829.     "\\triangleright",    // $\triangleright$
  1830.     "\\tt",        // \tt Typewriter
  1831.     "\\ttfam",@/
  1832.     "\\ttglue",@/
  1833.     "\\ttraggedright"@;
  1834.  
  1835. @
  1836. @<\TeX\ intrinsics \.{\\u,v,w,x,y,z}\dots@>=
  1837.     "\\u",        // \rm \u x
  1838.     "\\uncatcodespecials",@/
  1839.     "\\undefined",@/
  1840.     "\\underbar",    // \underbar{A}
  1841.     "\\underbrace",    // $\underbrace{x+\cdots+x}^{k\rm\;times}$
  1842.     "\\up",@/
  1843.     "\\uparrow",    // $\uparrow$
  1844.     "\\Uparrow",    // $\Uparrow$
  1845.     "\\upbracefill", // \hbox to 100pt{\upbracefill}
  1846.     "\\updownarrow",    // $\updownarrow$
  1847.     "\\Updownarrow",    // $\Updownarrow$
  1848.     "\\uplus",    // $\uplus$
  1849.     "\\upsilon",    // $\upsilon$
  1850.     "\\Upsilon",    // $\Upsilon$
  1851.     "\\v",        // \rm \v x
  1852.     "\\varepsilon",    // $\varepsilon$
  1853.     "\\varphi",    // $\varphi$
  1854.     "\\varpi",    // $\varpi$
  1855.     "\\varrho",    // $\varrho$
  1856.     "\\varsigma",    // $\varsigma$
  1857.     "\\vartheta",    // $\vartheta$
  1858.     "\\vdash",    // $\vdash$
  1859.     "\\vdots",    // $\vdots$
  1860.     "\\vec",    // $\vec x$    
  1861.     "\\vee",    // $\vee$
  1862.     "\\vert",    // $\vert$
  1863.     "\\Vert",    // $\Vert$
  1864.     "\\vfootnote",@/
  1865.     "\\vglue",@/
  1866.     "\\vphantom",@/
  1867.     "\\wedge",    // $\wedge$
  1868.     "\\widehat",    // $\widehat{\hbox{ab}}$
  1869.     "\\widetilde",    // $\widetilde{\hbox{cd}}$
  1870.     "\\wlog",@/
  1871.     "\\wp",    // $\wp$
  1872.     "\\wr",    // $\wr$
  1873.     "\\xi",    // $\xi$
  1874.     "\\Xi",    // $\Xi$
  1875.     "\\zeta"@;    // $\zeta$
  1876.  
  1877. @* STORING the RESERVED WORDS. To save time and memory, we store
  1878. identifiers only once, the first time the language is used.
  1879.  
  1880. @d ALREADY_RESERVED(L) if(is_reservd.L) break; else is_reservd.L = YES@;
  1881.  
  1882. @<Part 1@>=
  1883.  
  1884. typedef struct
  1885.     {
  1886.     boolean C,RATFOR,FORTRAN,TEX,LITERAL, C_PLUS_PLUS,RATFOR_90,FORTRAN_90;
  1887.     } IS_RESERVED;
  1888.  
  1889. IS_RESERVED is_reservd = {NO,NO,NO,NO,NO, NO,NO,NO};
  1890.  
  1891. SRTN ini_reserved FCN((l))
  1892.     LANGUAGE l C1("")@;
  1893. {
  1894. switch(l)
  1895.     {
  1896.    case NO_LANGUAGE:
  1897.     CONFUSION("ini_reserved","Language should already be defined here");
  1898.  
  1899.    case C:
  1900.     @<Reserve identifiers for |C|@>;
  1901.     break;
  1902.  
  1903.    case C_PLUS_PLUS:
  1904.     @<Reserve identifiers for |C_PLUS_PLUS|@>;
  1905.     break;
  1906.  
  1907.    case FORTRAN:
  1908.     @<Reserve identifiers for |FORTRAN|@>;
  1909.     break;
  1910.  
  1911.    case FORTRAN_90:
  1912.     @<Reserve identifiers for |FORTRAN_90|@>;
  1913.     break;
  1914.  
  1915.    case RATFOR:
  1916.     if(!Rat_is_loaded) break;
  1917.     @<Reserve identifiers for |RATFOR|@>;
  1918.     break;
  1919.  
  1920.    case RATFOR_90:
  1921.     if(!Rat_is_loaded) break;
  1922.     @<Reserve identifiers for |RATFOR_90|@>;
  1923.     break;
  1924.  
  1925.    case TEX:
  1926.     @<Reserve identifiers for |TEX|@>;
  1927.     break;
  1928.  
  1929.    case LITERAL:
  1930.     @<Reserve identifiers for |LITERAL|@>;
  1931.     break;
  1932.  
  1933.    case NUWEB_OFF:
  1934.    case NUWEB_ON:
  1935.     CONFUSION("ini_reserved","Invalid language");
  1936.     }  
  1937.  
  1938. ini_out_tokens(general_tokens); // For things such as |id_defined|.
  1939. }
  1940.  
  1941. @
  1942. @<Reserve identifiers for |C|@>=
  1943.  
  1944. ALREADY_RESERVED(C);
  1945.  
  1946. save_words(C, C_words);
  1947. save_words(C, C_words1);
  1948.  
  1949. save_WEB(C);
  1950.  
  1951. SAVE_ID(INTRINSIC_FCN, C, C_intrinsics);
  1952.  
  1953. ini_tokens(C)@;
  1954.  
  1955. @
  1956. @<Reserve identifiers for |C_PLUS...@>=
  1957.  
  1958. ALREADY_RESERVED(C_PLUS_PLUS);
  1959.  
  1960. save_words(C_PLUS_PLUS, C_words);
  1961. save_words(C_PLUS_PLUS, Cpp_words); // Extra; don't change order here.
  1962. save_words(C_PLUS_PLUS, Cpp_words1);
  1963.  
  1964. save_WEB(C_PLUS_PLUS);
  1965.  
  1966. SAVE_ID(INTRINSIC_FCN,C_PLUS_PLUS,C_intrinsics);
  1967. SAVE_ID(INTRINSIC_FCN,C_PLUS_PLUS,Cpp_intrinsics); // Extra.
  1968.  
  1969. ini_tokens(C_PLUS_PLUS)@;
  1970.  
  1971. @
  1972. @<Reserve identifiers for |FORTRAN|@>=
  1973.  
  1974. ALREADY_RESERVED(FORTRAN);
  1975.  
  1976. save_words(FORTRAN, F77_words);
  1977. save_WEB(FORTRAN);
  1978.  
  1979. if(m4) 
  1980.     save_words(FORTRAN, M4_words);
  1981.  
  1982. SAVE_ID(INTRINSIC_FCN, FORTRAN, F77_intrinsics);
  1983. SAVE_ID(KEYWD, FORTRAN, F77_Keywords);
  1984.  
  1985. if(lc_keywords)
  1986.     SAVE_ID(KEYWD, FORTRAN, F77_keywords);
  1987.  
  1988. #ifdef VAXC
  1989.     save_words(FORTRAN, VAX_words);
  1990.     SAVE_ID(INTRINSIC_FCN, FORTRAN, VAX_intrinsics);
  1991.     SAVE_ID(KEYWD, FORTRAN, VAX_Keywords);
  1992. #endif // |VAXC|
  1993.  
  1994. ini_tokens(FORTRAN)@;
  1995.  
  1996. @
  1997. @<Reserve identifiers for |FORTRAN_90|@>=
  1998.  
  1999. ALREADY_RESERVED(FORTRAN_90);
  2000.  
  2001. save_words(FORTRAN_90,F77_words);
  2002. save_words(FORTRAN_90,F90_words); // Extra.
  2003. save_WEB(FORTRAN_90);
  2004.  
  2005. if(m4) 
  2006.     save_words(FORTRAN_90, M4_words);
  2007.  
  2008. SAVE_ID(INTRINSIC_FCN, FORTRAN_90, F77_intrinsics);
  2009. SAVE_ID(INTRINSIC_FCN, FORTRAN_90, F90_intrinsics); // Extra.
  2010. SAVE_ID(KEYWD, FORTRAN_90, F77_Keywords);
  2011. SAVE_ID(KEYWD, FORTRAN_90, F90_Keywords);
  2012.  
  2013. if(lc_keywords)
  2014.     {
  2015.     SAVE_ID(KEYWD, FORTRAN_90, F77_keywords);
  2016.     SAVE_ID(KEYWD, FORTRAN_90, F90_keywords);
  2017.     }
  2018.  
  2019. #ifdef VAXC
  2020.     save_words(FORTRAN_90, VAX_words);
  2021.     SAVE_ID(INTRINSIC_FCN, FORTRAN_90, VAX_intrinsics);
  2022.     SAVE_ID(KEYWD, FORTRAN_90, VAX_Keywords);
  2023. #endif // |VAXC|
  2024.  
  2025. ini_tokens(FORTRAN_90)@;
  2026.  
  2027. @
  2028. @<Reserve identifiers for |RATFOR|@>=
  2029.  
  2030. ALREADY_RESERVED(RATFOR);
  2031.  
  2032. save_words(RATFOR, F77_words);
  2033. save_words(RATFOR, RATFOR_words); // Extra.
  2034. save_WEB(RATFOR);
  2035.  
  2036. if(m4) save_words(RATFOR, M4_words);
  2037.  
  2038. SAVE_ID(INTRINSIC_FCN, RATFOR, F77_intrinsics);
  2039. SAVE_ID(KEYWD, RATFOR, F77_Keywords);
  2040.  
  2041. if(lc_keywords)
  2042.     {
  2043.     SAVE_ID(KEYWD, RATFOR, F77_keywords);
  2044.     SAVE_ID(KEYWD, RATFOR, R77_keywords);
  2045.     }
  2046.  
  2047. #ifdef VAXC
  2048.     save_words(RATFOR, VAX_words);
  2049.     SAVE_ID(INTRINSIC_FCN, RATFOR, VAX_intrinsics);
  2050.     SAVE_ID(KEYWD, RATFOR, VAX_Keywords);
  2051. #endif // |VAXC|
  2052.  
  2053. ini_RAT_tokens(RATFOR)@;
  2054.  
  2055. @
  2056. @<Reserve identifiers for |RATFOR_90|@>=
  2057.  
  2058. ALREADY_RESERVED(RATFOR_90);
  2059.  
  2060. save_words(RATFOR_90, F77_words);
  2061. save_words(RATFOR_90, F90_words);
  2062. save_words(RATFOR_90, RATFOR_words); // Extra.
  2063. save_WEB(RATFOR_90);
  2064.  
  2065. if(m4) 
  2066.     save_words(RATFOR_90,  M4_words);
  2067.  
  2068. SAVE_ID(INTRINSIC_FCN, RATFOR_90, F77_intrinsics);
  2069. SAVE_ID(INTRINSIC_FCN, RATFOR_90, F90_intrinsics);
  2070. SAVE_ID(KEYWD, RATFOR_90, F77_Keywords);
  2071. SAVE_ID(KEYWD, RATFOR_90, F90_Keywords);
  2072.  
  2073. if(lc_keywords)
  2074.     {
  2075.     SAVE_ID(KEYWD, RATFOR_90, F77_keywords);
  2076.     SAVE_ID(KEYWD, RATFOR_90, R77_keywords);
  2077.     SAVE_ID(KEYWD, RATFOR_90, F90_keywords);
  2078.     }
  2079.  
  2080. #ifdef VAXC
  2081.     save_words(RATFOR_90, VAX_words);
  2082.     SAVE_ID(INTRINSIC_FCN, RATFOR_90, VAX_intrinsics);
  2083.     SAVE_ID(KEYWD, RATFOR_90, VAX_Keywords);
  2084. #endif // |VAXC|
  2085.  
  2086. ini_RAT_tokens(RATFOR_90)@;
  2087.  
  2088. @
  2089. @<Reserve identifiers for |TEX|@>=
  2090.  
  2091. ALREADY_RESERVED(TEX);
  2092.  
  2093. save_words(TEX, TEX_words);
  2094. save_WEB(TEX);
  2095.  
  2096. SAVE_ID(INTRINSIC_FCN, TEX, TEX_intrinsics);
  2097.  
  2098. ini_tokens(TEX)@;
  2099.  
  2100. @
  2101. @<Reserve identifiers for |LITERAL|@>=
  2102.  
  2103. ALREADY_RESERVED(LITERAL);
  2104.  
  2105.  
  2106. @
  2107. @<Part 2@>=@[
  2108. int cmpr_nd FCN((p0,p1))
  2109.     NAME_INFO HUGE **p0 C0("")@;
  2110.     NAME_INFO HUGE **p1 C1("")@;
  2111. {
  2112. switch(web_strcmp((*p0)->byte_start,(*p0+1)->byte_start,
  2113.     (*p1)->byte_start,(*p1+1)->byte_start))
  2114.     {
  2115.    case EQUAL:
  2116.     return 0;
  2117.  
  2118.    case LESS:
  2119.    case PREFIX:
  2120.     return -1;
  2121.  
  2122.    case GREATER:
  2123.    case EXTENSION:
  2124.     return 1;
  2125.     }
  2126.  
  2127. return 0;
  2128. }
  2129.  
  2130. @ The following routine is called from \.{common.web} in response to the
  2131. \.{-D}~option to display the status of reserved words.
  2132.  
  2133. @<Part 2@>=@[
  2134. SRTN see_reserved FCN((prsrvd))
  2135.     CONST RSRVD HUGE *prsrvd C1("")@;
  2136. {
  2137. CONST outer_char HUGE *pa = prsrvd->args;
  2138. unsigned n,k;
  2139. NAME_INFO HUGE **p,**p0,**p1,*nd = name_dir;
  2140. boolean all_languages = NO;
  2141.  
  2142. /* Note that the following stores every reserved word for every language.  This
  2143. takes a lot of storage. */
  2144. for(k=0; k<NUM_LANGUAGES; k++)
  2145.     ini_reserved(lan_enum(k));
  2146.  
  2147. n = PTR_DIFF(unsigned, name_ptr, name_dir);
  2148. p = p0 = p1 = GET_MEM("p",n,NAME_INFO HUGE *);
  2149.  
  2150. for(k=0; k<n; k++)
  2151.     *p++ = nd++;
  2152.  
  2153. QSORT(p0,n,sizeof(NAME_INFO HUGE *),cmpr_nd);
  2154.  
  2155. if(*pa=='*')
  2156.     {
  2157.     all_languages = YES;
  2158.     pa++;
  2159.     }
  2160.  
  2161. printf("Reserved words (%s)%s%s%s:\n",
  2162.     all_languages ? "all languages" : languages[lan_num(language)],
  2163.     *pa ? " beginning with \"" : "", (char *)pa, *pa ? "\"" : "");
  2164.  
  2165. for(p1=p0; p1<p; p1++)
  2166.     {
  2167.     ASCII temp[100];
  2168.     size_t n = PTR_DIFF(size_t, ((*p1)+1)->byte_start, (*p1)->byte_start);
  2169.  
  2170. /* Get the identifier. */
  2171.     STRNCPY(temp,(*p1)->byte_start,n); 
  2172.     temp[n] = '\0';
  2173.     to_outer(temp);
  2174.  
  2175. /* Test it and print info if required. */
  2176.     if((all_languages || ((*p1)->Language & language)) &&
  2177.          (!*pa || (STRNCMP(pa,temp,STRLEN(pa))==0)))
  2178.        id_info(*p1,-1L,(outer_char *)temp, prsrvd);
  2179.     }
  2180. }
  2181.  
  2182. @* INDEX.
  2183.