xref: /illumos-gate/usr/src/lib/libxcurses2/src/libc/xcurses/wunctrl.c (revision fe4627ef755b7c263f91a0e6f07cdca5d7083501)
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 (c) 1995-1998 by Sun Microsystems, Inc.
24  * All rights reserved.
25  */
26 
27 #pragma ident	"%Z%%M%	%I%	%E% SMI"
28 
29 /* LINTLIBRARY */
30 
31 /*
32  * wunctrl.c
33  *
34  * XCurses Library
35  *
36  * Copyright 1990, 1995 by Mortice Kern Systems Inc.  All rights reserved.
37  *
38  */
39 
40 #if M_RCSID
41 #ifndef lint
42 static char rcsID[] = "$Header: /rd/src/libc/xcurses/rcs/wunctrl.c 1.1 "
43 "1995/05/16 15:15:37 ant Exp $";
44 #endif
45 #endif
46 
47 #include <private.h>
48 
49 static const wchar_t	*carat[] = {
50 	L"^?",
51 	L"^@",
52 	L"^A",
53 	L"^B",
54 	L"^C",
55 	L"^D",
56 	L"^E",
57 	L"^F",
58 	L"^G",
59 	L"^H",
60 	L"^I",
61 	L"^J",
62 	L"^K",
63 	L"^L",
64 	L"^M",
65 	L"^N",
66 	L"^O",
67 	L"^P",
68 	L"^Q",
69 	L"^R",
70 	L"^S",
71 	L"^T",
72 	L"^U",
73 	L"^V",
74 	L"^W",
75 	L"^X",
76 	L"^Y",
77 	L"^Z",
78 	L"^[",
79 	L"^\\",
80 	L"^]",
81 	L"^^",
82 	L"^_"
83 };
84 
85 wchar_t *
86 wunctrl(cchar_t *cc)
87 {
88 	int	i;
89 	wint_t	wc;
90 	static wchar_t	wcs[_M_CCHAR_MAX + 1];
91 
92 	if (cc->_n <= 0)
93 		return (NULL);
94 
95 	/* Map wide character to a wide string. */
96 	wc = cc->_wc[0];
97 	if (iswcntrl(wc)) {
98 		if (wc == 127)
99 			return ((wchar_t *)carat[0]);
100 		if (0 <= wc && wc <= 32)
101 			return ((wchar_t *)carat[wc+1]);
102 		return (NULL);
103 	}
104 
105 	for (i = 0; i < cc->_n; ++i)
106 		wcs[i] = cc->_wc[i];
107 	wcs[i] = L'\0';
108 
109 	return (wcs);
110 }
111