/*
 * h/chardef.h: character set specific #defines for mg 2a Warning: System
 * specific ones exist 
 */

#ifndef	CHARMASK
/*
 * casting should be at least as efficent as anding with 0xff, and won't have
 * the size problems.  Override in sysdef.h if no unsigned char type. 
 */
#define	CHARMASK(c)	((unsigned char) (c))
#endif

/*
 * These flags, and the macros below them, make up a do-it-yourself set of
 * "ctype" macros that understand the DEC multinational set, and let me ask a
 * slightly different set of questions. 
 */
#define _W	0x01		/* Word.			 */
#define _U	0x02		/* Upper case letter.		 */
#define _L	0x04		/* Lower case letter.		 */
#define _C	0x08		/* Control.			 */
#define _P	0x10		/* end of sentence punctuation	 */
#define	_D	0x20		/* is decimal digit		 */

#define ISWORD(c)	((cinfo[CHARMASK(c)]&_W)!=0)
#define ISCTRL(c)	((cinfo[CHARMASK(c)]&_C)!=0)
#define ISUPPER(c)	((cinfo[CHARMASK(c)]&_U)!=0)
#define ISLOWER(c)	((cinfo[CHARMASK(c)]&_L)!=0)
#define ISEOSP(c)	((cinfo[CHARMASK(c)]&_P)!=0)
#define	ISDIGIT(c)	((cinfo[CHARMASK(c)]&_D)!=0)
#define TOUPPER(c)	((c)-0x20)
#define TOLOWER(c)	((c)+0x20)

/*
 * generally useful thing for chars 
 */
#define CCHR(x)		((x) ^ 0x40)	/* CCHR('?') == DEL */

#ifndef	METACH
#define	METACH	CCHR('[')
#endif
