- int major, minor, ind, slot;
- const void **htab;
-
- htab = /* LINTED */
- (const void **)arg;
-
- if (0 == (major = tmp[0]))
- return(MDOC_MAX);
- if (0 == (minor = tmp[1]))
- return(MDOC_MAX);
-
- if (tmp[2] && tmp[3])
- return(MDOC_MAX);
-
- if (37 != major && ! isalpha((u_char)major))
- return(MDOC_MAX);
- if (49 != minor && ! isalpha((u_char)minor))
- return(MDOC_MAX);
-
- ADJUST_MAJOR(major);
- ADJUST_MINOR(minor);
-
- ind = INDEX(major, minor);
-
- if (ind < 0 || ind >= 26 * 3 * 52)
- return(MDOC_MAX);
-
- if (htab[ind]) {
- slot = htab[ind] - /* LINTED */
- (void *)mdoc_macros;
- assert(0 == (size_t)slot % sizeof(struct mdoc_macro));
- slot /= sizeof(struct mdoc_macro);
- if (SLOTCMP(slot, tmp))
- return(slot);
- ind++;
- }
-
- if (htab[ind]) {
- slot = htab[ind] - /* LINTED */
- (void *)mdoc_macros;
- assert(0 == (size_t)slot % sizeof(struct mdoc_macro));
- slot /= sizeof(struct mdoc_macro);
- if (SLOTCMP(slot, tmp))
- return(slot);
- ind++;
+ int major, i, j;
+
+ if (0 == p[0])
+ return TOKEN_NONE;
+ if ( ! isalpha((unsigned char)p[0]) && '%' != p[0])
+ return TOKEN_NONE;
+
+ if (isalpha((unsigned char)p[1]))
+ major = 12 * (tolower((unsigned char)p[1]) - 97);
+ else if ('1' == p[1])
+ major = 12 * 26;
+ else
+ return TOKEN_NONE;
+
+ if (p[2] && p[3])
+ return TOKEN_NONE;
+
+ for (j = 0; j < 12; j++) {
+ if (UCHAR_MAX == (i = table[major + j]))
+ break;
+ if (0 == strcmp(p, mdoc_macronames[i]))
+ return i;