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