116f76e6fSJulian Elischer /* 216f76e6fSJulian Elischer * ja_JP.SJIS locale table for BSD4.4/rune 316f76e6fSJulian Elischer * version 1.0 416f76e6fSJulian Elischer * (C) Sin'ichiro MIYATANI / Phase One, Inc 516f76e6fSJulian Elischer * May 12, 1995 616f76e6fSJulian Elischer * 716f76e6fSJulian Elischer * Redistribution and use in source and binary forms, with or without 816f76e6fSJulian Elischer * modification, are permitted provided that the following conditions 916f76e6fSJulian Elischer * are met: 1016f76e6fSJulian Elischer * 1. Redistributions of source code must retain the above copyright 1116f76e6fSJulian Elischer * notice, this list of conditions and the following disclaimer. 1216f76e6fSJulian Elischer * 2. Redistributions in binary form must reproduce the above copyright 1316f76e6fSJulian Elischer * notice, this list of conditions and the following disclaimer in the 1416f76e6fSJulian Elischer * documentation and/or other materials provided with the distribution. 1516f76e6fSJulian Elischer * 3. All advertising materials mentioning features or use of this software 1616f76e6fSJulian Elischer * must display the following acknowledgement: 1716f76e6fSJulian Elischer * This product includes software developed by Phase One, Inc. 1816f76e6fSJulian Elischer * 4. The name of Phase One, Inc. may be used to endorse or promote products 1916f76e6fSJulian Elischer * derived from this software without specific prior written permission. 2016f76e6fSJulian Elischer * 2116f76e6fSJulian Elischer * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 2216f76e6fSJulian Elischer * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 2316f76e6fSJulian Elischer * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 2416f76e6fSJulian Elischer * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 2516f76e6fSJulian Elischer * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 2616f76e6fSJulian Elischer * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 2716f76e6fSJulian Elischer * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 2816f76e6fSJulian Elischer * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 2916f76e6fSJulian Elischer * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 3016f76e6fSJulian Elischer * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 3116f76e6fSJulian Elischer * SUCH DAMAGE. 3216f76e6fSJulian Elischer */ 3316f76e6fSJulian Elischer 3416f76e6fSJulian Elischer #if defined(LIBC_SCCS) && !defined(lint) 3516f76e6fSJulian Elischer static char sccsid[] = "@(#)mskanji.c 1.0 (Phase One) 5/5/95"; 3616f76e6fSJulian Elischer #endif /* LIBC_SCCS and not lint */ 3716f76e6fSJulian Elischer 3816f76e6fSJulian Elischer #include <sys/types.h> 3916f76e6fSJulian Elischer 4016f76e6fSJulian Elischer #include <errno.h> 4116f76e6fSJulian Elischer #include <rune.h> 4216f76e6fSJulian Elischer #include <stddef.h> 4316f76e6fSJulian Elischer #include <stdio.h> 4416f76e6fSJulian Elischer #include <stdlib.h> 4516f76e6fSJulian Elischer 4616f76e6fSJulian Elischer rune_t _MSKanji_sgetrune __P((const char *, size_t, char const **)); 4716f76e6fSJulian Elischer int _MSKanji_sputrune __P((rune_t, char *, size_t, char **)); 4816f76e6fSJulian Elischer 4916f76e6fSJulian Elischer int 5016f76e6fSJulian Elischer _MSKanji_init(rl) 5116f76e6fSJulian Elischer _RuneLocale *rl; 5216f76e6fSJulian Elischer { 5316f76e6fSJulian Elischer rl->sgetrune = _MSKanji_sgetrune; 5416f76e6fSJulian Elischer rl->sputrune = _MSKanji_sputrune; 5516f76e6fSJulian Elischer 5616f76e6fSJulian Elischer _CurrentRuneLocale = rl; 5716f76e6fSJulian Elischer __mb_cur_max = 2; 5816f76e6fSJulian Elischer return (0); 5916f76e6fSJulian Elischer } 6016f76e6fSJulian Elischer 6116f76e6fSJulian Elischer rune_t 6216f76e6fSJulian Elischer _MSKanji_sgetrune(string, n, result) 6316f76e6fSJulian Elischer const char *string; 6416f76e6fSJulian Elischer size_t n; 6516f76e6fSJulian Elischer char const **result; 6616f76e6fSJulian Elischer { 6716f76e6fSJulian Elischer rune_t rune = 0; 6816f76e6fSJulian Elischer 6916f76e6fSJulian Elischer if (n < 1 ) { 7016f76e6fSJulian Elischer rune = _INVALID_RUNE; 7116f76e6fSJulian Elischer } else { 7216f76e6fSJulian Elischer rune = *( string++ ) & 0xff; 7316f76e6fSJulian Elischer if ( ( rune > 0x80 && rune < 0xa0 ) 7416f76e6fSJulian Elischer || ( rune >= 0xe0 && rune < 0xfa ) ) { 7516f76e6fSJulian Elischer if ( n < 2 ) { 7616f76e6fSJulian Elischer rune = (rune_t)_INVALID_RUNE; 7716f76e6fSJulian Elischer --string; 7816f76e6fSJulian Elischer } else { 7916f76e6fSJulian Elischer rune = ( rune << 8 ) | ( *( string++ ) & 0xff ); 8016f76e6fSJulian Elischer } 8116f76e6fSJulian Elischer } 8216f76e6fSJulian Elischer } 8316f76e6fSJulian Elischer if (result) *result = string; 8416f76e6fSJulian Elischer return rune; 8516f76e6fSJulian Elischer } 8616f76e6fSJulian Elischer 8716f76e6fSJulian Elischer int 8816f76e6fSJulian Elischer _MSKanji_sputrune(c, string, n, result) 8916f76e6fSJulian Elischer rune_t c; 9016f76e6fSJulian Elischer char *string, **result; 9116f76e6fSJulian Elischer size_t n; 9216f76e6fSJulian Elischer { 9316f76e6fSJulian Elischer int len, i; 9416f76e6fSJulian Elischer 9516f76e6fSJulian Elischer len = ( c > 0x100 ) ? 2 : 1; 9616f76e6fSJulian Elischer if ( n < len ) { 9716f76e6fSJulian Elischer if ( result ) *result = (char *) 0; 9816f76e6fSJulian Elischer } else { 9916f76e6fSJulian Elischer if ( result ) *result = string + len; 10016f76e6fSJulian Elischer for ( i = len; i-- > 0; ) { 10116f76e6fSJulian Elischer *( string++ ) = c >> ( i << 3 ); 10216f76e6fSJulian Elischer } 10316f76e6fSJulian Elischer } 10416f76e6fSJulian Elischer return len; 10516f76e6fSJulian Elischer } 106