diff options
Diffstat (limited to 'nx-X11/lib/X11/lcTxtPr.c')
-rw-r--r-- | nx-X11/lib/X11/lcTxtPr.c | 254 |
1 files changed, 0 insertions, 254 deletions
diff --git a/nx-X11/lib/X11/lcTxtPr.c b/nx-X11/lib/X11/lcTxtPr.c deleted file mode 100644 index cf25e3d0e..000000000 --- a/nx-X11/lib/X11/lcTxtPr.c +++ /dev/null @@ -1,254 +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 - */ - -#ifdef HAVE_CONFIG_H -#include <config.h> -#endif -#include "Xlibint.h" -#include "XlcPubI.h" -#include <nx-X11/Xutil.h> -#include <nx-X11/Xatom.h> -#include <stdio.h> - -static int -get_buf_size( - Bool is_wide_char, - XPointer list, - int count) -{ - int length = 0; - char **mb_list; - wchar_t **wc_list; - - if (list == NULL) - return 0; - - if (is_wide_char) { - wc_list = (wchar_t **) list; - for ( ; count-- > 0; wc_list++) { - if (*wc_list) - length += _Xwcslen(*wc_list) + 1; - } - length *= 5; /* XXX */ - } else { - mb_list = (char **) list; - for ( ; count-- > 0; mb_list++) { - if (*mb_list) - length += strlen(*mb_list) + 1; - } - length *= 3; /* XXX */ - } - length = (length / BUFSIZ + 1) * BUFSIZ; /* XXX */ - - return length; -} - -static int -_XTextListToTextProperty( - XLCd lcd, - Display *dpy, - const char *from_type, - XPointer list, - int count, - XICCEncodingStyle style, - XTextProperty *text_prop) -{ - Atom encoding; - XlcConv conv; - const char *to_type; - char **mb_list = NULL; - wchar_t **wc_list = NULL; - XPointer from; - char *to, *buf, *value; - int from_left, to_left, buf_len, nitems, unconv_num = 0, ret, i; - Bool is_wide_char = False; - - if (strcmp(XlcNWideChar, from_type) == 0) - is_wide_char = True; - - buf_len = get_buf_size(is_wide_char, list, count); - if ((buf = Xmalloc(buf_len)) == NULL) - return XNoMemory; - - switch (style) { - case XStringStyle: - case XStdICCTextStyle: - encoding = XA_STRING; - to_type = XlcNString; - break; - case XUTF8StringStyle: - encoding = XInternAtom(dpy, "UTF8_STRING", False); - to_type = XlcNUtf8String; - break; - case XCompoundTextStyle: - encoding = XInternAtom(dpy, "COMPOUND_TEXT", False); - to_type = XlcNCompoundText; - break; - case XTextStyle: - encoding = XInternAtom(dpy, XLC_PUBLIC(lcd, encoding_name), False); - to_type = XlcNMultiByte; - if (is_wide_char == False) { - nitems = 0; - mb_list = (char **) list; - to = buf; - for (i = 0; i < count && buf_len > 0; i++) { - if (*mb_list) - strcpy(to, *mb_list); - else - *to = '\0'; - from_left = (*mb_list ? strlen(*mb_list) : 0) + 1; - nitems += from_left; - to += from_left; - mb_list++; - } - unconv_num = 0; - goto done; - } - break; - default: - Xfree(buf); - return XConverterNotFound; - } - - if (count < 1) { - nitems = 0; - goto done; - } - -retry: - conv = _XlcOpenConverter(lcd, from_type, lcd, to_type); - if (conv == NULL) { - Xfree(buf); - return XConverterNotFound; - } - - if (is_wide_char) - wc_list = (wchar_t **) list; - else - mb_list = (char **) list; - - to = buf; - to_left = buf_len; - - unconv_num = 0; - - for (i = 1; to_left > 0; i++) { - if (is_wide_char) { - from = (XPointer) *wc_list; - from_left = _Xwcslen(*wc_list); - wc_list++; - } else { - from = (XPointer) *mb_list; - from_left = (*mb_list ? strlen(*mb_list) : 0); - mb_list++; - } - - ret = _XlcConvert(conv, &from, &from_left, (XPointer *) &to, &to_left, - NULL, 0); - - if (ret < 0) - continue; - - if (ret > 0 && style == XStdICCTextStyle && encoding == XA_STRING) { - _XlcCloseConverter(conv); - encoding = XInternAtom(dpy, "COMPOUND_TEXT", False); - to_type = XlcNCompoundText; - goto retry; - } - - unconv_num += ret; - *to++ = '\0'; - to_left--; - - if (i >= count) - break; - - _XlcResetConverter(conv); - } - - _XlcCloseConverter(conv); - - nitems = to - buf; -done: - if (nitems <= 0) - nitems = 1; - value = Xmalloc(nitems); - if (value == NULL) { - Xfree(buf); - return XNoMemory; - } - if (nitems == 1) - *value = 0; - else - memcpy(value, buf, nitems); - nitems--; - Xfree(buf); - - text_prop->value = (unsigned char *) value; - text_prop->encoding = encoding; - text_prop->format = 8; - text_prop->nitems = nitems; - - return unconv_num; -} - -int -_XmbTextListToTextProperty( - XLCd lcd, - Display *dpy, - char **list, - int count, - XICCEncodingStyle style, - XTextProperty *text_prop) -{ - return _XTextListToTextProperty(lcd, dpy, XlcNMultiByte, (XPointer) list, - count, style, text_prop); -} - -int -_XwcTextListToTextProperty( - XLCd lcd, - Display *dpy, - wchar_t **list, - int count, - XICCEncodingStyle style, - XTextProperty *text_prop) -{ - return _XTextListToTextProperty(lcd, dpy, XlcNWideChar, (XPointer) list, - count, style, text_prop); -} - -int -_Xutf8TextListToTextProperty( - XLCd lcd, - Display *dpy, - char **list, - int count, - XICCEncodingStyle style, - XTextProperty *text_prop) -{ - return _XTextListToTextProperty(lcd, dpy, XlcNUtf8String, (XPointer) list, - count, style, text_prop); -} |