root/usr.bin/mg/chrdef.h
/*      $OpenBSD: chrdef.h,v 1.10 2015/03/25 12:29:03 bcallah Exp $     */

/* This file is in the public domain. */

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

/*
 * Casting should be at least as efficient as anding with 0xff,
 * and won't have the size problems.
 */
#define CHARMASK(c)     ((unsigned char) (c))

/*
 * 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 _MG_W   0x01            /* Word.                         */
#define _MG_U   0x02            /* Upper case letter.            */
#define _MG_L   0x04            /* Lower case letter.            */
#define _MG_C   0x08            /* Control.                      */
#define _MG_P   0x10            /* end of sentence punctuation   */
#define _MG_D   0x20            /* is decimal digit              */

#define ISWORD(c)       ((cinfo[CHARMASK(c)]&_MG_W)!=0)
#define ISCTRL(c)       ((cinfo[CHARMASK(c)]&_MG_C)!=0)
#define ISUPPER(c)      ((cinfo[CHARMASK(c)]&_MG_U)!=0)
#define ISLOWER(c)      ((cinfo[CHARMASK(c)]&_MG_L)!=0)
#define ISEOSP(c)       ((cinfo[CHARMASK(c)]&_MG_P)!=0)
#define ISDIGIT(c)      ((cinfo[CHARMASK(c)]&_MG_D)!=0)
#define TOUPPER(c)      ((c)-0x20)
#define TOLOWER(c)      ((c)+0x20)

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

#define K00             256
#define K01             257
#define K02             258
#define K03             259
#define K04             260
#define K05             261
#define K06             262
#define K07             263
#define K08             264
#define K09             265
#define K0A             266
#define K0B             267
#define K0C             268
#define K0D             269
#define K0E             270
#define K0F             271
#define K10             272
#define K11             273
#define K12             274
#define K13             275
#define K14             276
#define K15             277
#define K16             278
#define K17             279
#define K18             280
#define K19             281
#define K1A             282
#define K1B             283
#define K1C             284
#define K1D             285
#define K1E             286
#define K1F             287