1 #include	"curses_inc.h"
2 
3 static	char	*keystrings[] =
4 		{
5 		    "BREAK",	/* 0401 */
6 		    "DOWN",	/* 0402 */
7 		    "UP",	/* 0403 */
8 		    "LEFT",	/* 0404 */
9 		    "RIGHT",	/* 0405 */
10 		    "HOME",	/* 0406 */
11 		    "BACKSPACE",	/* 0407 */
12 		    "DL",	/* 0510 */
13 		    "IL",	/* 0511 */
14 		    "DC",	/* 0512 */
15 		    "IC",	/* 0513 */
16 		    "EIC",	/* 0514 */
17 		    "CLEAR",	/* 0515 */
18 		    "EOS",	/* 0516 */
19 		    "EOL",	/* 0517 */
20 		    "SF",	/* 0520 */
21 		    "SR",	/* 0521 */
22 		    "NPAGE",	/* 0522 */
23 		    "PPAGE",	/* 0523 */
24 		    "STAB",	/* 0524 */
25 		    "CTAB",	/* 0525 */
26 		    "CATAB",	/* 0526 */
27 		    "ENTER",	/* 0527 */
28 		    "SRESET",	/* 0530 */
29 		    "RESET",	/* 0531 */
30 		    "PRINT",	/* 0532 */
31 		    "LL",	/* 0533 */
32 		    "A1",	/* 0534 */
33 		    "A3",	/* 0535 */
34 		    "B2",	/* 0536 */
35 		    "C1",	/* 0537 */
36 		    "C3",	/* 0540 */
37 		    "BTAB",	/* 0541 */
38 		    "BEG",	/* 0542 */
39 		    "CANCEL",	/* 0543 */
40 		    "CLOSE",	/* 0544 */
41 		    "COMMAND",	/* 0545 */
42 		    "COPY",	/* 0546 */
43 		    "CREATE",	/* 0547 */
44 		    "END",	/* 0550 */
45 		    "EXIT",	/* 0551 */
46 		    "FIND",	/* 0552 */
47 		    "HELP",	/* 0553 */
48 		    "MARK",	/* 0554 */
49 		    "MESSAGE",	/* 0555 */
50 		    "MOVE",	/* 0556 */
51 		    "NEXT",	/* 0557 */
52 		    "OPEN",	/* 0560 */
53 		    "OPTIONS",	/* 0561 */
54 		    "PREVIOUS",	/* 0562 */
55 		    "REDO",	/* 0563 */
56 		    "REFERENCE",	/* 0564 */
57 		    "REFRESH",	/* 0565 */
58 		    "REPLACE",	/* 0566 */
59 		    "RESTART",	/* 0567 */
60 		    "RESUME",	/* 0570 */
61 		    "SAVE",	/* 0571 */
62 		    "SBEG",	/* 0572 */
63 		    "SCANCEL",	/* 0573 */
64 		    "SCOMMAND",	/* 0574 */
65 		    "SCOPY",	/* 0575 */
66 		    "SCREATE",	/* 0576 */
67 		    "SDC",	/* 0577 */
68 		    "SDL",	/* 0600 */
69 		    "SELECT",	/* 0601 */
70 		    "SEND",	/* 0602 */
71 		    "SEOL",	/* 0603 */
72 		    "SEXIT",	/* 0604 */
73 		    "SFIND",	/* 0605 */
74 		    "SHELP",	/* 0606 */
75 		    "SHOME",	/* 0607 */
76 		    "SIC",	/* 0610 */
77 		    "SLEFT",	/* 0611 */
78 		    "SMESSAGE",	/* 0612 */
79 		    "SMOVE",	/* 0613 */
80 		    "SNEXT",	/* 0614 */
81 		    "SOPTIONS",	/* 0615 */
82 		    "SPREVIOUS",	/* 0616 */
83 		    "SPRINT",	/* 0617 */
84 		    "SREDO",	/* 0620 */
85 		    "SREPLACE",	/* 0621 */
86 		    "SRIGHT",	/* 0622 */
87 		    "SRSUME",	/* 0623 */
88 		    "SSAVE",	/* 0624 */
89 		    "SSUSPEND",	/* 0625 */
90 		    "SUNDO",	/* 0626 */
91 		    "SUSPEND",	/* 0627 */
92 		    "UNDO",	/* 0630 */
93 		    "MOUSE",	/* 0631 */
94 		};
95 
96 char	*
97 keyname(int key)
98 {
99 	static	char	buf[16];
100 
101 	if (key >= 0400) {
102 		int	i;
103 
104 		if ((key == 0400) || (key > KEY_MOUSE))
105 			return ("UNKNOWN KEY");
106 		if (key > 0507)
107 			i = key - (0401 + ((0507 - 0410) + 1));
108 		else
109 			if (key >= 0410) {
110 				(void) sprintf(buf, "KEY_F(%d)", key - 0410);
111 				goto ret_buf;
112 			} else
113 				i = key - 0401;
114 		(void) sprintf(buf, "KEY_%s", keystrings[i]);
115 		goto ret_buf;
116 	}
117 
118 	if (key >= 0200) {
119 #ifdef SYSV
120 		if (SHELLTTYS.c_cflag & CS8)
121 #else	/* SYSV */
122 		if (SHELLTTY.c_cflag & CS8)
123 #endif	/* SYSV */
124 			(void) sprintf(buf, "%c", key);
125 		else
126 			(void) sprintf(buf, "M-%s", unctrl(key & 0177));
127 		goto ret_buf;
128 	}
129 
130 	if (key < 0) {
131 		(void) sprintf(buf, "%d", key);
132 ret_buf:
133 		return (buf);
134 	}
135 
136 	return (unctrl(key));
137 }
138