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