diff options
Diffstat (limited to 'usr/src/lib/libbc/libc/gen/common/xccs.multibyte.c')
-rw-r--r-- | usr/src/lib/libbc/libc/gen/common/xccs.multibyte.c | 342 |
1 files changed, 0 insertions, 342 deletions
diff --git a/usr/src/lib/libbc/libc/gen/common/xccs.multibyte.c b/usr/src/lib/libbc/libc/gen/common/xccs.multibyte.c deleted file mode 100644 index 6685f4d707..0000000000 --- a/usr/src/lib/libbc/libc/gen/common/xccs.multibyte.c +++ /dev/null @@ -1,342 +0,0 @@ -/* - * CDDL HEADER START - * - * The contents of this file are subject to the terms of the - * Common Development and Distribution License, Version 1.0 only - * (the "License"). You may not use this file except in compliance - * with the License. - * - * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE - * or http://www.opensolaris.org/os/licensing. - * See the License for the specific language governing permissions - * and limitations under the License. - * - * When distributing Covered Code, include this CDDL HEADER in each - * file and include the License file at usr/src/OPENSOLARIS.LICENSE. - * If applicable, add the following below this CDDL HEADER, with the - * fields enclosed by brackets "[]" replaced with your own identifying - * information: Portions Copyright [yyyy] [name of copyright owner] - * - * CDDL HEADER END - */ -/* - * Copyright 1990 Sun Microsystems, Inc. All rights reserved. - * Use is subject to license terms. - */ - -#pragma ident "%Z%%M% %I% %E% SMI" - -#if !defined(lint) && defined(SCCSIDS) -static char *sccsid = "%Z%%M% %I% %E% SMI"; -#endif - -#include <stdio.h> -#include <sys/types.h> - -#define CS377 0377 -#define MASK 0x0000ffff -#define TOP1 0x80000000 -#define TOP2 0x08000000 - - -/* - * mbtowc routines for the Xerox XCCS codeset standard - */ -int -_mbtowc_xccs(pwc, s, n) - wchar_t *pwc; - char *s; - int n; -{ - static unsigned int CSselect = 0; - static int CSlength = 1; - wchar_t twchar = 0; - - /* - * If length is negative, return error - */ - if (n <= 0) - return (-1); - - /* - * End of string ? - */ - if (*s == 0 && CSlength == 1) - return (0); - if (*s == 0 && *(s + 1) == 0 && CSlength == 2) - return (0); - - /* - * Get a character - */ - if ((unsigned char)*s == CS377) { - /* - * Switching code set - */ - ++s; - /* - * Change characteristics - */ - if ((unsigned char)*s == CS377) { - ++s; - /* - * two byte sequence - */ - if (*s++ != 0) - return (-1); - CSselect = 0; - CSlength = 2; - - } - else { - /* - * Change CSselect - */ - CSselect = (unsigned int)*s++; - CSlength = 1; - } - } - - /* - * Get a character and return - */ - if (CSlength == 1) { - twchar = CSselect; - } - else { - twchar = *s++; - } - twchar = twchar << 8; - twchar = twchar | *s; - if (pwc) - *pwc = twchar & MASK; - /* - * Encode additional information - */ - if (CSlength == 2) - if (pwc) - *pwc |= TOP1; - return (CSlength); -} - -/* - * wctomb routines - */ -int -_wctomb_xccs(s, pwc) - char *s; - wchar_t pwc; -{ - unsigned char upper, lower; - char *old = s; -#ifdef DEBUG - printf ("XCCS- xctomb\n"); -#endif - - if (!s) - return (0); - - /* - * Get lower and upper anyway - */ - lower = pwc & 0x00ff; - upper = (pwc >> 8) & 0x00ff; - if (lower == CS377 || upper == CS377) - return (-1); - if (pwc & TOP1) { /* length == 2 */ - /* - * This was the marker. - * Emitt 3 additional characters. - */ - *s++ = CS377; - *s++ = CS377; - *s++ = 0; - *s++ = upper; - *s++ = lower; - } - else { - /* - * This was the marker. - * Emitt 2 additional characters. - */ - *s++ = CS377; - *s++ = upper; - *s++ = lower; - } - return (s - old); -} - - -/* - * mbstowcs routines - */ -size_t -_mbstowcs_xccs(pwc, s, n) - wchar_t *pwc; - char *s; - int n; -{ - static unsigned int CSselect = 0; - static int CSlength = 1; - wchar_t twchar = 0; - int cnt = 0; - - /* - * If length is negative, return error - */ - if (n <= 0) - return (-1); - - /* - * End of string ? - */ - if (*s == 0 && CSlength == 1) - return (0); - if (*s == 0 && *(s + 1) == 0 && CSlength == 2) - return (0); - - do { - /* - * Check for an end of the string - */ - if (((*s == 0 && CSlength == 1)) || - ((*s == 0 && *(s + 1) == 0 && CSlength == 2))) { - *pwc = 0; - ++cnt; - --n; - break; - } - /* - * Get a character - */ - if ((unsigned char)*s == CS377) { - ++s; - /* - * Change characterristics - */ - if ((unsigned char)*s == CS377) { - ++s; - /* - * two byte sequence - */ - if (*s++ != 0) - return (-1); - CSselect = 0; - CSlength = 2; - - } - else { - /* - * Change CSselect - */ - CSselect = (unsigned int)*s++; - CSlength = 1; - } - } - - /* - * Get a character and return - */ - if (CSlength == 1) { - twchar = CSselect; - } - else { - twchar = *s++; - } - twchar = twchar << 8; - twchar = twchar | *s++; - *pwc = twchar & MASK; - if (CSlength == 2) - *pwc |= TOP1; - ++pwc; - ++cnt; - --n; - } while (n >= 0); - return (cnt); -} - - -/* - * wcstombs routines - */ -size_t -_wcstombs_xccs(s, pwc, n) - char *s; - wchar_t *pwc; - int n; -{ - int cnt = 0; - unsigned char lower, upper; - int in_2byte = 0; - int in_1byte = 0; - int current = 0; - - if (n <= 0) - return (-1); - - if (*pwc == 0) - return (0); - - do { - lower = *pwc & 0x00ff; - upper = (*pwc >> 8) & 0x00ff; - /* - * End of string ? - */ - if (lower == 0) { - *s++ = 0; - ++cnt; - --n; - if (n == 0) - break; - *s++ = 0; - ++cnt; - break; - } - if (lower == CS377 || upper == CS377) - return (-1); - if (*pwc & TOP1) { /* length == 2 */ - if (in_2byte == 0) { - /* - * This was the marker. - * Emitt 3 additional characters. - */ - *s++ = CS377; ++cnt; --n; - *s++ = CS377; ++cnt; --n; - *s++ = 0; ++cnt; --n; - in_2byte = 1; - in_1byte = 0; - } - *s++ = upper; ++cnt; --n; - if (n == 0) - break; - *s++ = lower; ++cnt; --n; - if (n == 0) - break; - } - else { - if ((in_1byte == 0 && in_2byte == 1) || - (in_1byte == 1 && upper != current) || - (in_1byte == 0 && in_2byte == 0 && upper != 0)) { - /* - * This was the marker. - * Emitt 2 additional characters. - */ - *s++ = CS377; ++cnt; --n; - if (n == 0) - break; - *s++ = upper; ++cnt; --n; - if (n == 0) - break; - in_2byte = 0; - in_1byte = 1; - current = upper; - } - *s++ = lower; ++cnt; --n; - if (n == 0) - break; - } - ++pwc; - } while (n >= 0); - return (cnt); -} |