2.9BSD/usr/src/ucb/vsh/strings.h
/* Ascii control table. There are 129 entries. To find the class
of a character, mask out the parity bit (if raw I/O is being
used) and use it as an index the the ascii array. With "cooked"
I/O, EOF is -1. EOF with "parity" masked out is 7f, which is also
coded as an eof. With "raw" I/O, EOT acts as an eof. */
/* Each entry in the table has the following bits:
1 End of line
2 End of file
4 Alpha
8 Upper case
16 Number
32 Special character
64 White space
*/
/* Codes for loading table */
#define UD 0 /* Undefined--assorted control characters */
#define EL 1 /* End of line */
#define EF 3 /* End of File (and line) */
#define LA 4 /* Lower case alpha */
#define UA 12 /* Upper case alpha */
#define NU 16 /* Numeric */
#define SC 32 /* Special character */
#define WS 64 /* White space */
/* Ascii acts like an array indexed from -1 to 128 */
extern char charclass [];
#define ascii (charclass + 1)
/* Usefull macro functions */
#define WHITESPACE(arg) (ascii [arg] == WS)
#define NUMERIC(arg) (ascii [arg] == NU)
#define ENDLINE(arg) (ascii [arg] & EL)
#define TONUM(arg) (arg - '0')
/* This reads a line from stdin and returns the first word */
#define getword(arg) xgetword (arg, sizeof arg)
/* Read a line from stdin */
#define getline(arg) xgetline (stdin, arg, sizeof arg)
/* Read a line from any stream */
#define fgetline(arg1,arg2) xgetline (arg1, arg2, sizeof arg2)