8322 nl: misleading-indentation
[unleashed/tickless.git] / usr / src / lib / libcurses / screen / wctomb.c
blob42c0668d5cc672ec933e6782e40867492b4fe3aa
1 /*
2 * CDDL HEADER START
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.
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.
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]
20 * CDDL HEADER END
22 /* Copyright (c) 1988 AT&T */
23 /* All Rights Reserved */
27 * Copyright (c) 1997, by Sun Microsystems, Inc.
28 * All rights reserved.
31 #pragma ident "%Z%%M% %I% %E% SMI"
33 /*LINTLIBRARY*/
35 #include <sys/types.h>
36 #include <widec.h>
37 #include <ctype.h>
38 #include "curses_wchar.h"
40 int
41 _curs_wctomb(char *s, wchar_t wchar)
43 char *olds = s;
44 int size, index;
45 unsigned char d;
46 if (!s)
47 return (0);
48 if (wchar <= 0177 || (wchar <= 0377 && (iscntrl((int)wchar) != 0))) {
49 /* LINTED */
50 *s++ = (char)wchar;
51 return (1);
53 switch (wchar & EUCMASK) {
55 case P11:
56 size = eucw1;
57 break;
59 case P01:
60 /* LINTED */
61 *s++ = (char)SS2;
62 size = eucw2;
63 break;
65 case P10:
66 /* LINTED */
67 *s++ = (char)SS3;
68 size = eucw3;
69 break;
71 default:
72 return (-1);
74 if ((index = size) <= 0)
75 return (-1);
76 while (index--) {
77 /* LINTED */
78 d = wchar | 0200;
79 wchar >>= 7;
80 if (iscntrl(d))
81 return (-1);
82 s[index] = d;
84 /* LINTED */
85 return ((int)(s - olds) + size);