diff options
author | Jeff Johnston <jjohnstn@redhat.com> | 2002-09-21 00:13:11 +0400 |
---|---|---|
committer | Jeff Johnston <jjohnstn@redhat.com> | 2002-09-21 00:13:11 +0400 |
commit | 1525d127da1d0f5eb197805e6c8e0c27eda9d520 (patch) | |
tree | bc47b5ede8ddcfc65d84aa39bfdc5b5f3dd43c89 /newlib/libc/ctype/jp2uc.c | |
parent | da25e61f5998b4ec3e72486cdcd84f6220253ac8 (diff) |
2002-09-20 Jeff Johnston <jjohnstn@redhat.com>
* libc/ctype/Makefile.am: Add new files.
* libc/ctype/Makefile.in: Regenerated.
* libc/ctype/ctype.tex: Add new iswxxxx, towxxxx, wctype,
and wctrans functions to documentation index.
* libc/ctype/iswalnum.c: New file.
* libc/ctype/iswalpha.c: Ditto.
* libc/ctype/iswblank.c: Ditto.
* libc/ctype/iswcntrl.c: Ditto.
* libc/ctype/iswctype.c: Ditto.
* libc/ctype/iswdigit.c: Ditto.
* libc/ctype/iswgraph.c: Ditto.
* libc/ctype/iswlower.c: Ditto.
* libc/ctype/iswprint.c: Ditto.
* libc/ctype/iswpunct.c: Ditto.
* libc/ctype/iswspace.c: Ditto.
* libc/ctype/iswupper.c: Ditto.
* libc/ctype/iswxdigit.c: Ditto.
* libc/ctype/jp2uc.c: Ditto.
* libc/ctype/jp2uc.h: Ditto.
* libc/ctype/local.h: Ditto.
* libc/ctype/towctrans.c: Ditto.
* libc/ctype/towlower.c: Ditto.
* libc/ctype/towupper.c: Ditto.
* libc/ctype/utf8alpha.h: Ditto.
* libc/ctype/utf8print.h: Ditto.
* libc/ctype/utf8punct.h: Ditto.
* libc/ctype/wctrans.c: Ditto.
* libc/ctype/wctype.c: Ditto.
* libc/locale/locale.c (__lc_ctype): New external array to
replace static lc_ctype array.
* libc/stdlib/mbtowc_r.c: Use __lc_ctype to check current lc_ctype
rather than reentrancy structure's _current_locale field.
* libc/stdlib/wctomb_r.c: Ditto.
Diffstat (limited to 'newlib/libc/ctype/jp2uc.c')
-rw-r--r-- | newlib/libc/ctype/jp2uc.c | 86 |
1 files changed, 86 insertions, 0 deletions
diff --git a/newlib/libc/ctype/jp2uc.c b/newlib/libc/ctype/jp2uc.c new file mode 100644 index 000000000..1e64b6974 --- /dev/null +++ b/newlib/libc/ctype/jp2uc.c @@ -0,0 +1,86 @@ +/* Routine to translate from Japanese characters to Unicode */ + +/* Copyright (c) 2002 Red Hat Incorporated. + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + + Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + The name of Red Hat Incorporated may not be used to endorse + or promote products derived from this software without specific + prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL RED HAT INCORPORATED BE LIABLE FOR ANY + DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +#ifdef MB_CAPABLE + +#include <_ansi.h> +#include <wctype.h> +#include "local.h" +#include "jp2uc.h" + +wint_t +_DEFUN (__jp2uc, (c, type), wint_t c _AND int type) +{ + int index, adj; + unsigned char byte1, byte2, adj_byte1, adj_byte2; + + /* we actually use a table of JIS to Unicode. For SJIS, we simply + note that SJIS is essentially JIS with the top bits on in each + byte. For EUCJP, we essentially do a translation to JIS before + accessing the table. */ + switch (type) + { + case JP_JIS: + index = ((c >> 8) - 0x21) * 0xfe + ((c & 0xff) - 0x21); + break; + case JP_SJIS: + index = ((c >> 8) - 0xa1) * 0xfe + ((c & 0xff) - 0xa1); + break; + case JP_EUCJP: + byte1 = c >> 8; + byte2 = c & 0xff; + if (byte2 <= 0x7e || (byte2 & 0x1)) + { + adj = -0x22; + adj_byte2 = (byte2 & 0xfe) - 31; + } + else + { + adj = -0x21; + adj_byte2 = byte2 - (0x7e + 0x21); + } + if (byte1 <= 0x9f) + adj_byte1 = ((byte1 - 112) >> 1) + adj; + else + adj_byte1 = ((byte1 - 112) >> 1) + adj; + index = adj_byte1 * 0xfe + adj_byte2; + break; + default: + return WEOF; + } + + if (index < 0 || index > (sizeof(jp2uc) / sizeof(unsigned short))) + return WEOF; + + return (wint_t)jp2uc[index]; +} + +#endif /* MB_CAPABLE */ |