/* ** charmap.h : P0 specific, also included by charmap.c ** it defines the mapping used to go from simple chars to these predefined ** values. this enables the compiler to use a compact switch stmt. ** they have been grouped in what is believed to be the most beneficial ** way, in that most switches will be checking those values which have ** been grouped together. */ #define EOS_CHAR '\0' /* end of string/buffer marker char */ #define LX_WHITE 0 #define LX_CR 1 #define LX_SLASH 2 /* /, /=, comment start */ #define LX_EOS 3 #define LX_STAR 4 /* *, *=, comment stop */ #define LX_NL 5 #define LX_BACKSLASH 6 #define LX_SQUOTE 7 #define LX_DQUOTE 8 #define LX_DOT 9 /* . ... */ #define LX_BANG 10 /* ! != */ #define LX_POUND 11 /* # ## */ #define LX_PERCENT 12 /* % %= */ #define LX_EQ 13 /* = == */ #define LX_HAT 14 /* ^ ^= */ #define LX_OR 15 /* | |= || */ #define LX_AND 16 /* & && &= */ #define LX_PLUS 17 /* + ++ += */ #define LX_MINUS 18 /* - -- -= -> */ #define LX_LT 19 /* < << <<= <= */ #define LX_GT 20 /* > >= >> >>= */ #define LX_LSHIFT 21 /* << */ #define LX_RSHIFT 22 /* >> */ #define LX_ILL 23 #define LX_CBRACE 24 #define LX_CBRACK 25 #define LX_COLON 26 #define LX_COMMA 27 #define LX_CPAREN 28 #define LX_NUMBER 29 #define LX_OBRACE 30 #define LX_OBRACK 31 #define LX_OPAREN 32 #define LX_QUEST 33 #define LX_SEMI 34 #define LX_TILDE 35 #define LX_MACFORMAL 36 #define LX_STRFORMAL 37 #define LX_CHARFORMAL 38 #define LX_NOEXPAND 39 #define LX_ID 40 #define LX_EACH 41 #define LX_LEADBYTE 42 #define LX_ASCII 43 /* to use for 'non-illegal' illegals */ #define LX_FORMALMARK 0x1 #define LX_FORMALSTR 0x2 #define LX_FORMALCHAR 0x3 #define LX_NOEXPANDMARK 0x4 #define CONTROL_Z 0x1a /* ** Charmap is indexed with a character value plus the above offset */ #define CHARMAP(c) (Charmap[((UCHAR)(c))]) #define LX_IS_IDENT(c) (CHARMAP(c) == LX_ID) #define LX_IS_WHITE(c) (CHARMAP(c) == LX_WHITE) #define LX_IS_NUMBER(c) (CHARMAP(c) == LX_NUMBER) #define LXC_BDIGIT 0x01 /* 0 - 1 */ #define LXC_ODIGIT 0x02 /* 0 - 7 */ #define LXC_DIGIT 0x04 /* 0 - 9 */ #define LXC_XDIGIT 0x08 /* a-f A-F 0-9 */ #define LXC_ID 0x10 /* continuation is part of an identifier */ #define LXC_RADIX 0x20 /* BbDdHhOoQq */ #define LXC_WHITE 0x40 /* whitespace */ #define LXC_SPECIAL 0x80 /* the char may have a special meaning */ #define CONTMAP(c) (Contmap[((UCHAR)(c))]) /* ** LXC_IS_ID(c) : is c part of an identifier */ #define LXC_IS_BDIGIT(c) (CONTMAP(c) & LXC_BDIGIT) #define LXC_IS_ODIGIT(c) (CONTMAP(c) & LXC_ODIGIT) #define LXC_IS_DIGIT(c) (CONTMAP(c) & LXC_DIGIT) #define LXC_IS_XDIGIT(c) (CONTMAP(c) & LXC_XDIGIT) #define LXC_IS_IDENT(c) (CONTMAP(c) & LXC_ID) #define LXC_IS_RADIX(c) (CONTMAP(c) & LXC_RADIX) #define LXC_IS_WHITE(c) (CONTMAP(c) & LXC_WHITE) #define IS_SPECIAL(c) (CONTMAP(c) & LXC_SPECIAL)