diff options
Diffstat (limited to 'nx-X11/lib/X11/lcWrap.c')
-rw-r--r-- | nx-X11/lib/X11/lcWrap.c | 648 |
1 files changed, 0 insertions, 648 deletions
diff --git a/nx-X11/lib/X11/lcWrap.c b/nx-X11/lib/X11/lcWrap.c deleted file mode 100644 index 067c501ba..000000000 --- a/nx-X11/lib/X11/lcWrap.c +++ /dev/null @@ -1,648 +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. - -*/ -/* - * Copyright 1991 by the Open Software Foundation - * Copyright 1993 by the TOSHIBA Corp. - * - * 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 names of Open Software Foundation and TOSHIBA - * not be used in advertising or publicity pertaining to distribution of the - * software without specific, written prior permission. Open Software - * Foundation and TOSHIBA make no representations about the suitability of this - * software for any purpose. It is provided "as is" without express or - * implied warranty. - * - * OPEN SOFTWARE FOUNDATION AND TOSHIBA DISCLAIM ALL WARRANTIES WITH REGARD TO - * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND - * FITNESS, IN NO EVENT SHALL OPEN SOFTWARE FOUNDATIONN OR 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. - * - * M. Collins OSF - * - * Katsuhisa Yano TOSHIBA Corp. - */ - -#ifdef HAVE_CONFIG_H -#include <config.h> -#endif -#include <stdlib.h> -#include "Xlibint.h" -#include "Xlcint.h" -#include <nx-X11/Xlocale.h> -#include <nx-X11/Xos.h> -#ifdef WIN32 -#undef close -#endif -#include <nx-X11/Xutil.h> -#include "XlcPubI.h" - -#ifdef XTHREADS -LockInfoPtr _Xi18n_lock; -#endif - -char * -XSetLocaleModifiers( - const char *modifiers) -{ - XLCd lcd = _XlcCurrentLC(); - char *user_mods; - char *mapped_mods; - - if (!lcd) - return (char *) NULL; - if (!modifiers) - return lcd->core->modifiers; - user_mods = getenv("XMODIFIERS"); - mapped_mods = (*lcd->methods->map_modifiers) (lcd, user_mods, modifiers); - if (mapped_mods) { - Xfree(lcd->core->modifiers); - lcd->core->modifiers = mapped_mods; - } - return mapped_mods; -} - -Bool -XSupportsLocale(void) -{ - return _XlcCurrentLC() != (XLCd)NULL; -} - -Bool _XlcValidModSyntax( - const char * mods, - const char * const *valid_mods) -{ - int i; - const char * const *ptr; - - while (mods && (*mods == '@')) { - mods++; - if (*mods == '@') - break; - for (ptr = valid_mods; *ptr; ptr++) { - i = strlen(*ptr); - if (strncmp(mods, *ptr, i) || ((mods[i] != '=') -#ifdef WIN32 - && (mods[i] != '#') -#endif - )) - continue; - mods = strchr(mods+i+1, '@'); - break; - } - } - return !mods || !*mods; -} - -static const char *im_valid[] = {"im", (const char *)NULL}; - -/*ARGSUSED*/ -char * -_XlcDefaultMapModifiers( - XLCd lcd, - const char *user_mods, - const char *prog_mods) -{ - int i; - char *mods; - - if (!_XlcValidModSyntax(prog_mods, im_valid)) - return (char *)NULL; - if (!_XlcValidModSyntax(user_mods, im_valid)) - return (char *)NULL; - i = strlen(prog_mods) + 1; - if (user_mods) - i += strlen(user_mods); - mods = Xmalloc(i); - if (mods) { - strcpy(mods, prog_mods); - if (user_mods) - strcat(mods, user_mods); -#ifdef WIN32 - { - char *s; - for (s = mods; (s = strchr(s, '@')); s++) { - for (s++; *s && *s != '='; s++) { - if (*s == '#') { - *s = '='; - break; - } - } - } - } -#endif - } - return mods; -} - -typedef struct _XLCdListRec { - struct _XLCdListRec *next; - XLCd lcd; - int ref_count; -} XLCdListRec, *XLCdList; - -static XLCdList lcd_list = NULL; - -typedef struct _XlcLoaderListRec { - struct _XlcLoaderListRec *next; - XLCdLoadProc proc; -} XlcLoaderListRec, *XlcLoaderList; - -static XlcLoaderList loader_list = NULL; - -void -_XlcRemoveLoader( - XLCdLoadProc proc) -{ - XlcLoaderList loader, prev; - - if (loader_list == NULL) - return; - - prev = loader = loader_list; - if (loader->proc == proc) { - loader_list = loader->next; - Xfree(loader); - return; - } - - while ((loader = loader->next)) { - if (loader->proc == proc) { - prev->next = loader->next; - Xfree(loader); - return; - } - prev = loader; - } - - return; -} - -Bool -_XlcAddLoader( - XLCdLoadProc proc, - XlcPosition position) -{ - XlcLoaderList loader, last; - - _XlcRemoveLoader(proc); /* remove old loader, if exist */ - - loader = Xmalloc(sizeof(XlcLoaderListRec)); - if (loader == NULL) - return False; - - loader->proc = proc; - - if (loader_list == NULL) - position = XlcHead; - - if (position == XlcHead) { - loader->next = loader_list; - loader_list = loader; - } else { - last = loader_list; - while (last->next) - last = last->next; - - loader->next = NULL; - last->next = loader; - } - - return True; -} - -XLCd -_XOpenLC( - char *name) -{ - XLCd lcd; - XlcLoaderList loader; - XLCdList cur; -#if !defined(X_LOCALE) - int len; - char sinamebuf[256]; - char* siname = sinamebuf; -#endif - - if (name == NULL) { - name = setlocale (LC_CTYPE, (char *)NULL); -#if !defined(X_LOCALE) - /* - * _XlMapOSLocaleName will return the same string or a substring - * of name, so strlen(name) is okay - */ - if ((len = strlen(name)) >= sizeof sinamebuf) { - siname = Xmalloc (len + 1); - if (siname == NULL) - return NULL; - } - name = _XlcMapOSLocaleName(name, siname); -#endif - } - - _XLockMutex(_Xi18n_lock); - - /* - * search for needed lcd, if found return it - */ - for (cur = lcd_list; cur; cur = cur->next) { - if (!strcmp (cur->lcd->core->name, name)) { - lcd = cur->lcd; - cur->ref_count++; - goto found; - } - } - - if (!loader_list) - _XlcInitLoader(); - - /* - * not there, so try to get and add to list - */ - for (loader = loader_list; loader; loader = loader->next) { - lcd = (*loader->proc)(name); - if (lcd) { - cur = Xmalloc (sizeof(XLCdListRec)); - if (cur) { - cur->lcd = lcd; - cur->ref_count = 1; - cur->next = lcd_list; - lcd_list = cur; - } else { - (*lcd->methods->close)(lcd); - lcd = (XLCd) NULL; - } - goto found; - } - } - - lcd = NULL; - -found: - _XUnlockMutex(_Xi18n_lock); - -#if !defined(X_LOCALE) - if (siname != sinamebuf) Xfree(siname); -#endif - - return lcd; -} - -void -_XCloseLC( - XLCd lcd) -{ - XLCdList cur, *prev; - - for (prev = &lcd_list; (cur = *prev); prev = &cur->next) { - if (cur->lcd == lcd) { - if (--cur->ref_count < 1) { - (*lcd->methods->close)(lcd); - *prev = cur->next; - Xfree(cur); - } - break; - } - } - - if(loader_list) { - _XlcDeInitLoader(); - loader_list = NULL; - } -} - -/* - * Get the XLCd for the current locale - */ - -XLCd -_XlcCurrentLC(void) -{ - XLCd lcd; - static XLCd last_lcd = NULL; - - lcd = _XOpenLC((char *) NULL); - - if (last_lcd) - _XCloseLC(last_lcd); - - last_lcd = lcd; - - return lcd; -} - -XrmMethods -_XrmInitParseInfo( - XPointer *state) -{ - XLCd lcd = _XOpenLC((char *) NULL); - - if (lcd == (XLCd) NULL) - return (XrmMethods) NULL; - - return (*lcd->methods->init_parse_info)(lcd, state); -} - -int -XmbTextPropertyToTextList( - Display *dpy, - const XTextProperty *text_prop, - char ***list_ret, - int *count_ret) -{ - XLCd lcd = _XlcCurrentLC(); - - if (lcd == NULL) - return XLocaleNotSupported; - - return (*lcd->methods->mb_text_prop_to_list)(lcd, dpy, text_prop, list_ret, - count_ret); -} - -int -XwcTextPropertyToTextList( - Display *dpy, - const XTextProperty *text_prop, - wchar_t ***list_ret, - int *count_ret) -{ - XLCd lcd = _XlcCurrentLC(); - - if (lcd == NULL) - return XLocaleNotSupported; - - return (*lcd->methods->wc_text_prop_to_list)(lcd, dpy, text_prop, list_ret, - count_ret); -} - -int -Xutf8TextPropertyToTextList( - Display *dpy, - const XTextProperty *text_prop, - char ***list_ret, - int *count_ret) -{ - XLCd lcd = _XlcCurrentLC(); - - if (lcd == NULL) - return XLocaleNotSupported; - - return (*lcd->methods->utf8_text_prop_to_list)(lcd, dpy, text_prop, - list_ret, count_ret); -} - -int -XmbTextListToTextProperty( - Display *dpy, - char **list, - int count, - XICCEncodingStyle style, - XTextProperty *text_prop) -{ - XLCd lcd = _XlcCurrentLC(); - - if (lcd == NULL) - return XLocaleNotSupported; - - return (*lcd->methods->mb_text_list_to_prop)(lcd, dpy, list, count, style, - text_prop); -} - -int -XwcTextListToTextProperty( - Display *dpy, - wchar_t **list, - int count, - XICCEncodingStyle style, - XTextProperty *text_prop) -{ - XLCd lcd = _XlcCurrentLC(); - - if (lcd == NULL) - return XLocaleNotSupported; - - return (*lcd->methods->wc_text_list_to_prop)(lcd, dpy, list, count, style, - text_prop); -} - -int -Xutf8TextListToTextProperty( - Display *dpy, - char **list, - int count, - XICCEncodingStyle style, - XTextProperty *text_prop) -{ - XLCd lcd = _XlcCurrentLC(); - - if (lcd == NULL) - return XLocaleNotSupported; - - return (*lcd->methods->utf8_text_list_to_prop)(lcd, dpy, list, count, - style, text_prop); -} - -void -XwcFreeStringList( - wchar_t **list) -{ - XLCd lcd = _XlcCurrentLC(); - - if (lcd == NULL) - return; - - (*lcd->methods->wc_free_string_list)(lcd, list); -} - -const char * -XDefaultString(void) -{ - XLCd lcd = _XlcCurrentLC(); - - if (lcd == NULL) - return (char *) NULL; - - return (*lcd->methods->default_string)(lcd); -} - -void -_XlcCopyFromArg( - char *src, - char *dst, - int size) -{ - if (size == sizeof(long)) - *((long *) dst) = (long) src; -#ifdef LONG64 - else if (size == sizeof(int)) - *((int *) dst) = (int)(long) src; -#endif - else if (size == sizeof(short)) - *((short *) dst) = (short)(long) src; - else if (size == sizeof(char)) - *((char *) dst) = (char)(long) src; - else if (size == sizeof(XPointer)) - *((XPointer *) dst) = (XPointer) src; - else if (size > sizeof(XPointer)) - memcpy(dst, (char *) src, size); - else - memcpy(dst, (char *) &src, size); -} - -void -_XlcCopyToArg( - char *src, - char **dst, - int size) -{ - /* FIXME: - On Big Endian machines, this behaves differently than _XCopyToArg. */ - if (size == sizeof(long)) - *((long *) *dst) = *((long *) src); -#ifdef LONG64 - else if (size == sizeof(int)) - *((int *) *dst) = *((int *) src); -#endif - else if (size == sizeof(short)) - *((short *) *dst) = *((short *) src); - else if (size == sizeof(char)) - *((char *) *dst) = *((char *) src); - else if (size == sizeof(XPointer)) - *((XPointer *) *dst) = *((XPointer *) src); - else - memcpy(*dst, src, size); -} - -void -_XlcCountVaList( - va_list var, - int *count_ret) -{ - int count; - - for (count = 0; va_arg(var, char *); count++) - (void)va_arg(var, XPointer); - - *count_ret = count; -} - -void -_XlcVaToArgList( - va_list var, - int count, - XlcArgList *args_ret) -{ - XlcArgList args; - - *args_ret = args = Xmalloc(sizeof(XlcArg) * count); - if (args == (XlcArgList) NULL) - return; - - for ( ; count-- > 0; args++) { - args->name = va_arg(var, char *); - args->value = va_arg(var, XPointer); - } -} - -void -_XlcCompileResourceList( - XlcResourceList resources, - int num_resources) -{ - for ( ; num_resources-- > 0; resources++) - resources->xrm_name = XrmPermStringToQuark(resources->name); -} - -char * -_XlcGetValues( - XPointer base, - XlcResourceList resources, - int num_resources, - XlcArgList args, - int num_args, - unsigned long mask) -{ - XlcResourceList res; - XrmQuark xrm_name; - int count; - - for ( ; num_args-- > 0; args++) { - res = resources; - count = num_resources; - xrm_name = XrmPermStringToQuark(args->name); - - for ( ; count-- > 0; res++) { - if (xrm_name == res->xrm_name && (mask & res->mask)) { - _XlcCopyToArg(base + res->offset, &args->value, res->size); - break; - } - } - - if (count < 0) - return args->name; - } - - return NULL; -} - -char * -_XlcSetValues( - XPointer base, - XlcResourceList resources, - int num_resources, - XlcArgList args, - int num_args, - unsigned long mask) -{ - XlcResourceList res; - XrmQuark xrm_name; - int count; - - for ( ; num_args-- > 0; args++) { - res = resources; - count = num_resources; - xrm_name = XrmPermStringToQuark(args->name); - - for ( ; count-- > 0; res++) { - if (xrm_name == res->xrm_name && (mask & res->mask)) { - _XlcCopyFromArg(args->value, base + res->offset, res->size); - break; - } - } - - if (count < 0) - return args->name; - } - - return NULL; -} |