diff options
87 files changed, 302 insertions, 4508 deletions
diff --git a/libX11/configure.ac b/libX11/configure.ac index 8ad1f0026..161206114 100644 --- a/libX11/configure.ac +++ b/libX11/configure.ac @@ -467,7 +467,6 @@ AC_CONFIG_FILES([Makefile modules/lc/def/Makefile modules/lc/gen/Makefile modules/lc/Utf8/Makefile - modules/lc/xlocale/Makefile modules/om/Makefile modules/om/generic/Makefile src/xkb/Makefile diff --git a/libX11/include/X11/Xlocale.h b/libX11/include/X11/Xlocale.h index 98946e53a..db46e70cb 100644 --- a/libX11/include/X11/Xlocale.h +++ b/libX11/include/X11/Xlocale.h @@ -32,28 +32,6 @@ from The Open Group. #include <X11/Xfuncproto.h> #include <X11/Xosdefs.h> -#ifndef X_LOCALE #include <locale.h> -#else - -#define LC_ALL 0 -#define LC_COLLATE 1 -#define LC_CTYPE 2 -#define LC_MONETARY 3 -#define LC_NUMERIC 4 -#define LC_TIME 5 - -_XFUNCPROTOBEGIN -extern char *_Xsetlocale( - int /* category */, - _Xconst char* /* name */ -); -_XFUNCPROTOEND - -#define setlocale _Xsetlocale - -#include <stddef.h> - -#endif /* X_LOCALE */ #endif /* _X11_XLOCALE_H_ */ diff --git a/libX11/modules/im/ximcp/imCallbk.c b/libX11/modules/im/ximcp/imCallbk.c index edffac173..07921f8a1 100644 --- a/libX11/modules/im/ximcp/imCallbk.c +++ b/libX11/modules/im/ximcp/imCallbk.c @@ -39,10 +39,6 @@ PERFORMANCE OF THIS SOFTWARE. #include "Xlcint.h" #include "Ximint.h" #include "XlcPubI.h" -#ifdef X_LOCALE -#define mblen(a,b) _Xmblen(a,b) -extern int _Xmblen (); -#endif #define sz_CARD8 1 #define sz_INT8 1 diff --git a/libX11/modules/lc/Makefile.am b/libX11/modules/lc/Makefile.am index 3cad2d61c..5e34409ce 100644 --- a/libX11/modules/lc/Makefile.am +++ b/libX11/modules/lc/Makefile.am @@ -1 +1 @@ -SUBDIRS=Utf8 def gen xlocale +SUBDIRS=Utf8 def gen diff --git a/libX11/modules/lc/xlocale/Makefile.am b/libX11/modules/lc/xlocale/Makefile.am deleted file mode 100644 index 70a221fd7..000000000 --- a/libX11/modules/lc/xlocale/Makefile.am +++ /dev/null @@ -1,35 +0,0 @@ -AM_CPPFLAGS= \ - -I$(top_srcdir)/include \ - -I$(top_srcdir)/include/X11 \ - -I$(top_builddir)/include \ - -I$(top_builddir)/include/X11 \ - -I$(top_srcdir)/src/xcms \ - -I$(top_srcdir)/src/xkb \ - -I$(top_srcdir)/src/xlibi18n \ - -D_BSD_SOURCE - -AM_CFLAGS= \ - $(X11_CFLAGS) \ - $(BIGFONT_CFLAGS) \ - $(CWARNFLAGS) - -if XLIB_LOADABLE_I18N - -commonlibdir = $(X11_LOCALELIBDIR)/common -commonlib_LTLIBRARIES=xlocale.la -xlocale_la_LDFLAGS = -module -version-number 2:0:0 -xlocale_la_LIBADD = $(I18N_MODULE_LIBS) - -else - -noinst_LTLIBRARIES = libxlocale.la - -endif - - -xlocale_la_SOURCES = \ - lcEuc.c \ - lcJis.c \ - lcSjis.c - -libxlocale_la_SOURCES = $(xlocale_la_SOURCES) diff --git a/libX11/modules/lc/xlocale/lcEuc.c b/libX11/modules/lc/xlocale/lcEuc.c deleted file mode 100644 index 5b171a9f3..000000000 --- a/libX11/modules/lc/xlocale/lcEuc.c +++ /dev/null @@ -1,1537 +0,0 @@ -/****************************************************************** - - Copyright 1992, 1993 by FUJITSU LIMITED - Copyright 1993 by Fujitsu Open Systems Solutions, Inc. - -Permission to use, copy, modify, distribute and sell this software -and its documentation for any purpose is hereby granted without fee, -provided that the above copyright notice appear in all copies and -that both that copyright notice and this permission notice appear -in supporting documentation, and that the name of FUJITSU LIMITED and -Fujitsu Open Systems Solutions, Inc. not be used in advertising or -publicity pertaining to distribution of the software without specific, -written prior permission. -FUJITSU LIMITED and Fujitsu Open Systems Solutions, Inc. makes no -representations about the suitability of this software for any purpose. -It is provided "as is" without express or implied warranty. - -FUJITSU LIMITED AND FUJITSU OPEN SYSTEMS SOLUTIONS, INC. DISCLAIMS ALL -WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES -OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL FUJITSU OPEN SYSTEMS -SOLUTIONS, INC. AND FUJITSU LIMITED BE LIABLE FOR ANY SPECIAL, INDIRECT -OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF -USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE -OF THIS SOFTWARE. - - Authors: Shigeru Yamada (yamada@ossi.com) - Jeffrey Bloomfield (jeffb@ossi.com) - Yoshiyuki Segawa (segawa@ossi.com) - -*****************************************************************/ - -/* - * An EUC locale. - * Supports: all locales with codeset eucJP, eucKR, eucCN, eucTW. - * How: Provides converters for euc*. - * Platforms: Only those defining X_LOCALE (only Lynx, Linux-libc5, OS/2). - */ - -#ifdef X_LOCALE - -#ifdef HAVE_CONFIG_H -#include <config.h> -#endif -#include "Xlibint.h" -#include "XlcGeneric.h" - -#include <ctype.h> -#ifdef WIN32 -#define isascii __isascii -#endif - -#define CS0 codesets[0] /* Codeset 0 - 7-bit ASCII */ -#define CS1 codesets[1] /* Codeset 1 - Kanji */ -#define CS2 codesets[2] /* Codeset 2 - Half-Kana */ -#define CS3 codesets[3] /* Codeset 3 - User defined */ - -#define SS2 0x8e /* Single-shift char: CS2 */ -#define SS3 0x8f /* Single-shift char: CS3 */ - -#define ASCII_CODESET 0 -#define KANJI_CODESET 1 -#define KANA_CODESET 2 -#define USERDEF_CODESET 3 -#define MAX_CODESETS - -#define GR 0x80 /* begins right-side (non-ascii) region */ -#define GL 0x7f /* ends left-side (ascii) region */ - -#define isleftside(c) (((c) & GR) ? 0 : 1) -#define isrightside(c) (!isleftside(c)) - -#define BIT8OFF(c) ((c) & GL) -#define BIT8ON(c) ((c) | GR) - -typedef unsigned char Uchar; -typedef unsigned long Ulong; -typedef unsigned int Uint; - -static CodeSet GetCodeSetFromCharSet (XLCd lcd, XlcCharSet charset); -static CodeSet wc_codeset (XLCd lcd, wchar_t wch); - -#define BADCHAR(min_ch, c) (BIT8OFF(c) < (char)min_ch && BIT8OFF(c) != 0x0 && \ - BIT8OFF(c) != '\t' && BIT8OFF(c) != '\n' && \ - BIT8OFF(c) != 0x1b) - -/* - * Notes: - * 1. Defining FORCE_INDIRECT_CONVERTER (see _XlcEucLoader()) - * forces indirect (charset) conversions (e.g. wcstocs()<->cstombs()). - * 2. Using direct converters (e.g. mbstowcs()) decreases conversion - * times by 20-40% (depends on specific converter used). - */ - -static int -euc_mbstowcs( - XlcConv conv, - XPointer *from, - int *from_left, - XPointer *to, - int *to_left, - XPointer *args, - int num_args) -{ - XLCd lcd = (XLCd)conv->state; - - Uchar ch; - int chr_len = 0; - int sshift = False; - int shift_mult = 0; - Uint chrcode; - - Uint wc_encode = 0; - Uint wc_tmp = 0; - - int cs0flg = False; - int cs1flg = False; - int length = 0; - int unconv_num = 0; - - Bool new_char; - - const char *inbufptr = *from; - wchar_t *outbufptr = (wchar_t *) *to; - - CodeSet *codesets = XLC_GENERIC(lcd, codeset_list); - int codeset_num = XLC_GENERIC(lcd, codeset_num); - Ulong wc_shift = XLC_GENERIC(lcd, wc_shift_bits); - - for (new_char = True; *from_left > 0 && *to_left > 0;) { - - ch = *inbufptr++; - - if (isleftside(ch)) { /* CS0 */ - if (ASCII_CODESET >= codeset_num) { - unconv_num++; - (*from_left)--; - continue; - } - if( cs0flg == True) { - new_char = True; - cs0flg = False; - } - length = CS0->length; - *outbufptr++ = (wchar_t)ch; - (*from_left)--; - (*to_left)--; - continue; - } - else if (ch == SS2) { /* CS2 */ - if (KANA_CODESET >= codeset_num) { - unconv_num++; - (*from_left)--; - continue; - } - if (sshift == True || cs1flg == True) { - cs1flg = False; - unconv_num++; - continue; - } - length = CS2->length; - wc_encode = CS2->wc_encoding; - chrcode = 0; - sshift = True; - cs0flg = True; - (*from_left)--; - continue; - } - else if (ch == SS3) { /* CS3 */ - if (USERDEF_CODESET >= codeset_num) { - unconv_num++; - (*from_left)--; - continue; - } - if (sshift == True || cs1flg == True) { - cs1flg = False; - unconv_num++; - continue; - } - length = CS3->length; - if (*from_left < 1 ) - unconv_num++; - wc_encode = CS3->wc_encoding; - chrcode = 0; - sshift = True; - cs0flg = True; - (*from_left)--; - continue; - - } else { /* CS1 */ - if (KANJI_CODESET >= codeset_num) { - unconv_num++; - (*from_left)--; - continue; - } - if (sshift == False) { - length = CS1->length; - if (*from_left < 1) - unconv_num++; - wc_encode = CS1->wc_encoding; - } - chrcode = BIT8OFF(ch); - cs0flg = True; - cs1flg = True; - (*from_left)--; - } - - if (new_char) { /* begin new character */ - chr_len = length; - shift_mult = length - 1; - new_char = False; - } - - chrcode <<= (wc_shift * shift_mult); - shift_mult--; - wc_tmp |= chrcode; - - if (--chr_len == 0) { - wc_tmp |= wc_encode; - *outbufptr++ = wc_tmp; - (*to_left)--; - - new_char = True; - sshift = False; - cs0flg = False; - cs1flg = False; - wc_tmp = (Uint)0; - } - - } /* end for */ - - *to = (XPointer)outbufptr; - - if (cs0flg == True || cs1flg == True) /* error check on last char */ - unconv_num++; - - return unconv_num; -} - - -static int -euc_wcstombs( - XlcConv conv, - XPointer *from, - int *from_left, - XPointer *to, - int *to_left, - XPointer *args, - int num_args) -{ - const wchar_t *inbufptr = (const wchar_t *) *from; - XPointer outbufptr = *to; - wchar_t wch; - int length; - Uchar tmp; - int unconv_num = 0; - - XLCd lcd = (XLCd)conv->state; - CodeSet codeset; - Ulong wc_shift = XLC_GENERIC(lcd, wc_shift_bits); - - for (; *from_left > 0 && *to_left > 0; (*from_left)-- ) { - - wch = *inbufptr++; - - if (!(codeset = wc_codeset(lcd, wch))) { - unconv_num++; - (*from_left)--; - continue; - } - - length = codeset->length; - wch ^= (wchar_t)codeset->wc_encoding; - - if (codeset->parse_info) { /* put out SS2 or SS3 */ - if (*to_left < length + 1) { - unconv_num++; - break; - } - *outbufptr++ = *codeset->parse_info->encoding; - (*to_left)--; - } else { - if (*to_left < length) { - unconv_num++; - break; - } - } - - do { - length--; - tmp = (wch>>(wchar_t)(length * wc_shift)); - - if (codeset->side == XlcGR) - tmp = BIT8ON(tmp); - - *outbufptr++ = (Uchar)tmp; - (*to_left)--; - } while (length); - } - - *to = (XPointer)outbufptr; - - return unconv_num; -} - - -static int -euc_mbtocs( - XlcConv conv, - XPointer *from, - int *from_left, - XPointer *to, - int *to_left, - XPointer *args, - int num_args) -{ - XLCd lcd = (XLCd)conv->state; - XlcCharSet charset; - CodeSet *codesets = XLC_GENERIC(lcd, codeset_list); - int codeset_num = XLC_GENERIC(lcd, codeset_num); - int length; - int unconv_num = 0; - int min_ch = 0; - const char *src = *from; - char *dst = *to; - - if (isleftside(*src)) { /* 7-bit (CS0) */ - if (ASCII_CODESET >= codeset_num) - return -1; - charset = *CS0->charset_list; - } - else if ((Uchar)*src == SS2) { /* half-kana (CS2) */ - if (KANA_CODESET >= codeset_num) - return -1; - charset = *CS2->charset_list; - src++; - (*from_left)--; - } - else if ((Uchar)*src == SS3) { /* user-def */ - if (USERDEF_CODESET >= codeset_num) - return -1; - charset = *CS3->charset_list; - src++; - (*from_left)--; - } - else { /* Kanji (CS1) */ - if (KANJI_CODESET >= codeset_num) - return -1; - charset = *CS1->charset_list; - } - - if(*from_left < charset->char_size || *to_left < charset->char_size) - return -1; - - min_ch = 0x20; - if (charset->set_size == 94) - if (charset->char_size > 1 || charset->side == XlcGR) - min_ch = 0x21; - - length = charset->char_size; - do { - if(BADCHAR(min_ch, *src)) { - unconv_num++; - src++; - break; - } - switch (charset->side) { - case XlcGL: - *dst++ = BIT8OFF(*src++); - break; - case XlcGR: - *dst++ = BIT8ON(*src++); - break; - default: - *dst++ = *src++; - break; - } - } while (--length); - - *to = dst; - *from = (XPointer) src; - *from_left -= charset->char_size; - *to_left -= charset->char_size - length; - - if (num_args > 0) - *((XlcCharSet *) args[0]) = charset; - - return unconv_num; -} - - -static int -euc_mbstocs( - XlcConv conv, - XPointer *from, - int *from_left, - XPointer *to, - int *to_left, - XPointer *args, - int num_args) -{ - const char *tmp_from; - char *tmp_to; - int tmp_from_left, tmp_to_left; - XlcCharSet charset, tmp_charset; - XPointer tmp_args[1]; - int unconv_num = 0, ret; - -/* Determine the charset of the segment and convert one characater: */ - - tmp_args[0] = (XPointer) &charset; /* charset from euc_mbtocs() */ - while - ((ret = euc_mbtocs(conv, from, from_left, to, to_left, tmp_args, 1)) > 0) - unconv_num += ret; - if ( ret < 0 ) - return ret; - - tmp_from = *from; - tmp_from_left = *from_left; - tmp_to_left = *to_left; - tmp_to = *to; - -/* Convert remainder of the segment: */ - - tmp_args[0] = (XPointer) &tmp_charset; - while( (ret = euc_mbtocs(conv, (XPointer *) &tmp_from, &tmp_from_left, - (XPointer *) &tmp_to, &tmp_to_left, tmp_args, 1)) >= 0 ) { - - if (ret > 0) { - unconv_num += ret; - continue; - } - - if (tmp_charset != charset) /* quit on end of segment */ - break; - - *from = (XPointer) tmp_from; - *from_left = tmp_from_left; - *to = (XPointer) tmp_to; - *to_left = tmp_to_left; - } - - if (num_args > 0) - *((XlcCharSet *) args[0]) = charset; - - return unconv_num; -} - - -static int -euc_wcstocs( - XlcConv conv, - XPointer *from, - int *from_left, - XPointer *to, - int *to_left, - XPointer *args, - int num_args) -{ - XLCd lcd = (XLCd)conv->state; - const wchar_t *wcptr = (const wchar_t *) *from; - char *bufptr = (char *) *to; - wchar_t wch; - char *tmpptr; - int length; - CodeSet codeset; - Ulong wc_encoding; - int wcstr_len = *from_left, buf_len = *to_left; - - if (!(codeset = wc_codeset(lcd, *wcptr))) - return -1; - - wc_encoding = codeset->wc_encoding; - - if (wcstr_len < buf_len / codeset->length) - buf_len = wcstr_len * codeset->length; - - for ( ; wcstr_len > 0 && buf_len > 0; wcptr++, wcstr_len--) { - wch = *wcptr; - - if ((wch & XLC_GENERIC(lcd, wc_encode_mask)) != wc_encoding) - break; - - length = codeset->length; - - buf_len -= length; - bufptr += length; - tmpptr = bufptr - 1; - - while (length--) { - *tmpptr-- = codeset->length == 1 && codeset->side == XlcGR ? - BIT8ON(wch) : BIT8OFF(wch); - wch >>= (wchar_t)XLC_GENERIC(lcd, wc_shift_bits); - } - } - - if (num_args > 0) - *((XlcCharSet *) args[0]) = *codeset->charset_list; - - *from_left -= wcptr - (wchar_t *) *from; - *from = (XPointer) wcptr; - - *to_left -= bufptr - *to; - *to = bufptr; - - return 0; -} - - -static int -euc_cstombs( - XlcConv conv, - XPointer *from, - int *from_left, - XPointer *to, - int *to_left, - XPointer *args, - int num_args) -{ - XLCd lcd = (XLCd)conv->state; - const char *csptr = *from; - char *bufptr = *to; - int csstr_len = *from_left; - int buf_len = *to_left; - int length; - CodeSet codeset; - int cvt_length; - - if (num_args < 1) - return -1; - - if (!(codeset = GetCodeSetFromCharSet(lcd, (XlcCharSet) args[0]))) - return -1; - - cvt_length = 0; - csstr_len /= codeset->length; - buf_len /= codeset->length; - - if (codeset->parse_info) - csstr_len *= 2; - - if (csstr_len < buf_len) - buf_len = csstr_len; - - cvt_length += buf_len * codeset->length; - - if (bufptr) { - while (buf_len--) { - if (codeset->parse_info) /* put out SS2 or SS3 */ - *bufptr++ = *codeset->parse_info->encoding; - - length = codeset->length; - while (length--) - *bufptr++ = codeset->side == XlcGR ? - BIT8ON(*csptr++) : BIT8OFF(*csptr++); - } - } - - *from_left -= csptr - *from; - *from = (XPointer) csptr; - if (bufptr) - *to += cvt_length; - *to_left -= cvt_length; - - return 0; -} - - -static int -euc_cstowcs( - XlcConv conv, - XPointer *from, - int *from_left, - XPointer *to, - int *to_left, - XPointer *args, - int num_args) -{ - XLCd lcd = (XLCd)conv->state; - const char *csptr = *from; - wchar_t *bufptr = (wchar_t *) *to; - wchar_t *toptr = (wchar_t *) *to; - int csstr_len = *from_left; - int buf_len = *to_left; - wchar_t wch; - int length; - Ulong wc_shift_bits = XLC_GENERIC(lcd, wc_shift_bits); - CodeSet codeset; - - if (num_args < 1) - return -1; - - if (!(codeset = GetCodeSetFromCharSet(lcd, (XlcCharSet) args[0]))) - return -1; - - csstr_len /= codeset->length; - if (csstr_len < buf_len) - buf_len = csstr_len; - *to_left -= buf_len; - - if (bufptr) { - - toptr += buf_len; - *to = (XPointer) toptr; - - while (buf_len--) { - - wch = (wchar_t) BIT8OFF(*csptr); - csptr++; - - length = codeset->length - 1; - while (length--) { - wch = (wch << wc_shift_bits) | BIT8OFF(*csptr); - csptr++; - } - *bufptr++ = wch | codeset->wc_encoding; - } - } - *from_left -= csptr - *from; - *from = (XPointer) csptr; - - return 0; -} - - -static CodeSet -wc_codeset( - XLCd lcd, - wchar_t wch) -{ - CodeSet *codesets = XLC_GENERIC(lcd, codeset_list); - int end = XLC_GENERIC(lcd, codeset_num); - Ulong widech = (Ulong)(wch & XLC_GENERIC(lcd, wc_encode_mask)); - - for (; --end >= 0; codesets++) - if ( widech == (*codesets)->wc_encoding ) - return *codesets; - - return NULL; -} - - -static CodeSet -GetCodeSetFromCharSet( - XLCd lcd, - XlcCharSet charset) -{ - CodeSet *codeset = XLC_GENERIC(lcd, codeset_list); - XlcCharSet *charset_list; - int codeset_num, num_charsets; - - codeset_num = XLC_GENERIC(lcd, codeset_num); - - for ( ; codeset_num-- > 0; codeset++) { - num_charsets = (*codeset)->num_charsets; - charset_list = (*codeset)->charset_list; - - for ( ; num_charsets-- > 0; charset_list++) - if (*charset_list == charset) - return *codeset; - } - - return (CodeSet) NULL; -} - - -static XlcConv -create_conv( - XLCd lcd, - XlcConvMethods methods) -{ - XlcConv conv; - - conv = Xmalloc(sizeof(XlcConvRec)); - if (conv == NULL) - return (XlcConv) NULL; - - conv->methods = methods; - conv->state = (XPointer) lcd; - return conv; -} - - -/* - * Stripped down Direct CT converters for EUC - * - */ - -typedef struct _CTDataRec { - int side; - int length; - char *name; - Ulong wc_encoding; - char sshift; - char *ct_encoding; - int ct_encoding_len; - int set_size; - Uchar min_ch; - Uchar ct_type; -} CTDataRec, *CTData; - -typedef struct _StateRec { - CTData GL_charset; - CTData GR_charset; - CTData charset; -} StateRec, *State; - -#define CT_STD 0 -#define CT_NSTD 1 -#define CT_DIR 2 -#define CT_EXT0 3 -#define CT_EXT1 4 -#define CT_EXT2 5 -#define CT_VER 6 - -static CTDataRec ctdata[] = -{ - { XlcGL, 1, "ISO8859-1:GL", 0, 0, "\033(B" , 3, 0, 0, CT_STD }, - { XlcGR, 1, "ISO8859-1:GR", 0, 0, "\033-A" , 3, 0, 0, CT_STD }, - { XlcGL, 1, "JISX0201.1976-0:GL", 0, 0, "\033(J" , 3, 0, 0, CT_STD }, - { XlcGR, 1, "JISX0201.1976-0:GR", 0, 0, "\033)I" , 3, 0, 0, CT_STD }, - { XlcGL, 2, "JISX0208.1983-0:GL", 0, 0, "\033$(B" , 4, 0, 0, CT_STD }, - { XlcGR, 2, "JISX0208.1983-0:GR", 0, 0, "\033$)B" , 4, 0, 0, CT_STD }, - { XlcGL, 2, "JISX0212.1990-0:GL", 0, 0, "\033$(D" , 4, 0, 0, CT_STD }, - { XlcGR, 2, "JISX0212.1990-0:GR", 0, 0, "\033$)D" , 4, 0, 0, CT_STD }, - { XlcUnknown, 0, "Ignore-Ext-Status?", 0, 0, "\033#" , 2, 0, 0, CT_VER }, - { XlcUnknown, 0, "NonStd-?-OctetChar", 0, 0, "\033%/0" , 4, 0, 0, CT_NSTD }, - { XlcUnknown, 1, "NonStd-1-OctetChar", 0, 0, "\033%/1" , 4, 0, 0, CT_NSTD }, - { XlcUnknown, 2, "NonStd-2-OctetChar", 0, 0, "\033%/2" , 4, 0, 0, CT_NSTD }, - { XlcUnknown, 3, "NonStd-3-OctetChar", 0, 0, "\033%/3" , 4, 0, 0, CT_NSTD }, - { XlcUnknown, 4, "NonStd-4-OctetChar", 0, 0, "\033%/4" , 4, 0, 0, CT_NSTD }, - { XlcUnknown, 0, "Extension-2" , 0, 0, "\033%/" , 3, 0, 0, CT_EXT2 }, - { XlcUnknown, 0, "Extension-0" , 0, 0, "\033" , 1, 0, 0, CT_EXT0 }, - { XlcUnknown, 0, "Begin-L-to-R-Text", 0, 0, "\2331]" , 3, 0, 0, CT_DIR }, - { XlcUnknown, 0, "Begin-R-to-L-Text", 0, 0, "\2332]" , 3, 0, 0, CT_DIR }, - { XlcUnknown, 0, "End-Of-String", 0, 0, "\233]" , 2, 0, 0, CT_DIR }, - { XlcUnknown, 0, "Extension-1" , 0, 0, "\233" , 1, 0, 0, CT_EXT1 }, -}; - -/* Note on above table: euc_ctstombs() and euc_ctstowcs() parser depends on - * certain table entries occuring in decreasing string length-- - * 1. CT_EXT2 and CT_EXT0 entries must occur after CT_NSTD entries. - * 2. CT_DIR and CT_EXT1 entries must occur after CT_DIR entries. - */ - -static CTData ctd_endp = ctdata + ((sizeof(ctdata) / sizeof(CTDataRec))) - 1; -static CTData ctdptr[sizeof(ctdata) / sizeof(CTDataRec)]; - -#define Ascii 0 -#define Kanji 1 -#define Kana 2 -#define Userdef 3 - -/* - * initCTptr(): Set ctdptr[] to point at ctdata[], indexed by codeset_num. - */ -static void -initCTptr( - XLCd lcd) -{ - int num_codesets = XLC_GENERIC(lcd, codeset_num); - int num_charsets; - int i, j; - CodeSet *codesets = XLC_GENERIC(lcd, codeset_list); - CodeSet codeset; - XlcCharSet charset; - CTData ctdp = ctdata; - - ctdptr[Ascii] = &ctdata[0]; /* failsafe */ - - for (i = 0; i < num_codesets; i++) { - - codeset = codesets[i]; - num_charsets = codeset->num_charsets; - - for (j = 0; j < num_charsets; j++) { - - charset = codeset->charset_list[j]; - - for (ctdp = ctdata; ctdp <= ctd_endp; ctdp++) - - if (! strcmp(ctdp->name, charset->name)) { - - ctdptr[codeset->cs_num] = ctdp; - - ctdptr[codeset->cs_num]->wc_encoding = codeset->wc_encoding; - - ctdptr[codeset->cs_num]->set_size = - charset->set_size; - - ctdptr[codeset->cs_num]->min_ch = - charset->set_size == 94 && - (ctdptr[codeset->cs_num]->length > 1 || - ctdptr[codeset->cs_num]->side == XlcGR) ? 0x21 : 0x20; - - if (codeset->parse_info) { - ctdptr[codeset->cs_num]->sshift = - *codeset->parse_info->encoding; - } - - break; - } - } - } -} - - -#define SKIP_I(str) while (*(str) >= 0x20 && *(str) <= 0x2f) (str)++; -#define SKIP_P(str) while (*(str) >= 0x30 && *(str) <= 0x3f) (str)++; - -static int -euc_ctstowcs( - XlcConv conv, - XPointer *from, - int *from_left, - XPointer *to, - int *to_left, - XPointer *args, - int num_args) -{ - XLCd lcd = (XLCd)conv->state; - Ulong wc_shift_bits = XLC_GENERIC(lcd, wc_shift_bits); - const char *inbufptr = *from; - const char *inbuf_base; - wchar_t *outbufptr = (wchar_t *) *to; - wchar_t *outbuf_base = outbufptr; - int clen, length; - int unconv_num = 0; - unsigned int ct_seglen = 0; - Uchar ct_type = 0; - int shift_mult; - wchar_t wc_tmp; - wchar_t wch; - Ulong wc_encoding; - CTData ctdp = ctdata; - CTData GL_ctdp = ctdp; /* GL ctdp save */ - CTData GR_ctdp = ctdp; /* GR ctdp save */ - Bool save_outbuf = True; - /* If outbufptr is NULL, doen't save output, but just counts - a length to hold the output */ - if (outbufptr == NULL) save_outbuf = False; - - for (length = ctdata[Ascii].length; *from_left > 0; (*from_left) -= length) - { - ct_type = CT_STD; - /* change GL/GR charset */ - if(ctdp->side == XlcGR && isleftside(*inbufptr)){ - /* select GL side */ - ctdp = GL_ctdp; - length = ctdp->length; - ct_type = ctdp->ct_type; - }else if(ctdp->side == XlcGL && isrightside(*inbufptr)){ - /* select GR side */ - ctdp = GR_ctdp; - length = ctdp->length; - ct_type = ctdp->ct_type; - } - if (*inbufptr == '\033' || *inbufptr == (char)'\233') { - for (ctdp = ctdata; ctdp <= ctd_endp ; ctdp++) { - - if(!strncmp(inbufptr, ctdp->ct_encoding, ctdp->ct_encoding_len)) - { - inbufptr += ctdp->ct_encoding_len; - (*from_left) -= ctdp->ct_encoding_len; - if (ctdp->length) { - length = ctdp->length; - if( *from_left < length ) { - *to = (XPointer)outbufptr; - *to_left -= outbufptr - outbuf_base; - return( unconv_num + *from_left ); - } - } - ct_type = ctdp->ct_type; - if(ctdp->side == XlcGL){ - GL_ctdp = ctdp; /* save GL ctdp */ - }else{ - GR_ctdp = ctdp; /* save GR ctdp */ - } - break; - } - } - if (ctdp > ctd_endp) /* failed to match CT sequence */ - unconv_num++; - } - -/* The following code insures that non-standard encodings, direction, extension, - * and version strings are ignored; subject to change in future. - */ - switch (ct_type) { - case CT_STD: - break; - case CT_EXT2: - inbufptr++; - (*from_left)--; - case CT_NSTD: - ct_seglen = (BIT8OFF(*inbufptr) << 7) + BIT8OFF(*(inbufptr+1)) + 2; - inbufptr += ct_seglen; - (*from_left) -= ct_seglen; - continue; - case CT_EXT0: - inbuf_base = inbufptr; - SKIP_I(inbufptr); - inbufptr++; - ct_seglen = (unsigned)(inbufptr - inbuf_base); - *(from_left) -= ct_seglen; - continue; - case CT_EXT1: - inbuf_base = inbufptr; - SKIP_P(inbufptr); - SKIP_I(inbufptr); - inbufptr++; - ct_seglen = (unsigned)(inbufptr - inbuf_base); - *(from_left) -= ct_seglen; - continue; - case CT_DIR: - continue; - case CT_VER: - inbufptr += 2; - *(from_left) -= 2; - continue; - } - - wc_encoding = (ctdp == ctdptr[Kana] && isleftside(*inbufptr)) ? - ctdptr[Ascii]->wc_encoding: ctdp->wc_encoding; - - shift_mult = length - 1; - wch = (wchar_t)0; - clen = length; - - do { - wc_tmp = BIT8OFF(*inbufptr++) << (wc_shift_bits * shift_mult); - wch |= wc_tmp; - shift_mult--; - } while (--clen); - - if (save_outbuf == True) - *outbufptr++ = wch | wc_encoding; - if (--*to_left == 0 && *from_left != length) { - *to = (XPointer)outbufptr; - unconv_num = *from_left; - return unconv_num; - } - } - - *to = (XPointer)outbufptr; - - return unconv_num; - -} - - -#define byte1 (length == codeset->length - 1) -#define byte2 (byte1 == 0) -#define kanji (codeset->cs_num == 1) -#define kana (codeset->cs_num == 2) -#define userdef (codeset->cs_num == 3) - -static int -euc_wcstocts( - XlcConv conv, - XPointer *from, - int *from_left, - XPointer *to, - int *to_left, - XPointer *args, - int num_args) -{ - int ct_len = *to_left; - const wchar_t *inbufptr = (const wchar_t *) *from; - char *ctptr = *to; - XPointer ct_base = ctptr; - wchar_t wch; - int length; - int unconv_num = 0; - Uchar tmp; - Uchar t1 = 0; - int num_conv; - - StateRec ct_state; - XLCd lcd = (XLCd)conv->state; - CTData charset; - CodeSet codeset; - Ulong wc_shift = XLC_GENERIC(lcd, wc_shift_bits); - -/* Initial State: */ - ct_state.GL_charset = ctdptr[0]; /* Codeset 0 */ - ct_state.GR_charset = NULL; - - if (*from_left > *to_left) - *from_left = *to_left; - - for (; *from_left > 0 ; (*from_left)-- ) { - - wch = *inbufptr++; - - if (!(codeset = wc_codeset(lcd, wch))) { - unconv_num++; - (*from_left)--; - continue; - } - - charset = ctdptr[codeset->cs_num]; - - length = codeset->length; - wch ^= (wchar_t)codeset->wc_encoding; - - if ( (charset->side == XlcGR && charset != ct_state.GR_charset) || - (charset->side == XlcGL && charset != ct_state.GL_charset) ) { - - ct_len -= ctdptr[codeset->cs_num]->ct_encoding_len; - - if (ct_len < 0) { - unconv_num++; - break; - } - - if (ctptr) { - strcpy(ctptr, ctdptr[codeset->cs_num]->ct_encoding); - ctptr += ctdptr[codeset->cs_num]->ct_encoding_len; - } - } - - if (charset->side == XlcGR) { - ct_state.GR_charset = charset; - ct_state.GL_charset = NULL; - } else if (charset->side == XlcGL) { - ct_state.GL_charset = charset; - ct_state.GR_charset = NULL; - } - - do { - - length--; - tmp = wch>>(wchar_t)( (Ulong)length * wc_shift); - - if (kana) { - if (BADCHAR(charset->min_ch, (char)tmp)) { - unconv_num++; - break; - } - *ctptr++ = (char)BIT8ON(tmp); - } - - else if (byte1 && (kanji || userdef)) - t1 = tmp; - - else if (byte2 && (kanji || userdef)) { - if (BADCHAR(charset->min_ch, (char)t1) || - BADCHAR(charset->min_ch, (char)tmp)) { - unconv_num++; - break; - } - if (charset->side == XlcGR) { - *ctptr++ = (char)BIT8ON(t1); - *ctptr++ = (char)BIT8ON(tmp); - } else { - *ctptr++ = (char)BIT8OFF(t1); - *ctptr++ = (char)BIT8OFF(tmp); - } - } - - else { - if (BADCHAR(charset->min_ch, (char)tmp)) { - unconv_num++; - break; - } - *ctptr++ = (char)tmp; - } - - - } while (length); - - } /* end for */ - - *to = (XPointer)ctptr; - - if ((num_conv = (int)(ctptr - ct_base)) > 0) - (*to_left) -= num_conv; - - return unconv_num; -} -#undef byte1 -#undef byte2 -#undef kana -#undef kanji -#undef userdef - - -#define byte1 (ctdp->length == clen) -#define kana (ctdp == ctdptr[Kana] && isrightside(*inbufptr)) -/* #define kanji (ctdp == ctdptr[Kanji]) */ -#define kanji (strstr(ctdp->name, "JISX0208")) -#define userdef (ctdp == ctdptr[Userdef]) - -static int -euc_ctstombs( - XlcConv conv, - XPointer *from, - int *from_left, - XPointer *to, - int *to_left, - XPointer *args, - int num_args) -{ - char *inbufptr = *from; - XPointer outbufptr = *to; - const char *inbuf_base; - XPointer outbuf_base = outbufptr; - int clen, length; - int unconv_num = 0; - unsigned int ct_seglen = 0; - Uchar ct_type = 0; - CTData ctdp = &ctdata[0]; /* default */ - CTData GL_ctdp = ctdp; /* GL ctdp save */ - CTData GR_ctdp = ctdp; /* GR ctdp save */ - Bool save_outbuf = True; - /* If outbufptr is NULL, doen't save output, but just counts - a length to hold the output */ - if (outbufptr == NULL) save_outbuf = False; - - for (length = ctdata[Ascii].length; *from_left > 0; (*from_left) -= length) - { - ct_type = CT_STD; - /* change GL/GR charset */ - if(ctdp->side == XlcGR && isleftside(*inbufptr)){ - /* select GL side */ - ctdp = GL_ctdp; - length = ctdp->length; - ct_type = ctdp->ct_type; - }else if(ctdp->side == XlcGL && isrightside(*inbufptr)){ - /* select GR side */ - ctdp = GR_ctdp; - length = ctdp->length; - ct_type = ctdp->ct_type; - } - if (*inbufptr == '\033' || *inbufptr == (char)'\233') { - - for (ctdp = ctdata; ctdp <= ctd_endp ; ctdp++) { - - if(!strncmp(inbufptr, ctdp->ct_encoding, ctdp->ct_encoding_len)) - { - inbufptr += ctdp->ct_encoding_len; - (*from_left) -= ctdp->ct_encoding_len; - if (ctdp->length) { - length = ctdp->length; - if( *from_left < length ) { - *to = (XPointer)outbufptr; - *to_left -= outbufptr - outbuf_base; - return( unconv_num + *from_left ); - } - } - ct_type = ctdp->ct_type; - if(ctdp->side == XlcGL){ - GL_ctdp = ctdp; /* save GL ctdp */ - }else{ - GR_ctdp = ctdp; /* save GR ctdp */ - } - break; - } - } - if (ctdp > ctd_endp) /* failed to match CT sequence */ - unconv_num++; - } - -/* The following code insures that non-standard encodings, direction, extension, - * and version strings are ignored; subject to change in future. - */ - switch (ct_type) { - case CT_STD: - break; - case CT_EXT2: - inbufptr++; - (*from_left)--; - case CT_NSTD: - ct_seglen = (BIT8OFF(*inbufptr) << 7) + BIT8OFF(*(inbufptr+1)) + 2; - inbufptr += ct_seglen; - (*from_left) -= ct_seglen; - continue; - case CT_EXT0: - inbuf_base = inbufptr; - SKIP_I(inbufptr); - inbufptr++; - ct_seglen = (unsigned)(inbufptr - inbuf_base); - *(from_left) -= ct_seglen; - continue; - case CT_EXT1: - inbuf_base = inbufptr; - SKIP_P(inbufptr); - SKIP_I(inbufptr); - inbufptr++; - ct_seglen = (unsigned)(inbufptr - inbuf_base); - *(from_left) -= ct_seglen; - continue; - case CT_DIR: - continue; - case CT_VER: - inbufptr += 2; - *(from_left) -= 2; - continue; - } - - clen = length; - do { - - if (byte1) { - if (kanji) { - /* FIXME: assignment of read-only location */ - *inbufptr = BIT8ON(*inbufptr); - *(inbufptr+1) = BIT8ON(*(inbufptr+1)); - } - else if (kana || userdef) { - if (save_outbuf == True) { - *outbufptr++ = ctdp->sshift; - } - (*to_left)--; - } - } - if (save_outbuf == True) { - *outbufptr++ = *inbufptr; - } - (*to_left)--; - inbufptr++; - - if (*to_left == 0 && *from_left != length) { - *to = (XPointer)outbufptr; - unconv_num = *from_left; - return unconv_num; - } - } while (--clen); - } - - *to = outbufptr; - - return unconv_num; - -} -#undef byte1 -#undef kana -#undef kanji -#undef userdef - - -static int -euc_mbstocts( - XlcConv conv, - XPointer *from, - int *from_left, - XPointer *to, - int *to_left, - XPointer *args, - int num_args) -{ - int ct_len = *to_left; - int cs_num; - int clen, length = 0; - int unconv_num = 0; - int num_conv; - const char *inbufptr = *from; - char *ctptr = *to; - XPointer ct_base = ctptr; - - StateRec ct_state; - CTData charset; - XLCd lcd = (XLCd) conv->state; - int codeset_num = XLC_GENERIC(lcd, codeset_num); - -/* Initial State: */ - ct_state.GL_charset = NULL; - ct_state.GR_charset = NULL; - - if (*from_left > *to_left) - *from_left = *to_left; - - for (;*from_left > 0; (*from_left) -= length) { - - if (isleftside(*inbufptr)) { /* 7-bit (CS0) */ - if (ASCII_CODESET >= codeset_num) { - unconv_num++; - (*from_left)--; - continue; - } - cs_num = Ascii; - charset = ctdptr[Ascii]; - } - else if ((Uchar)*inbufptr == SS2) { /* Kana */ - if (KANA_CODESET >= codeset_num) { - unconv_num++; - (*from_left)--; - continue; - } - cs_num = Kana; - charset = ctdptr[Kana]; - inbufptr++; - (*from_left)--; - } - else if ((Uchar)*inbufptr == SS3) { /* Userdef */ - if (USERDEF_CODESET >= codeset_num) { - unconv_num++; - (*from_left)--; - continue; - } - cs_num = Userdef; - charset = ctdptr[Userdef]; - inbufptr++; - (*from_left)--; - } - else { - if (KANJI_CODESET >= codeset_num) { - unconv_num++; - (*from_left)--; - continue; - } - cs_num = Kanji; - charset = ctdptr[Kanji]; - } - - length = charset->length; - - if (BADCHAR(charset->min_ch, *inbufptr)) - continue; - - if ( (charset->side == XlcGR && charset != ct_state.GR_charset) || - (charset->side == XlcGL && charset != ct_state.GL_charset) ) { - - ct_len -= ctdptr[cs_num]->ct_encoding_len; - if (ct_len < 0) { - unconv_num++; - break; - } - - if (ctptr) { - strcpy(ctptr, ctdptr[cs_num]->ct_encoding); - ctptr += ctdptr[cs_num]->ct_encoding_len; - } - } - - if (charset->side == XlcGR) { - ct_state.GR_charset = charset; - ct_state.GL_charset = NULL; - } else if (charset->side == XlcGL) { - ct_state.GL_charset = charset; - ct_state.GR_charset = NULL; - } - - clen = length; - - do { - *ctptr++ = charset == ct_state.GR_charset ? - BIT8ON(*inbufptr++) : BIT8OFF(*inbufptr++); - } while (--clen); - } - - *to = (XPointer)ctptr; - - if ((num_conv = (int)(ctptr - ct_base)) > 0) - (*to_left) -= num_conv; - return unconv_num; - -} - - -static void -close_converter( - XlcConv conv) -{ - Xfree(conv); -} - -enum { MBSTOCS, WCSTOCS, MBTOCS, CSTOMBS, CSTOWCS, MBSTOWCS, WCSTOMBS, - CTSTOWCS, CTSTOMBS, WCSTOCTS, MBSTOCTS }; - -static XlcConvMethodsRec conv_methods[] = { - {close_converter, euc_mbstocs, NULL }, - {close_converter, euc_wcstocs, NULL }, - {close_converter, euc_mbtocs, NULL }, - {close_converter, euc_cstombs, NULL }, - {close_converter, euc_cstowcs, NULL }, - {close_converter, euc_mbstowcs, NULL }, - {close_converter, euc_wcstombs, NULL }, - {close_converter, euc_ctstowcs, NULL }, - {close_converter, euc_ctstombs, NULL }, - {close_converter, euc_wcstocts, NULL }, - {close_converter, euc_mbstocts, NULL }, -}; - - -static XlcConv -open_mbstocs( - XLCd from_lcd, - const char *from_type, - XLCd to_lcd, - const char *to_type) -{ - return create_conv(from_lcd, &conv_methods[MBSTOCS]); -} - -static XlcConv -open_wcstocs( - XLCd from_lcd, - const char *from_type, - XLCd to_lcd, - const char *to_type) -{ - return create_conv(from_lcd, &conv_methods[WCSTOCS]); -} - -static XlcConv -open_mbtocs( - XLCd from_lcd, - const char *from_type, - XLCd to_lcd, - const char *to_type) -{ - return create_conv(from_lcd, &conv_methods[MBTOCS]); -} - -static XlcConv -open_cstombs( - XLCd from_lcd, - const char *from_type, - XLCd to_lcd, - const char *to_type) -{ - return create_conv(from_lcd, &conv_methods[CSTOMBS]); -} - -static XlcConv -open_cstowcs( - XLCd from_lcd, - const char *from_type, - XLCd to_lcd, - const char *to_type) -{ - return create_conv(from_lcd, &conv_methods[CSTOWCS]); -} - -static XlcConv -open_mbstowcs( - XLCd from_lcd, - const char *from_type, - XLCd to_lcd, - const char *to_type) -{ - return create_conv(from_lcd, &conv_methods[MBSTOWCS]); -} - -static XlcConv -open_wcstombs( - XLCd from_lcd, - const char *from_type, - XLCd to_lcd, - const char *to_type) -{ - return create_conv(from_lcd, &conv_methods[WCSTOMBS]); -} - -static XlcConv -open_ctstowcs( - XLCd from_lcd, - const char *from_type, - XLCd to_lcd, - const char *to_type) -{ - return create_conv(from_lcd, &conv_methods[CTSTOWCS]); -} - -static XlcConv -open_ctstombs( - XLCd from_lcd, - const char *from_type, - XLCd to_lcd, - const char *to_type) -{ - return create_conv(from_lcd, &conv_methods[CTSTOMBS]); -} - -static XlcConv -open_wcstocts( - XLCd from_lcd, - const char *from_type, - XLCd to_lcd, - const char *to_type) -{ - return create_conv(from_lcd, &conv_methods[WCSTOCTS]); -} - -static XlcConv -open_mbstocts( - XLCd from_lcd, - const char *from_type, - XLCd to_lcd, - const char *to_type) -{ - return create_conv(from_lcd, &conv_methods[MBSTOCTS]); -} - -XLCd -_XlcEucLoader( - const char *name) -{ - XLCd lcd; - - lcd = _XlcCreateLC(name, _XlcGenericMethods); - if (lcd == NULL) - return lcd; - - if (!XLC_PUBLIC_PART(lcd)->codeset || - (_XlcNCompareISOLatin1(XLC_PUBLIC_PART(lcd)->codeset, "euc", 3))) { - _XlcDestroyLC(lcd); - return (XLCd) NULL; - } - - initCTptr(lcd); - - _XlcSetConverter(lcd, XlcNMultiByte, lcd, XlcNCharSet, open_mbstocs); - _XlcSetConverter(lcd, XlcNWideChar, lcd, XlcNCharSet, open_wcstocs); - _XlcSetConverter(lcd, XlcNCharSet, lcd, XlcNMultiByte, open_cstombs); - _XlcSetConverter(lcd, XlcNCharSet, lcd, XlcNWideChar, open_cstowcs); - _XlcSetConverter(lcd, XlcNMultiByte, lcd, XlcNChar, open_mbtocs); - -#ifndef FORCE_INDIRECT_CONVERTER - _XlcSetConverter(lcd, XlcNCompoundText, lcd, XlcNMultiByte, open_ctstombs); - _XlcSetConverter(lcd, XlcNCompoundText, lcd, XlcNWideChar, open_ctstowcs); - _XlcSetConverter(lcd, XlcNMultiByte, lcd, XlcNCompoundText, open_mbstocts); - _XlcSetConverter(lcd, XlcNMultiByte, lcd, XlcNWideChar, open_mbstowcs); - _XlcSetConverter(lcd, XlcNWideChar, lcd, XlcNCompoundText, open_wcstocts); - _XlcSetConverter(lcd, XlcNWideChar, lcd, XlcNMultiByte, open_wcstombs); -#endif - - _XlcAddUtf8Converters(lcd); - - return lcd; -} - -#else -typedef int dummy; -#endif /* X_LOCALE */ diff --git a/libX11/modules/lc/xlocale/lcJis.c b/libX11/modules/lc/xlocale/lcJis.c deleted file mode 100644 index a6917cf9f..000000000 --- a/libX11/modules/lc/xlocale/lcJis.c +++ /dev/null @@ -1,944 +0,0 @@ -/* - * Copyright 1992, 1993 by TOSHIBA Corp. - * - * Permission to use, copy, modify, and distribute this software and its - * documentation for any purpose and without fee is hereby granted, provided - * that the above copyright notice appear in all copies and that both that - * copyright notice and this permission notice appear in supporting - * documentation, and that the name of TOSHIBA not be used in advertising - * or publicity pertaining to distribution of the software without specific, - * written prior permission. TOSHIBA make no representations about the - * suitability of this software for any purpose. It is provided "as is" - * without express or implied warranty. - * - * TOSHIBA DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING - * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL - * TOSHIBA BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR - * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, - * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, - * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS - * SOFTWARE. - * - * Author: Katsuhisa Yano TOSHIBA Corp. - * mopi@osa.ilab.toshiba.co.jp - */ - -/* - * A Japanese JIS locale. - * Supports: all locales with codeset JIS7. - * How: Provides converters for JIS. - * Platforms: Only those defining X_LOCALE (only Lynx, Linux-libc5, OS/2). - */ - -#ifdef X_LOCALE - -#ifdef HAVE_CONFIG_H -#include <config.h> -#endif -#include "Xlibint.h" -#include "XlcGeneric.h" -#include <stdio.h> - -#if !defined(X_LOCALE) -#define STDCVT -#endif - -typedef struct _StateRec { - XLCd lcd; - XlcCharSet charset; - XlcCharSet GL_charset; - XlcCharSet GR_charset; -} StateRec, *State; - -static void -init_state( - XlcConv conv) -{ - State state = (State) conv->state; - XLCdGenericPart *gen = XLC_GENERIC_PART(state->lcd); - CodeSet codeset; - - codeset = gen->initial_state_GL; - if (codeset && codeset->charset_list) - state->GL_charset = *codeset->charset_list; - codeset = gen->initial_state_GR; - if (codeset && codeset->charset_list) - state->GR_charset = *codeset->charset_list; - - if (state->GL_charset == NULL) - if ((codeset = *gen->codeset_list) != NULL) - state->GL_charset = *codeset->charset_list; -} - -static int -compare( - const char *src, - const char *encoding, - int length) -{ - const char *start = src; - - while (length-- > 0) { - if (*src++ != *encoding++) - return 0; - if (*encoding == '\0') - return src - start; - } - - return 0; -} - -static int -mbtocs( - XlcConv conv, - XPointer *from, - int *from_left, - XPointer *to, - int *to_left, - XPointer *args, - int num_args) -{ - State state = (State) conv->state; - XLCd lcd = state->lcd; - const char *src; - char *dst; - unsigned char *mb_parse_table; - ParseInfo *parse_list, parse_info; - XlcCharSet charset; - int length, number, encoding_len = 0; - int i; - - src = *((const char **) from); - dst = *((char **) to); - - mb_parse_table = XLC_GENERIC(lcd, mb_parse_table); - if (mb_parse_table != NULL) { - number = mb_parse_table[(unsigned char) *src]; - if (number > 0) { - parse_list = XLC_GENERIC(lcd, mb_parse_list) + number - 1; - for ( ; (parse_info = *parse_list) != NULL; parse_list++) { - encoding_len = compare(src, parse_info->encoding, *from_left); - if (encoding_len > 0) { - switch (parse_info->type) { - case E_SS: - src += encoding_len; - charset = *parse_info->codeset->charset_list; - goto found; - case E_LSL: - case E_LSR: - src += encoding_len; - charset = *parse_info->codeset->charset_list; - if (parse_info->type == E_LSL) - state->GL_charset = charset; - else - state->GR_charset = charset; - length = 0; - goto end; - case E_GL: - charset = state->GL_charset; - goto found; - case E_GR: - charset = state->GR_charset; - goto found; - default: - break; - } - } - } - } - } - - if ((*src & 0x80) && state->GR_charset) - charset = state->GR_charset; - else - charset = state->GL_charset; - -found: - if (charset == NULL || - (num_args == 2 && (XlcCharSet) args[1] != charset)) - return -1; - - length = charset->char_size; - if (length > *from_left - encoding_len) - return -1; - - if (dst) { - if (length > *to_left) - return -1; - if (charset->side == XlcGL) { - for (i = 0; i < length; i++) - *dst++ = *src++ & 0x7f; - } else if (charset->side == XlcGR) { - for (i = 0; i < length; i++) - *dst++ = *src++ | 0x80; - } else { - for (i = 0; i < length; i++) - *dst++ = *src++; - } - *to = (XPointer) dst; - *to_left -= length; - } -end: - *from = (XPointer) src; - *from_left -= encoding_len + length; - state->charset = charset; - if (num_args == 1) - *((XlcCharSet *) args[0]) = charset; - - return 0; -} - -static int -mbstocs( - XlcConv conv, - XPointer *from, - int *from_left, - XPointer *to, - int *to_left, - XPointer *args, - int num_args) -{ - XlcCharSet charset = NULL; - XPointer tmp_args[2], save_from = *from; - int ret, unconv_num = 0, tmp_num = 1; - - tmp_args[0] = (XPointer) &charset; - - while (*from_left > 0 && *to_left > 0) { - ret = mbtocs(conv, from, from_left, to, to_left, tmp_args, tmp_num); - if (ret < 0) - break; - unconv_num += ret; - if (tmp_num == 1 && charset) { - tmp_args[1] = (XPointer) charset; - tmp_num = 2; - } - } - - if (save_from == *from) - return -1; - - if (num_args > 0) - *((XlcCharSet *) args[0]) = charset; - - return unconv_num; -} - -static CodeSet -wc_parse_codeset( - XLCd lcd, - const wchar_t *wcstr) -{ - CodeSet *codeset; - unsigned long wc_encoding; - int num; - - wc_encoding = *wcstr & XLC_GENERIC(lcd, wc_encode_mask); - num = XLC_GENERIC(lcd, codeset_num); - codeset = XLC_GENERIC(lcd, codeset_list); - while (num-- > 0) { - if (wc_encoding == (*codeset)->wc_encoding) - return *codeset; - codeset++; - } - - return NULL; -} - -static int -wcstocs( - XlcConv conv, - XPointer *from, - int *from_left, - XPointer *to, - int *to_left, - XPointer *args, - int num_args) -{ - State state = (State) conv->state; - XLCd lcd = state->lcd; - const wchar_t *wcptr; - char *bufptr; - wchar_t wch; - char *tmpptr; - int length; - CodeSet codeset; - unsigned long wc_encoding; - int wcstr_len, buf_len; - - if (from == NULL || *from == NULL) - return 0; - - wcptr = *((const wchar_t **) from); - bufptr = *((char **) to); - wcstr_len = *from_left; - buf_len = *to_left; - - codeset = wc_parse_codeset(lcd, wcptr); - if (codeset == NULL) - return -1; - wc_encoding = codeset->wc_encoding; - - if (wcstr_len < buf_len / codeset->length) - buf_len = wcstr_len * codeset->length; - - for ( ; wcstr_len > 0 && buf_len > 0; wcptr++, wcstr_len--) { - wch = *wcptr; - if ((wch & XLC_GENERIC(lcd, wc_encode_mask)) != wc_encoding) - break; - length = codeset->length; - buf_len -= length; - bufptr += length; - - tmpptr = bufptr - 1; - if ((*codeset->charset_list)->side == XlcGL) { - while (length--) { - *tmpptr-- = (unsigned char) (wch & 0x7f); - wch >>= (wchar_t)XLC_GENERIC(lcd, wc_shift_bits); - } - } else if ((*codeset->charset_list)->side == XlcGR) { - while (length--) { - *tmpptr-- = (unsigned char) (wch | 0x80); - wch >>= (wchar_t)XLC_GENERIC(lcd, wc_shift_bits); - } - } else { - while (length--) { - *tmpptr-- = (unsigned char) wch; - wch >>= (wchar_t)XLC_GENERIC(lcd, wc_shift_bits); - } - } - } - - if (num_args > 0) - *((XlcCharSet *) args[0]) = *codeset->charset_list; - - *from_left -= wcptr - *((wchar_t **) from); - *from = (XPointer) wcptr; - - *to_left -= bufptr - *((char **) to); - *to = bufptr; - - return 0; -} - -static CodeSet -GetCodeSetFromCharSet( - XLCd lcd, - XlcCharSet charset) -{ - CodeSet *codeset = XLC_GENERIC(lcd, codeset_list); - XlcCharSet *charset_list; - int codeset_num, num_charsets; - - codeset_num = XLC_GENERIC(lcd, codeset_num); - - for ( ; codeset_num-- > 0; codeset++) { - num_charsets = (*codeset)->num_charsets; - charset_list = (*codeset)->charset_list; - - for ( ; num_charsets-- > 0; charset_list++) - if (*charset_list == charset) - return *codeset; - } - - return (CodeSet) NULL; -} - -static int -cstombs( - XlcConv conv, - XPointer *from, - int *from_left, - XPointer *to, - int *to_left, - XPointer *args, - int num_args) -{ - State state = (State) conv->state; - const char *csptr; - char *bufptr; - int csstr_len; - int buf_len; - int num, encoding_len = 0; - CodeSet codeset; - XlcCharSet charset; - EncodingType type; - int cvt_length; - - csptr = *((const char **) from); - bufptr = *((char **) to); - csstr_len = *from_left; - buf_len = *to_left; - - if (num_args < 1) - return -1; - - charset = (XlcCharSet) args[0]; - - codeset = GetCodeSetFromCharSet(state->lcd, charset); - if (codeset == NULL) - return -1; - - cvt_length = 0; - if (codeset->parse_info) { - switch (type = codeset->parse_info->type) { - case E_SS: - encoding_len = strlen(codeset->parse_info->encoding); - break; - case E_LSL: - case E_LSR: - if (type == E_LSL) { - if (charset == state->GL_charset) - break; - } else { - if (charset == state->GR_charset) - break; - } - encoding_len = strlen(codeset->parse_info->encoding); - if (encoding_len > buf_len) - return -1; - cvt_length += encoding_len; - if (bufptr) { - strcpy(bufptr, codeset->parse_info->encoding); - bufptr += encoding_len; - } - buf_len -= encoding_len; - encoding_len = 0; - if (type == E_LSL) - state->GL_charset = charset; - else - state->GR_charset = charset; - break; - default: - break; - } - } - - csstr_len /= codeset->length; - buf_len /= codeset->length + encoding_len; - if (csstr_len < buf_len) - buf_len = csstr_len; - - cvt_length += buf_len * (encoding_len + codeset->length); - if (bufptr) { - while (buf_len--) { - if (encoding_len) { - strcpy(bufptr, codeset->parse_info->encoding); - bufptr += encoding_len; - } - num = codeset->length; - if (codeset->side == XlcGL) { - while (num--) - *bufptr++ = *csptr++ & 0x7f; - } else if (codeset->side == XlcGR) { - while (num--) - *bufptr++ = *csptr++ | 0x80; - } else { - while (num--) - *bufptr++ = *csptr++; - } - } - } - - *from_left -= csptr - *((char **) from); - *from = (XPointer) csptr; - - if (bufptr) - *to = (XPointer) bufptr; - *to_left -= cvt_length; - - return 0; -} - -static int -cstowcs( - XlcConv conv, - XPointer *from, - int *from_left, - XPointer *to, - int *to_left, - XPointer *args, - int num_args) -{ - State state = (State) conv->state; - XLCd lcd = state->lcd; - const char *csptr; - wchar_t *bufptr; - int csstr_len; - int buf_len; - wchar_t wch; - unsigned long code_mask, wc_encoding; - int num, length, wc_shift_bits; - CodeSet codeset; - - csptr = *((const char **) from); - bufptr = *((wchar_t **) to); - csstr_len = *from_left; - buf_len = *to_left; - - if (num_args < 1) - return -1; - - codeset = GetCodeSetFromCharSet(lcd, (XlcCharSet) args[0]); - if (codeset == NULL) - return -1; - - length = codeset->length; - csstr_len /= length; - if (csstr_len < buf_len) - buf_len = csstr_len; - - code_mask = ~XLC_GENERIC(lcd, wc_encode_mask); - wc_encoding = codeset->wc_encoding; - wc_shift_bits = XLC_GENERIC(lcd, wc_shift_bits); - - *to_left -= buf_len; - - if (bufptr) { - while (buf_len--) { - wch = (wchar_t) (*csptr++ & 0x7f); - num = length - 1; - while (num--) - wch = (wch << wc_shift_bits) | (*csptr++ & 0x7f); - - *bufptr++ = (wch & code_mask) | wc_encoding; - } - } - - *from_left -= csptr - *((char **) from); - *from = (XPointer) csptr; - - if (bufptr) - *to = (XPointer) bufptr; - - return 0; -} - - -static void -close_converter( - XlcConv conv) -{ - if (conv->state) { - Xfree(conv->state); - } - - Xfree(conv); -} - -static XlcConv -create_conv( - XLCd lcd, - XlcConvMethods methods) -{ - XlcConv conv; - State state; - - conv = Xmalloc(sizeof(XlcConvRec)); - if (conv == NULL) - return (XlcConv) NULL; - - conv->methods = Xmalloc(sizeof(XlcConvMethodsRec)); - if (conv->methods == NULL) - goto err; - *conv->methods = *methods; - if (XLC_PUBLIC(lcd, is_state_depend)) - conv->methods->reset = init_state; - - conv->state = Xcalloc(1, sizeof(StateRec)); - if (conv->state == NULL) - goto err; - - state = (State) conv->state; - state->lcd = lcd; - init_state(conv); - - return conv; - -err: - close_converter(conv); - - return (XlcConv) NULL; -} - -static XlcConvMethodsRec mbstocs_methods = { - close_converter, - mbstocs, - NULL -}; - -static XlcConv -open_mbstocs( - XLCd from_lcd, - const char *from_type, - XLCd to_lcd, - const char *to_type) -{ - return create_conv(from_lcd, &mbstocs_methods); -} - -static XlcConvMethodsRec wcstocs_methods = { - close_converter, - wcstocs, - NULL -}; - -static XlcConv -open_wcstocs( - XLCd from_lcd, - const char *from_type, - XLCd to_lcd, - const char *to_type) -{ - return create_conv(from_lcd, &wcstocs_methods); -} - -static XlcConvMethodsRec mbtocs_methods = { - close_converter, - mbtocs, - NULL -}; - -static XlcConv -open_mbtocs( - XLCd from_lcd, - const char *from_type, - XLCd to_lcd, - const char *to_type) -{ - return create_conv(from_lcd, &mbtocs_methods); -} - -static XlcConvMethodsRec cstombs_methods = { - close_converter, - cstombs, - NULL -}; - -static XlcConv -open_cstombs( - XLCd from_lcd, - const char *from_type, - XLCd to_lcd, - const char *to_type) -{ - return create_conv(from_lcd, &cstombs_methods); -} - -static XlcConvMethodsRec cstowcs_methods = { - close_converter, - cstowcs, - NULL -}; - -static XlcConv -open_cstowcs( - XLCd from_lcd, - const char *from_type, - XLCd to_lcd, - const char *to_type) -{ - return create_conv(from_lcd, &cstowcs_methods); -} - -#ifdef STDCVT -static int -stdc_mbstowcs( - XlcConv conv, - XPointer *from, - int *from_left, - XPointer *to, - int *to_left, - XPointer *args, - int num_args) -{ - const char *src = *((const char **) from); - wchar_t *dst = *((wchar_t **) to); - int src_left = *from_left; - int dst_left = *to_left; - int length; - - while (src_left > 0 && dst_left > 0) { - length = mbtowc(dst, src, src_left); - if (length < 0) - break; - - src += length; - src_left -= length; - if (dst) - dst++; - dst_left--; - - if (length == 0) { - src++; - src_left--; - break; - } - } - - if (*from_left == src_left) - return -1; - - *from = (XPointer) src; - if (dst) - *to = (XPointer) dst; - *from_left = src_left; - *to_left = dst_left; - - return 0; -} - -static int -stdc_wcstombs( - XlcConv conv, - XPointer *from, - int *from_left, - XPointer *to, - int *to_left, - XPointer *args, - int num_args) -{ - const wchar_t *src = *((const wchar_t **) from); - char *dst = *((char **) to); - int src_left = *from_left; - int dst_left = *to_left; - int length; - - while (src_left > 0 && dst_left > 0) { - length = wctomb(dst, *src); /* XXX */ - if (length < 0 || dst_left < length) - break; - - src++; - src_left--; - dst += length; - dst_left -= length; - - if (length == 0) { - dst++; - dst_left--; - break; - } - } - - if (*from_left == src_left) - return -1; - - *from = (XPointer) src; - *to = (XPointer) dst; - *from_left = src_left; - *to_left = dst_left; - - return 0; -} - -static int -stdc_wcstocs( - XlcConv conv, - XPointer *from, - int *from_left, - XPointer *to, - int *to_left, - XPointer *args, - int num_args) -{ - const wchar_t *src = *((const wchar_t **) from); - wchar_t wch; - XlcCharSet charset = NULL; - XPointer tmp_args[2], tmp_from, save_from = *from; - char tmp[32]; - int length, ret, src_left = *from_left; - int unconv_num = 0, tmp_num = 1; - - tmp_args[0] = (XPointer) &charset; - - while (src_left > 0 && *to_left > 0) { - if (wch = *src) { - length = wctomb(tmp, wch); - } else { - length = 1; - *tmp = '\0'; - } - - if (length < 0) - break; - - tmp_from = (XPointer) tmp; - ret = mbtocs(conv, &tmp_from, &length, to, to_left, tmp_args, tmp_num); - if (ret < 0) - break; - unconv_num += ret; - if (tmp_num == 1 && charset) { - tmp_args[1] = (XPointer) charset; - tmp_num = 2; - } - - src++; - src_left--; - } - - if (save_from == (XPointer) src) - return -1; - - *from = (XPointer) src; - *from_left = src_left; - - if (num_args > 0) - *((XlcCharSet *) args[0]) = charset; - - return unconv_num; -} - -#define DefineLocalBuf char local_buf[BUFSIZ] -#define AllocLocalBuf(length) (length > BUFSIZ ? (char*) Xmalloc(length) : local_buf) -#define FreeLocalBuf(ptr) if (ptr != local_buf) Xfree(ptr) - -static int -stdc_cstowcs( - XlcConv conv, - XPointer *from, - int *from_left, - XPointer *to, - int *to_left, - XPointer *args, - int num_args) -{ - XLCd lcd = ((State) conv->state)->lcd; - DefineLocalBuf; - XPointer buf, save_buf; - int length, left, ret; - - left = length = *to_left * XLC_PUBLIC(lcd, mb_cur_max); - buf = save_buf = (XPointer) AllocLocalBuf(length); - if (buf == NULL) - return -1; - - ret = cstombs(conv, from, from_left, &buf, &left, args, num_args); - if (ret < 0) - goto err; - - buf = save_buf; - length -= left; - if (stdc_mbstowcs(conv, &buf, &length, to, to_left, args, num_args) < 0) - ret = -1; - -err: - FreeLocalBuf(save_buf); - - return ret; -} - -static XlcConvMethodsRec stdc_mbstowcs_methods = { - close_converter, - stdc_mbstowcs, - NULL -}; - -static XlcConv -open_stdc_mbstowcs( - XLCd from_lcd, - const char *from_type, - XLCd to_lcd, - const char *to_type) -{ - return create_conv(from_lcd, &stdc_mbstowcs_methods); -} - -static XlcConvMethodsRec stdc_wcstombs_methods = { - close_converter, - stdc_wcstombs, - NULL -}; - -static XlcConv -open_stdc_wcstombs( - XLCd from_lcd, - const char *from_type, - XLCd to_lcd, - const char *to_type) -{ - return create_conv(from_lcd, &stdc_wcstombs_methods); -} - -static XlcConvMethodsRec stdc_wcstocs_methods = { - close_converter, - stdc_wcstocs, - NULL -}; - -static XlcConv -open_stdc_wcstocs( - XLCd from_lcd, - const char *from_type, - XLCd to_lcd, - const char *to_type) -{ - return create_conv(from_lcd, &stdc_wcstocs_methods); -} - -static XlcConvMethodsRec stdc_cstowcs_methods = { - close_converter, - stdc_cstowcs, - NULL -}; - -static XlcConv -open_stdc_cstowcs( - XLCd from_lcd, - const char *from_type, - XLCd to_lcd, - const char *to_type) -{ - return create_conv(from_lcd, &stdc_cstowcs_methods); -} -#endif /* STDCVT */ - -XLCd -_XlcJisLoader( - const char *name) -{ - XLCd lcd; -#ifdef STDCVT - XLCdGenericPart *gen; -#endif - - lcd = _XlcCreateLC(name, _XlcGenericMethods); - if (lcd == NULL) - return lcd; - - if (!XLC_PUBLIC_PART(lcd)->codeset || - (_XlcCompareISOLatin1(XLC_PUBLIC_PART(lcd)->codeset, "JIS7"))) { - _XlcDestroyLC(lcd); - return (XLCd) NULL; - } - - _XlcSetConverter(lcd, XlcNMultiByte, lcd, XlcNChar, open_mbtocs); - _XlcSetConverter(lcd, XlcNMultiByte, lcd, XlcNCharSet, open_mbstocs); - _XlcSetConverter(lcd, XlcNCharSet, lcd, XlcNMultiByte, open_cstombs); - -#ifdef STDCVT - gen = XLC_GENERIC_PART(lcd); - - if (gen->use_stdc_env == True) { - _XlcSetConverter(lcd,XlcNMultiByte,lcd,XlcNWideChar,open_stdc_mbstowcs); - _XlcSetConverter(lcd,XlcNWideChar,lcd,XlcNMultiByte,open_stdc_wcstombs); - } - if (gen->force_convert_to_mb == True) { - _XlcSetConverter(lcd, XlcNWideChar, lcd, XlcNCharSet,open_stdc_wcstocs); - _XlcSetConverter(lcd, XlcNCharSet, lcd, XlcNWideChar,open_stdc_cstowcs); - } else { -#endif - _XlcSetConverter(lcd, XlcNWideChar, lcd, XlcNCharSet, open_wcstocs); - _XlcSetConverter(lcd, XlcNCharSet, lcd, XlcNWideChar, open_cstowcs); -#ifdef STDCVT - } -#endif - - _XlcAddUtf8Converters(lcd); - - return lcd; -} - -#else -typedef int dummy; -#endif /* X_LOCALE */ diff --git a/libX11/modules/lc/xlocale/lcSjis.c b/libX11/modules/lc/xlocale/lcSjis.c deleted file mode 100644 index ac945570a..000000000 --- a/libX11/modules/lc/xlocale/lcSjis.c +++ /dev/null @@ -1,1612 +0,0 @@ -/**************************************************************** - - Copyright 1992, 1993 by FUJITSU LIMITED - Copyright 1993 by Fujitsu Open Systems Solutions, Inc. - Copyright 1994 by Sony Corporation - -Permission to use, copy, modify, distribute and sell this software -and its documentation for any purpose is hereby granted without fee, -provided that the above copyright notice appear in all copies and -that both that copyright notice and this permission notice appear -in supporting documentation, and that the name of FUJITSU LIMITED, -Fujitsu Open Systems Solutions, Inc. and Sony Corporation not be -used in advertising or publicity pertaining to distribution of the -software without specific, written prior permission. -FUJITSU LIMITED, Fujitsu Open Systems Solutions, Inc. and -Sony Corporation make no representations about the suitability of -this software for any purpose. It is provided "as is" without -express or implied warranty. - -FUJITSU LIMITED, FUJITSU OPEN SYSTEMS SOLUTIONS, INC. AND SONY -CORPORATION DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, -IN NO EVENT SHALL FUJITSU OPEN SYSTEMS SOLUTIONS, INC., FUJITSU LIMITED -AND SONY CORPORATION BE LIABLE FOR ANY SPECIAL, INDIRECT OR -CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS -OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE -OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE -OR PERFORMANCE OF THIS SOFTWARE. - - Authors: Jeffrey Bloomfield (jeffb@ossi.com) - Shigeru Yamada (yamada@ossi.com) - Yoshiyuki Segawa (segawa@ossi.com) - Modifier:Makoto Wakamatsu Sony Corporation - makoto@sm.sony.co.jp - -*****************************************************************/ - -/* - * A Japanese SJIS locale. - * Supports: all locales with codeset SJIS. - * How: Provides converters for SJIS. - * Platforms: Only those defining X_LOCALE (only Lynx, Linux-libc5, OS/2). - */ - -#ifdef X_LOCALE - -#ifdef HAVE_CONFIG_H -#include <config.h> -#endif -#include "Xlibint.h" -#include "XlcGeneric.h" - -#include <ctype.h> -#ifdef WIN32 -#define isascii __isascii -#endif - -#define CS0 codesets[0] /* Codeset 0 - 7-bit ASCII */ -#define CS1 codesets[1] /* Codeset 1 - Kanji */ -#define CS2 codesets[2] /* Codeset 2 - Half-Kana */ -#define CS3 codesets[3] /* Codeset 3 - User defined */ - -#define ascii (codeset->cs_num == 0) -#define kanji (codeset->cs_num == 1) -#define kana (codeset->cs_num == 2) -#define userdef (codeset->cs_num == 3) - -#define ASCII_CODESET 0 -#define KANJI_CODESET 1 -#define KANA_CODESET 2 -#define USERDEF_CODESET 3 -#define MAX_CODESETS 4 - -#define GR 0x80 /* begins right-side (non-ascii) region */ -#define GL 0x7f /* ends left-side (ascii) region */ - -#define isleftside(c) (((c) & GR) ? 0 : 1) -#define isrightside(c) (!isleftside(c)) - -typedef unsigned char Uchar; -typedef unsigned long Ulong; -typedef unsigned int Uint; - -/* Acceptable range for 2nd byte of SJIS multibyte char */ -#define VALID_MULTIBYTE(c) \ - ((0x40<=((Uchar)c) && ((Uchar)c)<=0x7e) \ - || (0x80<=((Uchar)c) && ((Uchar)c)<=0xfc)) - -#ifndef iskanji -#define iskanji(c) ((0x81<=((Uchar)c) && ((Uchar)c)<=0x9f) \ - || (0xe0<=((Uchar)c) && ((Uchar)c)<=0xef)) -#endif /* !iskanji */ - -#ifndef iskana -#define iskana(c) (0xa1<=((Uchar)c) && ((Uchar)c)<=0xdf) -#endif /* !iskana */ - -#define isuserdef(c) (0xf0<=((Uchar)c) && ((Uchar)c)<=0xfc) - -#define BIT8OFF(c) ((c) & GL) -#define BIT8ON(c) ((c) | GR) - - -static void jis_to_sjis (Uchar *p1, Uchar *p2); -static void sjis_to_jis (Uchar *p1, Uchar *p2); -static CodeSet wc_codeset (XLCd lcd, wchar_t wch); - - -/* - * Notes: - * 1. 16-bit widechar format is limited to 14 data bits. Since the 2nd byte - * of SJIS multibyte chars are in the ranges of 0x40 - 7E and 0x80 - 0xFC, - * SJIS cannot map directly into 16 bit widechar format within the confines - * of a single codeset. Therefore, for SJIS widechar conversion, SJIS Kanji - * is mapped into the JIS codeset. (The algorithms used in jis_to_sjis() - * and sjis_to_jis() are from Ken Lunde (lunde@mv.us.adobe.com) and are in - * the public domain.) - * 2. Defining FORCE_INDIRECT_CONVERTER (see _XlcEucLoader()) - * forces indirect (charset) conversions (e.g. wcstocs()<->cstombs()). - * 3. Using direct converters (e.g. mbstowcs()) decreases conversion - * times by 20-40% (depends on specific converter used). - */ - - -static int -sjis_mbstowcs( - XlcConv conv, - XPointer *from, - int *from_left, - XPointer *to, - int *to_left, - XPointer *args, - int num_args) -{ - - XLCd lcd = (XLCd)conv->state; - - int chr_len = 0; - int shift_mult = 0; - Uint chrcode = 0; - - Uchar ch, ch2; - Uint wc_encode = 0; - Uint wc_tmp = 0; - - Bool new_char; - - int firstbyte; - int length = 0; - int num_conv; - int unconv_num = 0; - - const char *inbufptr = *from; - wchar_t *outbufptr = (wchar_t *) *to; - wchar_t *outbuf_base = outbufptr; - - CodeSet *codesets = XLC_GENERIC(lcd, codeset_list); - int codeset_num = XLC_GENERIC(lcd, codeset_num); - Ulong wc_shift = XLC_GENERIC(lcd, wc_shift_bits); - - if (*from_left > *to_left) - *from_left = *to_left; - - for (new_char = True, firstbyte = True; *from_left > 0; (*from_left)--) { - - ch = *inbufptr++; - - if (firstbyte) { - if (ASCII_CODESET >= codeset_num) { - unconv_num++; - (*from_left)--; - continue; - } - if (isascii(ch)) { - length = CS0->length; - *outbufptr++ = (wchar_t)ch; - continue; - } - else if (iskanji(ch)) { - if (KANJI_CODESET >= codeset_num) { - unconv_num++; - (*from_left)--; - continue; - } - firstbyte = False; - length = CS1->length; - if (*from_left < length || *to_left < length) - return -1; - wc_encode = CS1->wc_encoding; - ch2 = *inbufptr; - sjis_to_jis(&ch, &ch2); - chrcode = ch; - } - else if (iskana(ch)) { - if (KANA_CODESET >= codeset_num) { - unconv_num++; - (*from_left)--; - continue; - } - length = CS2->length; - wc_encode = CS2->wc_encoding; - chrcode = BIT8OFF(ch); - } - else if (isuserdef(ch)) { - if (USERDEF_CODESET >= codeset_num) { - unconv_num++; - (*from_left)--; - continue; - } - firstbyte = False; - length = CS3->length; - if (*from_left < length || *to_left < length) - return -1; - wc_encode = CS3->wc_encoding; - ch2 = *inbufptr; - sjis_to_jis(&ch, &ch2); - chrcode = ch; - } - else /* unknown */ { - unconv_num++; - (*from_left)--; - continue; - } - } else { /* 2nd byte of multibyte char */ - if (!VALID_MULTIBYTE((Uchar) *(inbufptr-1))) { - unconv_num++; - firstbyte = True; - } - chrcode = ch2; - } - - if (new_char) { - chr_len = length; - shift_mult = length - 1; - new_char = False; - } - - chrcode <<= (wc_shift * shift_mult); - shift_mult--; - wc_tmp |= chrcode; - if (--chr_len == 0) { - wc_tmp |= wc_encode; - *outbufptr++ = wc_tmp; - - firstbyte = True; - new_char = True; - wc_tmp = (Uint)0; - } - - } /* end for */ - - *to = (XPointer)outbufptr; - - if ((num_conv = outbufptr - outbuf_base) > 0) - (*to_left) -= num_conv; - - return unconv_num; -} - - -#define byte1 (length == codeset->length - 1) -#define byte2 (byte1 == 0) - -static int -sjis_wcstombs( - XlcConv conv, - XPointer *from, - int *from_left, - XPointer *to, - int *to_left, - XPointer *args, - int num_args) -{ - const wchar_t *inbufptr = (const wchar_t *) *from; - XPointer outbufptr = *to; - XPointer outbuf_base = outbufptr; - wchar_t wch; - int length; - Uchar tmp; - Uchar t1, t2; - int num_conv; - int unconv_num = 0; - - XLCd lcd = (XLCd)conv->state; - CodeSet codeset; - Ulong wc_shift = XLC_GENERIC(lcd, wc_shift_bits); - - if (*from_left > *to_left) - *from_left = *to_left; - - for (; *from_left > 0 ; (*from_left)-- ) { - - wch = *inbufptr++; - - if (!(codeset = wc_codeset(lcd, wch))) { - unconv_num++; - (*from_left)--; - continue; - } - - length = codeset->length; - wch ^= (wchar_t)codeset->wc_encoding; - - do { - length--; - tmp = wch>>(wchar_t)( (Ulong)length * wc_shift); - - if (kana) - tmp = BIT8ON(tmp); - - else if (byte1 && (kanji || userdef)) { - t1 = BIT8OFF(tmp); - continue; - } - - else if (byte2 && (kanji || userdef)) { - t2 = BIT8OFF(tmp); - jis_to_sjis(&t1, &t2); - *outbufptr++ = (char)t1; - tmp = t2; - } - - *outbufptr++ = (char)tmp; - } while (length); - - } /* end for */ - - *to = (XPointer)outbufptr; - - if ((num_conv = (int)(outbufptr - outbuf_base)) > 0) - (*to_left) -= num_conv; - - return unconv_num; -} -#undef byte1 -#undef byte2 - -/* - * sjis<->jis conversion for widechar kanji (See Note at top of file) - */ -static void -sjis_to_jis( - Uchar *p1, - Uchar *p2) -{ - Uchar c1 = *p1; - Uchar c2 = *p2; - Uchar adjust = c2 < 0x9f; - Uchar rowOffset = c1 < 0xa0 ? 0x70 : 0xb0; - Uchar cellOffset = adjust ? (0x1f + (c2 > 0x7f)) : 0x7e; - - *p1 = ((c1 - rowOffset) << 1) - adjust; - *p2 -= cellOffset; -} - -static void -jis_to_sjis( - Uchar *p1, - Uchar *p2) -{ - Uchar c1 = *p1; - Uchar c2 = *p2; - Uchar rowOffset = c1 < 0x5f ? 0x70 : 0xb0; - Uchar cellOffset = c1 % 2 ? 0x1f + (c2 > 0x5f) : 0x7e; - - *p1 = ((Uchar)(c1 + 1) >> 1) + rowOffset; - *p2 = c2 + cellOffset; -} - -static CodeSet -wc_codeset( - XLCd lcd, - wchar_t wch) -{ - CodeSet *codesets = XLC_GENERIC(lcd, codeset_list); -#if !defined(__sony_news) || defined(SVR4) - int end = XLC_GENERIC(lcd, codeset_num); - Ulong widech = (Ulong)(wch & XLC_GENERIC(lcd, wc_encode_mask)); - - for (; --end >= 0; codesets++) - if ( widech == (*codesets)->wc_encoding ) - return *codesets; - - return NULL; -#else - if( iskanji(wch >> 8) ) - return( codesets[1] ); - if( iskana(wch & 0xff) ) - return( codesets[2] ); - return( codesets[0] ); -#endif -} - - -static int -sjis_mbtocs( - XlcConv conv, - XPointer *from, - int *from_left, - XPointer *to, - int *to_left, - XPointer *args, - int num_args) -{ - XLCd lcd = (XLCd)conv->state; - XlcCharSet charset = NULL; - int char_size = 0; - int unconv_num = 0; - const char *src = *from; - char *dst = *to; - CodeSet *codesets = XLC_GENERIC(lcd, codeset_list); - int codeset_num = XLC_GENERIC(lcd, codeset_num); - - if (iskanji(*src)) { - if (KANJI_CODESET >= codeset_num) - return -1; - charset = *CS1->charset_list; - char_size = charset->char_size; - - if (*from_left >= char_size && *to_left >= char_size) { - *dst++ = *src++; - *dst++ = *src++; - if (!VALID_MULTIBYTE((Uchar) *(src-1))) /* check 2nd byte */ - unconv_num++; - sjis_to_jis((Uchar *)(dst-2), (Uchar *)(dst-1)); - } else - return -1; - } - else if (isuserdef(*src)) { - if (USERDEF_CODESET >= codeset_num) - return -1; - charset = *CS3->charset_list; - char_size = charset->char_size; - - if (*from_left >= char_size && *to_left >= char_size) { - *dst++ = *src++; - *dst++ = *src++; - if (!VALID_MULTIBYTE((Uchar) *(src-1))) /* check 2nd byte */ - unconv_num++; - sjis_to_jis((Uchar *)(dst-2), (Uchar *)(dst-1)); - } else - return -1; - } - else if (isascii(*src)) { - if (ASCII_CODESET >= codeset_num) - return -1; - charset = *CS0->charset_list; - char_size = charset->char_size; - - if (*from_left >= char_size && *to_left >= char_size) - *dst++ = *src++; - else - return -1; - } - else if (iskana(*src)) { - if (KANA_CODESET >= codeset_num) - return -1; - charset = *CS2->charset_list; - char_size = charset->char_size; - - if (*from_left >= char_size && *to_left >= char_size) - *dst++ = *src++; - else - return -1; - } - else /* unknown */ - return -1; - - *from_left -= char_size; - *to_left -= char_size; - - *to = (XPointer) dst; - *from = (XPointer) src; - - if (num_args > 0) - *((XlcCharSet *) args[0]) = charset; - - return unconv_num; -} - - -static int -sjis_mbstocs( - XlcConv conv, - XPointer *from, - int *from_left, - XPointer *to, - int *to_left, - XPointer *args, - int num_args) -{ - const char *tmp_from; - char *tmp_to; - int tmp_from_left, tmp_to_left; - XlcCharSet charset, tmp_charset; - XPointer tmp_args[1]; - int unconv_num = 0, ret; - -/* Determine the charset of the segment and convert one character: */ - - tmp_args[0] = (XPointer) &charset; /* charset from sjis_mbtocs() */ - while - ((ret = sjis_mbtocs(conv, from, from_left, to, to_left, tmp_args, 1)) > 0) - unconv_num += ret; - if ( ret < 0 ) - return ret; - - tmp_from = *from; - tmp_from_left = *from_left; - tmp_to_left = *to_left; - tmp_to = *to; - -/* Convert remainder of the segment: */ - - tmp_args[0] = (XPointer) &tmp_charset; - while( (ret = sjis_mbtocs(conv, (XPointer *) &tmp_from, &tmp_from_left, - (XPointer *) &tmp_to, &tmp_to_left, tmp_args, 1)) >= 0 ) { - - if (ret > 0) { - unconv_num += ret; - continue; - } - - if (tmp_charset != charset) /* quit on end of segment */ - break; - - *from = (XPointer) tmp_from; - *from_left = tmp_from_left; - *to = (XPointer) tmp_to; - *to_left = tmp_to_left; - } - - if (num_args > 0) - *((XlcCharSet *) args[0]) = charset; - - return unconv_num; -} - -static int -sjis_wcstocs( - XlcConv conv, - XPointer *from, - int *from_left, - XPointer *to, - int *to_left, - XPointer *args, - int num_args) -{ - XLCd lcd = (XLCd) conv->state; - const wchar_t *wcptr = *((const wchar_t **)from); - char *bufptr = *((char **) to); - wchar_t wch; - char *tmpptr; - int length; - CodeSet codeset; - Ulong wc_encoding; - int buf_len = *to_left; - int wcstr_len = *from_left; - - if (!(codeset = wc_codeset(lcd, *wcptr))) - return -1; - - if (wcstr_len < buf_len / codeset->length) - buf_len = wcstr_len * codeset->length; - -#if !defined(__sony_news) || defined(SVR4) - wc_encoding = codeset->wc_encoding; - - for ( ; wcstr_len > 0 && buf_len > 0; wcptr++, wcstr_len--) { - wch = *wcptr; - - if ((wch & XLC_GENERIC(lcd, wc_encode_mask)) != wc_encoding) - break; - - length = codeset->length; - - buf_len -= length; - bufptr += length; - tmpptr = bufptr - 1; - - while (length--) { - *tmpptr-- = kana ? BIT8ON(wch) : BIT8OFF(wch); - wch >>= (wchar_t)XLC_GENERIC(lcd, wc_shift_bits); - } - } -#else - length = codeset->length; - for( ; wcstr_len > 0 && buf_len > 0; wcptr++, wcstr_len-- ) { - wch = *wcptr; - if( codeset != wc_codeset( lcd, wch ) ) - break; - - buf_len -= length; - if( length == 2 ) { - unsigned short code; - - code = sjis2jis( wch & 0xffff ); - *bufptr++ = code >> 8; - *bufptr++ = code & 0xff; - } - else - *bufptr++ = wch & 0xff; - } -#endif - - if (num_args > 0) - *((XlcCharSet *) args[0]) = *codeset->charset_list; - - *from_left -= wcptr - (wchar_t *) *from; - *from = (XPointer) wcptr; - - *to_left -= bufptr - *to; - *to = bufptr; - - return 0; -} - -static CodeSet -GetCodeSetFromCharSet( - XLCd lcd, - XlcCharSet charset) -{ - CodeSet *codeset = XLC_GENERIC(lcd, codeset_list); - XlcCharSet *charset_list; - int codeset_num, num_charsets; - - codeset_num = XLC_GENERIC(lcd, codeset_num); - - for ( ; codeset_num-- > 0; codeset++) { - num_charsets = (*codeset)->num_charsets; - charset_list = (*codeset)->charset_list; - - for ( ; num_charsets-- > 0; charset_list++) - if (*charset_list == charset) - return *codeset; - } - - return (CodeSet) NULL; -} - - -static int -sjis_cstombs( - XlcConv conv, - char **from, - int *from_left, - char **to, - int *to_left, - XPointer *args, - int num_args) -{ - XLCd lcd = (XLCd) conv->state; - const char *csptr = *from; - char *bufptr = *to; - int csstr_len = *from_left; - int buf_len = *to_left; - int length; - CodeSet codeset; - int cvt_length = 0; - - if (num_args < 1) - return -1; - - if (!(codeset = GetCodeSetFromCharSet(lcd, (XlcCharSet) args[0]))) - return -1; - - csstr_len /= codeset->length; - buf_len /= codeset->length; - if (csstr_len < buf_len) - buf_len = csstr_len; - - cvt_length += buf_len * codeset->length; - - if (bufptr) { - while (buf_len--) { - length = codeset->length; - while (length--) - *bufptr++ = codeset->length == 1 && codeset->side == XlcGR ? - BIT8ON(*csptr++) : BIT8OFF(*csptr++); - - if (codeset->length == 2) - jis_to_sjis((Uchar *)(bufptr-2), (Uchar *)(bufptr-1)); - } - } - - *from_left -= csptr - *from; - *from = (XPointer) csptr; - - if (bufptr) - *to += cvt_length; - *to_left -= cvt_length; - - - return 0; -} - -static int -sjis_cstowcs( - XlcConv conv, - XPointer *from, - int *from_left, - XPointer *to, - int *to_left, - XPointer *args, - int num_args) -{ - XLCd lcd = (XLCd) conv->state; - const char *csptr = (const char *) *from; - wchar_t *bufptr = (wchar_t *) *to; - wchar_t *toptr = (wchar_t *) *to; - int csstr_len = *from_left; - int buf_len = *to_left; - wchar_t wch; - int length; - Ulong wc_shift_bits = (int)XLC_GENERIC(lcd, wc_shift_bits); - CodeSet codeset; - - if (num_args < 1) - return -1; - - if (!(codeset = GetCodeSetFromCharSet(lcd, (XlcCharSet) args[0]))) - return -1; - - csstr_len /= codeset->length; - if (csstr_len < buf_len) - buf_len = csstr_len; - - *to_left -= buf_len; - - if (bufptr) { - - toptr += buf_len; - *to = (XPointer) toptr; - - while (buf_len--) { - wch = (wchar_t) BIT8OFF(*csptr); - csptr++; - - length = codeset->length - 1; - while (length--) { - wch = (wch << wc_shift_bits) | BIT8OFF(*csptr); - csptr++; - } - *bufptr++ = wch | codeset->wc_encoding; - } - } - - *from_left -= csptr - *from; - *from = (XPointer) csptr; - - return 0; -} - - -/* - * Stripped down Direct CT converters for SJIS - * - */ - -#define BADCHAR(min_ch, c) (BIT8OFF(c) < (char)min_ch && BIT8OFF(c) != 0x0 && \ - BIT8OFF(c) != '\t' && BIT8OFF(c) != '\n' && \ - BIT8OFF(c) != 0x1b) - -typedef struct _CTDataRec { - int side; - int length; - char *name; - Ulong wc_encoding; - char *ct_encoding; - int ct_encoding_len; - int set_size; - Uchar min_ch; - Uchar ct_type; -} CTDataRec, *CTData; - -typedef struct _StateRec { - CTData GL_charset; - CTData GR_charset; - CTData charset; -} StateRec, *State; - -#define CT_STD 0 -#define CT_NSTD 1 -#define CT_DIR 2 -#define CT_EXT0 3 -#define CT_EXT1 4 -#define CT_EXT2 5 -#define CT_VER 6 - -static CTDataRec ctdata[] = -{ - { XlcGL, 1, "ISO8859-1:GL", 0, "\033(B" , 3, 0, 0, CT_STD }, - { XlcGR, 1, "ISO8859-1:GR", 0, "\033-A" , 3, 0, 0, CT_STD }, - { XlcGL, 1, "JISX0201.1976-0:GL", 0, "\033(J" , 3, 0, 0, CT_STD }, - { XlcGR, 1, "JISX0201.1976-0:GR", 0, "\033)I" , 3, 0, 0, CT_STD }, - { XlcGL, 2, "JISX0208.1983-0:GL", 0, "\033$(B" , 4, 0, 0, CT_STD }, - { XlcGR, 2, "JISX0208.1983-0:GR", 0, "\033$)B" , 4, 0, 0, CT_STD }, - { XlcGL, 2, "JISX0212.1990-0:GL", 0, "\033$(D" , 4, 0, 0, CT_STD }, - { XlcGR, 2, "JISX0212.1990-0:GR", 0, "\033$)D" , 4, 0, 0, CT_STD }, - { XlcUnknown, 0, "Ignore-Ext-Status?", 0, "\033#" , 2, 0, 0, CT_VER }, - { XlcUnknown, 0, "NonStd-?-OctetChar", 0, "\033%/0" , 4, 0, 0, CT_NSTD }, - { XlcUnknown, 1, "NonStd-1-OctetChar", 0, "\033%/1" , 4, 0, 0, CT_NSTD }, - { XlcUnknown, 2, "NonStd-2-OctetChar", 0, "\033%/2" , 4, 0, 0, CT_NSTD }, - { XlcUnknown, 3, "NonStd-3-OctetChar", 0, "\033%/3" , 4, 0, 0, CT_NSTD }, - { XlcUnknown, 4, "NonStd-4-OctetChar", 0, "\033%/4" , 4, 0, 0, CT_NSTD }, - { XlcUnknown, 0, "Extension-2" , 0, "\033%/" , 3, 0, 0, CT_EXT2 }, - { XlcUnknown, 0, "Extension-0" , 0, "\033" , 1, 0, 0, CT_EXT0 }, - { XlcUnknown, 0, "Begin-L-to-R-Text", 0, "\2331]" , 3, 0, 0, CT_DIR }, - { XlcUnknown, 0, "Begin-R-to-L-Text", 0, "\2332]" , 3, 0, 0, CT_DIR }, - { XlcUnknown, 0, "End-Of-String", 0, "\233]" , 2, 0, 0, CT_DIR }, - { XlcUnknown, 0, "Extension-1" , 0, "\233" , 1, 0, 0, CT_EXT1 }, -}; - -/* Note on above table: sjis_ctstombs() and sjis_ctstowcs() parser depends on - * certain table entries occuring in decreasing string length-- - * 1. CT_EXT2 and CT_EXT0 entries must occur after CT_NSTD entries. - * 2. CT_DIR and CT_EXT1 entries must occur after CT_DIR entries. - */ - -static CTData ctdptr[sizeof(ctdata) / sizeof(CTDataRec)]; -static CTData ctd_endp = ctdata + ((sizeof(ctdata) / sizeof(CTDataRec))) - 1; - -#define Ascii 0 -#define Kanji 1 -#define Kana 2 -#define Userdef 3 - -/* - * initCTptr(): Set ctptr[] to point at ctdata[], indexed by codeset_num. - */ -static void -initCTptr( - XLCd lcd) -{ - int num_codesets = XLC_GENERIC(lcd, codeset_num); - int num_charsets; - int i, j; - CodeSet *codesets = XLC_GENERIC(lcd, codeset_list); - CodeSet codeset; - XlcCharSet charset; - CTData ctdp = ctdata; - - ctdptr[Ascii] = &ctdata[0]; /* failsafe */ - - for (i = 0; i < num_codesets; i++) { - - codeset = codesets[i]; - num_charsets = codeset->num_charsets; - - for (j = 0; j < num_charsets; j++) { - - charset = codeset->charset_list[j]; - - for (ctdp = ctdata; ctdp <= ctd_endp; ctdp++) - - if (! strcmp(ctdp->name, charset->name)) { - - ctdptr[codeset->cs_num] = ctdp; - - ctdptr[codeset->cs_num]->wc_encoding = codeset->wc_encoding; - - ctdptr[codeset->cs_num]->set_size = - charset->set_size; - - ctdptr[codeset->cs_num]->min_ch = - charset->set_size == 94 && - (ctdptr[codeset->cs_num]->length > 1 || - ctdptr[codeset->cs_num]->side == XlcGR) ? 0x21 : 0x20; - - break; - } - } - } -} - - -static int -sjis_mbstocts( - XlcConv conv, - XPointer *from, - int *from_left, - XPointer *to, - int *to_left, - XPointer *args, - int num_args) -{ - int ct_len = *to_left; - int cs_num; - int clen; - int unconv_num = 0; - int num_conv; - const char *inbufptr = *from; - char *ctptr = *to; - XPointer ct_base = ctptr; - - StateRec ct_state; - CTData charset = NULL; - XLCd lcd = (XLCd) conv->state; - int codeset_num = XLC_GENERIC(lcd, codeset_num); - -/* Initial State: */ - - ct_state.GL_charset = ctdptr[Ascii]; - ct_state.GR_charset = NULL; - - if (*from_left > *to_left) - *from_left = *to_left; - - for (;*from_left > 0; (*from_left) -= charset->length) { - - if (iskanji(*inbufptr)) { - if (KANJI_CODESET >= codeset_num) { - unconv_num++; - (*from_left)--; - continue; - } - cs_num = Kanji; - charset = ctdptr[Kanji]; - if (!VALID_MULTIBYTE((Uchar) *(inbufptr+1))) - unconv_num++; - } - else if (isuserdef(*inbufptr)) { - if (USERDEF_CODESET >= codeset_num) { - unconv_num++; - (*from_left)--; - continue; - } - cs_num = Userdef; - charset = ctdptr[Userdef]; - if (!VALID_MULTIBYTE((Uchar) *(inbufptr+1))) - unconv_num++; - } - else if (isascii(*inbufptr)) { - if (ASCII_CODESET >= codeset_num) { - unconv_num++; - (*from_left)--; - continue; - } - cs_num = Ascii; - charset = ctdptr[Ascii]; - } - else if (iskana(*inbufptr)) { - if (KANA_CODESET >= codeset_num) { - unconv_num++; - (*from_left)--; - continue; - } - cs_num = Kana; - charset = ctdptr[Kana]; - } - else { /* unknown */ - unconv_num++; - (*from_left)--; - continue; - } - - if ( (charset->side == XlcGR && charset != ct_state.GR_charset) || - (charset->side == XlcGL && charset != ct_state.GL_charset) ) { - - ct_len -= ctdptr[cs_num]->ct_encoding_len; - if (ct_len < 0) { - unconv_num++; - break; - } - - if (ctptr) { - strcpy(ctptr, ctdptr[cs_num]->ct_encoding); - ctptr += ctdptr[cs_num]->ct_encoding_len; - } - } - - clen = charset->length; - do { - *ctptr++ = *inbufptr++; - } while (--clen); - - if (charset->length >= 2) { - sjis_to_jis((Uchar *)(ctptr-2), (Uchar *)(ctptr-1)); - if (BADCHAR(charset->min_ch, *(ctptr-2)) || - BADCHAR(charset->min_ch, *(ctptr-1))) { - unconv_num++; - continue; - } - } - else - if (BADCHAR(charset->min_ch, *(ctptr-1))) { - unconv_num++; - continue; - } - - if (charset->side == XlcGR) - ct_state.GR_charset = charset; - else if (charset->side == XlcGL) - ct_state.GL_charset = charset; - - if (charset->side == XlcGR) { - clen = charset->length; - do { - (*(Uchar *)(ctptr-clen)) = BIT8ON(*(Uchar *)(ctptr-clen)); - } while (--clen); - } - } - - *to = (XPointer)ctptr; - - if ((num_conv = (int)(ctptr - ct_base)) > 0) - (*to_left) -= num_conv; - - return unconv_num; - -} - - -#define byte1 (length == codeset->length - 1) -#define byte2 (byte1 == 0) - -static int -sjis_wcstocts( - XlcConv conv, - XPointer *from, - int *from_left, - XPointer *to, - int *to_left, - XPointer *args, - int num_args) -{ - int ct_len = *to_left; - const wchar_t *inbufptr = (const wchar_t *) *from; - char *ctptr = *to; - XPointer ct_base = ctptr; - wchar_t wch; - int length; - Uchar tmp; - Uchar t1 = 0; - int num_conv; - - StateRec ct_state; - XLCd lcd = (XLCd)conv->state; - CTData charset; - CodeSet codeset; - int unconv_num = 0; - Ulong wc_shift = XLC_GENERIC(lcd, wc_shift_bits); - -/* Initial State: */ - ct_state.GL_charset = ctdptr[0]; /* Codeset 0 */ - ct_state.GR_charset = NULL; - - if (*from_left > *to_left) - *from_left = *to_left; - - for (; *from_left > 0 ; (*from_left)-- ) { - - wch = *inbufptr++; - - if (!(codeset = wc_codeset(lcd, wch))) { - unconv_num++; - (*from_left)--; - continue; - } - - charset = ctdptr[codeset->cs_num]; - - length = codeset->length; - wch ^= (wchar_t)codeset->wc_encoding; - - if ( (charset->side == XlcGR && charset != ct_state.GR_charset) || - (charset->side == XlcGL && charset != ct_state.GL_charset) ) { - - ct_len -= ctdptr[codeset->cs_num]->ct_encoding_len; - if (ct_len < 0) { - unconv_num++; - break; - } - - if (ctptr) { - strcpy(ctptr, ctdptr[codeset->cs_num]->ct_encoding); - ctptr += ctdptr[codeset->cs_num]->ct_encoding_len; - } - - } - - if (charset->side == XlcGR) - ct_state.GR_charset = charset; - else if (charset->side == XlcGL) - ct_state.GL_charset = charset; - - do { - length--; - tmp = wch>>(wchar_t)( (Ulong)length * wc_shift); - - if (kana) { - if (BADCHAR(charset->min_ch, (char)tmp)) { - unconv_num++; - break; - } - *ctptr++ = (char)BIT8ON(tmp); - } - - else if (byte1 && (kanji || userdef)) { - t1 = tmp; - } - - else if (byte2 && (kanji || userdef)) { - if (BADCHAR(charset->min_ch, (char)t1) || - BADCHAR(charset->min_ch, (char)tmp)) { - unconv_num++; - break; - } - - *ctptr++ = (char)BIT8OFF(t1); - *ctptr++ = (char)BIT8OFF(tmp); - } - - else { - if (BADCHAR(charset->min_ch, (char)tmp)) { - unconv_num++; - break; - } - *ctptr++ = (char)tmp; - } - } while (length); - - } /* end for */ - - *to = (XPointer)ctptr; - - if ((num_conv = (int)(ctptr - ct_base)) > 0) - (*to_left) -= num_conv; - - return unconv_num; -} -#undef byte1 -#undef byte2 - -#define SKIP_I(str) while (*(str) >= 0x20 && *(str) <= 0x2f) (str)++; -#define SKIP_P(str) while (*(str) >= 0x30 && *(str) <= 0x3f) (str)++; - -static int -sjis_ctstombs( - XlcConv conv, - XPointer *from, - int *from_left, - XPointer *to, - int *to_left, - XPointer *args, - int num_args) -{ - const char *inbufptr = *from; - XPointer outbufptr = *to; - const char *inbuf_base; - XPointer outbuf_base = outbufptr; - int clen, length; - int unconv_num = 0; - int num_conv; - unsigned int ct_seglen = 0; - Uchar ct_type; - CTData ctdp = ctdata; /* default */ - CTData GL_ctdp = ctdp; /* GL ctdp save */ - CTData GR_ctdp = ctdp; /* GR ctdp save */ - - if (*from_left > *to_left) - *from_left = *to_left; - - for (length = ctdata[Ascii].length; *from_left > 0 ; (*from_left) -= length) - { - ct_type = CT_STD; - /* change GL/GR charset */ - if(ctdp->side == XlcGR && isleftside(*inbufptr)){ - /* select GL side */ - ctdp = GL_ctdp; - length = ctdp->length; - ct_type = ctdp->ct_type; - }else if(ctdp->side == XlcGL && isrightside(*inbufptr)){ - /* select GR side */ - ctdp = GR_ctdp; - length = ctdp->length; - ct_type = ctdp->ct_type; - } - if (*inbufptr == '\033' || *inbufptr == (char)'\233') { - - for (ctdp = ctdata; ctdp <= ctd_endp ; ctdp++) { - - if(!strncmp(inbufptr, ctdp->ct_encoding, ctdp->ct_encoding_len)) - { - inbufptr += ctdp->ct_encoding_len; - (*from_left) -= ctdp->ct_encoding_len; - if( ctdp->length ) { - length = ctdp->length; - if( *from_left < length ) { - *to = (XPointer)outbufptr; - *to_left -= outbufptr - outbuf_base; - return( unconv_num + *from_left ); - } - } - ct_type = ctdp->ct_type; - if(ctdp->side == XlcGL){ - GL_ctdp = ctdp; /* save GL ctdp */ - }else{ - GR_ctdp = ctdp; /* save GR ctdp */ - } - break; - } - } - if (ctdp > ctd_endp) /* failed to match CT sequence */ - unconv_num++; - } - -/* The following code insures that non-standard encodings, direction, extension, - * and version strings are ignored; subject to change in future. - */ - switch (ct_type) { - case CT_STD: - break; - case CT_EXT2: - inbufptr++; - (*from_left)--; - case CT_NSTD: - ct_seglen = (BIT8OFF(*inbufptr) << 7) + BIT8OFF(*(inbufptr+1)) + 2; - inbufptr += ct_seglen; - (*from_left) -= ct_seglen; - continue; - case CT_EXT0: - inbuf_base = inbufptr; - SKIP_I(inbufptr); - inbufptr++; - ct_seglen = (unsigned)(inbufptr - inbuf_base); - (*from_left) -= ct_seglen; - continue; - case CT_EXT1: - inbuf_base = inbufptr; - SKIP_P(inbufptr); - SKIP_I(inbufptr); - inbufptr++; - ct_seglen = (unsigned)(inbufptr - inbuf_base); - (*from_left) -= ct_seglen; - continue; - case CT_DIR: - continue; - case CT_VER: - inbufptr += 2; - (*from_left) -= 2; - continue; - } - - if (ctdp->side == XlcGL || isrightside (*inbufptr)) { - clen = length; - } else { - clen = 1; - *from_left += length - clen; - } - do { - Uchar mask = (length == 2) ? GL : -1; - *outbufptr++ = *inbufptr++ & mask; - } while (--clen); - - if (length >= 2) - jis_to_sjis((Uchar *)(outbufptr-2), (Uchar *)(outbufptr-1)); - } - - *to = (XPointer)outbufptr; - - if ((num_conv = (int)(outbufptr - outbuf_base)) > 0) - (*to_left) -= num_conv; - - return unconv_num; -} - - -static int -sjis_ctstowcs( - XlcConv conv, - XPointer *from, - int *from_left, - XPointer *to, - int *to_left, - XPointer *args, - int num_args) -{ - XLCd lcd = (XLCd)conv->state; - Ulong wc_shift_bits = XLC_GENERIC(lcd, wc_shift_bits); - const char *inbufptr = *from; - const char *inbuf_base; - wchar_t *outbufptr = (wchar_t *) *to; - wchar_t *outbuf_base = outbufptr; - int clen, length; - int num_conv; - int unconv_num = 0; - unsigned int ct_seglen = 0; - Uchar ct_type = 0; - int shift_mult; - wchar_t wc_tmp; - wchar_t wch; - Ulong wc_encoding; - CTData ctdp = ctdata; - CTData GL_ctdp = ctdp; /* GL ctdp save */ - CTData GR_ctdp = ctdp; /* GR ctdp save */ - - if (*from_left > *to_left) - *from_left = *to_left; - - for (length = ctdata[Ascii].length; *from_left > 0; (*from_left) -= length ) - { - ct_type = CT_STD; - /* change GL/GR charset */ - if(ctdp->side == XlcGR && isleftside(*inbufptr)){ - /* select GL side */ - ctdp = GL_ctdp; - length = ctdp->length; - ct_type = ctdp->ct_type; - }else if(ctdp->side == XlcGL && isrightside(*inbufptr)){ - /* select GR side */ - ctdp = GR_ctdp; - length = ctdp->length; - ct_type = ctdp->ct_type; - } - if (*inbufptr == '\033' || *inbufptr == (char)'\233') { - for (ctdp = ctdata; ctdp <= ctd_endp ; ctdp++) { - - if(!strncmp(inbufptr, ctdp->ct_encoding, ctdp->ct_encoding_len)) - { - inbufptr += ctdp->ct_encoding_len; - (*from_left) -= ctdp->ct_encoding_len; - if( ctdp->length ) { - length = ctdp->length; - if( *from_left < length ) { - *to = (XPointer)outbufptr; - *to_left -= outbufptr - outbuf_base; - return( unconv_num + *from_left ); - } - } - ct_type = ctdp->ct_type; - if(ctdp->side == XlcGL){ - GL_ctdp = ctdp; /* save GL ctdp */ - }else{ - GR_ctdp = ctdp; /* save GR ctdp */ - } - break; - } - } - if (ctdp > ctd_endp) /* failed to match CT sequence */ - unconv_num++; - } - -/* The following block of code insures that non-standard encodings, direction, - * extension, and version strings are ignored; subject to change in future. - */ - switch (ct_type) { - case CT_STD: - break; - case CT_EXT2: - inbufptr++; - (*from_left)--; - case CT_NSTD: - ct_seglen = (BIT8OFF(*inbufptr) << 7) + BIT8OFF(*(inbufptr+1)) + 2; - inbufptr += ct_seglen; - (*from_left) -= ct_seglen; - continue; - case CT_EXT0: - inbuf_base = inbufptr; - SKIP_I(inbufptr); - inbufptr++; - ct_seglen = (unsigned)(inbufptr - inbuf_base); - (*from_left) -= ct_seglen; - continue; - case CT_EXT1: - inbuf_base = inbufptr; - SKIP_P(inbufptr); - SKIP_I(inbufptr); - inbufptr++; - ct_seglen = (unsigned)(inbufptr - inbuf_base); - (*from_left) -= ct_seglen; - continue; - case CT_DIR: - continue; - case CT_VER: - inbufptr += 2; - (*from_left) -= 2; - continue; - } -#if !defined(__sony_news) || defined(SVR4) - if (ctdp->side == XlcGL || isrightside (*inbufptr)) { - clen = length; - wc_encoding = ctdp->wc_encoding; - } else { - clen = 1; - *from_left += length - clen; - wc_encoding = ctdptr[Ascii]->wc_encoding; - } - shift_mult = clen - 1; - wch = (wchar_t)0; - - do { - wc_tmp = BIT8OFF(*inbufptr++) << (wc_shift_bits * shift_mult); - wch |= wc_tmp; - shift_mult--; - } while (--clen); - *outbufptr++ = wch | wc_encoding; -#else - if( length == 1 ) - *outbufptr++ = (unsigned char)*inbufptr++; - else if( length == 2 ) { - unsigned short code; - code = (*inbufptr << 8) | *(inbufptr+1); - *outbufptr++ = jis2sjis( code ); - inbufptr += 2; - } -#endif - } - *to = (XPointer)outbufptr; - - if ((num_conv = (int)(outbufptr - outbuf_base)) > 0) - (*to_left) -= num_conv ; - - return unconv_num; - -} -#undef BADCHAR - -static void -close_converter( - XlcConv conv) -{ - Xfree(conv); -} - - -static XlcConv -create_conv( - XLCd lcd, - XlcConvMethods methods) -{ - XlcConv conv; - - conv = Xmalloc(sizeof(XlcConvRec)); - if (conv == NULL) - return (XlcConv) NULL; - - conv->methods = methods; - conv->state = (XPointer) lcd; - return conv; -} - - -enum { MBSTOCS, WCSTOCS, MBTOCS, CSTOMBS, CSTOWCS, MBSTOWCS, WCSTOMBS, - WCSTOCTS, MBSTOCTS, CTSTOMBS, CTSTOWCS }; - -static XlcConvMethodsRec conv_methods[] = { - {close_converter, sjis_mbstocs, NULL }, - {close_converter, sjis_wcstocs, NULL }, - {close_converter, sjis_mbtocs, NULL }, - {close_converter, sjis_cstombs, NULL }, - {close_converter, sjis_cstowcs, NULL }, - {close_converter, sjis_mbstowcs, NULL }, - {close_converter, sjis_wcstombs, NULL }, - {close_converter, sjis_wcstocts, NULL }, - {close_converter, sjis_mbstocts, NULL }, - {close_converter, sjis_ctstombs, NULL }, - {close_converter, sjis_ctstowcs, NULL }, -}; - - -static XlcConv -open_mbstocs( - XLCd from_lcd, - const char *from_type, - XLCd to_lcd, - const char *to_type) -{ - return create_conv(from_lcd, &conv_methods[MBSTOCS]); -} - -static XlcConv -open_wcstocs( - XLCd from_lcd, - const char *from_type, - XLCd to_lcd, - const char *to_type) -{ - return create_conv(from_lcd, &conv_methods[WCSTOCS]); -} - -static XlcConv -open_mbtocs( - XLCd from_lcd, - const char *from_type, - XLCd to_lcd, - const char *to_type) -{ - return create_conv(from_lcd, &conv_methods[MBTOCS]); -} - -static XlcConv -open_cstombs( - XLCd from_lcd, - const char *from_type, - XLCd to_lcd, - const char *to_type) -{ - return create_conv(from_lcd, &conv_methods[CSTOMBS]); -} - -static XlcConv -open_cstowcs( - XLCd from_lcd, - const char *from_type, - XLCd to_lcd, - const char *to_type) -{ - return create_conv(from_lcd, &conv_methods[CSTOWCS]); -} - -static XlcConv -open_mbstowcs( - XLCd from_lcd, - const char *from_type, - XLCd to_lcd, - const char *to_type) -{ - return create_conv(from_lcd, &conv_methods[MBSTOWCS]); -} - -static XlcConv -open_wcstombs( - XLCd from_lcd, - const char *from_type, - XLCd to_lcd, - const char *to_type) -{ - return create_conv(from_lcd, &conv_methods[WCSTOMBS]); -} - -static XlcConv -open_wcstocts( - XLCd from_lcd, - const char *from_type, - XLCd to_lcd, - const char *to_type) -{ - return create_conv(from_lcd, &conv_methods[WCSTOCTS]); -} - -static XlcConv -open_mbstocts( - XLCd from_lcd, - const char *from_type, - XLCd to_lcd, - const char *to_type) -{ - return create_conv(from_lcd, &conv_methods[MBSTOCTS]); -} - -static XlcConv -open_ctstombs( - XLCd from_lcd, - const char *from_type, - XLCd to_lcd, - const char *to_type) -{ - return create_conv(from_lcd, &conv_methods[CTSTOMBS]); -} - -static XlcConv -open_ctstowcs( - XLCd from_lcd, - const char *from_type, - XLCd to_lcd, - const char *to_type) -{ - return create_conv(from_lcd, &conv_methods[CTSTOWCS]); -} - -XLCd -_XlcSjisLoader( - const char *name) -{ - XLCd lcd; - - lcd = _XlcCreateLC(name, _XlcGenericMethods); - if (lcd == NULL) - return lcd; - - if (!XLC_PUBLIC_PART(lcd)->codeset || - (_XlcCompareISOLatin1(XLC_PUBLIC_PART(lcd)->codeset, "SJIS"))) { - _XlcDestroyLC(lcd); - return (XLCd) NULL; - } - - initCTptr(lcd); - - _XlcSetConverter(lcd, XlcNMultiByte, lcd, XlcNCharSet, open_mbstocs); - _XlcSetConverter(lcd, XlcNWideChar, lcd, XlcNCharSet, open_wcstocs); - _XlcSetConverter(lcd, XlcNCharSet, lcd, XlcNMultiByte, open_cstombs); - _XlcSetConverter(lcd, XlcNCharSet, lcd, XlcNWideChar, open_cstowcs); - _XlcSetConverter(lcd, XlcNMultiByte, lcd, XlcNChar, open_mbtocs); - -#ifndef FORCE_INDIRECT_CONVERTER - _XlcSetConverter(lcd, XlcNCompoundText, lcd, XlcNMultiByte, open_ctstombs); - _XlcSetConverter(lcd, XlcNCompoundText, lcd, XlcNWideChar, open_ctstowcs); - _XlcSetConverter(lcd, XlcNMultiByte, lcd, XlcNCompoundText, open_mbstocts); - _XlcSetConverter(lcd, XlcNMultiByte, lcd, XlcNWideChar, open_mbstowcs); - _XlcSetConverter(lcd, XlcNWideChar, lcd, XlcNCompoundText, open_wcstocts); - _XlcSetConverter(lcd, XlcNWideChar, lcd, XlcNMultiByte, open_wcstombs); -#endif - - _XlcAddUtf8Converters(lcd); - - return lcd; -} - -#else -typedef int dummy; -#endif /* X_LOCALE */ diff --git a/libX11/nls/C/XLC_LOCALE.pre b/libX11/nls/C/XLC_LOCALE.pre index 4653930d2..8334363df 100644 --- a/libX11/nls/C/XLC_LOCALE.pre +++ b/libX11/nls/C/XLC_LOCALE.pre @@ -33,10 +33,8 @@ wc_encoding_mask \x00008080 wc_shift_bits 8 #endif -#ifndef X_LOCALE use_stdc_env True force_convert_to_mb True -#endif XCOMM cs0 class cs0 { diff --git a/libX11/nls/armscii-8/XLC_LOCALE.pre b/libX11/nls/armscii-8/XLC_LOCALE.pre index 72013f711..4fab63948 100644 --- a/libX11/nls/armscii-8/XLC_LOCALE.pre +++ b/libX11/nls/armscii-8/XLC_LOCALE.pre @@ -51,9 +51,7 @@ wc_encoding_mask \x00008080 wc_shift_bits 8 #endif -#ifndef X_LOCALE use_stdc_env True -#endif XCOMM cs0 class cs0 { diff --git a/libX11/nls/compose.dir.pre b/libX11/nls/compose.dir.pre index fa267ce4a..455070f3d 100644 --- a/libX11/nls/compose.dir.pre +++ b/libX11/nls/compose.dir.pre @@ -386,7 +386,7 @@ ja_JP.UTF-8/Compose: ja_JP.UTF-8 en_US.UTF-8/Compose: ka_GE.UTF-8 en_US.UTF-8/Compose: kk_KZ.UTF-8 en_US.UTF-8/Compose: kl_GL.UTF-8 -km_KH.UTF-8/Compose: mk_KH.UTF-8 +km_KH.UTF-8/Compose: km_KH.UTF-8 en_US.UTF-8/Compose: kn_IN.UTF-8 ko_KR.UTF-8/Compose: ko_KR.UTF-8 en_US.UTF-8/Compose: ks_IN.UTF-8 diff --git a/libX11/nls/georgian-academy/XLC_LOCALE.pre b/libX11/nls/georgian-academy/XLC_LOCALE.pre index c51b1efa7..50bc3c8f4 100644 --- a/libX11/nls/georgian-academy/XLC_LOCALE.pre +++ b/libX11/nls/georgian-academy/XLC_LOCALE.pre @@ -51,9 +51,7 @@ wc_encoding_mask \x00008080 wc_shift_bits 8 #endif -#ifndef X_LOCALE use_stdc_env True -#endif XCOMM cs0 class cs0 { diff --git a/libX11/nls/georgian-ps/XLC_LOCALE.pre b/libX11/nls/georgian-ps/XLC_LOCALE.pre index 470dcae2d..9f03ebb99 100644 --- a/libX11/nls/georgian-ps/XLC_LOCALE.pre +++ b/libX11/nls/georgian-ps/XLC_LOCALE.pre @@ -51,9 +51,7 @@ wc_encoding_mask \x00008080 wc_shift_bits 8 #endif -#ifndef X_LOCALE use_stdc_env True -#endif XCOMM cs0 class cs0 { diff --git a/libX11/nls/ibm-cp1133/XLC_LOCALE.pre b/libX11/nls/ibm-cp1133/XLC_LOCALE.pre index f3b762c8f..cdc543a49 100644 --- a/libX11/nls/ibm-cp1133/XLC_LOCALE.pre +++ b/libX11/nls/ibm-cp1133/XLC_LOCALE.pre @@ -51,9 +51,7 @@ wc_encoding_mask \x00008080 wc_shift_bits 8 #endif -#ifndef X_LOCALE use_stdc_env True -#endif XCOMM cs0 class cs0 { diff --git a/libX11/nls/iscii-dev/XLC_LOCALE.pre b/libX11/nls/iscii-dev/XLC_LOCALE.pre index 1ddb1861c..e86315608 100644 --- a/libX11/nls/iscii-dev/XLC_LOCALE.pre +++ b/libX11/nls/iscii-dev/XLC_LOCALE.pre @@ -51,9 +51,7 @@ wc_encoding_mask \x00008080 wc_shift_bits 8 #endif -#ifndef X_LOCALE use_stdc_env True -#endif XCOMM cs0 class cs0 { diff --git a/libX11/nls/isiri-3342/XLC_LOCALE.pre b/libX11/nls/isiri-3342/XLC_LOCALE.pre index 59072fcea..4ec74f87e 100644 --- a/libX11/nls/isiri-3342/XLC_LOCALE.pre +++ b/libX11/nls/isiri-3342/XLC_LOCALE.pre @@ -51,9 +51,7 @@ wc_encoding_mask \x00008080 wc_shift_bits 8 #endif -#ifndef X_LOCALE use_stdc_env True -#endif XCOMM cs0 class cs0 { diff --git a/libX11/nls/iso8859-1/XLC_LOCALE.pre b/libX11/nls/iso8859-1/XLC_LOCALE.pre index af09009b3..11772b80d 100644 --- a/libX11/nls/iso8859-1/XLC_LOCALE.pre +++ b/libX11/nls/iso8859-1/XLC_LOCALE.pre @@ -42,10 +42,8 @@ wc_encoding_mask \x00008080 wc_shift_bits 8 #endif -#ifndef X_LOCALE use_stdc_env True force_convert_to_mb True -#endif XCOMM cs0 class cs0 { diff --git a/libX11/nls/iso8859-10/XLC_LOCALE.pre b/libX11/nls/iso8859-10/XLC_LOCALE.pre index a075c38c7..e6fc488b3 100644 --- a/libX11/nls/iso8859-10/XLC_LOCALE.pre +++ b/libX11/nls/iso8859-10/XLC_LOCALE.pre @@ -43,10 +43,8 @@ wc_encoding_mask \x00008080 wc_shift_bits 8 #endif -#ifndef X_LOCALE use_stdc_env True force_convert_to_mb True -#endif XCOMM cs0 class cs0 { diff --git a/libX11/nls/iso8859-11/XLC_LOCALE.pre b/libX11/nls/iso8859-11/XLC_LOCALE.pre index 4949e654b..ee5073de0 100644 --- a/libX11/nls/iso8859-11/XLC_LOCALE.pre +++ b/libX11/nls/iso8859-11/XLC_LOCALE.pre @@ -43,10 +43,8 @@ wc_encoding_mask \x00008080 wc_shift_bits 8 #endif -#ifndef X_LOCALE use_stdc_env True force_convert_to_mb True -#endif XCOMM cs0 class cs0 { diff --git a/libX11/nls/iso8859-13/XLC_LOCALE.pre b/libX11/nls/iso8859-13/XLC_LOCALE.pre index b12750048..82a5a0a2a 100644 --- a/libX11/nls/iso8859-13/XLC_LOCALE.pre +++ b/libX11/nls/iso8859-13/XLC_LOCALE.pre @@ -43,10 +43,8 @@ wc_encoding_mask \x00008080 wc_shift_bits 8 #endif -#ifndef X_LOCALE use_stdc_env True force_convert_to_mb True -#endif XCOMM cs0 class cs0 { diff --git a/libX11/nls/iso8859-14/XLC_LOCALE.pre b/libX11/nls/iso8859-14/XLC_LOCALE.pre index 287f757be..05bbd2456 100644 --- a/libX11/nls/iso8859-14/XLC_LOCALE.pre +++ b/libX11/nls/iso8859-14/XLC_LOCALE.pre @@ -43,10 +43,8 @@ wc_encoding_mask \x00008080 wc_shift_bits 8 #endif -#ifndef X_LOCALE use_stdc_env True force_convert_to_mb True -#endif XCOMM cs0 class cs0 { diff --git a/libX11/nls/iso8859-15/XLC_LOCALE.pre b/libX11/nls/iso8859-15/XLC_LOCALE.pre index 892187429..09ce32d36 100644 --- a/libX11/nls/iso8859-15/XLC_LOCALE.pre +++ b/libX11/nls/iso8859-15/XLC_LOCALE.pre @@ -49,10 +49,8 @@ wc_encoding_mask \x00008080 wc_shift_bits 8 #endif -#ifndef X_LOCALE use_stdc_env True force_convert_to_mb True -#endif XCOMM cs0 class cs0 { diff --git a/libX11/nls/iso8859-2/XLC_LOCALE.pre b/libX11/nls/iso8859-2/XLC_LOCALE.pre index 8c70e8a4e..d7c6170d3 100644 --- a/libX11/nls/iso8859-2/XLC_LOCALE.pre +++ b/libX11/nls/iso8859-2/XLC_LOCALE.pre @@ -43,10 +43,8 @@ wc_encoding_mask \x00008080 wc_shift_bits 8 #endif -#ifndef X_LOCALE use_stdc_env True force_convert_to_mb True -#endif XCOMM cs0 class cs0 { diff --git a/libX11/nls/iso8859-3/XLC_LOCALE.pre b/libX11/nls/iso8859-3/XLC_LOCALE.pre index e8f9e776f..5a79380f6 100644 --- a/libX11/nls/iso8859-3/XLC_LOCALE.pre +++ b/libX11/nls/iso8859-3/XLC_LOCALE.pre @@ -43,10 +43,8 @@ wc_encoding_mask \x00008080 wc_shift_bits 8 #endif -#ifndef X_LOCALE use_stdc_env True force_convert_to_mb True -#endif XCOMM cs0 class cs0 { diff --git a/libX11/nls/iso8859-4/XLC_LOCALE.pre b/libX11/nls/iso8859-4/XLC_LOCALE.pre index 9bf101d07..c349a6f8e 100644 --- a/libX11/nls/iso8859-4/XLC_LOCALE.pre +++ b/libX11/nls/iso8859-4/XLC_LOCALE.pre @@ -43,10 +43,8 @@ wc_encoding_mask \x00008080 wc_shift_bits 8 #endif -#ifndef X_LOCALE use_stdc_env True force_convert_to_mb True -#endif XCOMM cs0 class cs0 { diff --git a/libX11/nls/iso8859-5/XLC_LOCALE.pre b/libX11/nls/iso8859-5/XLC_LOCALE.pre index 5a78709ac..f271c6d54 100644 --- a/libX11/nls/iso8859-5/XLC_LOCALE.pre +++ b/libX11/nls/iso8859-5/XLC_LOCALE.pre @@ -43,10 +43,8 @@ wc_encoding_mask \x00008080 wc_shift_bits 8 #endif -#ifndef X_LOCALE use_stdc_env True force_convert_to_mb True -#endif XCOMM cs0 class cs0 { diff --git a/libX11/nls/iso8859-6/XLC_LOCALE.pre b/libX11/nls/iso8859-6/XLC_LOCALE.pre index 5b0d4d4a5..c2a5107f7 100644 --- a/libX11/nls/iso8859-6/XLC_LOCALE.pre +++ b/libX11/nls/iso8859-6/XLC_LOCALE.pre @@ -43,10 +43,8 @@ wc_encoding_mask \x00008080 wc_shift_bits 8 #endif -#ifndef X_LOCALE use_stdc_env True force_convert_to_mb True -#endif XCOMM cs0 class cs0 { diff --git a/libX11/nls/iso8859-7/XLC_LOCALE.pre b/libX11/nls/iso8859-7/XLC_LOCALE.pre index 9910bbe43..e1099ba2f 100644 --- a/libX11/nls/iso8859-7/XLC_LOCALE.pre +++ b/libX11/nls/iso8859-7/XLC_LOCALE.pre @@ -43,10 +43,8 @@ wc_encoding_mask \x00008080 wc_shift_bits 8 #endif -#ifndef X_LOCALE use_stdc_env True force_convert_to_mb True -#endif XCOMM cs0 class cs0 { diff --git a/libX11/nls/iso8859-8/XLC_LOCALE.pre b/libX11/nls/iso8859-8/XLC_LOCALE.pre index 20a9f8f2a..7c4ed314c 100644 --- a/libX11/nls/iso8859-8/XLC_LOCALE.pre +++ b/libX11/nls/iso8859-8/XLC_LOCALE.pre @@ -43,10 +43,8 @@ wc_encoding_mask \x00008080 wc_shift_bits 8 #endif -#ifndef X_LOCALE use_stdc_env True force_convert_to_mb True -#endif XCOMM cs0 class cs0 { diff --git a/libX11/nls/iso8859-9/XLC_LOCALE.pre b/libX11/nls/iso8859-9/XLC_LOCALE.pre index 4ffbce79f..2e0e66b01 100644 --- a/libX11/nls/iso8859-9/XLC_LOCALE.pre +++ b/libX11/nls/iso8859-9/XLC_LOCALE.pre @@ -43,10 +43,8 @@ wc_encoding_mask \x00008080 wc_shift_bits 8 #endif -#ifndef X_LOCALE use_stdc_env True force_convert_to_mb True -#endif XCOMM cs0 class cs0 { diff --git a/libX11/nls/iso8859-9e/XLC_LOCALE.pre b/libX11/nls/iso8859-9e/XLC_LOCALE.pre index cc7657850..8c252f1a0 100644 --- a/libX11/nls/iso8859-9e/XLC_LOCALE.pre +++ b/libX11/nls/iso8859-9e/XLC_LOCALE.pre @@ -55,10 +55,8 @@ wc_encoding_mask \x00008080 wc_shift_bits 8 #endif -#ifndef X_LOCALE use_stdc_env True force_convert_to_mb True -#endif XCOMM cs0 class cs0 { diff --git a/libX11/nls/ja.JIS/XLC_LOCALE.pre b/libX11/nls/ja.JIS/XLC_LOCALE.pre index 4b771aca2..be037774c 100644 --- a/libX11/nls/ja.JIS/XLC_LOCALE.pre +++ b/libX11/nls/ja.JIS/XLC_LOCALE.pre @@ -65,10 +65,8 @@ wc_encoding_mask \x00008080 wc_shift_bits 8 #endif -#ifndef X_LOCALE use_stdc_env True force_convert_to_mb True -#endif XCOMM cs0 class cs0 { diff --git a/libX11/nls/ja.SJIS/XLC_LOCALE.pre b/libX11/nls/ja.SJIS/XLC_LOCALE.pre index 671a98535..5064f1541 100644 --- a/libX11/nls/ja.SJIS/XLC_LOCALE.pre +++ b/libX11/nls/ja.SJIS/XLC_LOCALE.pre @@ -67,10 +67,8 @@ wc_encoding_mask \x00008080 wc_shift_bits 8 #endif -#ifndef X_LOCALE use_stdc_env True force_convert_to_mb True -#endif XCOMM cs0 class cs0 { diff --git a/libX11/nls/ja/XLC_LOCALE.pre b/libX11/nls/ja/XLC_LOCALE.pre index 99decf0a0..0e205a476 100644 --- a/libX11/nls/ja/XLC_LOCALE.pre +++ b/libX11/nls/ja/XLC_LOCALE.pre @@ -67,10 +67,8 @@ wc_encoding_mask \x00008080 wc_shift_bits 8 #endif -#ifndef X_LOCALE use_stdc_env True force_convert_to_mb True -#endif XCOMM cs0 class cs0 { diff --git a/libX11/nls/ko/XLC_LOCALE.pre b/libX11/nls/ko/XLC_LOCALE.pre index bda77b7f8..dc79e661b 100644 --- a/libX11/nls/ko/XLC_LOCALE.pre +++ b/libX11/nls/ko/XLC_LOCALE.pre @@ -43,10 +43,8 @@ wc_encoding_mask \x00008080 wc_shift_bits 8 #endif -#ifndef X_LOCALE use_stdc_env True force_convert_to_mb True -#endif XCOMM cs0 class cs0 { diff --git a/libX11/nls/koi8-c/XLC_LOCALE.pre b/libX11/nls/koi8-c/XLC_LOCALE.pre index 68cd02f3b..adf5db0b7 100644 --- a/libX11/nls/koi8-c/XLC_LOCALE.pre +++ b/libX11/nls/koi8-c/XLC_LOCALE.pre @@ -51,9 +51,7 @@ wc_encoding_mask \x00008080 wc_shift_bits 8 #endif -#ifndef X_LOCALE use_stdc_env True -#endif XCOMM cs0 class cs0 { diff --git a/libX11/nls/koi8-r/XLC_LOCALE.pre b/libX11/nls/koi8-r/XLC_LOCALE.pre index cda283e5d..1c487d784 100644 --- a/libX11/nls/koi8-r/XLC_LOCALE.pre +++ b/libX11/nls/koi8-r/XLC_LOCALE.pre @@ -52,9 +52,7 @@ wc_encoding_mask \x00008080 wc_shift_bits 8 #endif -#ifndef X_LOCALE use_stdc_env True -#endif XCOMM cs0 class cs0 { diff --git a/libX11/nls/koi8-u/XLC_LOCALE.pre b/libX11/nls/koi8-u/XLC_LOCALE.pre index 860438ad6..0516d98e1 100644 --- a/libX11/nls/koi8-u/XLC_LOCALE.pre +++ b/libX11/nls/koi8-u/XLC_LOCALE.pre @@ -51,9 +51,7 @@ wc_encoding_mask \x00008080 wc_shift_bits 8 #endif -#ifndef X_LOCALE use_stdc_env True -#endif XCOMM cs0 class cs0 { diff --git a/libX11/nls/locale.alias.pre b/libX11/nls/locale.alias.pre index 11d93f26e..1319492fb 100644 --- a/libX11/nls/locale.alias.pre +++ b/libX11/nls/locale.alias.pre @@ -732,8 +732,8 @@ kl_GL.iso88591: kl_GL.ISO8859-1 kl_GL.ISO-8859-1: kl_GL.ISO8859-1 kl_GL.iso885915: kl_GL.ISO8859-15 kl_GL.utf8: kl_GL.UTF-8 -km_KH: mk_KH.UTF-8 -km_KH.utf8: mk_KH.UTF-8 +km_KH: km_KH.UTF-8 +km_KH.utf8: km_KH.UTF-8 kn: kn_IN.UTF-8 kn_IN: kn_IN.UTF-8 kn_IN.utf8: kn_IN.UTF-8 diff --git a/libX11/nls/microsoft-cp1251/XLC_LOCALE.pre b/libX11/nls/microsoft-cp1251/XLC_LOCALE.pre index 77b9cd26e..c96d90858 100644 --- a/libX11/nls/microsoft-cp1251/XLC_LOCALE.pre +++ b/libX11/nls/microsoft-cp1251/XLC_LOCALE.pre @@ -56,10 +56,8 @@ wc_encoding_mask \x00008080 wc_shift_bits 8 #endif -#ifndef X_LOCALE use_stdc_env True force_convert_to_mb True -#endif XCOMM cs0 class cs0 { diff --git a/libX11/nls/microsoft-cp1255/XLC_LOCALE.pre b/libX11/nls/microsoft-cp1255/XLC_LOCALE.pre index a9bea9c6c..c1b009bae 100644 --- a/libX11/nls/microsoft-cp1255/XLC_LOCALE.pre +++ b/libX11/nls/microsoft-cp1255/XLC_LOCALE.pre @@ -56,10 +56,8 @@ wc_encoding_mask \x00008080 wc_shift_bits 8 #endif -#ifndef X_LOCALE use_stdc_env True force_convert_to_mb True -#endif XCOMM cs0 class cs0 { diff --git a/libX11/nls/microsoft-cp1256/XLC_LOCALE.pre b/libX11/nls/microsoft-cp1256/XLC_LOCALE.pre index 7fdb074f1..6165feedd 100644 --- a/libX11/nls/microsoft-cp1256/XLC_LOCALE.pre +++ b/libX11/nls/microsoft-cp1256/XLC_LOCALE.pre @@ -56,10 +56,8 @@ wc_encoding_mask \x00008080 wc_shift_bits 8 #endif -#ifndef X_LOCALE use_stdc_env True force_convert_to_mb True -#endif XCOMM cs0 class cs0 { diff --git a/libX11/nls/mulelao-1/XLC_LOCALE.pre b/libX11/nls/mulelao-1/XLC_LOCALE.pre index 45a63452f..24af6d8c5 100644 --- a/libX11/nls/mulelao-1/XLC_LOCALE.pre +++ b/libX11/nls/mulelao-1/XLC_LOCALE.pre @@ -51,9 +51,7 @@ wc_encoding_mask \x00008080 wc_shift_bits 8 #endif -#ifndef X_LOCALE use_stdc_env True -#endif XCOMM cs0 class cs0 { diff --git a/libX11/nls/nokhchi-1/XLC_LOCALE.pre b/libX11/nls/nokhchi-1/XLC_LOCALE.pre index 303867908..6f231cdef 100644 --- a/libX11/nls/nokhchi-1/XLC_LOCALE.pre +++ b/libX11/nls/nokhchi-1/XLC_LOCALE.pre @@ -51,9 +51,7 @@ wc_encoding_mask \x00008080 wc_shift_bits 8 #endif -#ifndef X_LOCALE use_stdc_env True -#endif XCOMM cs0 class cs0 { diff --git a/libX11/nls/tatar-cyr/XLC_LOCALE.pre b/libX11/nls/tatar-cyr/XLC_LOCALE.pre index aaa95059e..c7c5581fc 100644 --- a/libX11/nls/tatar-cyr/XLC_LOCALE.pre +++ b/libX11/nls/tatar-cyr/XLC_LOCALE.pre @@ -56,10 +56,8 @@ wc_encoding_mask \x00008080 wc_shift_bits 8 #endif -#ifndef X_LOCALE use_stdc_env True force_convert_to_mb True -#endif XCOMM cs0 class cs0 { diff --git a/libX11/nls/th_TH/XLC_LOCALE.pre b/libX11/nls/th_TH/XLC_LOCALE.pre index 8530f0b0d..3508c28ee 100644 --- a/libX11/nls/th_TH/XLC_LOCALE.pre +++ b/libX11/nls/th_TH/XLC_LOCALE.pre @@ -36,10 +36,8 @@ wc_encoding_mask \x00008080 wc_shift_bits 8 #endif -#ifndef X_LOCALE use_stdc_env True force_convert_to_mb True -#endif XCOMM cs0 class cs0 { diff --git a/libX11/nls/tscii-0/XLC_LOCALE.pre b/libX11/nls/tscii-0/XLC_LOCALE.pre index 617bfdfe3..bffffe493 100644 --- a/libX11/nls/tscii-0/XLC_LOCALE.pre +++ b/libX11/nls/tscii-0/XLC_LOCALE.pre @@ -51,9 +51,7 @@ wc_encoding_mask \x00008080 wc_shift_bits 8 #endif -#ifndef X_LOCALE use_stdc_env True -#endif XCOMM cs0 class cs0 { diff --git a/libX11/nls/vi_VN.tcvn/XLC_LOCALE.pre b/libX11/nls/vi_VN.tcvn/XLC_LOCALE.pre index d2897d6dd..90324fd30 100644 --- a/libX11/nls/vi_VN.tcvn/XLC_LOCALE.pre +++ b/libX11/nls/vi_VN.tcvn/XLC_LOCALE.pre @@ -51,9 +51,7 @@ wc_encoding_mask \x00008080 wc_shift_bits 8 #endif -#ifndef X_LOCALE use_stdc_env True -#endif XCOMM cs0 class cs0 { diff --git a/libX11/nls/vi_VN.viscii/XLC_LOCALE.pre b/libX11/nls/vi_VN.viscii/XLC_LOCALE.pre index 9df03005c..730996bb1 100644 --- a/libX11/nls/vi_VN.viscii/XLC_LOCALE.pre +++ b/libX11/nls/vi_VN.viscii/XLC_LOCALE.pre @@ -51,9 +51,7 @@ wc_encoding_mask \x00008080 wc_shift_bits 8 #endif -#ifndef X_LOCALE use_stdc_env True -#endif XCOMM cs0 class cs0 { diff --git a/libX11/nls/zh_CN/XI18N_OBJS b/libX11/nls/zh_CN/XI18N_OBJS index 3ad1a6230..24d066be8 100644 --- a/libX11/nls/zh_CN/XI18N_OBJS +++ b/libX11/nls/zh_CN/XI18N_OBJS @@ -3,7 +3,6 @@ # XI18N objects table for zh locale # # -XLC common/xlocale _XlcEucLoader # XLC_open XLC common/xlibi18n _XlcGenericLoader # XLC_open XIM common/ximcp _XimOpenIM _XimRegisterIMInstantiateCallback _XimUnRegisterIMInstantiateCallback # XIM_open XIM_register XIM_unregister XOM common/xomGeneric _XomGenericOpenOM # XOM_open diff --git a/libX11/nls/zh_CN/XLC_LOCALE.pre b/libX11/nls/zh_CN/XLC_LOCALE.pre index 0065d8df1..2e95d3042 100644 --- a/libX11/nls/zh_CN/XLC_LOCALE.pre +++ b/libX11/nls/zh_CN/XLC_LOCALE.pre @@ -38,10 +38,8 @@ state_depend_encoding False wc_encoding_mask \x30000000 wc_shift_bits 7 -#ifndef X_LOCALE use_stdc_env True force_convert_to_mb True -#endif XCOMM cs0 class cs0 { diff --git a/libX11/nls/zh_TW.big5/XLC_LOCALE.pre b/libX11/nls/zh_TW.big5/XLC_LOCALE.pre index b04d02318..b8866e8fc 100644 --- a/libX11/nls/zh_TW.big5/XLC_LOCALE.pre +++ b/libX11/nls/zh_TW.big5/XLC_LOCALE.pre @@ -41,10 +41,8 @@ state_depend_encoding False wc_encoding_mask \x00038000 wc_shift_bits 8 -#ifndef X_LOCALE use_stdc_env True force_convert_to_mb True -#endif XCOMM cs0 class cs0 { diff --git a/libX11/nls/zh_TW/XLC_LOCALE.pre b/libX11/nls/zh_TW/XLC_LOCALE.pre index d75ece85f..ffbb462ed 100644 --- a/libX11/nls/zh_TW/XLC_LOCALE.pre +++ b/libX11/nls/zh_TW/XLC_LOCALE.pre @@ -82,10 +82,8 @@ state_depend_encoding False wc_encoding_mask \x3fffc000 wc_shift_bits 7 -#ifndef X_LOCALE use_stdc_env True force_convert_to_mb True -#endif XCOMM cs0 class cs0 { diff --git a/libX11/specs/i18n/framework/framework.xml b/libX11/specs/i18n/framework/framework.xml index 632430181..c2aad8a19 100644 --- a/libX11/specs/i18n/framework/framework.xml +++ b/libX11/specs/i18n/framework/framework.xml @@ -248,8 +248,6 @@ Current implementation provides following locale loaders; <literallayout> <function>_XlcDefaultLoader</function> <function>_XlcGenericLoader</function> -<function>_XlcEucLoader</function> -<function>_XlcSjisLoader</function> <function>_XlcUtfLoader</function> <function>_XaixOsDynamicLoad</function> </literallayout> diff --git a/libX11/src/SetLocale.c b/libX11/src/SetLocale.c index c49cb2e4e..69c25c2c3 100644 --- a/libX11/src/SetLocale.c +++ b/libX11/src/SetLocale.c @@ -66,56 +66,6 @@ from The Open Group. #define MAXLOCALE 64 /* buffer size of locale name */ -#ifdef X_LOCALE - -/* alternative setlocale() for when the OS does not provide one */ - -char * -_Xsetlocale( - int category, - _Xconst char *name -) -{ - static char *xsl_name; - char *old_name; - XrmMethods methods; - XPointer state; - - if (category != LC_CTYPE && category != LC_ALL) - return NULL; - if (!name) { - if (xsl_name) - return xsl_name; - return "C"; - } - if (!*name) - name = getenv("LC_CTYPE"); - if (!name || !*name) - name = getenv("LANG"); - if (name && strlen(name) >= MAXLOCALE) - name = NULL; - if (!name || !*name || !_XOpenLC((char *) name)) - name = "C"; - old_name = xsl_name; - xsl_name = (char *)name; - methods = _XrmInitParseInfo(&state); - xsl_name = old_name; - if (!methods) - return NULL; - name = (*methods->lcname)(state); - xsl_name = strdup(name); - if (!xsl_name) { - xsl_name = old_name; - (*methods->destroy)(state); - return NULL; - } - if (old_name) - Xfree(old_name); - (*methods->destroy)(state); - return xsl_name; -} - -#else /* X_LOCALE */ #if defined(__APPLE__) || defined(__CYGWIN__) char * @@ -250,4 +200,3 @@ _XlcMapOSLocaleName( return osname; } -#endif /* X_LOCALE */ diff --git a/libX11/src/xlibi18n/Makefile.am b/libX11/src/xlibi18n/Makefile.am index 853953adc..28b3fe3ec 100644 --- a/libX11/src/xlibi18n/Makefile.am +++ b/libX11/src/xlibi18n/Makefile.am @@ -35,8 +35,7 @@ IM_LIBS = \ LC_LIBS = \ ${top_builddir}/modules/lc/def/libxlcDef.la \ ${top_builddir}/modules/lc/gen/libxlibi18n.la \ - ${top_builddir}/modules/lc/Utf8/libxlcUTF8Load.la \ - ${top_builddir}/modules/lc/xlocale/libxlocale.la + ${top_builddir}/modules/lc/Utf8/libxlcUTF8Load.la OM_LIBS = \ ${top_builddir}/modules/om/generic/libxomGeneric.la diff --git a/libX11/src/xlibi18n/XlcPubI.h b/libX11/src/xlibi18n/XlcPubI.h index a83d24305..2e6890d2f 100644 --- a/libX11/src/xlibi18n/XlcPubI.h +++ b/libX11/src/xlibi18n/XlcPubI.h @@ -232,12 +232,6 @@ extern void _XlcGetLocaleDataBase( int* /* count */ ); -#ifdef X_LOCALE -extern char * -_Xsetlocale( - int category, - _Xconst char *name); -#else #ifdef __APPLE__ extern char * _Xsetlocale( @@ -247,7 +241,6 @@ _Xsetlocale( extern char *_XlcMapOSLocaleName( char *osname, char *siname); -#endif extern int _Xmbstoutf8( diff --git a/libX11/src/xlibi18n/Xlcint.h b/libX11/src/xlibi18n/Xlcint.h index 95d1f5d5c..ebef95ba1 100644 --- a/libX11/src/xlibi18n/Xlcint.h +++ b/libX11/src/xlibi18n/Xlcint.h @@ -932,21 +932,6 @@ extern XLCd _XlcUtf8Loader( const char* name ); -/* The old EUC locale loader. */ -extern XLCd _XlcEucLoader( - const char* name -); - -/* The old SJIS locale loader. */ -extern XLCd _XlcSjisLoader( - const char* name -); - -/* The old ISO-2022-JP locale loader. */ -extern XLCd _XlcJisLoader( - const char* name -); - extern XLCd _XlcDynamicLoad( const char* name ); diff --git a/libX11/src/xlibi18n/lcInit.c b/libX11/src/xlibi18n/lcInit.c index 5aaf1832b..e3092f77d 100644 --- a/libX11/src/xlibi18n/lcInit.c +++ b/libX11/src/xlibi18n/lcInit.c @@ -106,11 +106,6 @@ Sun Microsystems, Inc. or its licensors is granted. #define USE_GENERIC_LOADER #define USE_DEFAULT_LOADER #define USE_UTF8_LOADER -#ifdef X_LOCALE -# define USE_EUC_LOADER -# define USE_SJIS_LOADER -# define USE_JIS_LOADER -#endif #endif /* @@ -138,18 +133,6 @@ _XlcInitLoader(void) _XlcAddLoader(_XlcUtf8Loader, XlcHead); #endif -#ifdef USE_EUC_LOADER - _XlcAddLoader(_XlcEucLoader, XlcHead); -#endif - -#ifdef USE_SJIS_LOADER - _XlcAddLoader(_XlcSjisLoader, XlcHead); -#endif - -#ifdef USE_JIS_LOADER - _XlcAddLoader(_XlcJisLoader, XlcHead); -#endif - #ifdef USE_DYNAMIC_LOADER _XlcAddLoader(_XlcDynamicLoader, XlcHead); #endif @@ -177,18 +160,6 @@ _XlcDeInitLoader(void) _XlcRemoveLoader(_XlcUtf8Loader); #endif -#ifdef USE_EUC_LOADER - _XlcRemoveLoader(_XlcEucLoader); -#endif - -#ifdef USE_SJIS_LOADER - _XlcRemoveLoader(_XlcSjisLoader); -#endif - -#ifdef USE_JIS_LOADER - _XlcRemoveLoader(_XlcJisLoader); -#endif - #ifdef USE_DYNAMIC_LOADER _XlcRemoveLoader(_XlcDynamicLoader); #endif diff --git a/libXinerama/configure.ac b/libXinerama/configure.ac index 17c5cb1fd..e2b60dbc8 100644 --- a/libXinerama/configure.ac +++ b/libXinerama/configure.ac @@ -40,13 +40,7 @@ XORG_DEFAULT_OPTIONS XORG_CHECK_MALLOC_ZERO # Obtain compiler/linker options for depedencies -PKG_CHECK_MODULES(XINERAMA, x11 xext xextproto [xineramaproto >= 1.1.99.1]) - -# Check for _XEatDataWords function that may be patched into older Xlib releases -SAVE_LIBS="$LIBS" -LIBS="$XINERAMA_LIBS" -AC_CHECK_FUNCS([_XEatDataWords]) -LIBS="$SAVE_LIBS" +PKG_CHECK_MODULES(XINERAMA, [x11 >= 1.6] xext xextproto [xineramaproto >= 1.1.99.1]) # Allow checking code with lint, sparse, etc. XORG_WITH_LINT diff --git a/libXinerama/src/Xinerama.c b/libXinerama/src/Xinerama.c index 67a35b578..8472ec5d0 100644 --- a/libXinerama/src/Xinerama.c +++ b/libXinerama/src/Xinerama.c @@ -35,20 +35,6 @@ Equipment Corporation. #include <X11/extensions/panoramiXproto.h> #include <X11/extensions/Xinerama.h> -#ifndef HAVE__XEATDATAWORDS -#include <X11/Xmd.h> /* for LONG64 on 64-bit platforms */ -#include <limits.h> - -static inline void _XEatDataWords(Display *dpy, unsigned long n) -{ -# ifndef LONG64 - if (n >= (ULONG_MAX >> 2)) - _XIOError(dpy); -# endif - _XEatData (dpy, n << 2); -} -#endif - static XExtensionInfo _panoramiX_ext_info_data; static XExtensionInfo *panoramiX_ext_info = &_panoramiX_ext_info_data; static const char *panoramiX_extension_name = PANORAMIX_PROTOCOL_NAME; diff --git a/libXmu/src/Atoms.c b/libXmu/src/Atoms.c index 6f0ca64a0..d80f57ad5 100644 --- a/libXmu/src/Atoms.c +++ b/libXmu/src/Atoms.c @@ -54,14 +54,8 @@ struct _AtomRec { DisplayRec* head; }; -#ifdef SUNSHLIB -#define STATIC -#else -#define STATIC static -#endif - #define DeclareAtom(atom,text) \ -STATIC struct _AtomRec __##atom = { text, NULL }; \ +static struct _AtomRec __##atom = { text, NULL }; \ AtomPtr _##atom = &__##atom; DeclareAtom(XA_ATOM_PAIR, "ATOM_PAIR" ) diff --git a/libXmu/src/Makefile.am b/libXmu/src/Makefile.am index 7e3185309..3aa88d12f 100644 --- a/libXmu/src/Makefile.am +++ b/libXmu/src/Makefile.am @@ -62,8 +62,7 @@ libXmu_la_SOURCES = \ UpdMapHint.c \ VisCmap.c \ WidgetNode.c \ - Xct.c \ - sharedlib.c + Xct.c if LINT diff --git a/libXmu/src/StrToCurs.c b/libXmu/src/StrToCurs.c index 6930e8213..7bb1da1cc 100644 --- a/libXmu/src/StrToCurs.c +++ b/libXmu/src/StrToCurs.c @@ -88,7 +88,7 @@ SOFTWARE. and broken object file formats that don't correctly distinguish references to procedures from references to data. */ -#if defined(SUNSHLIB) || defined(SVR4) +#if defined(SVR4) #define XMU_KLUDGE #endif diff --git a/libXmu/src/sharedlib.c b/libXmu/src/sharedlib.c deleted file mode 100644 index b47213df5..000000000 --- a/libXmu/src/sharedlib.c +++ /dev/null @@ -1,67 +0,0 @@ -/* - -Copyright 1991, 1998 The Open Group - -Permission to use, copy, modify, distribute, and sell this software and its -documentation for any purpose is hereby granted without fee, provided that -the above copyright notice appear in all copies and that both that -copyright notice and this permission notice appear in supporting -documentation. - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN -AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the name of The Open Group shall not be -used in advertising or otherwise to promote the sale, use or other dealings -in this Software without prior written authorization from The Open Group. - -*/ - -#if defined(SUNSHLIB) && !defined(SHAREDCODE) - -#ifdef HAVE_CONFIG_H -#include <config.h> -#endif -#include "Atoms.h" - -struct _AtomRec { - char *name; - struct _DisplayRec* head; -}; - -#define DeclareAtom(atom) \ -extern struct _AtomRec __##atom; \ -AtomPtr _##atom = &__##atom; - -DeclareAtom(XA_ATOM_PAIR) -DeclareAtom(XA_CHARACTER_POSITION) -DeclareAtom(XA_CLASS) -DeclareAtom(XA_CLIENT_WINDOW) -DeclareAtom(XA_CLIPBOARD) -DeclareAtom(XA_COMPOUND_TEXT) -DeclareAtom(XA_DECNET_ADDRESS) -DeclareAtom(XA_DELETE) -DeclareAtom(XA_FILENAME) -DeclareAtom(XA_HOSTNAME) -DeclareAtom(XA_IP_ADDRESS) -DeclareAtom(XA_LENGTH) -DeclareAtom(XA_LIST_LENGTH) -DeclareAtom(XA_NAME) -DeclareAtom(XA_NET_ADDRESS) -DeclareAtom(XA_NULL) -DeclareAtom(XA_OWNER_OS) -DeclareAtom(XA_SPAN) -DeclareAtom(XA_TARGETS) -DeclareAtom(XA_TEXT) -DeclareAtom(XA_TIMESTAMP) -DeclareAtom(XA_USER) -DeclareAtom(XA_UTF8_STRING) - -#endif /* SUNSHLIB */ diff --git a/mesalib/configure.ac b/mesalib/configure.ac index fb16338b8..434df6060 100644 --- a/mesalib/configure.ac +++ b/mesalib/configure.ac @@ -28,7 +28,7 @@ AC_SUBST([OSMESA_VERSION]) dnl Versions for external dependencies LIBDRM_REQUIRED=2.4.24 -LIBDRM_RADEON_REQUIRED=2.4.46 +LIBDRM_RADEON_REQUIRED=2.4.49 LIBDRM_INTEL_REQUIRED=2.4.38 LIBDRM_NVVIEUX_REQUIRED=2.4.33 LIBDRM_NOUVEAU_REQUIRED="2.4.33 libdrm >= 2.4.41" diff --git a/mesalib/docs/llvmpipe.html b/mesalib/docs/llvmpipe.html index 80f8a0176..d69590726 100644 --- a/mesalib/docs/llvmpipe.html +++ b/mesalib/docs/llvmpipe.html @@ -203,11 +203,65 @@ for posterior analysis, e.g.: We use LLVM-C bindings for now. They are not documented, but follow the C++ interfaces very closely, and appear to be complete enough for code generation. See - http://npcontemplation.blogspot.com/2008/06/secret-of-llvm-c-bindings.html - for a stand-alone example. See the llvm-c/Core.h file for reference. + <a href="http://npcontemplation.blogspot.com/2008/06/secret-of-llvm-c-bindings.html"> + this stand-alone example</a>. See the llvm-c/Core.h file for reference. </li> </ul> +<h1 id="recommended_reading">Recommended Reading</h1> + +<ul> + <li> + <p>Rasterization</p> + <ul> + <li><a href="http://www.cs.unc.edu/~olano/papers/2dh-tri/">Triangle Scan Conversion using 2D Homogeneous Coordinates</a></li> + <li><a href="http://www.drdobbs.com/parallel/rasterization-on-larrabee/217200602">Rasterization on Larrabee</a> (<a href="http://devmaster.net/posts/2887/rasterization-on-larrabee">DevMaster copy</a>)</li> + <li><a href="http://devmaster.net/posts/6133/rasterization-using-half-space-functions">Rasterization using half-space functions</a></li> + <li><a href="http://devmaster.net/posts/6145/advanced-rasterization">Advanced Rasterization</a></li> + <li><a href="http://fgiesen.wordpress.com/2013/02/17/optimizing-sw-occlusion-culling-index/">Optimizing Software Occlusion Culling</a></li> + </ul> + </li> + <li> + <p>Texture sampling</p> + <ul> + <li><a href="http://chrishecker.com/Miscellaneous_Technical_Articles#Perspective_Texture_Mapping">Perspective Texture Mapping</a></li> + <li><a href="http://www.flipcode.com/archives/Texturing_As_In_Unreal.shtml">Texturing As In Unreal</a></li> + <li><a href="http://www.gamasutra.com/view/feature/3301/runtime_mipmap_filtering.php">Run-Time MIP-Map Filtering</a></li> + <li><a href="http://alt.3dcenter.org/artikel/2003/10-26_a_english.php">Will "brilinear" filtering persist?</a></li> + <li><a href="http://ixbtlabs.com/articles2/gffx/nv40-rx800-3.html">Trilinear filtering</a></li> + <li><a href="http://devmaster.net/posts/12785/texture-swizzling">Texture Swizzling</a></li> + </ul> + </li> + <li> + <p>SIMD</p> + <ul> + <li><a href="http://www.cdl.uni-saarland.de/projects/wfv/#header4">Whole-Function Vectorization</a></li> + </ul> + </li> + <li> + <p>Optimization</p> + <ul> + <li><a href="http://www.drdobbs.com/optimizing-pixomatic-for-modern-x86-proc/184405807">Optimizing Pixomatic For Modern x86 Processors</a></li> + <li><a href="http://www.intel.com/content/www/us/en/architecture-and-technology/64-ia-32-architectures-optimization-manual.html">Intel 64 and IA-32 Architectures Optimization Reference Manual</a></li> + <li><a href="http://www.agner.org/optimize/">Software optimization resources</a></li> + <li><a href="http://software.intel.com/en-us/articles/intel-intrinsics-guide">Intel Intrinsics Guide</a><li> + </ul> + </li> + <li> + <p>LLVM</p> + <ul> + <li><a href="http://llvm.org/docs/LangRef.html">LLVM Language Reference Manual</a></li> + <li><a href="http://npcontemplation.blogspot.co.uk/2008/06/secret-of-llvm-c-bindings.html">The secret of LLVM C bindings</a></li> + </ul> + </li> + <li> + <p>Misc</p> + <ul> + <li><a href="http://msdn.microsoft.com/en-us/library/gg615082.aspx#architecture">WARP Architecture and Performance</a></li> + </ul> + </li> +</ul> + </div> </body> </html> diff --git a/mesalib/src/glsl/ast_to_hir.cpp b/mesalib/src/glsl/ast_to_hir.cpp index 01280478c..43cf49745 100644 --- a/mesalib/src/glsl/ast_to_hir.cpp +++ b/mesalib/src/glsl/ast_to_hir.cpp @@ -696,9 +696,15 @@ validate_assignment(struct _mesa_glsl_parse_state *state, * Note: Whole-array assignments are not permitted in GLSL 1.10, but this * is handled by ir_dereference::is_lvalue. */ - if (is_initializer && lhs_type->is_unsized_array() && rhs->type->is_array() + if (lhs_type->is_unsized_array() && rhs->type->is_array() && (lhs_type->element_type() == rhs->type->element_type())) { - return rhs; + if (is_initializer) { + return rhs; + } else { + _mesa_glsl_error(&loc, state, + "implicitly sized arrays cannot be assigned"); + return NULL; + } } /* Check for implicit conversion in GLSL 1.20 */ diff --git a/mesalib/src/glsl/ralloc.c b/mesalib/src/glsl/ralloc.c index e79dad764..36bc61fd0 100644 --- a/mesalib/src/glsl/ralloc.c +++ b/mesalib/src/glsl/ralloc.c @@ -53,8 +53,10 @@ _CRTIMP int _vscprintf(const char *format, va_list argptr); struct ralloc_header { +#ifdef DEBUG /* A canary value used to determine whether a pointer is ralloc'd. */ unsigned canary; +#endif struct ralloc_header *parent; @@ -78,7 +80,9 @@ get_header(const void *ptr) { ralloc_header *info = (ralloc_header *) (((char *) ptr) - sizeof(ralloc_header)); +#ifdef DEBUG assert(info->canary == CANARY); +#endif return info; } @@ -117,7 +121,9 @@ ralloc_size(const void *ctx, size_t size) add_child(parent, info); +#ifdef DEBUG info->canary = CANARY; +#endif return PTR_FROM_HEADER(info); } diff --git a/mesalib/src/mesa/main/fbobject.c b/mesalib/src/mesa/main/fbobject.c index 365062729..861885dd3 100644 --- a/mesalib/src/mesa/main/fbobject.c +++ b/mesalib/src/mesa/main/fbobject.c @@ -411,6 +411,7 @@ _mesa_update_texture_renderbuffer(struct gl_context *ctx, rb->InternalFormat = texImage->InternalFormat; rb->Width = texImage->Width2; rb->Height = texImage->Height2; + rb->Depth = texImage->Depth2; rb->NumSamples = texImage->NumSamples; rb->TexImage = texImage; diff --git a/mesalib/src/mesa/main/ffvertex_prog.c b/mesalib/src/mesa/main/ffvertex_prog.c index be6ac0f2a..074fbf9a3 100644 --- a/mesalib/src/mesa/main/ffvertex_prog.c +++ b/mesalib/src/mesa/main/ffvertex_prog.c @@ -1306,20 +1306,22 @@ static void build_fog( struct tnl_program *p ) switch (p->state->fog_distance_mode) { case FDM_EYE_RADIAL: /* Z = sqrt(Xe*Xe + Ye*Ye + Ze*Ze) */ - input = get_eye_position(p); - emit_op2(p, OPCODE_DP3, fog, WRITEMASK_X, input, input); - emit_op1(p, OPCODE_RSQ, fog, WRITEMASK_X, fog); - emit_op1(p, OPCODE_RCP, fog, WRITEMASK_X, fog); - break; + input = get_eye_position(p); + emit_op2(p, OPCODE_DP3, fog, WRITEMASK_X, input, input); + emit_op1(p, OPCODE_RSQ, fog, WRITEMASK_X, fog); + emit_op1(p, OPCODE_RCP, fog, WRITEMASK_X, fog); + break; case FDM_EYE_PLANE: /* Z = Ze */ - input = get_eye_position_z(p); - emit_op1(p, OPCODE_MOV, fog, WRITEMASK_X, input); - break; + input = get_eye_position_z(p); + emit_op1(p, OPCODE_MOV, fog, WRITEMASK_X, input); + break; case FDM_EYE_PLANE_ABS: /* Z = abs(Ze) */ - input = get_eye_position_z(p); - emit_op1(p, OPCODE_ABS, fog, WRITEMASK_X, input); - break; - default: assert(0); break; /* can't happen */ + input = get_eye_position_z(p); + emit_op1(p, OPCODE_ABS, fog, WRITEMASK_X, input); + break; + default: + assert(!"Bad fog mode in build_fog()"); + break; } } diff --git a/mesalib/src/mesa/state_tracker/st_extensions.c b/mesalib/src/mesa/state_tracker/st_extensions.c index e8d0902d9..cd10a0c9d 100644 --- a/mesalib/src/mesa/state_tracker/st_extensions.c +++ b/mesalib/src/mesa/state_tracker/st_extensions.c @@ -594,13 +594,9 @@ void st_init_extensions(struct st_context *st) /* Figure out GLSL support. */ glsl_feature_level = screen->get_param(screen, PIPE_CAP_GLSL_FEATURE_LEVEL); - if (glsl_feature_level >= 140) { - ctx->Const.GLSLVersion = 140; - } else if (glsl_feature_level >= 130) { - ctx->Const.GLSLVersion = 130; - } else { - ctx->Const.GLSLVersion = 120; - } + ctx->Const.GLSLVersion = glsl_feature_level; + if (glsl_feature_level >= 330) + ctx->Const.GLSLVersion = 330; _mesa_override_glsl_version(st->ctx); diff --git a/mesalib/src/mesa/state_tracker/st_glsl_to_tgsi.cpp b/mesalib/src/mesa/state_tracker/st_glsl_to_tgsi.cpp index 74b3e5b58..ac95968d6 100644 --- a/mesalib/src/mesa/state_tracker/st_glsl_to_tgsi.cpp +++ b/mesalib/src/mesa/state_tracker/st_glsl_to_tgsi.cpp @@ -4892,7 +4892,7 @@ st_translate_program( if (outputSemanticName[i] == TGSI_SEMANTIC_FOG) { /* force register to contain a fog coordinate in the form (F, 0, 0, 1). */ ureg_MOV(ureg, - ureg_writemask(t->outputs[i], TGSI_WRITEMASK_XYZW & ~TGSI_WRITEMASK_X), + ureg_writemask(t->outputs[i], TGSI_WRITEMASK_YZW), ureg_imm4f(ureg, 0.0f, 0.0f, 0.0f, 1.0f)); t->outputs[i] = ureg_writemask(t->outputs[i], TGSI_WRITEMASK_X); } diff --git a/mesalib/src/mesa/state_tracker/st_mesa_to_tgsi.c b/mesalib/src/mesa/state_tracker/st_mesa_to_tgsi.c index 7d79c6235..1c2abc122 100644 --- a/mesalib/src/mesa/state_tracker/st_mesa_to_tgsi.c +++ b/mesalib/src/mesa/state_tracker/st_mesa_to_tgsi.c @@ -1124,7 +1124,7 @@ st_translate_mesa_program( if (outputSemanticName[i] == TGSI_SEMANTIC_FOG) { /* force register to contain a fog coordinate in the form (F, 0, 0, 1). */ ureg_MOV(ureg, - ureg_writemask(t->outputs[i], TGSI_WRITEMASK_XYZW & ~TGSI_WRITEMASK_X), + ureg_writemask(t->outputs[i], TGSI_WRITEMASK_YZW), ureg_imm4f(ureg, 0.0f, 0.0f, 0.0f, 1.0f)); t->outputs[i] = ureg_writemask(t->outputs[i], TGSI_WRITEMASK_X); } diff --git a/mkfontscale/configure.ac b/mkfontscale/configure.ac index 971ae5c39..cc13259ab 100644 --- a/mkfontscale/configure.ac +++ b/mkfontscale/configure.ac @@ -54,7 +54,7 @@ fi # Checks for pkg-config packages PKG_CHECK_MODULES(MKFONTSCALE, fontenc freetype2) -PKG_CHECK_MODULES(X11, xproto) +PKG_CHECK_MODULES(X11, [xproto >= 7.0.25]) dnl Allow checking code with lint, sparse, etc. XORG_WITH_LINT diff --git a/mkfontscale/man/mkfontscale.man b/mkfontscale/man/mkfontscale.man index 4aa88ab04..cb1845817 100644 --- a/mkfontscale/man/mkfontscale.man +++ b/mkfontscale/man/mkfontscale.man @@ -38,6 +38,8 @@ mkfontscale \- create an index of scalable font files for X ] [ .B \-u | \-U ] [ +.B \-v +] [ .B \-\- ] [ .I directory @@ -132,6 +134,9 @@ is useful when generating encoding directories only. disable (\fI-u\fP) or enable (\fI-U\fP) indexing of ISO 10646:1 font encodings (default: enabled). .TP +.B \-v +print program version and exit. +.TP .B \-\- end of options. .SH SEE ALSO diff --git a/mkfontscale/mkfontscale.c b/mkfontscale/mkfontscale.c index a67f28338..a494f931d 100644 --- a/mkfontscale/mkfontscale.c +++ b/mkfontscale/mkfontscale.c @@ -34,6 +34,7 @@ #include <ctype.h> #include <X11/Xos.h> +#include <X11/Xfuncproto.h> #include <X11/fonts/fontenc.h> #include <ft2build.h> #include FT_FREETYPE_H @@ -112,15 +113,24 @@ static ListPtr encodingsToDo; static int reencodeLegacy; static char *encodingPrefix; static char *exclusionSuffix; +static char *ProgramName; -static void +static void _X_NORETURN _X_COLD usage(void) { - fprintf(stderr, + fprintf(stderr, "Usage:\n" "mkfontscale [ -b ] [ -s ] [ -o filename ] [-x suffix ]\n" - " [ -a encoding ] [ -f fuzz ] [ -l ] " + " [ -a encoding ] [ -f fuzz ] [ -l ]\n" " [ -e directory ] [ -p prefix ] [ -n ] [ -r ] \n" - " [-u] [-U] [ directory ]...\n"); + " [-u] [-U] [-v] [ directory ]...\n"); + exit(1); +} + +static void _X_NORETURN _X_COLD +missing_arg (const char *option) +{ + fprintf(stderr, "%s: %s requires an argument\n", ProgramName, option); + usage(); } int @@ -131,6 +141,7 @@ main(int argc, char **argv) int rc, ll = 0; char prefix[NPREFIX]; + ProgramName = argv[0]; encodingPrefix = NULL; exclusionSuffix = NULL; @@ -166,34 +177,31 @@ main(int argc, char **argv) break; } else if (strcmp(argv[argn], "-x") == 0) { if(argn >= argc - 1) { - usage(); - exit(1); + missing_arg("-x"); } exclusionSuffix = argv[argn + 1]; argn += 2; } else if(strcmp(argv[argn], "-a") == 0) { if(argn >= argc - 1) { - usage(); - exit(1); + missing_arg("-a"); } makeList(&argv[argn + 1], 1, encodings, 0); argn += 2; } else if(strcmp(argv[argn], "-p") == 0) { if(argn >= argc - 1) { - usage(); - exit(1); + missing_arg("-p"); } if(strlen(argv[argn + 1]) > NPREFIX - 1) { + fprintf(stderr, "%s: argument to -p cannot be longer than " + "%d characters\n", ProgramName, NPREFIX - 1); usage(); - exit(1); } free(encodingPrefix); encodingPrefix = dsprintf("%s", argv[argn + 1]); argn += 2; } else if(strcmp(argv[argn], "-e") == 0) { if(argn >= argc - 1) { - usage(); - exit(1); + missing_arg("-e"); } rc = readEncodings(encodingsToDo, argv[argn + 1]); if(rc < 0) @@ -222,15 +230,13 @@ main(int argc, char **argv) argn++; } else if(strcmp(argv[argn], "-o") == 0) { if(argn >= argc - 1) { - usage(); - exit(1); + missing_arg("-o"); } outfilename = argv[argn + 1]; argn += 2; } else if(strcmp(argv[argn], "-f") == 0) { if(argn >= argc - 1) { - usage(); - exit(1); + missing_arg("-f"); } bigEncodingFuzz = atof(argv[argn + 1]) / 100.0; argn += 2; @@ -238,9 +244,11 @@ main(int argc, char **argv) argn++; } else if (strcmp(argv[argn], "-n") == 0) { argn++; + } else if (strcmp(argv[argn], "-v") == 0) { + printf("%s\n", PACKAGE_STRING); + exit(0); } else { usage(); - exit(1); } } diff --git a/xorg-server/Xext/sync.c b/xorg-server/Xext/sync.c index dd18cdebd..2d58ea1fa 100644 --- a/xorg-server/Xext/sync.c +++ b/xorg-server/Xext/sync.c @@ -929,7 +929,7 @@ SyncCreateFenceFromFD(ClientPtr client, DrawablePtr pDraw, XID id, int fd, BOOL status = miSyncInitFenceFromFD(pDraw, pFence, fd, initially_triggered); if (status != Success) { - miSyncDestroyFence(pFence); + dixFreeObjectWithPrivates(pFence, PRIVATE_SYNC_FENCE); return status; } diff --git a/xorg-server/configure.ac b/xorg-server/configure.ac index 2f4edee54..6c4a609d7 100644 --- a/xorg-server/configure.ac +++ b/xorg-server/configure.ac @@ -26,9 +26,9 @@ dnl dnl Process this file with autoconf to create configure. AC_PREREQ(2.60) -AC_INIT([xorg-server], 1.14.99.902, [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg], xorg-server) -RELEASE_DATE="2013-11-14" -RELEASE_NAME="English Breakfast" +AC_INIT([xorg-server], 1.14.99.903, [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg], xorg-server) +RELEASE_DATE="2013-11-23" +RELEASE_NAME="Apple Pie" AC_CONFIG_SRCDIR([Makefile.am]) AM_INIT_AUTOMAKE([foreign dist-bzip2]) AC_USE_SYSTEM_EXTENSIONS diff --git a/xorg-server/glx/glxdri2.c b/xorg-server/glx/glxdri2.c index 1d74c8f5a..fbbd1fd95 100644 --- a/xorg-server/glx/glxdri2.c +++ b/xorg-server/glx/glxdri2.c @@ -371,6 +371,7 @@ __glXDRIscreenDestroy(__GLXscreen * baseScreen) { int i; + ScrnInfoPtr pScrn = xf86ScreenToScrn(baseScreen->pScreen); __GLXDRIscreen *screen = (__GLXDRIscreen *) baseScreen; (*screen->core->destroyScreen) (screen->driScreen); @@ -385,6 +386,9 @@ __glXDRIscreenDestroy(__GLXscreen * baseScreen) free(screen->driConfigs); } + pScrn->EnterVT = screen->enterVT; + pScrn->LeaveVT = screen->leaveVT; + free(screen); } diff --git a/xorg-server/hw/xnest/GCOps.c b/xorg-server/hw/xnest/GCOps.c index 7b1956de0..d00511d71 100644 --- a/xorg-server/hw/xnest/GCOps.c +++ b/xorg-server/hw/xnest/GCOps.c @@ -115,7 +115,6 @@ xnestGetImage(DrawablePtr pDrawable, int x, int y, int w, int h, ximage = XGetImage(xnestDisplay, xnestDrawable(pDrawable), x, y, w, h, planeMask, format); - XSync(xnestDisplay, False); XSetErrorHandler(old_handler); if (ximage) { diff --git a/xorg-server/miext/sync/Makefile.am b/xorg-server/miext/sync/Makefile.am index ac13c52e2..34961d5ff 100644 --- a/xorg-server/miext/sync/Makefile.am +++ b/xorg-server/miext/sync/Makefile.am @@ -5,7 +5,7 @@ AM_CFLAGS = $(DIX_CFLAGS) AM_CPPFLAGS = if XORG -sdk_HEADERS = misync.h misyncstr.h misyncshm.h +sdk_HEADERS = misync.h misyncstr.h misyncshm.h misyncfd.h endif XSHMFENCE_SRCS = misyncshm.c @@ -13,6 +13,7 @@ XSHMFENCE_SRCS = misyncshm.c libsync_la_SOURCES = \ misync.c \ misync.h \ + misyncfd.c \ misyncstr.h if XSHMFENCE diff --git a/xorg-server/miext/sync/misync.h b/xorg-server/miext/sync/misync.h index f63ec2b82..dc78c5fdb 100644 --- a/xorg-server/miext/sync/misync.h +++ b/xorg-server/miext/sync/misync.h @@ -42,8 +42,8 @@ typedef struct _syncScreenFuncs { SyncScreenDestroyFenceFunc DestroyFence; } SyncScreenFuncsRec, *SyncScreenFuncsPtr; -extern _X_EXPORT void +extern _X_EXPORT void miSyncScreenCreateFence(ScreenPtr pScreen, SyncFence * pFence, Bool initially_triggered); extern _X_EXPORT void diff --git a/xorg-server/miext/sync/misyncfd.c b/xorg-server/miext/sync/misyncfd.c new file mode 100644 index 000000000..93ff85fa8 --- /dev/null +++ b/xorg-server/miext/sync/misyncfd.c @@ -0,0 +1,99 @@ +/* + * Copyright © 2013 Keith Packard + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that copyright + * notice and this permission notice appear in supporting documentation, and + * that the name of the copyright holders not be used in advertising or + * publicity pertaining to distribution of the software without specific, + * written prior permission. The copyright holders make no representations + * about the suitability of this software for any purpose. It is provided "as + * is" without express or implied warranty. + * + * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + * EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR + * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, + * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE + * OF THIS SOFTWARE. + */ + +#ifdef HAVE_DIX_CONFIG_H +#include <dix-config.h> +#endif + +#include "scrnintstr.h" +#include "misync.h" +#include "misyncstr.h" +#include "misyncfd.h" +#include "pixmapstr.h" + +static DevPrivateKeyRec syncFdScreenPrivateKey; + +typedef struct _SyncFdScreenPrivate { + SyncFdScreenFuncsRec funcs; +} SyncFdScreenPrivateRec, *SyncFdScreenPrivatePtr; + +static inline SyncFdScreenPrivatePtr sync_fd_screen_priv(ScreenPtr pScreen) +{ + if (!dixPrivateKeyRegistered(&syncFdScreenPrivateKey)) + return NULL; + return dixLookupPrivate(&pScreen->devPrivates, &syncFdScreenPrivateKey); +} + +int +miSyncInitFenceFromFD(DrawablePtr pDraw, SyncFence *pFence, int fd, BOOL initially_triggered) + +{ + SyncFdScreenPrivatePtr priv = sync_fd_screen_priv(pDraw->pScreen); + + if (!priv) + return BadMatch; + + return (*priv->funcs.CreateFenceFromFd)(pDraw->pScreen, pFence, fd, initially_triggered); +} + +int +miSyncFDFromFence(DrawablePtr pDraw, SyncFence *pFence) +{ + SyncFdScreenPrivatePtr priv = sync_fd_screen_priv(pDraw->pScreen); + + if (!priv) + return -1; + + return (*priv->funcs.GetFenceFd)(pDraw->pScreen, pFence); +} + +_X_EXPORT Bool miSyncFdScreenInit(ScreenPtr pScreen, + const SyncFdScreenFuncsRec *funcs) +{ + SyncFdScreenPrivatePtr priv; + + /* Check to see if we've already been initialized */ + if (sync_fd_screen_priv(pScreen) != NULL) + return FALSE; + + if (!miSyncSetup(pScreen)) + return FALSE; + + if (!dixPrivateKeyRegistered(&syncFdScreenPrivateKey)) { + if (!dixRegisterPrivateKey(&syncFdScreenPrivateKey, PRIVATE_SCREEN, 0)) + return FALSE; + } + + priv = calloc(1, sizeof (SyncFdScreenPrivateRec)); + if (!priv) + return FALSE; + + /* Will require version checks when there are multiple versions + * of the funcs structure + */ + + priv->funcs = *funcs; + + dixSetPrivate(&pScreen->devPrivates, &syncFdScreenPrivateKey, priv); + + return TRUE; +} diff --git a/xorg-server/miext/sync/misyncfd.h b/xorg-server/miext/sync/misyncfd.h new file mode 100644 index 000000000..c1d05f948 --- /dev/null +++ b/xorg-server/miext/sync/misyncfd.h @@ -0,0 +1,45 @@ +/* + * Copyright © 2013 Keith Packard + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that copyright + * notice and this permission notice appear in supporting documentation, and + * that the name of the copyright holders not be used in advertising or + * publicity pertaining to distribution of the software without specific, + * written prior permission. The copyright holders make no representations + * about the suitability of this software for any purpose. It is provided "as + * is" without express or implied warranty. + * + * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + * EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR + * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, + * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE + * OF THIS SOFTWARE. + */ + +#ifndef _MISYNCFD_H_ +#define _MISYNCFD_H_ + +typedef int (*SyncScreenCreateFenceFromFdFunc) (ScreenPtr screen, + SyncFence *fence, + int fd, + Bool initially_triggered); + +typedef int (*SyncScreenGetFenceFdFunc) (ScreenPtr screen, + SyncFence *fence); + +#define SYNC_FD_SCREEN_FUNCS_VERSION 1 + +typedef struct _syncFdScreenFuncs { + int version; + SyncScreenCreateFenceFromFdFunc CreateFenceFromFd; + SyncScreenGetFenceFdFunc GetFenceFd; +} SyncFdScreenFuncsRec, *SyncFdScreenFuncsPtr; + +extern _X_EXPORT Bool miSyncFdScreenInit(ScreenPtr pScreen, + const SyncFdScreenFuncsRec *funcs); + +#endif /* _MISYNCFD_H_ */ diff --git a/xorg-server/miext/sync/misyncshm.c b/xorg-server/miext/sync/misyncshm.c index ddd15ae49..3f9350af5 100644 --- a/xorg-server/miext/sync/misyncshm.c +++ b/xorg-server/miext/sync/misyncshm.c @@ -28,6 +28,7 @@ #include "misync.h" #include "misyncstr.h" #include "misyncshm.h" +#include "misyncfd.h" #include "pixmapstr.h" #include <sys/mman.h> #include <unistd.h> @@ -118,13 +119,12 @@ miSyncShmScreenDestroyFence(ScreenPtr pScreen, SyncFence * pFence) miSyncScreenDestroyFence(pScreen, pFence); } -int -miSyncInitFenceFromFD(DrawablePtr pDraw, SyncFence *pFence, int fd, BOOL initially_triggered) - +static int +miSyncShmCreateFenceFromFd(ScreenPtr pScreen, SyncFence *pFence, int fd, Bool initially_triggered) { SyncShmFencePrivatePtr pPriv = SYNC_FENCE_PRIV(pFence); - miSyncInitFence(pDraw->pScreen, pFence, initially_triggered); + miSyncInitFence(pScreen, pFence, initially_triggered); pPriv->fence = xshmfence_map_shm(fd); if (pPriv->fence) { @@ -136,8 +136,8 @@ miSyncInitFenceFromFD(DrawablePtr pDraw, SyncFence *pFence, int fd, BOOL initial return BadValue; } -int -miSyncFDFromFence(DrawablePtr pDraw, SyncFence *pFence) +static int +miSyncShmGetFenceFd(ScreenPtr pScreen, SyncFence *pFence) { SyncShmFencePrivatePtr pPriv = SYNC_FENCE_PRIV(pFence); @@ -154,11 +154,17 @@ miSyncFDFromFence(DrawablePtr pDraw, SyncFence *pFence) return pPriv->fd; } +static const SyncFdScreenFuncsRec miSyncShmScreenFuncs = { + .version = SYNC_FD_SCREEN_FUNCS_VERSION, + .CreateFenceFromFd = miSyncShmCreateFenceFromFd, + .GetFenceFd = miSyncShmGetFenceFd +}; + _X_EXPORT Bool miSyncShmScreenInit(ScreenPtr pScreen) { SyncScreenFuncsPtr funcs; - if (!miSyncSetup(pScreen)) + if (!miSyncFdScreenInit(pScreen, &miSyncShmScreenFuncs)) return FALSE; if (!dixPrivateKeyRegistered(&syncShmFencePrivateKey)) { @@ -171,6 +177,7 @@ _X_EXPORT Bool miSyncShmScreenInit(ScreenPtr pScreen) funcs->CreateFence = miSyncShmScreenCreateFence; funcs->DestroyFence = miSyncShmScreenDestroyFence; + return TRUE; } diff --git a/xorg-server/miext/sync/misyncshm.h b/xorg-server/miext/sync/misyncshm.h index 4edbb50c3..23c001ab1 100644 --- a/xorg-server/miext/sync/misyncshm.h +++ b/xorg-server/miext/sync/misyncshm.h @@ -21,7 +21,7 @@ */ #ifndef _MISYNCSHM_H_ -#define _MISYNCSYM_H_ +#define _MISYNCSHM_H_ extern _X_EXPORT Bool miSyncShmScreenInit(ScreenPtr pScreen); |