[BACK]Return to cinfo.c CVS log [TXT][DIR] Up to [local] / src / usr.bin / mg

Annotation of src/usr.bin/mg/cinfo.c, Revision 1.7

1.7     ! vincent     1: /*     $OpenBSD: cinfo.c,v 1.6 2001/05/23 23:29:47 mickey Exp $        */
1.3       niklas      2:
1.1       deraadt     3: /*
                      4:  *             Character class tables.
                      5:  * Do it yourself character classification
                      6:  * macros, that understand the multinational character set,
                      7:  * and let me ask some questions the standard macros (in
                      8:  * ctype.h) don't let you ask.
                      9:  */
                     10: #include       "def.h"
                     11:
                     12: /*
                     13:  * This table, indexed by a character drawn
                     14:  * from the 256 member character set, is used by my
                     15:  * own character type macros to answer questions about the
                     16:  * type of a character. It handles the full multinational
                     17:  * character set, and lets me ask some questions that the
                     18:  * standard "ctype" macros cannot ask.
                     19:  */
1.6       mickey     20: const char cinfo[256] = {
1.7     ! vincent    21:        _MG_C, _MG_C, _MG_C, _MG_C,             /* 0x0X */
        !            22:        _MG_C, _MG_C, _MG_C, _MG_C,
        !            23:        _MG_C, _MG_C, _MG_C, _MG_C,
        !            24:        _MG_C, _MG_C, _MG_C, _MG_C,
        !            25:        _MG_C, _MG_C, _MG_C, _MG_C,             /* 0x1X */
        !            26:        _MG_C, _MG_C, _MG_C, _MG_C,
        !            27:        _MG_C, _MG_C, _MG_C, _MG_C,
        !            28:        _MG_C, _MG_C, _MG_C, _MG_C,
        !            29:        0, _MG_P, 0, 0,         /* 0x2X */
        !            30:        _MG_W, _MG_W, 0, _MG_W,
        !            31:        0, 0, 0, 0,
        !            32:        0, 0, _MG_P, 0,
        !            33:        _MG_D | _MG_W, _MG_D | _MG_W, _MG_D | _MG_W, _MG_D | _MG_W,     /* 0x3X */
        !            34:        _MG_D | _MG_W, _MG_D | _MG_W, _MG_D | _MG_W, _MG_D | _MG_W,
        !            35:        _MG_D | _MG_W, _MG_D | _MG_W, 0, 0,
        !            36:        0, 0, 0, _MG_P,
        !            37:        0, _MG_U | _MG_W, _MG_U | _MG_W, _MG_U | _MG_W, /* 0x4X */
        !            38:        _MG_U | _MG_W, _MG_U | _MG_W, _MG_U | _MG_W, _MG_U | _MG_W,
        !            39:        _MG_U | _MG_W, _MG_U | _MG_W, _MG_U | _MG_W, _MG_U | _MG_W,
        !            40:        _MG_U | _MG_W, _MG_U | _MG_W, _MG_U | _MG_W, _MG_U | _MG_W,
        !            41:        _MG_U | _MG_W, _MG_U | _MG_W, _MG_U | _MG_W, _MG_U | _MG_W,     /* 0x5X */
        !            42:        _MG_U | _MG_W, _MG_U | _MG_W, _MG_U | _MG_W, _MG_U | _MG_W,
        !            43:        _MG_U | _MG_W, _MG_U | _MG_W, _MG_U | _MG_W, 0,
        !            44:        0, 0, 0, 0,
        !            45:        0, _MG_L | _MG_W, _MG_L | _MG_W, _MG_L | _MG_W, /* 0x6X */
        !            46:        _MG_L | _MG_W, _MG_L | _MG_W, _MG_L | _MG_W, _MG_L | _MG_W,
        !            47:        _MG_L | _MG_W, _MG_L | _MG_W, _MG_L | _MG_W, _MG_L | _MG_W,
        !            48:        _MG_L | _MG_W, _MG_L | _MG_W, _MG_L | _MG_W, _MG_L | _MG_W,
        !            49:        _MG_L | _MG_W, _MG_L | _MG_W, _MG_L | _MG_W, _MG_L | _MG_W,     /* 0x7X */
        !            50:        _MG_L | _MG_W, _MG_L | _MG_W, _MG_L | _MG_W, _MG_L | _MG_W,
        !            51:        _MG_L | _MG_W, _MG_L | _MG_W, _MG_L | _MG_W, 0,
        !            52:        0, 0, 0, _MG_C,
1.2       millert    53:        0, 0, 0, 0,             /* 0x8X */
                     54:        0, 0, 0, 0,
                     55:        0, 0, 0, 0,
                     56:        0, 0, 0, 0,
                     57:        0, 0, 0, 0,             /* 0x9X */
                     58:        0, 0, 0, 0,
                     59:        0, 0, 0, 0,
                     60:        0, 0, 0, 0,
                     61:        0, 0, 0, 0,             /* 0xAX */
                     62:        0, 0, 0, 0,
                     63:        0, 0, 0, 0,
                     64:        0, 0, 0, 0,
                     65:        0, 0, 0, 0,             /* 0xBX */
                     66:        0, 0, 0, 0,
                     67:        0, 0, 0, 0,
                     68:        0, 0, 0, 0,
1.7     ! vincent    69:        _MG_U | _MG_W, _MG_U | _MG_W, _MG_U | _MG_W, _MG_U | _MG_W,     /* 0xCX */
        !            70:        _MG_U | _MG_W, _MG_U | _MG_W, _MG_U | _MG_W, _MG_U | _MG_W,
        !            71:        _MG_U | _MG_W, _MG_U | _MG_W, _MG_U | _MG_W, _MG_U | _MG_W,
        !            72:        _MG_U | _MG_W, _MG_U | _MG_W, _MG_U | _MG_W, _MG_U | _MG_W,
        !            73:        0, _MG_U | _MG_W, _MG_U | _MG_W, _MG_U | _MG_W, /* 0xDX */
        !            74:        _MG_U | _MG_W, _MG_U | _MG_W, _MG_U | _MG_W, _MG_U | _MG_W,
        !            75:        _MG_U | _MG_W, _MG_U | _MG_W, _MG_U | _MG_W, _MG_U | _MG_W,
        !            76:        _MG_U | _MG_W, _MG_U | _MG_W, 0, _MG_W,
        !            77:        _MG_L | _MG_W, _MG_L | _MG_W, _MG_L | _MG_W, _MG_L | _MG_W,     /* 0xEX */
        !            78:        _MG_L | _MG_W, _MG_L | _MG_W, _MG_L | _MG_W, _MG_L | _MG_W,
        !            79:        _MG_L | _MG_W, _MG_L | _MG_W, _MG_L | _MG_W, _MG_L | _MG_W,
        !            80:        _MG_L | _MG_W, _MG_L | _MG_W, _MG_L | _MG_W, _MG_L | _MG_W,
        !            81:        0, _MG_L | _MG_W, _MG_L | _MG_W, _MG_L | _MG_W, /* 0xFX */
        !            82:        _MG_L | _MG_W, _MG_L | _MG_W, _MG_L | _MG_W, _MG_L | _MG_W,
        !            83:        _MG_L | _MG_W, _MG_L | _MG_W, _MG_L | _MG_W, _MG_L | _MG_W,
        !            84:        _MG_L | _MG_W, _MG_L | _MG_W, 0, 0
1.1       deraadt    85: };
                     86:
                     87: /*
                     88:  * Find the name of a keystroke.  Needs to be changed to handle 8-bit printing
                     89:  * characters and function keys better.         Returns a pointer to the terminating
                     90:  * '\0'.
                     91:  */
1.2       millert    92: char *
1.6       mickey     93: keyname(cp, len, k)
                     94:        char    *cp;
                     95:        size_t  len;
                     96:        int     k;
1.1       deraadt    97: {
1.2       millert    98:        char  *np;
1.1       deraadt    99:
1.2       millert   100:        if (k < 0)
                    101:                k = CHARMASK(k);/* sign extended char */
                    102:        switch (k) {
                    103:        case CCHR('@'):
1.4       art       104:                np = "C-SPC";
1.2       millert   105:                break;
                    106:        case CCHR('I'):
                    107:                np = "TAB";
                    108:                break;
                    109:        case CCHR('J'):
                    110:                np = "LFD";
                    111:                break;          /* yuck, but that's what GNU calls it */
                    112:        case CCHR('M'):
                    113:                np = "RET";
                    114:                break;
                    115:        case CCHR('['):
                    116:                np = "ESC";
                    117:                break;
                    118:        case ' ':
                    119:                np = "SPC";
                    120:                break;          /* yuck again */
                    121:        case CCHR('?'):
                    122:                np = "DEL";
                    123:                break;
1.1       deraadt   124:        default:
                    125: #ifdef FKEYS
1.2       millert   126:                if (k >= KFIRST && k <= KLAST &&
1.1       deraadt   127:                    (np = keystrings[k - KFIRST]) != NULL)
1.2       millert   128:                        break;
1.1       deraadt   129: #endif
1.2       millert   130:                if (k > CCHR('?')) {
                    131:                        *cp++ = '0';
                    132:                        *cp++ = ((k >> 6) & 7) + '0';
                    133:                        *cp++ = ((k >> 3) & 7) + '0';
                    134:                        *cp++ = (k & 7) + '0';
                    135:                        *cp = '\0';
                    136:                        return cp;
                    137:                }
                    138:                if (k < ' ') {
                    139:                        *cp++ = 'C';
                    140:                        *cp++ = '-';
                    141:                        k = CCHR(k);
                    142:                        if (ISUPPER(k))
                    143:                                k = TOLOWER(k);
                    144:                }
                    145:                *cp++ = k;
1.1       deraadt   146:                *cp = '\0';
                    147:                return cp;
1.2       millert   148:        }
1.6       mickey    149:        return cp + strlcpy(cp, np, len);
1.1       deraadt   150: }