Trailing-Edge
-
PDP-10 Archives
-
SRI_NIC_PERM_FS_1_19910112
-
c/kcc/ccchar.h
There are 7 other files named ccchar.h in the archive. Click here to see a list.
/* CCCHAR.H - Character processing facility definitions
*
* (c) Copyright Ken Harrenstien 1989
* All changes after v.11, 31-Aug-1986
* (c) Copyright Ken Harrenstien, SRI International 1985
*
* This is very similar to <ctype.h> but has been duplicated in order to
* provide more insulation and speed for KCC, as well as allowing for
* system dependent modifications. If CHARTABLE is defined,
* the flag table is included (this is for CCDATA).
*
* These definitions, plus ccdata.c, conform to the description
* in "C: A Reference Manual" (Harbison & Steele, 1984), section 11.1
* with the caveat that several facilities evaluate their argument expression
* more than once. Therefore, side-effects in arguments should not be used.
*
* Portability considerations: the following facilities depend
* on the runtime character set, but will work for both ASCII and EBCDIC:
* isodigit, toint, _toupper, _tolower
* These are only meaningful when using ASCII:
* isascii, toascii, tosixbit
*/
/* Define internal character type flags. Note value in ctftab is an int,
* so we can use lots of flags and do fast references.
*/
#define CTF_CTL 01 /* Control char (not printing) */
#define CTF_WSP 02 /* Whitespace (all kinds) */
#define CTF_SP 04 /* Space */
#define CTF_PUN 010 /* Punctuation (non-space, non-alphanumeric) */
#define CTF_N 020 /* Numeric 0-9 */
#define CTF_UA 040 /* Uppercase alpha */
#define CTF_LA 0100 /* Lowercase alpha */
#define CTF_X 0200 /* Hex digit */
#define CTF_NO 0400 /* Octal digit */
#define CTF_US 01000 /* Underscore (for C identifier checking) */
#define CTF_EOL 02000 /* C line break (old: \n, \r, \f, \v) (new: \n) */
#define CTF_BS 04000 /* Backspace (old: C whitespace char) */
#define CTF_HSP 010000 /* C "horizontal" whitespace (all but \n) */
#define CTF_TAB 020000 /* TAB */
#define CTF_VWL 040000 /* Vowel */
/* Facility macros, in alphabetical order */
#define isalnum(c) ((ctftab+1)[c]&(CTF_UA|CTF_LA|CTF_N))
#define isalpha(c) ((ctftab+1)[c]&(CTF_UA|CTF_LA))
#define isascii(i) (0 <= (i) && (i) < 0200)
#define iscntrl(c) ((ctftab+1)[c]&(CTF_CTL))
#define iscsym(c) ((ctftab+1)[c]&(CTF_UA|CTF_LA|CTF_N|CTF_US))
#define iscsymf(c) ((ctftab+1)[c]&(CTF_UA|CTF_LA|CTF_US))
#define isdigit(c) ((ctftab+1)[c]&(CTF_N))
#define isgraph(c) ((ctftab+1)[c]&(CTF_PUN|CTF_N|CTF_UA|CTF_LA))
#define islower(c) ((ctftab+1)[c]&(CTF_LA))
#define isodigit(c) ((ctftab+1)[c]&(CTF_NO))
#define isprint(c) ((ctftab+1)[c]&(CTF_PUN|CTF_N|CTF_UA|CTF_LA|CTF_SP))
#define ispunct(c) ((ctftab+1)[c]&(CTF_PUN|CTF_SP))
#define isspace(c) ((ctftab+1)[c]&(CTF_WSP))
#define isupper(c) ((ctftab+1)[c]&(CTF_UA))
#define isxdigit(c) ((ctftab+1)[c]&(CTF_N|CTF_X))
#define toascii(i) ((c)&0177)
#define toint(c) chr2in(c)
#define tolower(c) chr2lo(c)
#define toupper(c) chr2up(c)
#define _tolower(c) ((c)+('a'-'A'))
#define _toupper(c) ((c)+('A'-'a'))
/* These functions are peculiar to KCC.
* iscwsp - true if char is a C language whitespace char
* ischwsp - true if char is a C language whitespace char, but not \n
* iscppwsp - true if char is a C preprocessor directive whitespace char
* isceol - true if char is a C language line-break char
* setcsym - Set flag to allow char as a C language identifier char
* clrcsym - Clear flag to disallow char as a C language identifier char
* The latter two are special hacks only for use by CCDECL when
* trying to parse "entry" statements.
* tosixbit - Convert an ASCII char to its SIXBIT equivalent (if any)
*/
#define iscwsp(c) ((ctftab+1)[c]&(CTF_WSP))
#define ischwsp(c) ((ctftab+1)[c]&(CTF_HSP))
#define iscppwsp(c) ((ctftab+1)[c]&(CTF_SP|CTF_TAB))
#define isceol(c) ((ctftab+1)[c]&(CTF_EOL))
#define isvowel(c) ((ctftab+1)[c]&(CTF_VWL))
#define setcsym(c) ((ctftab+1)[c] |= (CTF_US)) /* Special hack */
#define clrcsym(c) ((ctftab+1)[c] &= ~(CTF_US)) /* Special hack */
#define tosixbit(c) ((((c) & 0100) ? (c)|040 : (c)&~040)&077) /* Cvt to SIXBIT */
#ifndef CHARTABLE
extern int ctftab[], chr2in(), chr2lo(), chr2up();
#else
int ctftab[] = {
0, /* ( -1) EOF */
CTF_CTL, /* ( 0) ^@ */
CTF_CTL, /* ( 1) ^A */
CTF_CTL, /* ( 2) ^B */
CTF_CTL, /* ( 3) ^C */
CTF_CTL, /* ( 4) ^D */
CTF_CTL, /* ( 5) ^E */
CTF_CTL, /* ( 6) ^F */
CTF_CTL, /* ( 7) ^G */
CTF_CTL|CTF_BS, /* ( 10) ^H BackSpace */
CTF_CTL|CTF_WSP|CTF_HSP|CTF_TAB,/* ( 11) ^I Horizontal Tab */
CTF_CTL|CTF_WSP|CTF_EOL, /* ( 12) ^J NewLine */
CTF_CTL|CTF_WSP|CTF_HSP, /* ( 13) ^K Vertical Tab */
CTF_CTL|CTF_WSP|CTF_HSP, /* ( 14) ^L Form Feed */
CTF_CTL|CTF_WSP|CTF_HSP, /* ( 15) ^M Carriage Return */
CTF_CTL, /* ( 16) ^N */
CTF_CTL, /* ( 17) ^O */
CTF_CTL, /* ( 20) ^P */
CTF_CTL, /* ( 21) ^Q */
CTF_CTL, /* ( 22) ^R */
CTF_CTL, /* ( 23) ^S */
CTF_CTL, /* ( 24) ^T */
CTF_CTL, /* ( 25) ^U */
CTF_CTL, /* ( 26) ^V */
CTF_CTL, /* ( 27) ^W */
CTF_CTL, /* ( 30) ^X */
CTF_CTL, /* ( 31) ^Y */
CTF_CTL, /* ( 32) ^Z */
CTF_CTL, /* ( 33) ^[ */
CTF_CTL, /* ( 34) ^\ */
CTF_CTL, /* ( 35) ^] */
CTF_CTL, /* ( 36) ^^ */
CTF_CTL, /* ( 37) ^_ */
CTF_SP|CTF_WSP|CTF_HSP, /* ( 40) Space */
CTF_PUN, /* ( 41) ! */
CTF_PUN, /* ( 42) " */
CTF_PUN, /* ( 43) # */
CTF_PUN, /* ( 44) $ */
CTF_PUN, /* ( 45) % */
CTF_PUN, /* ( 46) & */
CTF_PUN, /* ( 47) ' */
CTF_PUN, /* ( 50) ( */
CTF_PUN, /* ( 51) ) */
CTF_PUN, /* ( 52) * */
CTF_PUN, /* ( 53) + */
CTF_PUN, /* ( 54) , */
CTF_PUN, /* ( 55) - */
CTF_PUN, /* ( 56) . */
CTF_PUN, /* ( 57) / */
CTF_N|CTF_X|CTF_NO, /* ( 60) 0 */
CTF_N|CTF_X|CTF_NO, /* ( 61) 1 */
CTF_N|CTF_X|CTF_NO, /* ( 62) 2 */
CTF_N|CTF_X|CTF_NO, /* ( 63) 3 */
CTF_N|CTF_X|CTF_NO, /* ( 64) 4 */
CTF_N|CTF_X|CTF_NO, /* ( 65) 5 */
CTF_N|CTF_X|CTF_NO, /* ( 66) 6 */
CTF_N|CTF_X|CTF_NO, /* ( 67) 7 */
CTF_N|CTF_X, /* ( 70) 8 */
CTF_N|CTF_X, /* ( 71) 9 */
CTF_PUN, /* ( 72) : */
CTF_PUN, /* ( 73) ; */
CTF_PUN, /* ( 74) < */
CTF_PUN, /* ( 75) = */
CTF_PUN, /* ( 76) > */
CTF_PUN, /* ( 77) ? */
CTF_PUN, /* (100) @ */
CTF_UA|CTF_X|CTF_VWL, /* (101) A */
CTF_UA|CTF_X, /* (102) B */
CTF_UA|CTF_X, /* (103) C */
CTF_UA|CTF_X, /* (104) D */
CTF_UA|CTF_X|CTF_VWL, /* (105) E */
CTF_UA|CTF_X, /* (106) F */
CTF_UA, /* (107) G */
CTF_UA, /* (110) H */
CTF_UA|CTF_VWL, /* (111) I */
CTF_UA, /* (112) J */
CTF_UA, /* (113) K */
CTF_UA, /* (114) L */
CTF_UA, /* (115) M */
CTF_UA, /* (116) N */
CTF_UA|CTF_VWL, /* (117) O */
CTF_UA, /* (120) P */
CTF_UA, /* (121) Q */
CTF_UA, /* (122) R */
CTF_UA, /* (123) S */
CTF_UA, /* (124) T */
CTF_UA|CTF_VWL, /* (125) U */
CTF_UA, /* (126) V */
CTF_UA, /* (127) W */
CTF_UA, /* (130) X */
CTF_UA, /* (131) Y */
CTF_UA, /* (132) Z */
CTF_PUN, /* (133) [ */
CTF_PUN, /* (134) \ */
CTF_PUN, /* (135) ] */
CTF_PUN, /* (136) ^ */
CTF_PUN|CTF_US, /* (137) _ */
CTF_PUN, /* (140) ` */
CTF_LA|CTF_X|CTF_VWL, /* (141) a */
CTF_LA|CTF_X, /* (142) b */
CTF_LA|CTF_X, /* (143) c */
CTF_LA|CTF_X, /* (144) d */
CTF_LA|CTF_X|CTF_VWL, /* (145) e */
CTF_LA|CTF_X, /* (146) f */
CTF_LA, /* (147) g */
CTF_LA, /* (150) h */
CTF_LA|CTF_VWL, /* (151) i */
CTF_LA, /* (152) j */
CTF_LA, /* (153) k */
CTF_LA, /* (154) l */
CTF_LA, /* (155) m */
CTF_LA, /* (156) n */
CTF_LA|CTF_VWL, /* (157) o */
CTF_LA, /* (160) p */
CTF_LA, /* (161) q */
CTF_LA, /* (162) r */
CTF_LA, /* (163) s */
CTF_LA, /* (164) t */
CTF_LA|CTF_VWL, /* (165) u */
CTF_LA, /* (166) v */
CTF_LA, /* (167) w */
CTF_LA, /* (170) x */
CTF_LA, /* (171) y */
CTF_LA, /* (172) z */
CTF_PUN, /* (173) { */
CTF_PUN, /* (174) | */
CTF_PUN, /* (175) } */
CTF_PUN, /* (176) ~ */
CTF_CTL, /* (177) DEL */
};
/* CHR2IN - Implements TOINT(c) facility. */
int chr2in(), chr2lo(), chr2up();
int
chr2in(c)
char c;
{
if (isdigit(c)) return c - '0';
if (isxdigit(c))
return (isupper(c) ? (c - ('A'-10)) : (c - ('a'-10)));
return -1;
}
/* CHR2LO - Implements TOLOWER(c) facility */
int
chr2lo(c)
char c;
{ return (isupper(c) ? _tolower(c) : c);
}
/* CHR2UP - Implements TOUPPER(c) facility */
int
chr2up(c)
char c;
{ return (islower(c) ? _toupper(c) : c);
}
#endif /* CHARTABLE */