#include <sys/queue.h>
#include <signal.h>
#include <stdio.h>
#include <string.h>
#include "def.h"
char cinfo[256] = {
_MG_C, _MG_C, _MG_C, _MG_C,
_MG_C, _MG_C, _MG_C, _MG_C,
_MG_C, _MG_C, _MG_C, _MG_C,
_MG_C, _MG_C, _MG_C, _MG_C,
_MG_C, _MG_C, _MG_C, _MG_C,
_MG_C, _MG_C, _MG_C, _MG_C,
_MG_C, _MG_C, _MG_C, _MG_C,
_MG_C, _MG_C, _MG_C, _MG_C,
0, _MG_P, 0, 0,
_MG_W, _MG_W, 0, _MG_W,
0, 0, 0, 0,
0, 0, _MG_P, 0,
_MG_D | _MG_W, _MG_D | _MG_W, _MG_D | _MG_W, _MG_D | _MG_W,
_MG_D | _MG_W, _MG_D | _MG_W, _MG_D | _MG_W, _MG_D | _MG_W,
_MG_D | _MG_W, _MG_D | _MG_W, 0, 0,
0, 0, 0, _MG_P,
0, _MG_U | _MG_W, _MG_U | _MG_W, _MG_U | _MG_W,
_MG_U | _MG_W, _MG_U | _MG_W, _MG_U | _MG_W, _MG_U | _MG_W,
_MG_U | _MG_W, _MG_U | _MG_W, _MG_U | _MG_W, _MG_U | _MG_W,
_MG_U | _MG_W, _MG_U | _MG_W, _MG_U | _MG_W, _MG_U | _MG_W,
_MG_U | _MG_W, _MG_U | _MG_W, _MG_U | _MG_W, _MG_U | _MG_W,
_MG_U | _MG_W, _MG_U | _MG_W, _MG_U | _MG_W, _MG_U | _MG_W,
_MG_U | _MG_W, _MG_U | _MG_W, _MG_U | _MG_W, 0,
0, 0, 0, 0,
0, _MG_L | _MG_W, _MG_L | _MG_W, _MG_L | _MG_W,
_MG_L | _MG_W, _MG_L | _MG_W, _MG_L | _MG_W, _MG_L | _MG_W,
_MG_L | _MG_W, _MG_L | _MG_W, _MG_L | _MG_W, _MG_L | _MG_W,
_MG_L | _MG_W, _MG_L | _MG_W, _MG_L | _MG_W, _MG_L | _MG_W,
_MG_L | _MG_W, _MG_L | _MG_W, _MG_L | _MG_W, _MG_L | _MG_W,
_MG_L | _MG_W, _MG_L | _MG_W, _MG_L | _MG_W, _MG_L | _MG_W,
_MG_L | _MG_W, _MG_L | _MG_W, _MG_L | _MG_W, 0,
0, 0, 0, _MG_C,
0, 0, 0, 0,
0, 0, 0, 0,
0, 0, 0, 0,
0, 0, 0, 0,
0, 0, 0, 0,
0, 0, 0, 0,
0, 0, 0, 0,
0, 0, 0, 0,
0, 0, 0, 0,
0, 0, 0, 0,
0, 0, 0, 0,
0, 0, 0, 0,
0, 0, 0, 0,
0, 0, 0, 0,
0, 0, 0, 0,
0, 0, 0, 0,
_MG_U | _MG_W, _MG_U | _MG_W, _MG_U | _MG_W, _MG_U | _MG_W,
_MG_U | _MG_W, _MG_U | _MG_W, _MG_U | _MG_W, _MG_U | _MG_W,
_MG_U | _MG_W, _MG_U | _MG_W, _MG_U | _MG_W, _MG_U | _MG_W,
_MG_U | _MG_W, _MG_U | _MG_W, _MG_U | _MG_W, _MG_U | _MG_W,
0, _MG_U | _MG_W, _MG_U | _MG_W, _MG_U | _MG_W,
_MG_U | _MG_W, _MG_U | _MG_W, _MG_U | _MG_W, _MG_U | _MG_W,
_MG_U | _MG_W, _MG_U | _MG_W, _MG_U | _MG_W, _MG_U | _MG_W,
_MG_U | _MG_W, _MG_U | _MG_W, 0, _MG_W,
_MG_L | _MG_W, _MG_L | _MG_W, _MG_L | _MG_W, _MG_L | _MG_W,
_MG_L | _MG_W, _MG_L | _MG_W, _MG_L | _MG_W, _MG_L | _MG_W,
_MG_L | _MG_W, _MG_L | _MG_W, _MG_L | _MG_W, _MG_L | _MG_W,
_MG_L | _MG_W, _MG_L | _MG_W, _MG_L | _MG_W, _MG_L | _MG_W,
0, _MG_L | _MG_W, _MG_L | _MG_W, _MG_L | _MG_W,
_MG_L | _MG_W, _MG_L | _MG_W, _MG_L | _MG_W, _MG_L | _MG_W,
_MG_L | _MG_W, _MG_L | _MG_W, _MG_L | _MG_W, _MG_L | _MG_W,
_MG_L | _MG_W, _MG_L | _MG_W, 0, 0
};
char *
getkeyname(char *cp, size_t len, int k)
{
const char *np;
size_t copied;
if (k < 0)
k = CHARMASK(k);
switch (k) {
case CCHR('@'):
np = "C-SPC";
break;
case CCHR('I'):
np = "TAB";
break;
case CCHR('M'):
np = "RET";
break;
case CCHR('['):
np = "ESC";
break;
case ' ':
np = "SPC";
break;
case CCHR('?'):
np = "DEL";
break;
default:
if (k >= KFIRST && k <= KLAST &&
(np = keystrings[k - KFIRST]) != NULL)
break;
if (k > CCHR('?')) {
*cp++ = '0';
*cp++ = ((k >> 6) & 7) + '0';
*cp++ = ((k >> 3) & 7) + '0';
*cp++ = (k & 7) + '0';
*cp = '\0';
return (cp);
} else if (k < ' ') {
*cp++ = 'C';
*cp++ = '-';
k = CCHR(k);
if (ISUPPER(k))
k = TOLOWER(k);
}
*cp++ = k;
*cp = '\0';
return (cp);
}
copied = strlcpy(cp, np, len);
if (copied >= len)
copied = len - 1;
return (cp + copied);
}