xref: /illumos-gate/usr/src/lib/libcurses/screen/keyname.sh (revision 2c5ec7a875dcd76853e6618614e990f1e8cdd56d)
1#
2# CDDL HEADER START
3#
4# The contents of this file are subject to the terms of the
5# Common Development and Distribution License, Version 1.0 only
6# (the "License").  You may not use this file except in compliance
7# with the License.
8#
9# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
10# or http://www.opensolaris.org/os/licensing.
11# See the License for the specific language governing permissions
12# and limitations under the License.
13#
14# When distributing Covered Code, include this CDDL HEADER in each
15# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
16# If applicable, add the following below this CDDL HEADER, with the
17# fields enclosed by brackets "[]" replaced with your own identifying
18# information: Portions Copyright [yyyy] [name of copyright owner]
19#
20# CDDL HEADER END
21#
22#
23# Copyright 2015 Gary Mills
24# Copyright 1997 Sun Microsystems, Inc.  All rights reserved.
25# Use is subject to license terms.
26#
27
28#
29#	Copyright (c) 1988 AT&T
30#	  All Rights Reserved
31#
32
33#
34# University Copyright- Copyright (c) 1982, 1986, 1988
35# The Regents of the University of California
36# All Rights Reserved
37#
38# University Acknowledgment- Portions of this document are derived from
39# software developed by the University of California, Berkeley, and its
40# contributors.
41#
42
43rm -f keyname.c
44/usr/bin/print "#include	\"curses_inc.h\"\n" > keyname.c
45/usr/bin/print "static	char	*keystrings[] =\n\t\t{" >> keyname.c
46{
47    grep -v 'KEY_F(' keycaps | awk '{ print $5, $4 }' | sed -e 's/,//g' -e 's/KEY_//'
48    # These three aren't in keycaps
49    echo '0401 BREAK\n0530 SRESET\n0531 RESET'
50} |  sort -n | awk '
51    {
52	print "\t\t    \"" $2 "\",	/* " $1 " */"
53    }
54' >> keyname.c
55
56LAST=`tail -1 keyname.c | awk -F'"' '{print $2}'`
57cat << ! >> keyname.c
58		};
59
60char	*
61keyname(int key)
62{
63	static	char	buf[16];
64
65	if (key >= 0400) {
66		int	i;
67
68		if ((key == 0400) || (key > KEY_${LAST}))
69			return ("UNKNOWN KEY");
70		if (key > 0507)
71			i = key - (0401 + ((0507 - 0410) + 1));
72		else
73			if (key >= 0410) {
74				(void) sprintf(buf, "KEY_F(%d)", key - 0410);
75				goto ret_buf;
76			} else
77				i = key - 0401;
78		(void) sprintf(buf, "KEY_%s", keystrings[i]);
79		goto ret_buf;
80	}
81
82	if (key >= 0200) {
83#ifdef SYSV
84		if (SHELLTTYS.c_cflag & CS8)
85#else	/* SYSV */
86		if (SHELLTTY.c_cflag & CS8)
87#endif	/* SYSV */
88			(void) sprintf(buf, "%c", key);
89		else
90			(void) sprintf(buf, "M-%s", unctrl(key & 0177));
91		goto ret_buf;
92	}
93
94	if (key < 0) {
95		(void) sprintf(buf, "%d", key);
96ret_buf:
97		return (buf);
98	}
99
100	return (unctrl(key));
101}
102!
103exit 0
104