-
-char partab[] = {
- 0001,0201,0201,0001,0201,0001,0001,0201, /* nul - bel */
- 0202,0004,0003,0201,0005,0206,0201,0001, /* bs - si */
- 0201,0001,0001,0201,0001,0201,0201,0001, /* dle - etb */
- 0001,0201,0201,0001,0201,0001,0001,0201, /* can - us */
- 0200,0000,0000,0200,0000,0200,0200,0000, /* sp - ' */
- 0000,0200,0200,0000,0200,0000,0000,0200, /* ( - / */
- 0100,0300,0300,0100,0300,0100,0100,0300, /* 0 - 7 */
- 0300,0100,0000,0200,0000,0200,0200,0000, /* 8 - ? */
- 0200,0100,0100,0300,0100,0300,0300,0100, /* @ - G */
- 0100,0300,0300,0100,0300,0100,0100,0300, /* H - O */
- 0100,0300,0300,0100,0300,0100,0100,0300, /* P - W */
- 0300,0100,0100,0200,0000,0200,0200,0300, /* X - _ */
- 0000,0300,0300,0100,0300,0100,0100,0300, /* ` - g */
- 0300,0100,0100,0300,0100,0300,0300,0100, /* h - o */
- 0300,0100,0100,0300,0100,0300,0300,0100, /* p - w */
- 0100,0300,0300,0000,0200,0000,0000,0201, /* x - del */
+#define E 0x00 /* Even parity. */
+#define O 0x80 /* Odd parity. */
+#define PARITY(c) (char_type[c] & O)
+
+#define ALPHA 0x40 /* Alpha or underscore. */
+#define ISALPHA(c) (char_type[(c) & TTY_CHARMASK] & ALPHA)
+
+#define CCLASSMASK 0x3f
+#define CCLASS(c) (char_type[c] & CCLASSMASK)
+
+#define BS BACKSPACE
+#define CC CONTROL
+#define CR RETURN
+#define NA ORDINARY | ALPHA
+#define NL NEWLINE
+#define NO ORDINARY
+#define TB TAB
+#define VT VTAB
+
+char const char_type[] = {
+ E|CC, O|CC, O|CC, E|CC, O|CC, E|CC, E|CC, O|CC, /* nul - bel */
+ O|BS, E|TB, E|NL, O|CC, E|VT, O|CR, O|CC, E|CC, /* bs - si */
+ O|CC, E|CC, E|CC, O|CC, E|CC, O|CC, O|CC, E|CC, /* dle - etb */
+ E|CC, O|CC, O|CC, E|CC, O|CC, E|CC, E|CC, O|CC, /* can - us */
+ O|NO, E|NO, E|NO, O|NO, E|NO, O|NO, O|NO, E|NO, /* sp - ' */
+ E|NO, O|NO, O|NO, E|NO, O|NO, E|NO, E|NO, O|NO, /* ( - / */
+ E|NA, O|NA, O|NA, E|NA, O|NA, E|NA, E|NA, O|NA, /* 0 - 7 */
+ O|NA, E|NA, E|NO, O|NO, E|NO, O|NO, O|NO, E|NO, /* 8 - ? */
+ O|NO, E|NA, E|NA, O|NA, E|NA, O|NA, O|NA, E|NA, /* @ - G */
+ E|NA, O|NA, O|NA, E|NA, O|NA, E|NA, E|NA, O|NA, /* H - O */
+ E|NA, O|NA, O|NA, E|NA, O|NA, E|NA, E|NA, O|NA, /* P - W */
+ O|NA, E|NA, E|NA, O|NO, E|NO, O|NO, O|NO, O|NA, /* X - _ */
+ E|NO, O|NA, O|NA, E|NA, O|NA, E|NA, E|NA, O|NA, /* ` - g */
+ O|NA, E|NA, E|NA, O|NA, E|NA, O|NA, O|NA, E|NA, /* h - o */
+ O|NA, E|NA, E|NA, O|NA, E|NA, O|NA, O|NA, E|NA, /* p - w */
+ E|NA, O|NA, O|NA, E|NO, O|NO, E|NO, E|NO, O|CC, /* x - del */