diff options
author | Seemant Kulleen <seemant@gentoo.org> | 2003-12-01 16:38:21 +0000 |
---|---|---|
committer | Seemant Kulleen <seemant@gentoo.org> | 2003-12-01 16:38:21 +0000 |
commit | a821e91968dc14ea23d751c94a1010a2fb57bff0 (patch) | |
tree | adb2b863ef88a05d1ac665dd76431af3cfdd3d4c /media-sound/xmms/files | |
parent | complete debloating (diff) | |
download | gentoo-2-a821e91968dc14ea23d751c94a1010a2fb57bff0.tar.gz gentoo-2-a821e91968dc14ea23d751c94a1010a2fb57bff0.tar.bz2 gentoo-2-a821e91968dc14ea23d751c94a1010a2fb57bff0.zip |
complete debloating
Diffstat (limited to 'media-sound/xmms/files')
-rw-r--r-- | media-sound/xmms/files/digest-xmms-1.2.7-r20 | 1 | ||||
-rw-r--r-- | media-sound/xmms/files/digest-xmms-1.2.7-r23 | 1 | ||||
-rw-r--r-- | media-sound/xmms/files/digest-xmms-1.2.7-r25 | 1 | ||||
-rw-r--r-- | media-sound/xmms/files/xmms-1.2.7-mpg123j.patch | 320 | ||||
-rw-r--r-- | media-sound/xmms/files/xmms-diskwriter-audio.patch | 35 | ||||
-rw-r--r-- | media-sound/xmms/files/xmms-fhs-skinsdir.patch | 10 | ||||
-rw-r--r-- | media-sound/xmms/files/xmms-gettext-fix.patch | 11 | ||||
-rw-r--r-- | media-sound/xmms/files/xmms-ipv6-20020408-mmx.patch | 354 | ||||
-rw-r--r-- | media-sound/xmms/files/xmms-ipv6-20020408-nommx.patch | 354 | ||||
-rw-r--r-- | media-sound/xmms/files/xmms-jump.patch | 76 | ||||
-rw-r--r-- | media-sound/xmms/files/xmms-nptl.patch | 43 | ||||
-rw-r--r-- | media-sound/xmms/files/xmms-russian-charset.patch | 2152 | ||||
-rw-r--r-- | media-sound/xmms/files/xmms-sigterm.patch | 30 |
13 files changed, 3 insertions, 3385 deletions
diff --git a/media-sound/xmms/files/digest-xmms-1.2.7-r20 b/media-sound/xmms/files/digest-xmms-1.2.7-r20 index 89cc7eba5fd4..cbca5a363618 100644 --- a/media-sound/xmms/files/digest-xmms-1.2.7-r20 +++ b/media-sound/xmms/files/digest-xmms-1.2.7-r20 @@ -1,2 +1,3 @@ MD5 8aa14a305d1eeb1bb53dba2197ba695a xmms-1.2.7.tar.gz 2860908 +MD5 7c2ff3f528f3e5d20300ae1efb64f41f xmms-1.2.7-gentoo-patches-0.1.tar.bz2 29236 MD5 daea40648c3ae296597dcd3e78500279 xmms-1.2.7-mmx.patch.gz 14990 diff --git a/media-sound/xmms/files/digest-xmms-1.2.7-r23 b/media-sound/xmms/files/digest-xmms-1.2.7-r23 index 89cc7eba5fd4..cbca5a363618 100644 --- a/media-sound/xmms/files/digest-xmms-1.2.7-r23 +++ b/media-sound/xmms/files/digest-xmms-1.2.7-r23 @@ -1,2 +1,3 @@ MD5 8aa14a305d1eeb1bb53dba2197ba695a xmms-1.2.7.tar.gz 2860908 +MD5 7c2ff3f528f3e5d20300ae1efb64f41f xmms-1.2.7-gentoo-patches-0.1.tar.bz2 29236 MD5 daea40648c3ae296597dcd3e78500279 xmms-1.2.7-mmx.patch.gz 14990 diff --git a/media-sound/xmms/files/digest-xmms-1.2.7-r25 b/media-sound/xmms/files/digest-xmms-1.2.7-r25 index 89cc7eba5fd4..cbca5a363618 100644 --- a/media-sound/xmms/files/digest-xmms-1.2.7-r25 +++ b/media-sound/xmms/files/digest-xmms-1.2.7-r25 @@ -1,2 +1,3 @@ MD5 8aa14a305d1eeb1bb53dba2197ba695a xmms-1.2.7.tar.gz 2860908 +MD5 7c2ff3f528f3e5d20300ae1efb64f41f xmms-1.2.7-gentoo-patches-0.1.tar.bz2 29236 MD5 daea40648c3ae296597dcd3e78500279 xmms-1.2.7-mmx.patch.gz 14990 diff --git a/media-sound/xmms/files/xmms-1.2.7-mpg123j.patch b/media-sound/xmms/files/xmms-1.2.7-mpg123j.patch deleted file mode 100644 index bdd6883905e9..000000000000 --- a/media-sound/xmms/files/xmms-1.2.7-mpg123j.patch +++ /dev/null @@ -1,320 +0,0 @@ -diff -urN xmms-1.2.7/Input/mpg123/common.c xmms-1.2.7-mpg123-iconv/Input/mpg123/common.c ---- xmms-1.2.7/Input/mpg123/common.c 2002-02-20 23:17:30.000000000 +0900 -+++ xmms-1.2.7-mpg123-iconv/Input/mpg123/common.c 2003-02-20 05:06:29.000000000 +0900 -@@ -16,6 +16,16 @@ - #endif - #endif - -+#ifdef HAVE_ICONV_OPEN -+#include <iconv.h> -+#endif -+ -+#include <errno.h> -+ -+#ifdef HAVE_CODESET -+#include <langinfo.h> -+#endif -+ - #include "mpg123.h" - #include "id3.h" - #include "id3_header.h" -@@ -23,6 +33,13 @@ - /* max = 1728 */ - #define MAXFRAMESIZE 1792 - -+/* Japanese charset list for mpg123_lconv() */ -+#define MAXCHARSET 6 -+char *mpg123_lconv_from[MAXCHARSET] = -+{ -+ "ISO-2022-JP", "SJIS", "EUCJP", "UTF8", "UTF16", "UTF16BE" -+}; -+ - int tabsel_123[2][3][16] = - { - { -@@ -718,3 +735,95 @@ - return 0; - return ((double) stream_tell()) / mpg123_info->filesize; - } -+ -+gchar *mpg123_lconv(char *string, char *outto, size_t allow_trunc) -+{ -+#if !defined(HAVE_ICONV_OPEN) || !defined(HAVE_CODESET) -+ return g_strdup(string); -+#else -+ size_t length, bufsize, outleft, inleft, ret; -+ iconv_t cd; -+ char *out, *outptr, *inptr; -+ char *from, *to, *froml; -+ int i; -+ -+ if (!string) -+ return NULL; -+ length = strlen(string); -+ -+ if (outto) { -+ froml = nl_langinfo(CODESET); -+ to = outto; -+ } else { -+ froml = NULL; -+ to = nl_langinfo(CODESET); -+ } -+ if ((outto && !froml) || (!outto && !to)) { -+ g_warning("mpg123_lconv(): Cannot get current character set."); -+ return g_strdup(string); -+ } -+ -+ /* Iconv() requires extra work area to outbuf. -+ Round outbuf_size up to 3 multiple of 4 */ -+ bufsize = (length + 11) & ~3; -+ out = g_malloc(bufsize); -+ if (!out) { -+ g_warning("mpg123_lconv(): Cannot allocate %d bytes buffer.", -+ bufsize); -+ return NULL; -+ } -+ -+ /* One shot for froml, or loop for mpg123_lconv_from[] */ -+ for (i=0, from = froml ? froml : mpg123_lconv_from[i]; -+ from && i < MAXCHARSET; -+ from = froml ? NULL : mpg123_lconv_from[++i]) -+ { -+ inptr = string; -+ inleft = length; -+ outptr = out; -+ outleft = bufsize - 1; -+ -+ cd = iconv_open(to, from); -+ if (cd == (iconv_t)-1) { -+ g_warning("mpg123_lconv(): iconv_open %s %s -> %s", -+ strerror(errno), from, to); -+ continue; -+ } -+ -+ ret = iconv(cd, &inptr, &inleft, &outptr, &outleft); -+ if (ret == (size_t)-1) { -+ switch (errno) { -+ case E2BIG: -+ g_warning("mpg123_lconv(): iconv err %d; %s -> %s \"%s\"", -+ errno, from, to, string); -+ iconv_close(cd); -+ continue; -+ case EINVAL: -+ case EILSEQ: -+ if (inleft > allow_trunc) { -+ iconv_close(cd); -+ continue; -+ } -+ /* Truncate trailing incomplete or invalid */ -+ g_message("xmms mpg123: Truncate %d byte.", -+ inleft); -+ break; -+ default: -+ g_warning("mpg123_lconv(): iconv err %d; %s -> %s \"%s\"", -+ errno, from, to, string); -+ iconv_close(cd); -+ continue; -+ } -+ } -+ /* Conversion suceeded */ -+ *outptr = '\0'; -+ iconv_close(cd); -+ return out; -+ } -+ /* All Conversion failed */ -+ g_warning("mpg123_lconv(): Failed to convert to %s. \"%s\"", -+ outto ? outto : "locale", string); -+ g_free(out); -+ return g_strdup(string); -+#endif -+} -diff -urN xmms-1.2.7/Input/mpg123/fileinfo.c xmms-1.2.7-mpg123-iconv/Input/mpg123/fileinfo.c ---- xmms-1.2.7/Input/mpg123/fileinfo.c 2002-02-20 23:17:30.000000000 +0900 -+++ xmms-1.2.7-mpg123-iconv/Input/mpg123/fileinfo.c 2003-02-20 05:14:56.000000000 +0900 -@@ -22,6 +22,10 @@ - #include <stdarg.h> - #include "mpg123.h" - -+#ifdef HAVE_CODESET -+#include <langinfo.h> -+#endif -+ - static GtkWidget *window = NULL; - static GtkWidget *filename_entry, *id3_frame; - static GtkWidget *title_entry, *artist_entry, *album_entry, *year_entry, *tracknum_entry, *comment_entry; -@@ -41,21 +45,29 @@ - static void set_entry_tag(GtkEntry * entry, gchar * tag, gint length) - { - gint stripped_len; -- gchar *text; -+ gchar *text, *tmp; - - stripped_len = mpg123_strip_spaces(tag, length); -- text = g_strdup_printf("%-*.*s", stripped_len, stripped_len, tag); -- gtk_entry_set_text(entry, text); -+ text = g_strndup(tag, stripped_len); -+ tmp = mpg123_lconv(text, NULL, 0); -+ gtk_entry_set_text(entry, tmp); -+ g_free(tmp); - g_free(text); - } - - static void get_entry_tag(GtkEntry * entry, gchar * tag, gint length) - { -- gchar *text; -+ gchar *text, *tmp; - - text = gtk_entry_get_text(entry); -+ tmp = g_strndup(text, length); -+ if (strlen(text) - strlen(tmp) > 0) -+ g_message("xmms mpg123: Truncate to \"%s\"", tmp); -+ text = mpg123_lconv(tmp, "SJIS", 1); - memset(tag, ' ', length); - memcpy(tag, text, strlen(text) > length ? length : strlen(text)); -+ g_free(text); -+ g_free(tmp); - } - - static gint find_genre_id(gchar * text) -diff -urN xmms-1.2.7/Input/mpg123/id3_frame_content.c xmms-1.2.7-mpg123-iconv/Input/mpg123/id3_frame_content.c ---- xmms-1.2.7/Input/mpg123/id3_frame_content.c 2002-02-26 05:53:03.000000000 +0900 -+++ xmms-1.2.7-mpg123-iconv/Input/mpg123/id3_frame_content.c 2003-02-20 05:06:29.000000000 +0900 -@@ -52,11 +52,17 @@ - if (id3_decompress_frame(frame) == -1) - return NULL; - -- if (*(guint8 *) frame->fr_data == ID3_ENCODING_ISO_8859_1) -+ switch( *(guint8 *) frame->fr_data ) { -+ case ID3_ENCODING_ISO_8859_1: -+ case ID3_ENCODING_UTF8: - text_beg = text = g_strdup((char *) frame->fr_data + 1); -- else -+ break; -+ case ID3_ENCODING_UTF16: -+ case ID3_ENCODING_UTF16BE: -+ default: - text_beg = text = - id3_utf16_to_ascii((gint16 *) ((glong) frame->fr_data + 1)); -+ } - - /* - * If content is just plain text, return it. -diff -urN xmms-1.2.7/Input/mpg123/id3_frame_text.c xmms-1.2.7-mpg123-iconv/Input/mpg123/id3_frame_text.c ---- xmms-1.2.7/Input/mpg123/id3_frame_text.c 2002-03-05 06:50:26.000000000 +0900 -+++ xmms-1.2.7-mpg123-iconv/Input/mpg123/id3_frame_text.c 2003-02-20 05:06:29.000000000 +0900 -@@ -130,28 +130,36 @@ - char *id3_get_text(id3_frame_t *frame) - { - /* Type check */ -- if ( frame->fr_desc->fd_idstr[0] != 'T' ) -+ if ( frame->fr_desc->fd_idstr[0] != 'T' && -+ frame->fr_desc->fd_id != ID3_COMM ) - return NULL; - - /* Check if frame is compressed */ - if (id3_decompress_frame(frame) == -1) - return NULL; - -- if ( frame->fr_desc->fd_id == ID3_TXXX ) { -+ if ( frame->fr_desc->fd_id == ID3_TXXX || -+ frame->fr_desc->fd_id == ID3_COMM ) -+ { - /* - * This is a user defined text frame. Skip the description. - */ - switch ( *(guint8 *) frame->fr_data ) { - case ID3_ENCODING_ISO_8859_1: -+ case ID3_ENCODING_UTF8: - { - char *text = (char *) frame->fr_data + 1; -+ guint len = frame->fr_size - 1; - -- while ( *text != 0 ) -+ while ( *text != 0 ) { - text++; -+ len--; -+ } - -- return g_strdup(++text); -+ return g_strndup(++text,--len); - } - case ID3_ENCODING_UTF16: -+ case ID3_ENCODING_UTF16BE: - { - gint16 *text16 = (gint16 *) ((glong) frame->fr_data + 1); - -@@ -165,10 +173,15 @@ - } - } - -- if (*(guint8 *) frame->fr_data == ID3_ENCODING_ISO_8859_1) -+ switch (*(guint8 *) frame->fr_data) { -+ case ID3_ENCODING_ISO_8859_1: -+ case ID3_ENCODING_UTF8: - return g_strdup((char *) frame->fr_data + 1); -- else -+ case ID3_ENCODING_UTF16: -+ case ID3_ENCODING_UTF16BE: -+ default: - return id3_utf16_to_ascii((gint16 *) ((glong) frame->fr_data + 1)); -+ } - } - - -diff -urN xmms-1.2.7/Input/mpg123/mpg123.c xmms-1.2.7-mpg123-iconv/Input/mpg123/mpg123.c ---- xmms-1.2.7/Input/mpg123/mpg123.c 2002-02-20 23:17:31.000000000 +0900 -+++ xmms-1.2.7-mpg123-iconv/Input/mpg123/mpg123.c 2003-02-20 05:06:29.000000000 +0900 -@@ -559,6 +559,33 @@ - - if (tag) - { -+ gchar *tmp; -+ -+ tmp = mpg123_lconv(tag->artist, NULL, 0); -+ strncpy(tag->artist, tmp, sizeof(tag->artist)-1); -+ tag->artist[sizeof(tag->artist)-1] = '\0'; -+ g_free(tmp); -+ -+ tmp = mpg123_lconv(tag->album, NULL, 0); -+ strncpy(tag->album, tmp, sizeof(tag->album)-1); -+ tag->album[sizeof(tag->album)-1] = '\0'; -+ g_free(tmp); -+ -+ tmp = mpg123_lconv(tag->title, NULL, 0); -+ strncpy(tag->title, tmp, sizeof(tag->title)-1); -+ tag->title[sizeof(tag->title)-1] = '\0'; -+ g_free(tmp); -+ -+ tmp = mpg123_lconv(tag->genre, NULL, 0); -+ strncpy(tag->genre, tmp, sizeof(tag->genre)-1); -+ tag->genre[sizeof(tag->genre)-1] = '\0'; -+ g_free(tmp); -+ -+ tmp = mpg123_lconv(tag->comment, NULL, 0); -+ strncpy(tag->comment, tmp, sizeof(tag->comment)-1); -+ tag->comment[sizeof(tag->comment)-1] = '\0'; -+ g_free(tmp); -+ - input->performer = mpg123_getstr(tag->artist); - input->album_name = mpg123_getstr(tag->album); - input->track_name = mpg123_getstr(tag->title); -@@ -640,7 +667,7 @@ - ID3_SET (ID3_TALB, album); - ID3_SET_NUM (ID3_TYER, year); - ID3_SET_NUM (ID3_TRCK, track_number); -- ID3_SET (ID3_TXXX, comment); -+ ID3_SET (ID3_COMM, comment); - ID3_SET (ID3_TCON, genre); - } - -diff -urN xmms-1.2.7/Input/mpg123/mpg123.h xmms-1.2.7-mpg123-iconv/Input/mpg123/mpg123.h ---- xmms-1.2.7/Input/mpg123/mpg123.h 2002-02-20 23:17:31.000000000 +0900 -+++ xmms-1.2.7-mpg123-iconv/Input/mpg123/mpg123.h 2003-02-20 05:06:29.000000000 +0900 -@@ -292,6 +292,7 @@ - void mpg123_get_id3v2(id3_t * id3d, struct id3tag_t *tag); - gchar *mpg123_format_song_title(struct id3tag_t *tag, gchar *filename); - double mpg123_relative_pos(void); -+gchar *mpg123_lconv(char *string, char *to, size_t allow_trunc); - - - diff --git a/media-sound/xmms/files/xmms-diskwriter-audio.patch b/media-sound/xmms/files/xmms-diskwriter-audio.patch deleted file mode 100644 index d752dde70d72..000000000000 --- a/media-sound/xmms/files/xmms-diskwriter-audio.patch +++ /dev/null @@ -1,35 +0,0 @@ -diff -urN xmms-1.2.7/Output/disk_writer/disk_writer.c xmms-1.2.7-modified/Output/disk_writer/disk_writer.c ---- xmms-1.2.7/Output/disk_writer/disk_writer.c 2002-01-08 08:09:07.000000000 -0600 -+++ xmms-1.2.7-modified/Output/disk_writer/disk_writer.c 2003-07-27 20:36:59.000000000 -0500 -@@ -56,6 +56,8 @@ - static struct wavhead header; - static guint64 written = 0; - static AFormat afmt; -+static gint arate, anch; -+static EffectPlugin *ep; - gint ctrlsocket_get_session_id(void); /* FIXME */ - - static void disk_init(void); -@@ -121,6 +123,12 @@ - - written = 0; - afmt = fmt; -+ arate = rate; -+ anch = nch; -+ if (effects_enabled()) -+ ep = get_current_effect_plugin(); -+ else -+ ep = NULL; - - if (xmms_check_realtime_priority()) - { -@@ -234,6 +242,9 @@ - - static void disk_write(void *ptr, gint length) - { -+ if (ep) -+ length = ep->mod_samples(&ptr, length, afmt, arate, anch); -+ - #ifdef WORDS_BIGENDIAN - if (afmt == FMT_S8 || afmt == FMT_S16_BE || afmt == FMT_S16_NE || afmt == FMT_U16_LE || afmt == FMT_U16_BE || afmt == FMT_U16_NE) - #else diff --git a/media-sound/xmms/files/xmms-fhs-skinsdir.patch b/media-sound/xmms/files/xmms-fhs-skinsdir.patch deleted file mode 100644 index 434b2db7ec8e..000000000000 --- a/media-sound/xmms/files/xmms-fhs-skinsdir.patch +++ /dev/null @@ -1,10 +0,0 @@ ---- xmms/skinwin.c 2001-06-16 16:05:47.000000000 -0700 -+++ xmms/skinwin.c.new 2003-07-18 00:34:31.000000000 -0700 -@@ -205,6 +205,7 @@ - str = g_strconcat(DATA_DIR, "/Skins", NULL); - scan_skindir(str); - g_free(str); -+ scan_skindir("/usr/local/share/xmms/Skins"); - skinlist = g_list_sort(skinlist, skinlist_compare_func); - skinsdir = getenv("SKINSDIR"); - if (skinsdir) diff --git a/media-sound/xmms/files/xmms-gettext-fix.patch b/media-sound/xmms/files/xmms-gettext-fix.patch deleted file mode 100644 index 68033840c010..000000000000 --- a/media-sound/xmms/files/xmms-gettext-fix.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- po/Makefile.in.in.old 2003-07-18 02:04:17.000000000 -0700 -+++ po/Makefile.in.in 2003-07-18 02:05:03.000000000 -0700 -@@ -34,7 +34,7 @@ - GENCAT = @GENCAT@ - GMSGFMT = PATH=../src:$$PATH @GMSGFMT@ - MSGFMT = @MSGFMT@ --XGETTEXT = PATH=../src:$$PATH @XGETTEXT@ -+XGETTEXT = PATH=../src:$$PATH @XGETTEXT@ --language=C --from-code=iso-8859-1 - MSGMERGE = PATH=../src:$$PATH msgmerge - - DEFS = @DEFS@ diff --git a/media-sound/xmms/files/xmms-ipv6-20020408-mmx.patch b/media-sound/xmms/files/xmms-ipv6-20020408-mmx.patch deleted file mode 100644 index 31475e30f520..000000000000 --- a/media-sound/xmms/files/xmms-ipv6-20020408-mmx.patch +++ /dev/null @@ -1,354 +0,0 @@ -Index: acconfig.h -=================================================================== -RCS file: /cvs/xmms/acconfig.h,v -retrieving revision 1.13 -diff -u -r1.13 acconfig.h ---- acconfig.h 14 Nov 2001 22:08:14 -0000 1.13 -+++ acconfig.h 8 Apr 2002 19:05:50 -0000 -@@ -57,6 +57,7 @@ - #undef PACKAGE - #undef VERSION - #undef USE_SIMD -+#undef USE_IPV6 - #undef WITH_SYMBOL_UNDERSCORE - #undef WITH_SM - #undef ENABLE_NLS -Index: configure.in -=================================================================== -RCS file: /cvs/xmms/configure.in,v -retrieving revision 1.116 -diff -u -r1.116 configure.in ---- configure.in 24 Mar 2002 14:38:22 -0000 1.116 -+++ configure.in 8 Apr 2002 19:05:51 -0000 -@@ -338,6 +338,17 @@ - fi - AM_CONDITIONAL(USE_SIMD,test "x$USE_SIMD" = xyes) - AC_SUBST(USE_SIMD_TRUE) -+ -+dnl IPv6 support -+dnl ======================== -+AC_ARG_ENABLE(ipv6, -+ [ --enable-ipv6 enable IPv6 support [default=no]], -+ enable_ipv6=$enableval, enable_ipv6=no) -+if test "x$enable_ipv6" = xyes; then -+ AC_DEFINE(USE_IPV6) -+fi -+AM_CONDITIONAL(USE_IPV6,test "x$enable_ipv6" = xyes) -+AC_SUBST(USE_IPV6) - dnl ======================== - - AC_CACHE_CHECK(for socklen_t, xmms_cv_type_socklen_t, -Index: Input/cdaudio/http.c -=================================================================== -RCS file: /cvs/xmms/Input/cdaudio/http.c,v -retrieving revision 1.5 -diff -u -r1.5 http.c ---- Input/cdaudio/http.c 21 Jul 2000 08:54:17 -0000 1.5 -+++ Input/cdaudio/http.c 8 Apr 2002 19:05:51 -0000 -@@ -25,9 +25,45 @@ - gint http_open_connection(gchar * server, gint port) - { - gint sock; -+#ifdef USE_IPV6 -+ struct addrinfo hints, *res, *res0; -+ char service[6]; -+#else - struct hostent *host; - struct sockaddr_in address; -+#endif - -+#ifdef USE_IPV6 -+ snprintf(service, 6, "%d", port); -+ memset(&hints, 0, sizeof(hints)); -+ hints.ai_socktype = SOCK_STREAM; -+ -+ if (getaddrinfo(server, service, &hints, &res0)) -+ return 0; -+ -+ for (res = res0; res; res = res->ai_next) { -+ sock = socket (res->ai_family, res->ai_socktype, res->ai_protocol); -+ if (sock < 0) { -+ if (res->ai_next) -+ continue; -+ else { -+ freeaddrinfo(res0); -+ return 0; -+ } -+ } -+ if (connect(sock, res->ai_addr, res->ai_addrlen) < 0) { -+ if (res->ai_next) { -+ close(sock); -+ continue; -+ } else { -+ freeaddrinfo(res0); -+ return 0; -+ } -+ } -+ freeaddrinfo(res0); -+ return sock; -+ } -+#else - sock = socket(AF_INET, SOCK_STREAM, 0); - address.sin_family = AF_INET; - -@@ -40,6 +76,7 @@ - if (connect(sock, (struct sockaddr *) &address, sizeof (struct sockaddr_in)) == -1) - return 0; - -+#endif - return sock; - } - -Index: Input/mpg123/http.c -=================================================================== -RCS file: /cvs/xmms/Input/mpg123/http.c,v -retrieving revision 1.26 -diff -u -r1.26 http.c ---- Input/mpg123/http.c 6 Jan 2002 22:13:16 -0000 1.26 -+++ Input/mpg123/http.c 8 Apr 2002 19:05:52 -0000 -@@ -332,8 +332,13 @@ - gboolean redirect; - int udp_sock = 0; - fd_set set; -+#ifdef USE_IPV6 -+ struct addrinfo hints, *res, *res0; -+ char service[6]; -+#else - struct hostent *hp; - struct sockaddr_in address; -+#endif - struct timeval tv; - - url = (gchar *) arg; -@@ -355,6 +360,45 @@ - chost = mpg123_cfg.use_proxy ? mpg123_cfg.proxy_host : host; - cport = mpg123_cfg.use_proxy ? mpg123_cfg.proxy_port : port; - -+#ifdef USE_IPV6 -+ snprintf(service, 6, "%d", cport); -+ memset(&hints, 0, sizeof(hints)); -+ hints.ai_socktype = SOCK_STREAM; -+ if (! getaddrinfo(chost, service, &hints, &res0)) { -+ eof = TRUE; -+ for (res = res0; res; res = res->ai_next) { -+ if ((sock = socket (res->ai_family, res->ai_socktype, res->ai_protocol)) < 0) -+ continue; -+ fcntl(sock, F_SETFL, O_NONBLOCK); -+ status = g_strdup_printf(_("CONNECTING TO %s:%d"), chost, cport); -+ mpg123_ip.set_info_text(status); -+ g_free(status); -+ ((struct sockaddr_in6 *)res->ai_addr)->sin6_port = htons(cport); -+ if (connect(sock, res->ai_addr, res->ai_addrlen) < 0) { -+ if (errno != EINPROGRESS) { -+ close(sock); -+ continue; -+ } -+ } -+ eof = FALSE; -+ break; -+ } -+ freeaddrinfo(res0); -+ if (eof) { -+ status = g_strdup_printf(_("Couldn't connect to host %s:%d"), chost, cport); -+ show_error_message(status); -+ g_free(status); -+ mpg123_ip.set_info_text(NULL); -+ } -+ } else { -+ status = g_strdup_printf(_("Couldn't look up host %s"), chost); -+ show_error_message(status); -+ g_free(status); -+ -+ mpg123_ip.set_info_text(NULL); -+ eof = TRUE; -+ } -+#else - sock = socket(AF_INET, SOCK_STREAM, 0); - fcntl(sock, F_SETFL, O_NONBLOCK); - address.sin_family = AF_INET; -@@ -372,9 +416,11 @@ - mpg123_ip.set_info_text(NULL); - eof = TRUE; - } -+#endif - - if (!eof) - { -+#ifndef USE_IPV6 - memcpy(&address.sin_addr.s_addr, *(hp->h_addr_list), sizeof (address.sin_addr.s_addr)); - address.sin_port = g_htons(cport); - -@@ -393,6 +439,7 @@ - eof = TRUE; - } - } -+#endif - while (going) - { - tv.tv_sec = 0; -@@ -697,14 +744,23 @@ - /* Find a good local udp port and bind udp_sock to it, return the port */ - static int udp_establish_listener(int *sock) - { -+#ifdef USE_IPV6 -+ struct sockaddr_in6 sin; -+ socklen_t sinlen = sizeof (struct sockaddr_in6); -+#else - struct sockaddr_in sin; - socklen_t sinlen = sizeof (struct sockaddr_in); -+#endif - - #ifdef DEBUG_UDP - fprintf (stderr,"Establishing udp listener\n"); - #endif - -+#ifdef USE_IPV6 -+ if ((*sock = socket(AF_INET6, SOCK_DGRAM, 0)) < 0) -+#else - if ((*sock = socket(AF_INET, SOCK_DGRAM, 0)) < 0) -+#endif - { - g_log(NULL, G_LOG_LEVEL_CRITICAL, - "udp_establish_listener(): unable to create socket"); -@@ -712,8 +768,12 @@ - } - - memset(&sin, 0, sinlen); -+#ifdef USE_IPV6 -+ sin.sin6_family = AF_INET6; -+#else - sin.sin_family = AF_INET; - sin.sin_addr.s_addr = g_htonl(INADDR_ANY); -+#endif - - if (bind(*sock, (struct sockaddr *)&sin, sinlen) < 0) - { -@@ -743,7 +803,11 @@ - fprintf (stderr,"Listening on local %s:%d\n", inet_ntoa(sin.sin_addr), g_ntohs(sin.sin_port)); - #endif - -+#ifdef USE_IPV6 -+ return g_ntohs(sin.sin6_port); -+#else - return g_ntohs(sin.sin_port); -+#endif - } - - static int udp_check_for_data(int sock) -@@ -752,10 +816,14 @@ - char *valptr; - gchar *title; - gint len, i; -+#ifdef USE_IPV6 -+ struct sockaddr_in6 from; -+#else - struct sockaddr_in from; -+#endif - socklen_t fromlen; - -- fromlen = sizeof(struct sockaddr_in); -+ fromlen = sizeof(from); - - if ((len = recvfrom(sock, buf, 1024, 0, (struct sockaddr *)&from, &fromlen)) < 0) - { -@@ -840,7 +908,14 @@ - #ifdef DEBUG_UDP - else - fprintf(stderr,"Sent ack: %s", obuf); -+#ifdef USE_IPV6 -+{ -+ char adr[INET6_ADDRSTRLEN]; -+ inet_ntop(AF_INET6, &from.sin6_addr, adr, INET6_ADDRSTRLEN); -+ fprintf (stderr,"Remote: [%s]:%d\n", adr, g_ntohs(from.sin6_port)); -+#else - fprintf (stderr,"Remote: %s:%d\n", inet_ntoa(from.sin_addr), g_ntohs(from.sin_port)); -+#endif - #endif - } - } -Index: Input/vorbis/http.c -=================================================================== -RCS file: /cvs/xmms/Input/vorbis/http.c,v -retrieving revision 1.4 -diff -u -r1.4 http.c ---- Input/vorbis/http.c 29 Dec 2001 19:03:38 -0000 1.4 -+++ Input/vorbis/http.c 8 Apr 2002 19:05:52 -0000 -@@ -287,8 +287,13 @@ - gint cnt, written, error, err_len, port, cport; - gboolean redirect; - fd_set set; -+#ifdef USE_IPV6 -+ struct addrinfo hints, *res, *res0; -+ char service[6]; -+#else - struct hostent *hp; - struct sockaddr_in address; -+#endif - struct timeval tv; - - url = (gchar *) arg; -@@ -310,6 +315,44 @@ - chost = vorbis_cfg.use_proxy ? vorbis_cfg.proxy_host : host; - cport = vorbis_cfg.use_proxy ? vorbis_cfg.proxy_port : port; - -+#ifdef USE_IPV6 -+ snprintf(service, 6, "%d", cport); -+ memset(&hints, 0, sizeof(hints)); -+ hints.ai_socktype = SOCK_STREAM; -+ if (! getaddrinfo(chost, service, &hints, &res0)) { -+ eof = TRUE; -+ for (res = res0; res; res = res->ai_next) { -+ if ((sock = socket (res->ai_family, res->ai_socktype, res->ai_protocol)) < 0) -+ continue; -+ fcntl(sock, F_SETFL, O_NONBLOCK); -+ status = g_strdup_printf(_("CONNECTING TO %s:%d"), chost, cport); -+ vorbis_ip.set_info_text(status); -+ g_free(status); -+ ((struct sockaddr_in6 *)res->ai_addr)->sin6_port = htons(cport); -+ if (connect(sock, res->ai_addr, res->ai_addrlen) < 0) { -+ if (errno != EINPROGRESS) { -+ close(sock); -+ continue; -+ } -+ } -+ eof = FALSE; -+ break; -+ } -+ freeaddrinfo(res0); -+ if (eof) { -+ status = g_strdup_printf(_("Couldn't connect to host %s:%d"), chost, cport); -+ vorbis_ip.set_info_text(status); -+ g_free(status); -+ eof = TRUE; -+ break; -+ } -+ } else { -+ status = g_strdup_printf(_("Couldn't look up host %s"), chost); -+ vorbis_ip.set_info_text(status); -+ g_free(status); -+ eof = TRUE; -+ } -+#else - sock = socket(AF_INET, SOCK_STREAM, 0); - fcntl(sock, F_SETFL, O_NONBLOCK); - address.sin_family = AF_INET; -@@ -327,9 +370,11 @@ - vorbis_ip.set_info_text(NULL); - eof = TRUE; - } -+#endif - - if (!eof) - { -+#ifndef USE_IPV6 - memcpy(&address.sin_addr.s_addr, *(hp->h_addr_list), sizeof (address.sin_addr.s_addr)); - address.sin_port = g_htons(cport); - -@@ -348,6 +393,7 @@ - eof = TRUE; - } - } -+#endif - while (going) - { - tv.tv_sec = 0; diff --git a/media-sound/xmms/files/xmms-ipv6-20020408-nommx.patch b/media-sound/xmms/files/xmms-ipv6-20020408-nommx.patch deleted file mode 100644 index 0b9846445c0b..000000000000 --- a/media-sound/xmms/files/xmms-ipv6-20020408-nommx.patch +++ /dev/null @@ -1,354 +0,0 @@ -Index: acconfig.h -=================================================================== -RCS file: /cvs/xmms/acconfig.h,v -retrieving revision 1.13 -diff -u -r1.13 acconfig.h ---- acconfig.h 14 Nov 2001 22:08:14 -0000 1.13 -+++ acconfig.h 8 Apr 2002 19:05:50 -0000 -@@ -57,6 +57,7 @@ - #undef PACKAGE - #undef VERSION - #undef USE_3DNOW -+#undef USE_IPV6 - #undef WITH_SYMBOL_UNDERSCORE - #undef WITH_SM - #undef ENABLE_NLS -Index: configure.in -=================================================================== -RCS file: /cvs/xmms/configure.in,v -retrieving revision 1.116 -diff -u -r1.116 configure.in ---- configure.in 24 Mar 2002 14:38:22 -0000 1.116 -+++ configure.in 8 Apr 2002 19:05:51 -0000 -@@ -338,6 +338,17 @@ - fi - AM_CONDITIONAL(USE_3DNOW,test "x$USE_3DNOW" = xyes) - AC_SUBST(USE_3DNOW_TRUE) -+ -+dnl IPv6 support -+dnl ======================== -+AC_ARG_ENABLE(ipv6, -+ [ --enable-ipv6 enable IPv6 support [default=no]], -+ enable_ipv6=$enableval, enable_ipv6=no) -+if test "x$enable_ipv6" = xyes; then -+ AC_DEFINE(USE_IPV6) -+fi -+AM_CONDITIONAL(USE_IPV6,test "x$enable_ipv6" = xyes) -+AC_SUBST(USE_IPV6) - dnl ======================== - - AC_CACHE_CHECK(for socklen_t, xmms_cv_type_socklen_t, -Index: Input/cdaudio/http.c -=================================================================== -RCS file: /cvs/xmms/Input/cdaudio/http.c,v -retrieving revision 1.5 -diff -u -r1.5 http.c ---- Input/cdaudio/http.c 21 Jul 2000 08:54:17 -0000 1.5 -+++ Input/cdaudio/http.c 8 Apr 2002 19:05:51 -0000 -@@ -25,9 +25,45 @@ - gint http_open_connection(gchar * server, gint port) - { - gint sock; -+#ifdef USE_IPV6 -+ struct addrinfo hints, *res, *res0; -+ char service[6]; -+#else - struct hostent *host; - struct sockaddr_in address; -+#endif - -+#ifdef USE_IPV6 -+ snprintf(service, 6, "%d", port); -+ memset(&hints, 0, sizeof(hints)); -+ hints.ai_socktype = SOCK_STREAM; -+ -+ if (getaddrinfo(server, service, &hints, &res0)) -+ return 0; -+ -+ for (res = res0; res; res = res->ai_next) { -+ sock = socket (res->ai_family, res->ai_socktype, res->ai_protocol); -+ if (sock < 0) { -+ if (res->ai_next) -+ continue; -+ else { -+ freeaddrinfo(res0); -+ return 0; -+ } -+ } -+ if (connect(sock, res->ai_addr, res->ai_addrlen) < 0) { -+ if (res->ai_next) { -+ close(sock); -+ continue; -+ } else { -+ freeaddrinfo(res0); -+ return 0; -+ } -+ } -+ freeaddrinfo(res0); -+ return sock; -+ } -+#else - sock = socket(AF_INET, SOCK_STREAM, 0); - address.sin_family = AF_INET; - -@@ -40,6 +76,7 @@ - if (connect(sock, (struct sockaddr *) &address, sizeof (struct sockaddr_in)) == -1) - return 0; - -+#endif - return sock; - } - -Index: Input/mpg123/http.c -=================================================================== -RCS file: /cvs/xmms/Input/mpg123/http.c,v -retrieving revision 1.26 -diff -u -r1.26 http.c ---- Input/mpg123/http.c 6 Jan 2002 22:13:16 -0000 1.26 -+++ Input/mpg123/http.c 8 Apr 2002 19:05:52 -0000 -@@ -332,8 +332,13 @@ - gboolean redirect; - int udp_sock = 0; - fd_set set; -+#ifdef USE_IPV6 -+ struct addrinfo hints, *res, *res0; -+ char service[6]; -+#else - struct hostent *hp; - struct sockaddr_in address; -+#endif - struct timeval tv; - - url = (gchar *) arg; -@@ -355,6 +360,45 @@ - chost = mpg123_cfg.use_proxy ? mpg123_cfg.proxy_host : host; - cport = mpg123_cfg.use_proxy ? mpg123_cfg.proxy_port : port; - -+#ifdef USE_IPV6 -+ snprintf(service, 6, "%d", cport); -+ memset(&hints, 0, sizeof(hints)); -+ hints.ai_socktype = SOCK_STREAM; -+ if (! getaddrinfo(chost, service, &hints, &res0)) { -+ eof = TRUE; -+ for (res = res0; res; res = res->ai_next) { -+ if ((sock = socket (res->ai_family, res->ai_socktype, res->ai_protocol)) < 0) -+ continue; -+ fcntl(sock, F_SETFL, O_NONBLOCK); -+ status = g_strdup_printf(_("CONNECTING TO %s:%d"), chost, cport); -+ mpg123_ip.set_info_text(status); -+ g_free(status); -+ ((struct sockaddr_in6 *)res->ai_addr)->sin6_port = htons(cport); -+ if (connect(sock, res->ai_addr, res->ai_addrlen) < 0) { -+ if (errno != EINPROGRESS) { -+ close(sock); -+ continue; -+ } -+ } -+ eof = FALSE; -+ break; -+ } -+ freeaddrinfo(res0); -+ if (eof) { -+ status = g_strdup_printf(_("Couldn't connect to host %s:%d"), chost, cport); -+ show_error_message(status); -+ g_free(status); -+ mpg123_ip.set_info_text(NULL); -+ } -+ } else { -+ status = g_strdup_printf(_("Couldn't look up host %s"), chost); -+ show_error_message(status); -+ g_free(status); -+ -+ mpg123_ip.set_info_text(NULL); -+ eof = TRUE; -+ } -+#else - sock = socket(AF_INET, SOCK_STREAM, 0); - fcntl(sock, F_SETFL, O_NONBLOCK); - address.sin_family = AF_INET; -@@ -372,9 +416,11 @@ - mpg123_ip.set_info_text(NULL); - eof = TRUE; - } -+#endif - - if (!eof) - { -+#ifndef USE_IPV6 - memcpy(&address.sin_addr.s_addr, *(hp->h_addr_list), sizeof (address.sin_addr.s_addr)); - address.sin_port = g_htons(cport); - -@@ -393,6 +439,7 @@ - eof = TRUE; - } - } -+#endif - while (going) - { - tv.tv_sec = 0; -@@ -697,14 +744,23 @@ - /* Find a good local udp port and bind udp_sock to it, return the port */ - static int udp_establish_listener(int *sock) - { -+#ifdef USE_IPV6 -+ struct sockaddr_in6 sin; -+ socklen_t sinlen = sizeof (struct sockaddr_in6); -+#else - struct sockaddr_in sin; - socklen_t sinlen = sizeof (struct sockaddr_in); -+#endif - - #ifdef DEBUG_UDP - fprintf (stderr,"Establishing udp listener\n"); - #endif - -+#ifdef USE_IPV6 -+ if ((*sock = socket(AF_INET6, SOCK_DGRAM, 0)) < 0) -+#else - if ((*sock = socket(AF_INET, SOCK_DGRAM, 0)) < 0) -+#endif - { - g_log(NULL, G_LOG_LEVEL_CRITICAL, - "udp_establish_listener(): unable to create socket"); -@@ -712,8 +768,12 @@ - } - - memset(&sin, 0, sinlen); -+#ifdef USE_IPV6 -+ sin.sin6_family = AF_INET6; -+#else - sin.sin_family = AF_INET; - sin.sin_addr.s_addr = g_htonl(INADDR_ANY); -+#endif - - if (bind(*sock, (struct sockaddr *)&sin, sinlen) < 0) - { -@@ -743,7 +803,11 @@ - fprintf (stderr,"Listening on local %s:%d\n", inet_ntoa(sin.sin_addr), g_ntohs(sin.sin_port)); - #endif - -+#ifdef USE_IPV6 -+ return g_ntohs(sin.sin6_port); -+#else - return g_ntohs(sin.sin_port); -+#endif - } - - static int udp_check_for_data(int sock) -@@ -752,10 +816,14 @@ - char *valptr; - gchar *title; - gint len, i; -+#ifdef USE_IPV6 -+ struct sockaddr_in6 from; -+#else - struct sockaddr_in from; -+#endif - socklen_t fromlen; - -- fromlen = sizeof(struct sockaddr_in); -+ fromlen = sizeof(from); - - if ((len = recvfrom(sock, buf, 1024, 0, (struct sockaddr *)&from, &fromlen)) < 0) - { -@@ -840,7 +908,14 @@ - #ifdef DEBUG_UDP - else - fprintf(stderr,"Sent ack: %s", obuf); -+#ifdef USE_IPV6 -+{ -+ char adr[INET6_ADDRSTRLEN]; -+ inet_ntop(AF_INET6, &from.sin6_addr, adr, INET6_ADDRSTRLEN); -+ fprintf (stderr,"Remote: [%s]:%d\n", adr, g_ntohs(from.sin6_port)); -+#else - fprintf (stderr,"Remote: %s:%d\n", inet_ntoa(from.sin_addr), g_ntohs(from.sin_port)); -+#endif - #endif - } - } -Index: Input/vorbis/http.c -=================================================================== -RCS file: /cvs/xmms/Input/vorbis/http.c,v -retrieving revision 1.4 -diff -u -r1.4 http.c ---- Input/vorbis/http.c 29 Dec 2001 19:03:38 -0000 1.4 -+++ Input/vorbis/http.c 8 Apr 2002 19:05:52 -0000 -@@ -287,8 +287,13 @@ - gint cnt, written, error, err_len, port, cport; - gboolean redirect; - fd_set set; -+#ifdef USE_IPV6 -+ struct addrinfo hints, *res, *res0; -+ char service[6]; -+#else - struct hostent *hp; - struct sockaddr_in address; -+#endif - struct timeval tv; - - url = (gchar *) arg; -@@ -310,6 +315,44 @@ - chost = vorbis_cfg.use_proxy ? vorbis_cfg.proxy_host : host; - cport = vorbis_cfg.use_proxy ? vorbis_cfg.proxy_port : port; - -+#ifdef USE_IPV6 -+ snprintf(service, 6, "%d", cport); -+ memset(&hints, 0, sizeof(hints)); -+ hints.ai_socktype = SOCK_STREAM; -+ if (! getaddrinfo(chost, service, &hints, &res0)) { -+ eof = TRUE; -+ for (res = res0; res; res = res->ai_next) { -+ if ((sock = socket (res->ai_family, res->ai_socktype, res->ai_protocol)) < 0) -+ continue; -+ fcntl(sock, F_SETFL, O_NONBLOCK); -+ status = g_strdup_printf(_("CONNECTING TO %s:%d"), chost, cport); -+ vorbis_ip.set_info_text(status); -+ g_free(status); -+ ((struct sockaddr_in6 *)res->ai_addr)->sin6_port = htons(cport); -+ if (connect(sock, res->ai_addr, res->ai_addrlen) < 0) { -+ if (errno != EINPROGRESS) { -+ close(sock); -+ continue; -+ } -+ } -+ eof = FALSE; -+ break; -+ } -+ freeaddrinfo(res0); -+ if (eof) { -+ status = g_strdup_printf(_("Couldn't connect to host %s:%d"), chost, cport); -+ vorbis_ip.set_info_text(status); -+ g_free(status); -+ eof = TRUE; -+ break; -+ } -+ } else { -+ status = g_strdup_printf(_("Couldn't look up host %s"), chost); -+ vorbis_ip.set_info_text(status); -+ g_free(status); -+ eof = TRUE; -+ } -+#else - sock = socket(AF_INET, SOCK_STREAM, 0); - fcntl(sock, F_SETFL, O_NONBLOCK); - address.sin_family = AF_INET; -@@ -327,9 +370,11 @@ - vorbis_ip.set_info_text(NULL); - eof = TRUE; - } -+#endif - - if (!eof) - { -+#ifndef USE_IPV6 - memcpy(&address.sin_addr.s_addr, *(hp->h_addr_list), sizeof (address.sin_addr.s_addr)); - address.sin_port = g_htons(cport); - -@@ -348,6 +393,7 @@ - eof = TRUE; - } - } -+#endif - while (going) - { - tv.tv_sec = 0; diff --git a/media-sound/xmms/files/xmms-jump.patch b/media-sound/xmms/files/xmms-jump.patch deleted file mode 100644 index c2f80b8765d5..000000000000 --- a/media-sound/xmms/files/xmms-jump.patch +++ /dev/null @@ -1,76 +0,0 @@ -diff -ur xmms-1.2.7/libxmms/xmmsctrl.c xmms-1.2.7-mod/libxmms/xmmsctrl.c ---- xmms-1.2.7/libxmms/xmmsctrl.c 2002-03-03 15:24:27.000000000 -0500 -+++ xmms-1.2.7-mod/libxmms/xmmsctrl.c 2002-11-16 04:51:58.000000000 -0500 -@@ -337,6 +337,11 @@ - remote_cmd(session, CMD_PLAY_PAUSE); - } - -+void xmms_remote_show_jump_box(gint session) -+{ -+ remote_cmd(session, CMD_SHOW_JUMP_BOX); -+} -+ - gboolean xmms_remote_is_playing(gint session) - { - return remote_get_gboolean(session, CMD_IS_PLAYING); -diff -ur xmms-1.2.7/libxmms/xmmsctrl.h xmms-1.2.7-mod/libxmms/xmmsctrl.h ---- xmms-1.2.7/libxmms/xmmsctrl.h 2002-03-03 15:24:27.000000000 -0500 -+++ xmms-1.2.7-mod/libxmms/xmmsctrl.h 2002-11-16 04:52:26.000000000 -0500 -@@ -61,6 +61,7 @@ - gboolean xmms_remote_is_pl_win(gint session); - gboolean xmms_remote_is_eq_win(gint session); - void xmms_remote_show_prefs_box(gint session); -+void xmms_remote_show_jump_box(gint session); - void xmms_remote_toggle_aot(gint session, gboolean ontop); - void xmms_remote_eject(gint session); - void xmms_remote_playlist_prev(gint session); -diff -ur xmms-1.2.7/xmms/controlsocket.c xmms-1.2.7-mod/xmms/controlsocket.c ---- xmms-1.2.7/xmms/controlsocket.c 2002-03-03 15:24:33.000000000 -0500 -+++ xmms-1.2.7-mod/xmms/controlsocket.c 2002-11-16 04:54:04.000000000 -0500 -@@ -464,6 +464,9 @@ - case CMD_SET_SKIN: - load_skin(data); - break; -+ case CMD_SHOW_JUMP_BOX: -+ show_jump_to_file(); -+ break; - case CMD_PL_WIN_TOGGLE: - tbool = *((gboolean *) data); - playlistwin_show(!!tbool); -diff -ur xmms-1.2.7/xmms/controlsocket.h xmms-1.2.7-mod/xmms/controlsocket.h ---- xmms-1.2.7/xmms/controlsocket.h 2002-03-03 15:24:33.000000000 -0500 -+++ xmms-1.2.7-mod/xmms/controlsocket.h 2002-11-16 04:52:56.000000000 -0500 -@@ -46,6 +46,7 @@ - CMD_GET_EQ, CMD_GET_EQ_PREAMP, CMD_GET_EQ_BAND, - CMD_SET_EQ, CMD_SET_EQ_PREAMP, CMD_SET_EQ_BAND, - CMD_QUIT, CMD_PLAYLIST_INS_URL_STRING, CMD_PLAYLIST_INS, CMD_PLAY_PAUSE, -+ CMD_SHOW_JUMP_BOX - }; - - typedef struct -diff -ur xmms-1.2.7/xmms/main.c xmms-1.2.7-mod/xmms/main.c ---- xmms-1.2.7/xmms/main.c 2002-02-27 09:30:28.000000000 -0500 -+++ xmms-1.2.7-mod/xmms/main.c 2002-11-16 04:54:46.000000000 -0500 -@@ -1800,6 +1800,11 @@ - GTK_CLIST(clist)->focus_row = GPOINTER_TO_INT(GTK_CLIST(clist)->selection->data); - } - -+void show_jump_to_file(void) -+{ -+ mainwin_jump_to_file(); -+} -+ - static gboolean mainwin_configure(GtkWidget * window, GdkEventConfigure *event, gpointer data) - { - if (!GTK_WIDGET_VISIBLE(window)) -diff -ur xmms-1.2.7/xmms/main.h xmms-1.2.7-mod/xmms/main.h ---- xmms-1.2.7/xmms/main.h 2002-01-21 09:22:38.000000000 -0500 -+++ xmms-1.2.7-mod/xmms/main.h 2002-11-16 04:55:02.000000000 -0500 -@@ -119,6 +119,7 @@ - void mainwin_set_shade_menu_cb(gboolean shaded); - void mainwin_set_shade(gboolean shaded); - void mainwin_shade_toggle(void); -+void show_jump_to_file(void); - - #define PLAYER_HEIGHT ((cfg.player_shaded ? 14 : 116) * (cfg.doublesize + 1)) - #define PLAYER_WIDTH (275 * (cfg.doublesize + 1)) diff --git a/media-sound/xmms/files/xmms-nptl.patch b/media-sound/xmms/files/xmms-nptl.patch deleted file mode 100644 index 32a54675b337..000000000000 --- a/media-sound/xmms/files/xmms-nptl.patch +++ /dev/null @@ -1,43 +0,0 @@ -Index: Input/mpg123/common.c -=================================================================== -RCS file: /cvs/xmms/Input/mpg123/common.c,v -retrieving revision 1.17 -diff -u -r1.17 common.c ---- xmms/Input/mpg123/common.c 19 Feb 2002 23:24:05 -0000 1.17 -+++ xmms/Input/mpg123/common.c 4 Feb 2003 12:39:44 -0000 -@@ -278,10 +278,9 @@ - - void mpg123_stream_close(void) - { --/* if (flags & READER_FD_OPENED) */ - if (filept) - fclose(filept); -- else -+ else if (mpg123_info->network_stream) - mpg123_http_close(); - } - -@@ -659,6 +658,7 @@ - filept = NULL; - mpg123_http_open(bs_filenam); - mpg123_info->filesize = 0; -+ mpg123_info->network_stream = TRUE; - } - else - { -Index: Input/mpg123/mpg123.h -=================================================================== -RCS file: /cvs/xmms/Input/mpg123/mpg123.h,v -retrieving revision 1.17 -diff -u -r1.17 mpg123.h ---- xmms/Input/mpg123/mpg123.h 19 Feb 2002 23:24:05 -0000 1.17 -+++ xmms/Input/mpg123/mpg123.h 4 Feb 2003 12:39:44 -0000 -@@ -76,6 +76,7 @@ - gfloat eq_mul[576]; - gboolean output_audio; - gboolean first_frame; -+ gboolean network_stream; - guint32 filesize; /* Filesize without junk */ - } - PlayerInfo; - diff --git a/media-sound/xmms/files/xmms-russian-charset.patch b/media-sound/xmms/files/xmms-russian-charset.patch deleted file mode 100644 index c1dbae5139a8..000000000000 --- a/media-sound/xmms/files/xmms-russian-charset.patch +++ /dev/null @@ -1,2152 +0,0 @@ -diff -dPNur xmms-1.2.7/Input/mpg123/fileinfo.c xmms-1.2.7-new/Input/mpg123/fileinfo.c ---- xmms-1.2.7/Input/mpg123/fileinfo.c 2002-02-20 09:17:30.000000000 -0500 -+++ xmms-1.2.7-new/Input/mpg123/fileinfo.c 2003-06-20 00:02:06.000000000 -0400 -@@ -22,6 +22,10 @@ - #include <stdarg.h> - #include "mpg123.h" - -+#include "libxmms/charset.h" -+#include <gdk/gdkkeysyms.h> -+#include "xmms/xmms.h" -+ - static GtkWidget *window = NULL; - static GtkWidget *filename_entry, *id3_frame; - static GtkWidget *title_entry, *artist_entry, *album_entry, *year_entry, *tracknum_entry, *comment_entry; -@@ -42,20 +46,35 @@ - { - gint stripped_len; - gchar *text; -+ gchar *ctag; -+ gint clength; - -+ ctag=xmms_charset_recode_id3(tag,length,&clength); -+ if (ctag) { -+ tag=ctag; -+ length=clength; -+ } -+ - stripped_len = mpg123_strip_spaces(tag, length); - text = g_strdup_printf("%-*.*s", stripped_len, stripped_len, tag); - gtk_entry_set_text(entry, text); - g_free(text); -+ if (ctag) g_free(ctag); - } - - static void get_entry_tag(GtkEntry * entry, gchar * tag, gint length) - { - gchar *text; -+ gchar *ctext; - - text = gtk_entry_get_text(entry); -+ ctext = xmms_charset_recode_output(text,length,NULL); -+ if (ctext) text=ctext; -+ - memset(tag, ' ', length); - memcpy(tag, text, strlen(text) > length ? length : strlen(text)); -+ -+ if (ctext) g_free(ctext); - } - - static gint find_genre_id(gchar * text) -@@ -199,6 +218,31 @@ - } - } - -+static int restore_focus; -+ -+gboolean mpg123_keypress_cb(GtkWidget * w, GdkEventKey * event, gpointer save) { -+ switch(event->keyval) { -+ case GDK_Return: -+ restore_focus=1; -+ gtk_signal_emit_by_name(GTK_OBJECT(save), "clicked", NULL); -+ break; -+ case GDK_Escape: -+ restore_focus=1; -+ break; -+ } -+ return TRUE; -+} -+ -+void gtk_widget_destroyed_focus(GtkWidget *widget, GtkWidget **widget_pointer) { -+ gtk_widget_destroyed(widget,widget_pointer); -+ if (restore_focus) { -+ gtk_widget_hide(playlistwin); -+ gtk_widget_show(playlistwin); -+// playlistwin_real_hide(); -+// playlistwin_real_show(); -+ } -+} -+ - void mpg123_file_info_box(char *filename) - { - gint i; -@@ -207,7 +251,10 @@ - gchar *tmp, *title; - const gchar *emphasis[4]; - const gchar *bool_label[2]; -+ gchar *cfilename; - -+ restore_focus=0; -+ - emphasis[0] = _("None"); - emphasis[1] = _("50/15 ms"); - emphasis[2] = ""; -@@ -221,10 +268,11 @@ - GtkWidget *mpeg_frame, *mpeg_box; - GtkWidget *label, *filename_hbox; - GtkWidget *bbox, *save, *remove_id3, *cancel; -+ GtkAccelGroup *ag; - - window = gtk_window_new(GTK_WINDOW_DIALOG); - gtk_window_set_policy(GTK_WINDOW(window), FALSE, FALSE, FALSE); -- gtk_signal_connect(GTK_OBJECT(window), "destroy", GTK_SIGNAL_FUNC(gtk_widget_destroyed), &window); -+ gtk_signal_connect(GTK_OBJECT(window), "destroy", GTK_SIGNAL_FUNC(gtk_widget_destroyed_focus), &window); - gtk_container_set_border_width(GTK_CONTAINER(window), 10); - - vbox = gtk_vbox_new(FALSE, 10); -@@ -366,6 +414,18 @@ - gtk_label_set_justify(GTK_LABEL(mpeg_fileinfo), GTK_JUSTIFY_LEFT); - gtk_box_pack_start(GTK_BOX(mpeg_box), mpeg_fileinfo, FALSE, FALSE, 0); - -+ ag = gtk_accel_group_new(); -+ gtk_accel_group_add(ag, GDK_Escape, 0, 0, GTK_OBJECT(cancel), "clicked"); -+ gtk_accel_group_add(ag, GDK_Return, 0, 0, GTK_OBJECT(save), "clicked"); -+ gtk_window_add_accel_group(GTK_WINDOW(window), ag); -+/* gtk_signal_connect(GTK_OBJECT(title_entry), "key_press_event", GTK_SIGNAL_FUNC(mpg123_keypress_cb), save); -+ gtk_signal_connect(GTK_OBJECT(artist_entry), "key_press_event", GTK_SIGNAL_FUNC(mpg123_keypress_cb), save); -+ gtk_signal_connect(GTK_OBJECT(album_entry), "key_press_event", GTK_SIGNAL_FUNC(mpg123_keypress_cb), save); -+ gtk_signal_connect(GTK_OBJECT(comment_entry), "key_press_event", GTK_SIGNAL_FUNC(mpg123_keypress_cb), save); -+ gtk_signal_connect(GTK_OBJECT(year_entry), "key_press_event", GTK_SIGNAL_FUNC(mpg123_keypress_cb), save); -+ gtk_signal_connect(GTK_OBJECT(tracknum_entry), "key_press_event", GTK_SIGNAL_FUNC(mpg123_keypress_cb), save);*/ -+ gtk_signal_connect(GTK_OBJECT(window),"key_press_event",GTK_SIGNAL_FUNC(mpg123_keypress_cb),save); -+ - gtk_widget_show_all(window); - } - -@@ -373,6 +433,9 @@ - g_free(current_filename); - current_filename = g_strdup(filename); - -+ cfilename=xmms_charset_recode_fsout(filename,0,NULL); -+ if (cfilename) filename=cfilename; -+ - title = g_strdup_printf(_("File Info - %s"), g_basename(filename)); - gtk_window_set_title(GTK_WINDOW(window), title); - g_free(title); -@@ -386,6 +449,8 @@ - gtk_entry_set_text(GTK_ENTRY(title_entry), title); - g_free(title); - -+ if (cfilename) g_free(cfilename); -+ - gtk_entry_set_text(GTK_ENTRY(artist_entry), ""); - gtk_entry_set_text(GTK_ENTRY(album_entry), ""); - gtk_entry_set_text(GTK_ENTRY(year_entry), ""); -diff -dPNur xmms-1.2.7/Input/mpg123/mpg123.c xmms-1.2.7-new/Input/mpg123/mpg123.c ---- xmms-1.2.7/Input/mpg123/mpg123.c 2002-02-20 09:17:31.000000000 -0500 -+++ xmms-1.2.7-new/Input/mpg123/mpg123.c 2003-06-20 00:02:06.000000000 -0400 -@@ -554,6 +554,7 @@ - { - gchar *ret = NULL; - TitleInput *input; -+ gint len; - - XMMS_NEW_TITLEINPUT(input); - -@@ -580,9 +581,18 @@ - /* - * Format according to filename. - */ -+ ret = xmms_charset_recode_fs(g_basename(filename),0,&len); -+ if (ret) { -+ for (;len>=0;len--) -+ if (ret[len]=='.') { -+ ret[len]=0; -+ break; -+ } -+ } else { - ret = g_strdup(g_basename(filename)); - if (extname(ret) != NULL) - *(extname(ret) - 1) = '\0'; /* removes period */ -+ } - } - - return ret; -diff -dPNur xmms-1.2.7/Input/vorbis/vorbis.c xmms-1.2.7-new/Input/vorbis/vorbis.c ---- xmms-1.2.7/Input/vorbis/vorbis.c 2002-03-04 16:56:45.000000000 -0500 -+++ xmms-1.2.7-new/Input/vorbis/vorbis.c 2003-06-20 00:02:06.000000000 -0400 -@@ -40,6 +40,7 @@ - #include "libxmms/util.h" - #include "libxmms/configfile.h" - #include "libxmms/titlestring.h" -+#include "libxmms/charset.h" - #include <xmms/i18n.h> - - #include "vorbis.h" -@@ -537,6 +538,7 @@ - gchar *displaytitle = NULL, *tmp; - vorbis_comment *comment; - TitleInput *input; -+ gint len; - - XMMS_NEW_TITLEINPUT(input); - -@@ -569,9 +571,18 @@ - g_free(input); - - if (!displaytitle) { -- if (!vorbis_is_streaming) -- displaytitle = g_strdup_printf("%s", g_basename(fn)); -- else -+ if (!vorbis_is_streaming) { -+ displaytitle = xmms_charset_recode_fs(g_basename(fn),0,&len); -+ if (displaytitle) { -+ for (;len>=0;len--) -+ if (displaytitle[len]=='.') { -+ displaytitle[len]=0; -+ break; -+ } -+ } else { -+ displaytitle = g_strdup_printf("%s", g_basename(fn)); -+ } -+ } else - displaytitle = vorbis_http_get_title(fn); - } - -diff -dPNur xmms-1.2.7/libxmms/charset_auto_russian.h xmms-1.2.7-new/libxmms/charset_auto_russian.h ---- xmms-1.2.7/libxmms/charset_auto_russian.h 1969-12-31 19:00:00.000000000 -0500 -+++ xmms-1.2.7-new/libxmms/charset_auto_russian.h 2003-06-20 00:02:06.000000000 -0400 -@@ -0,0 +1,293 @@ -+/* Stealed from GPPL's (http://gppl.terminal.ru) autorecode-xmms1.2.7 patch, -+ changed to support limited size strings */ -+ -+typedef struct lng_stat { -+ unsigned char a; -+ unsigned char b; -+ int rate; -+} lng_stat; -+ -+//statistics calculated from "Moskva-Petushki" -+//1292 elems -+static const lng_stat win[]={ -+{'À','À',1}, {'À','Â',1}, {'À','Ç',1}, {'À','È',1}, {'À','Ê',1}, {'À','Ë',1}, {'À','Ì',8}, {'À','Í',2}, {'À','Ï',2}, {'À','Ð',1}, {'À','Ñ',4}, {'À','Ò',2}, {'À','Ô',1}, {'À','Õ',1}, {'À','×',1}, {'À','Ø',1}, -+{'À','Ý',1}, {'À','à',1}, {'À','á',6}, {'À','â',60}, {'À','ã',5}, {'À','ä',7}, {'À','å',23}, {'À','æ',2}, {'À','ç',6}, {'À','è',4}, {'À','é',1}, {'À','ê',27}, {'À','ë',15}, {'À','ì',10}, {'À','í',25}, {'À','î',21}, -+{'À','ï',51}, {'À','ð',12}, {'À','ñ',13}, {'À','ò',31}, {'À','ó',15}, {'À','ô',1}, {'À','õ',6}, {'À','÷',17}, {'À','ý',8}, {'À','ÿ',20}, {'Á','Â',1}, {'Á','Ä',1}, {'Á','Í',2}, {'Á','Ò',1}, {'Á','à',3}, {'Á','â',2}, -+{'Á','å',16}, {'Á','è',1}, {'Á','ë',4}, {'Á','í',3}, {'Á','î',25}, {'Á','ð',10}, {'Á','ó',9}, {'Á','û',8}, {'Â','À',1}, {'Â','Ê',2}, {'Â','Ì',1}, {'Â','Î',3}, {'Â','Ï',8}, {'Â','Ñ',2}, {'Â','Õ',1}, {'Â','Ø',2}, -+{'Â','à',15}, {'Â','â',2}, {'Â','ã',3}, {'Â','ä',5}, {'Â','å',98}, {'Â','ç',5}, {'Â','è',7}, {'Â','ê',5}, {'Â','ë',8}, {'Â','ì',7}, {'Â','í',6}, {'Â','î',107}, {'Â','ï',18}, {'Â','ð',2}, {'Â','ñ',74}, {'Â','ò',6}, -+{'Â','ó',1}, {'Â','÷',3}, {'Â','û',39}, {'Â','ý',8}, {'Ã','Î',2}, {'Ã','à',6}, {'Ã','ä',16}, {'Ã','å',26}, {'Ã','è',4}, {'Ã','ë',3}, {'Ã','ì',1}, {'Ã','î',31}, {'Ã','ð',7}, {'Ã','ó',2}, {'Ä','à',167}, {'Ä','â',6}, -+{'Ä','å',17}, {'Ä','è',3}, {'Ä','ë',7}, {'Ä','ì',3}, {'Ä','í',1}, {'Ä','î',20}, {'Ä','ð',9}, {'Ä','ó',19}, {'Å','Ã',2}, {'Å','Õ',1}, {'Å','Ø',1}, {'Å','â',9}, {'Å','ä',1}, {'Å','å',1}, {'Å','é',1}, {'Å','ë',5}, -+{'Å','ì',2}, {'Å','ð',19}, {'Å','ñ',69}, {'Å','ô',1}, {'Å','õ',1}, {'Å','ù',5}, {'Æ','à',5}, {'Æ','ä',1}, {'Æ','å',14}, {'Æ','è',5}, {'Æ','î',2}, {'Æ','ð',1}, {'Ç','È',1}, {'Ç','à',31}, {'Ç','â',3}, {'Ç','å',1}, -+{'Ç','è',2}, {'Ç','í',23}, {'Ç','ð',2}, {'Ç','ó',12}, {'È','À',1}, {'È','Â',1}, {'È','Ë',2}, {'È','Ì',2}, {'È','Ñ',2}, {'È','à',2}, {'È','á',8}, {'È','â',78}, {'È','ã',7}, {'È','ä',20}, {'È','å',7}, {'È','æ',1}, -+{'È','ç',17}, {'È','è',3}, {'È','ê',27}, {'È','ë',15}, {'È','ì',11}, {'È','í',21}, {'È','î',26}, {'È','ï',21}, {'È','ð',4}, {'È','ñ',21}, {'È','ò',37}, {'È','ó',5}, {'È','ô',2}, {'È','õ',3}, {'È','÷',8}, {'È','ø',1}, -+{'È','ý',2}, {'È','ÿ',12}, {'Ê','Ï',3}, {'Ê','à',100}, {'Ê','è',4}, {'Ê','ê',1}, {'Ê','ë',14}, {'Ê','í',4}, {'Ê','î',62}, {'Ê','ï',2}, {'Ê','ð',24}, {'Ê','ò',10}, {'Ê','ó',62}, {'Ë','À',1}, {'Ë','È',1}, {'Ë','Î',2}, -+{'Ë','à',7}, {'Ë','å',11}, {'Ë','è',4}, {'Ë','î',12}, {'Ë','ó',15}, {'Ë','þ',3}, {'Ë','ÿ',1}, {'Ì','À',1}, {'Ì','È',1}, {'Ì','Î',1}, {'Ì','Ï',1}, {'Ì','à',31}, {'Ì','â',3}, {'Ì','ã',1}, {'Ì','å',10}, {'Ì','è',44}, -+{'Ì','ë',1}, {'Ì','í',19}, {'Ì','î',93}, {'Ì','ð',1}, {'Ì','ó',6}, {'Ì','û',29}, {'Í','À',2}, {'Í','Ç',1}, {'Í','È',3}, {'Í','à',56}, {'Í','å',111}, {'Í','è',47}, {'Í','í',2}, {'Í','î',98}, {'Í','ó',100}, {'Î','Â',1}, -+{'Î','Å',2}, {'Î','Í',6}, {'Î','Ð',1}, {'Î','Ò',1}, {'Î','Ó',1}, {'Î','ß',1}, {'Î','á',18}, {'Î','â',1}, {'Î','ã',4}, {'Î','ä',20}, {'Î','ç',2}, {'Î','è',2}, {'Î','ê',7}, {'Î','ë',9}, {'Î','ì',2}, {'Î','í',96}, -+{'Î','î',5}, {'Î','ï',17}, {'Î','ð',16}, {'Î','ñ',21}, {'Î','ò',35}, {'Î','÷',13}, {'Î','ù',1}, {'Î','ý',6}, {'Ï','Ñ',3}, {'Ï','à',18}, {'Ï','å',148}, {'Ï','è',11}, {'Ï','ë',9}, {'Ï','î',186}, {'Ï','ð',43}, {'Ï','ó',38}, -+{'Ï','ü',4}, {'Ð','Ë',1}, {'Ð','à',22}, {'Ð','å',13}, {'Ð','è',5}, {'Ð','î',13}, {'Ð','ð',1}, {'Ð','ó',1}, {'Ñ','À',2}, {'Ñ','Â',1}, {'Ñ','Ñ',3}, {'Ñ','à',19}, {'Ñ','á',1}, {'Ñ','â',4}, {'Ñ','ä',1}, {'Ñ','å',56}, -+{'Ñ','è',16}, {'Ñ','ê',22}, {'Ñ','ë',11}, {'Ñ','ì',12}, {'Ñ','í',6}, {'Ñ','î',26}, {'Ñ','ï',6}, {'Ñ','ð',6}, {'Ñ','ñ',3}, {'Ñ','ò',35}, {'Ñ','ó',4}, {'Ñ','õ',2}, {'Ñ','÷',2}, {'Ñ','û',1}, {'Ñ','ý',1}, {'Ñ','ÿ',1}, -+{'Ò','À',4}, {'Ò','Å',1}, {'Ò','È',1}, {'Ò','Î',1}, {'Ò','à',79}, {'Ò','â',1}, {'Ò','å',18}, {'Ò','è',17}, {'Ò','î',34}, {'Ò','ð',11}, {'Ò','ó',31}, {'Ò','û',55}, {'Ò','ü',2}, {'Ò','ÿ',3}, {'Ó','á',2}, {'Ó','â',3}, -+{'Ó','ã',1}, {'Ó','ä',3}, {'Ó','å',2}, {'Ó','æ',4}, {'Ó','ç',4}, {'Ó','è',1}, {'Ó','é',2}, {'Ó','ê',1}, {'Ó','ë',2}, {'Ó','ì',9}, {'Ó','í',5}, {'Ó','î',1}, {'Ó','ï',1}, {'Ó','ñ',9}, {'Ó','ò',8}, {'Ó','õ',2}, -+{'Ó','÷',1}, {'Ó','ø',1}, {'Ô','À',1}, {'Ô','à',7}, {'Ô','å',2}, {'Ô','î',1}, {'Ô','ð',16}, {'Ô','ô',2}, {'Õ','Ô',1}, {'Õ','à',8}, {'Õ','â',1}, {'Õ','å',3}, {'Õ','î',20}, {'Õ','ð',14}, {'Ö','à',7}, {'Ö','è',3}, -+{'Ö','ñ',1}, {'Ö','ò',1}, {'Ö','û',1}, {'×','å',46}, {'×','ò',60}, {'×','ó',8}, {'×','ü',1}, {'Ø','È',1}, {'Ø','à',3}, {'Ø','å',7}, {'Ø','è',8}, {'Ø','ò',8}, {'Ø','ó',7}, {'Ø','ø',1}, {'Ý','Ò',1}, {'Ý','á',5}, -+{'Ý','â',1}, {'Ý','é',1}, {'Ý','ë',4}, {'Ý','í',1}, {'Ý','ð',10}, {'Ý','ñ',1}, {'Ý','ò',61}, {'Ý','õ',1}, {'Þ','ç',2}, {'Þ','ð',1}, {'ß','Í',1}, {'ß','á',4}, {'ß','â',49}, {'ß','ã',5}, {'ß','ä',8}, {'ß','å',9}, -+{'ß','æ',2}, {'ß','ç',12}, {'ß','è',4}, {'ß','ê',10}, {'ß','ë',5}, {'ß','ì',6}, {'ß','í',28}, {'ß','î',24}, {'ß','ï',39}, {'ß','ð',4}, {'ß','ñ',30}, {'ß','ò',7}, {'ß','ó',5}, {'ß','õ',3}, {'ß','÷',4}, {'ß','ø',3}, -+{'ß','ý',3}, {'à','À',56}, {'à','Á',18}, {'à','Â',48}, {'à','Ã',9}, {'à','Ä',26}, {'à','Å',12}, {'à','Æ',7}, {'à','Ç',11}, {'à','È',53}, {'à','Ê',59}, {'à','Ë',9}, {'à','Ì',21}, {'à','Í',32}, {'à','Î',27}, {'à','Ï',52}, -+{'à','Ð',7}, {'à','Ñ',21}, {'à','Ò',42}, {'à','Ó',10}, {'à','Ô',1}, {'à','Õ',4}, {'à','×',16}, {'à','Ø',2}, {'à','Ý',7}, {'à','ß',22}, {'à','à',69}, {'à','á',257}, {'à','â',701}, {'à','ã',218}, {'à','ä',548}, {'à','å',328}, -+{'à','æ',262}, {'à','ç',626}, {'à','è',225}, {'à','é',194}, {'à','ê',1285}, {'à','ë',1288}, {'à','ì',771}, {'à','í',911}, {'à','î',166}, {'à','ï',421}, {'à','ð',368}, {'à','ñ',802}, {'à','ò',874}, {'à','ó',98}, {'à','ô',38}, {'à','õ',228}, -+{'à','ö',24}, {'à','÷',300}, {'à','ø',121}, {'à','ù',27}, {'à','ý',63}, {'à','þ',238}, {'à','ÿ',384}, {'á','À',1}, {'á','Ï',1}, {'á','Ô',1}, {'á','à',199}, {'á','á',6}, {'á','â',13}, {'á','ä',6}, {'á','å',420}, {'á','ç',2}, -+{'á','è',142}, {'á','ê',7}, {'á','ë',137}, {'á','ì',7}, {'á','í',31}, {'á','î',327}, {'á','ï',4}, {'á','ð',172}, {'á','ñ',18}, {'á','ò',1}, {'á','ó',288}, {'á','õ',11}, {'á','ö',3}, {'á','÷',2}, {'á','ø',1}, {'á','ù',32}, -+{'á','û',561}, {'á','ü',10}, {'á','ý',7}, {'á','þ',1}, {'á','ÿ',134}, {'â','À',11}, {'â','Á',1}, {'â','Â',6}, {'â','Ã',7}, {'â','Ä',5}, {'â','Å',5}, {'â','È',6}, {'â','Ê',14}, {'â','Ë',2}, {'â','Ì',9}, {'â','Í',13}, -+{'â','Î',17}, {'â','Ï',51}, {'â','Ð',7}, {'â','Ñ',18}, {'â','Ò',4}, {'â','Ó',2}, {'â','Õ',8}, {'â','Ö',1}, {'â','×',2}, {'â','Ø',7}, {'â','Ý',2}, {'â','ß',4}, {'â','à',989}, {'â','á',26}, {'â','â',62}, {'â','ã',43}, -+{'â','ä',74}, {'â','å',911}, {'â','æ',26}, {'â','ç',88}, {'â','è',387}, {'â','é',1}, {'â','ê',105}, {'â','ë',122}, {'â','ì',65}, {'â','í',231}, {'â','î',1220}, {'â','ï',118}, {'â','ð',97}, {'â','ñ',851}, {'â','ò',123}, {'â','ó',116}, -+{'â','ô',1}, {'â','õ',9}, {'â','ö',11}, {'â','÷',47}, {'â','ø',53}, {'â','ù',2}, {'â','û',518}, {'â','ü',33}, {'â','ý',44}, {'â','þ',3}, {'â','ÿ',48}, {'ã','À',3}, {'ã','Á',1}, {'ã','Â',3}, {'ã','Ä',1}, {'ã','Ç',3}, -+{'ã','È',3}, {'ã','Ë',4}, {'ã','Í',1}, {'ã','Î',4}, {'ã','Ï',3}, {'ã','Ð',1}, {'ã','Ñ',2}, {'ã','Ò',2}, {'ã','×',1}, {'ã','Ø',1}, {'ã','ß',2}, {'ã','à',210}, {'ã','á',18}, {'ã','â',6}, {'ã','ã',3}, {'ã','ä',191}, -+{'ã','å',83}, {'ã','ç',2}, {'ã','è',103}, {'ã','ê',20}, {'ã','ë',205}, {'ã','ì',3}, {'ã','í',62}, {'ã','î',1340}, {'ã','ï',7}, {'ã','ð',180}, {'ã','ñ',13}, {'ã','ò',4}, {'ã','ó',88}, {'ã','õ',1}, {'ã','÷',15}, {'ã','ý',1}, -+{'ã','ÿ',4}, {'ä','À',1}, {'ä','Â',2}, {'ä','Ä',2}, {'ä','Ç',1}, {'ä','È',2}, {'ä','Ê',1}, {'ä','Ì',1}, {'ä','Í',2}, {'ä','Ï',2}, {'ä','Ò',1}, {'ä','Ó',1}, {'ä','Ô',1}, {'ä','×',2}, {'ä','ß',2}, {'ä','à',795}, -+{'ä','á',7}, {'ä','â',165}, {'ä','ã',6}, {'ä','ä',14}, {'ä','å',839}, {'ä','æ',8}, {'ä','ç',7}, {'ä','è',487}, {'ä','é',1}, {'ä','ê',79}, {'ä','ë',78}, {'ä','ì',10}, {'ä','í',289}, {'ä','î',613}, {'ä','ï',17}, {'ä','ð',195}, -+{'ä','ñ',62}, {'ä','ò',41}, {'ä','ó',417}, {'ä','ô',1}, {'ä','õ',11}, {'ä','ö',138}, {'ä','÷',6}, {'ä','û',111}, {'ä','ü',200}, {'ä','ý',6}, {'ä','ÿ',68}, {'å','À',30}, {'å','Á',8}, {'å','Â',33}, {'å','Ã',7}, {'å','Ä',34}, -+{'å','Å',13}, {'å','Æ',1}, {'å','Ç',6}, {'å','È',21}, {'å','Ê',21}, {'å','Ë',4}, {'å','Ì',13}, {'å','Í',20}, {'å','Î',21}, {'å','Ï',31}, {'å','Ð',2}, {'å','Ñ',13}, {'å','Ò',10}, {'å','Ó',7}, {'å','Ô',4}, {'å','Õ',2}, -+{'å','Ö',1}, {'å','×',9}, {'å','Ø',2}, {'å','Ý',11}, {'å','Þ',1}, {'å','ß',25}, {'å','à',44}, {'å','á',463}, {'å','â',704}, {'å','ã',592}, {'å','ä',613}, {'å','å',281}, {'å','æ',136}, {'å','ç',444}, {'å','è',177}, {'å','é',297}, -+{'å','ê',398}, {'å','ë',926}, {'å','ì',982}, {'å','í',1512}, {'å','î',206}, {'å','ï',524}, {'å','ð',1231}, {'å','ñ',1082}, {'å','ò',1607}, {'å','ó',103}, {'å','ô',15}, {'å','õ',182}, {'å','ö',66}, {'å','÷',308}, {'å','ø',235}, {'å','ù',137}, -+{'å','ý',79}, {'å','þ',24}, {'å','ÿ',87}, {'æ','Â',1}, {'æ','È',2}, {'æ','Í',1}, {'æ','Î',1}, {'æ','Ï',3}, {'æ','à',187}, {'æ','á',4}, {'æ','â',9}, {'æ','ã',1}, {'æ','ä',145}, {'æ','å',690}, {'æ','æ',4}, {'æ','ç',1}, -+{'æ','è',214}, {'æ','ê',35}, {'æ','ë',1}, {'æ','ì',8}, {'æ','í',96}, {'æ','î',13}, {'æ','ï',14}, {'æ','ð',7}, {'æ','ñ',4}, {'æ','ò',8}, {'æ','ó',69}, {'æ','õ',1}, {'æ','÷',1}, {'æ','ü',6}, {'æ','ý',2}, {'æ','ÿ',7}, -+{'ç','À',1}, {'ç','Â',1}, {'ç','Æ',1}, {'ç','È',2}, {'ç','Ê',1}, {'ç','Ì',4}, {'ç','Í',3}, {'ç','Î',1}, {'ç','Ï',8}, {'ç','Ñ',4}, {'ç','Ò',2}, {'ç','Ö',1}, {'ç','×',2}, {'ç','ß',2}, {'ç','à',889}, {'ç','á',39}, -+{'ç','â',147}, {'ç','ã',67}, {'ç','ä',174}, {'ç','å',56}, {'ç','æ',18}, {'ç','ç',11}, {'ç','è',113}, {'ç','ê',16}, {'ç','ë',33}, {'ç','ì',64}, {'ç','í',302}, {'ç','î',109}, {'ç','ï',31}, {'ç','ð',53}, {'ç','ñ',21}, {'ç','ò',7}, -+{'ç','ó',109}, {'ç','õ',3}, {'ç','÷',11}, {'ç','ø',4}, {'ç','û',71}, {'ç','ü',20}, {'ç','ý',4}, {'ç','ÿ',43}, {'è','À',39}, {'è','Á',10}, {'è','Â',46}, {'è','Ã',5}, {'è','Ä',25}, {'è','Å',11}, {'è','Æ',2}, {'è','Ç',1}, -+{'è','È',30}, {'è','Ê',24}, {'è','Ë',5}, {'è','Ì',36}, {'è','Í',39}, {'è','Î',25}, {'è','Ï',49}, {'è','Ð',3}, {'è','Ñ',22}, {'è','Ò',25}, {'è','Ó',8}, {'è','Ô',3}, {'è','Õ',4}, {'è','Ö',2}, {'è','×',4}, {'è','Ø',3}, -+{'è','Ý',7}, {'è','ß',28}, {'è','à',90}, {'è','á',242}, {'è','â',658}, {'è','ã',153}, {'è','ä',435}, {'è','å',280}, {'è','æ',87}, {'è','ç',388}, {'è','è',301}, {'è','é',216}, {'è','ê',492}, {'è','ë',888}, {'è','ì',573}, {'è','í',958}, -+{'è','î',216}, {'è','ï',335}, {'è','ð',275}, {'è','ñ',668}, {'è','ò',949}, {'è','ó',108}, {'è','ô',17}, {'è','õ',324}, {'è','ö',123}, {'è','÷',363}, {'è','ø',134}, {'è','ù',36}, {'è','ý',39}, {'è','þ',22}, {'è','ÿ',234}, {'é','À',20}, -+{'é','Á',6}, {'é','Â',20}, {'é','Ã',6}, {'é','Ä',16}, {'é','Å',6}, {'é','Ç',2}, {'é','È',22}, {'é','Ê',18}, {'é','Ë',2}, {'é','Ì',12}, {'é','Í',13}, {'é','Î',15}, {'é','Ï',13}, {'é','Ð',7}, {'é','Ñ',9}, {'é','Ò',15}, -+{'é','Ó',3}, {'é','Ô',1}, {'é','Õ',1}, {'é','×',1}, {'é','Ý',7}, {'é','ß',8}, {'é','à',21}, {'é','á',36}, {'é','â',112}, {'é','ã',26}, {'é','ä',100}, {'é','å',15}, {'é','æ',21}, {'é','ç',30}, {'é','è',88}, {'é','é',1}, -+{'é','ê',87}, {'é','ë',25}, {'é','ì',47}, {'é','í',117}, {'é','î',55}, {'é','ï',133}, {'é','ð',42}, {'é','ñ',162}, {'é','ò',131}, {'é','ó',17}, {'é','ô',6}, {'é','õ',7}, {'é','ö',11}, {'é','÷',69}, {'é','ø',20}, {'é','ù',2}, -+{'é','ý',15}, {'é','ÿ',16}, {'ê','À',11}, {'ê','Â',13}, {'ê','Ã',7}, {'ê','Ä',4}, {'ê','Å',2}, {'ê','Æ',1}, {'ê','Ç',5}, {'ê','È',8}, {'ê','Ê',9}, {'ê','Ë',2}, {'ê','Ì',5}, {'ê','Í',20}, {'ê','Î',7}, {'ê','Ï',9}, -+{'ê','Ñ',7}, {'ê','Ò',9}, {'ê','Ó',4}, {'ê','Õ',1}, {'ê','Ö',1}, {'ê','×',4}, {'ê','Ý',2}, {'ê','ß',8}, {'ê','à',1358}, {'ê','á',49}, {'ê','â',147}, {'ê','ã',15}, {'ê','ä',48}, {'ê','å',93}, {'ê','æ',22}, {'ê','ç',55}, -+{'ê','è',678}, {'ê','ê',28}, {'ê','ë',81}, {'ê','ì',22}, {'ê','í',151}, {'ê','î',1337}, {'ê','ï',64}, {'ê','ð',273}, {'ê','ñ',131}, {'ê','ò',238}, {'ê','ó',384}, {'ê','ô',7}, {'ê','õ',10}, {'ê','ö',5}, {'ê','÷',31}, {'ê','ø',2}, -+{'ê','û',2}, {'ê','ý',13}, {'ê','ÿ',25}, {'ë','À',20}, {'ë','Á',2}, {'ë','Â',25}, {'ë','Ã',5}, {'ë','Ä',14}, {'ë','Å',3}, {'ë','Æ',1}, {'ë','È',19}, {'ë','Ê',12}, {'ë','Ë',2}, {'ë','Ì',14}, {'ë','Í',31}, {'ë','Î',20}, -+{'ë','Ï',20}, {'ë','Ð',1}, {'ë','Ñ',20}, {'ë','Ò',10}, {'ë','Ó',1}, {'ë','Ô',1}, {'ë','Õ',1}, {'ë','Ö',1}, {'ë','×',2}, {'ë','Ý',4}, {'ë','ß',19}, {'ë','à',758}, {'ë','á',34}, {'ë','â',102}, {'ë','ã',35}, {'ë','ä',55}, -+{'ë','å',675}, {'ë','æ',33}, {'ë','ç',23}, {'ë','è',1300}, {'ë','é',1}, {'ë','ê',114}, {'ë','ë',21}, {'ë','ì',45}, {'ë','í',111}, {'ë','î',947}, {'ë','ï',83}, {'ë','ð',18}, {'ë','ñ',320}, {'ë','ò',61}, {'ë','ó',264}, {'ë','ô',5}, -+{'ë','õ',7}, {'ë','ö',2}, {'ë','÷',66}, {'ë','ø',1}, {'ë','û',146}, {'ë','ü',642}, {'ë','ý',21}, {'ë','þ',159}, {'ë','ÿ',299}, {'ì','À',11}, {'ì','Á',2}, {'ì','Â',14}, {'ì','Ã',8}, {'ì','Ä',10}, {'ì','Å',1}, {'ì','Ç',5}, -+{'ì','È',12}, {'ì','Ê',10}, {'ì','Ì',6}, {'ì','Í',23}, {'ì','Î',12}, {'ì','Ï',12}, {'ì','Ð',1}, {'ì','Ñ',9}, {'ì','Ò',16}, {'ì','Ó',2}, {'ì','Õ',2}, {'ì','×',3}, {'ì','Ø',1}, {'ì','Ý',1}, {'ì','ß',10}, {'ì','à',447}, -+{'ì','á',69}, {'ì','â',119}, {'ì','ã',33}, {'ì','ä',41}, {'ì','å',838}, {'ì','æ',27}, {'ì','ç',38}, {'ì','è',484}, {'ì','é',2}, {'ì','ê',71}, {'ì','ë',74}, {'ì','ì',96}, {'ì','í',497}, {'ì','î',761}, {'ì','ï',132}, {'ì','ð',41}, -+{'ì','ñ',137}, {'ì','ò',74}, {'ì','ó',411}, {'ì','ô',5}, {'ì','õ',13}, {'ì','ö',4}, {'ì','÷',46}, {'ì','ø',3}, {'ì','ù',3}, {'ì','û',207}, {'ì','ü',33}, {'ì','ý',17}, {'ì','ÿ',82}, {'í','À',11}, {'í','Â',5}, {'í','Ã',8}, -+{'í','Ä',3}, {'í','Å',4}, {'í','È',7}, {'í','Ê',10}, {'í','Ë',1}, {'í','Ì',2}, {'í','Í',6}, {'í','Î',2}, {'í','Ï',9}, {'í','Ð',2}, {'í','Ñ',2}, {'í','Ò',6}, {'í','Ó',1}, {'í','Ö',1}, {'í','×',6}, {'í','Ø',1}, -+{'í','Ý',2}, {'í','ß',2}, {'í','à',1706}, {'í','á',28}, {'í','â',55}, {'í','ã',48}, {'í','ä',97}, {'í','å',1870}, {'í','æ',5}, {'í','ç',20}, {'í','è',1319}, {'í','ê',84}, {'í','ë',7}, {'í','ì',11}, {'í','í',331}, {'í','î',1483}, -+{'í','ï',54}, {'í','ð',27}, {'í','ñ',133}, {'í','ò',165}, {'í','ó',480}, {'í','ô',14}, {'í','õ',4}, {'í','ö',65}, {'í','÷',55}, {'í','ø',3}, {'í','ù',31}, {'í','û',385}, {'í','ü',196}, {'í','ý',7}, {'í','þ',30}, {'í','ÿ',396}, -+{'î','À',34}, {'î','Á',5}, {'î','Â',44}, {'î','Ã',9}, {'î','Ä',16}, {'î','Å',16}, {'î','Æ',4}, {'î','Ç',17}, {'î','È',43}, {'î','Ê',17}, {'î','Ë',3}, {'î','Ì',23}, {'î','Í',49}, {'î','Î',23}, {'î','Ï',40}, {'î','Ð',6}, -+{'î','Ñ',14}, {'î','Ò',19}, {'î','Ó',4}, {'î','Ô',7}, {'î','Õ',4}, {'î','Ö',2}, {'î','×',12}, {'î','Ý',5}, {'î','ß',27}, {'î','à',34}, {'î','á',652}, {'î','â',1590}, {'î','ã',915}, {'î','ä',946}, {'î','å',457}, {'î','æ',437}, -+{'î','ç',279}, {'î','è',291}, {'î','é',602}, {'î','ê',498}, {'î','ë',923}, {'î','ì',1073}, {'î','í',1281}, {'î','î',241}, {'î','ï',588}, {'î','ð',921}, {'î','ñ',1264}, {'î','ò',1536}, {'î','ó',152}, {'î','ô',35}, {'î','õ',137}, {'î','ö',51}, -+{'î','÷',459}, {'î','ø',223}, {'î','ù',56}, {'î','ý',89}, {'î','þ',81}, {'î','ÿ',154}, {'ï','Â',2}, {'ï','È',1}, {'ï','Ê',1}, {'ï','à',252}, {'ï','â',1}, {'ï','ä',1}, {'ï','å',364}, {'ï','è',356}, {'ï','ê',8}, {'ï','ë',189}, -+{'ï','í',11}, {'ï','î',1543}, {'ï','ï',6}, {'ï','ð',845}, {'ï','ñ',6}, {'ï','ò',23}, {'ï','ó',202}, {'ï','÷',2}, {'ï','û',33}, {'ï','ü',122}, {'ï','ÿ',149}, {'ð','À',3}, {'ð','Á',4}, {'ð','Â',3}, {'ð','Ä',6}, {'ð','Å',2}, -+{'ð','Ç',1}, {'ð','Ê',2}, {'ð','Ì',1}, {'ð','Í',5}, {'ð','Î',8}, {'ð','Ï',10}, {'ð','Ñ',2}, {'ð','Ò',4}, {'ð','Ô',2}, {'ð','Õ',1}, {'ð','×',2}, {'ð','Ý',3}, {'ð','ß',6}, {'ð','à',1264}, {'ð','á',29}, {'ð','â',98}, -+{'ð','ã',53}, {'ð','ä',129}, {'ð','å',936}, {'ð','æ',41}, {'ð','ç',20}, {'ð','è',777}, {'ð','é',1}, {'ð','ê',54}, {'ð','ë',29}, {'ð','ì',39}, {'ð','í',181}, {'ð','î',1126}, {'ð','ï',38}, {'ð','ð',34}, {'ð','ñ',76}, {'ð','ò',122}, -+{'ð','ó',355}, {'ð','ô',8}, {'ð','õ',36}, {'ð','ö',23}, {'ð','÷',9}, {'ð','ø',49}, {'ð','ù',5}, {'ð','û',169}, {'ð','ü',98}, {'ð','ý',7}, {'ð','þ',59}, {'ð','ÿ',159}, {'ñ','À',6}, {'ñ','Â',4}, {'ñ','Ã',2}, {'ñ','Ä',2}, -+{'ñ','Æ',1}, {'ñ','Ç',1}, {'ñ','È',4}, {'ñ','Ê',2}, {'ñ','Ë',3}, {'ñ','Ì',4}, {'ñ','Í',5}, {'ñ','Î',3}, {'ñ','Ï',3}, {'ñ','Ð',1}, {'ñ','Ñ',2}, {'ñ','Ò',1}, {'ñ','×',1}, {'ñ','Ý',3}, {'ñ','ß',1}, {'ñ','à',306}, -+{'ñ','á',33}, {'ñ','â',259}, {'ñ','ã',18}, {'ñ','ä',41}, {'ñ','å',973}, {'ñ','æ',8}, {'ñ','ç',11}, {'ñ','è',295}, {'ñ','ê',691}, {'ñ','ë',519}, {'ñ','ì',222}, {'ñ','í',236}, {'ñ','î',403}, {'ñ','ï',274}, {'ñ','ð',58}, {'ñ','ñ',222}, -+{'ñ','ò',1721}, {'ñ','ó',146}, {'ñ','ô',18}, {'ñ','õ',34}, {'ñ','ö',6}, {'ñ','÷',48}, {'ñ','ø',20}, {'ñ','ù',2}, {'ñ','û',79}, {'ñ','ü',401}, {'ñ','ý',10}, {'ñ','þ',27}, {'ñ','ÿ',680}, {'ò','À',29}, {'ò','Á',5}, {'ò','Â',25}, -+{'ò','Ã',3}, {'ò','Ä',11}, {'ò','Å',9}, {'ò','Æ',2}, {'ò','Ç',5}, {'ò','È',16}, {'ò','Ê',21}, {'ò','Ì',20}, {'ò','Í',24}, {'ò','Î',10}, {'ò','Ï',23}, {'ò','Ð',2}, {'ò','Ñ',10}, {'ò','Ò',13}, {'ò','Ó',2}, {'ò','Ô',2}, -+{'ò','Õ',3}, {'ò','×',11}, {'ò','Ø',1}, {'ò','Ý',3}, {'ò','Þ',1}, {'ò','ß',16}, {'ò','à',1225}, {'ò','á',56}, {'ò','â',436}, {'ò','ã',25}, {'ò','ä',67}, {'ò','å',864}, {'ò','æ',17}, {'ò','ç',33}, {'ò','è',758}, {'ò','é',1}, -+{'ò','ê',180}, {'ò','ë',52}, {'ò','ì',65}, {'ò','í',329}, {'ò','î',2625}, {'ò','ï',119}, {'ò','ð',616}, {'ò','ñ',337}, {'ò','ò',117}, {'ò','ó',398}, {'ò','ô',1}, {'ò','õ',24}, {'ò','ö',10}, {'ò','÷',87}, {'ò','ø',3}, {'ò','ù',4}, -+{'ò','û',398}, {'ò','ü',1292}, {'ò','ý',37}, {'ò','þ',13}, {'ò','ÿ',103}, {'ó','À',22}, {'ó','Á',4}, {'ó','Â',19}, {'ó','Ã',4}, {'ó','Ä',20}, {'ó','Å',3}, {'ó','Ç',2}, {'ó','È',25}, {'ó','Ê',9}, {'ó','Ë',6}, {'ó','Ì',12}, -+{'ó','Í',18}, {'ó','Î',13}, {'ó','Ï',18}, {'ó','Ð',1}, {'ó','Ñ',18}, {'ó','Ò',12}, {'ó','Ó',2}, {'ó','Ô',2}, {'ó','Õ',5}, {'ó','×',6}, {'ó','Ø',3}, {'ó','Ý',5}, {'ó','ß',17}, {'ó','à',45}, {'ó','á',142}, {'ó','â',184}, -+{'ó','ã',161}, {'ó','ä',445}, {'ó','å',83}, {'ó','æ',269}, {'ó','ç',75}, {'ó','è',111}, {'ó','é',40}, {'ó','ê',169}, {'ó','ë',251}, {'ó','ì',322}, {'ó','í',195}, {'ó','î',50}, {'ó','ï',258}, {'ó','ð',203}, {'ó','ñ',380}, {'ó','ò',442}, -+{'ó','ó',24}, {'ó','ô',5}, {'ó','õ',97}, {'ó','÷',241}, {'ó','ø',302}, {'ó','ù',37}, {'ó','ý',19}, {'ó','þ',156}, {'ó','ÿ',31}, {'ô','Ï',1}, {'ô','Ö',2}, {'ô','à',21}, {'ô','å',45}, {'ô','è',47}, {'ô','ë',14}, {'ô','í',2}, -+{'ô','î',24}, {'ô','ð',20}, {'ô','ñ',4}, {'ô','ò',5}, {'ô','ó',8}, {'ô','ô',6}, {'ô','û',4}, {'ô','ü',1}, {'ô','þ',2}, {'õ','À',7}, {'õ','Â',7}, {'õ','Ä',4}, {'õ','Å',3}, {'õ','Æ',3}, {'õ','È',5}, {'õ','Ê',4}, -+{'õ','Ë',2}, {'õ','Ì',1}, {'õ','Í',10}, {'õ','Î',5}, {'õ','Ï',7}, {'õ','Ñ',4}, {'õ','Ò',5}, {'õ','×',3}, {'õ','Ø',5}, {'õ','Ý',2}, {'õ','ß',5}, {'õ','à',135}, {'õ','á',21}, {'õ','â',72}, {'õ','ã',27}, {'õ','ä',21}, -+{'õ','å',25}, {'õ','æ',4}, {'õ','ç',13}, {'õ','è',75}, {'õ','ê',16}, {'õ','ë',43}, {'õ','ì',49}, {'õ','í',83}, {'õ','î',450}, {'õ','ï',70}, {'õ','ð',19}, {'õ','ñ',39}, {'õ','ò',27}, {'õ','ó',42}, {'õ','ô',3}, {'õ','õ',4}, -+{'õ','ö',2}, {'õ','÷',18}, {'õ','ø',8}, {'õ','û',1}, {'õ','ü',6}, {'õ','ý',7}, {'õ','ÿ',9}, {'ö','À',1}, {'ö','Ã',1}, {'ö','È',2}, {'ö','Ê',1}, {'ö','Ë',1}, {'ö','Ì',1}, {'ö','Ï',1}, {'ö','Ò',1}, {'ö','ß',1}, -+{'ö','à',179}, {'ö','á',1}, {'ö','â',11}, {'ö','å',162}, {'ö','ç',5}, {'ö','è',75}, {'ö','ê',6}, {'ö','ë',5}, {'ö','ì',1}, {'ö','í',2}, {'ö','î',29}, {'ö','ï',4}, {'ö','ð',2}, {'ö','ñ',4}, {'ö','ò',4}, {'ö','ó',41}, -+{'ö','÷',2}, {'ö','û',41}, {'÷','Â',1}, {'÷','Ã',1}, {'÷','Å',1}, {'÷','È',1}, {'÷','Í',3}, {'÷','Î',1}, {'÷','Ñ',3}, {'÷','Ò',2}, {'÷','×',1}, {'÷','à',294}, {'÷','á',1}, {'÷','â',6}, {'÷','å',874}, {'÷','è',319}, -+{'÷','ê',76}, {'÷','ë',9}, {'÷','ì',4}, {'÷','í',158}, {'÷','î',10}, {'÷','ï',3}, {'÷','ð',8}, {'÷','ñ',2}, {'÷','ò',536}, {'÷','ó',101}, {'÷','÷',7}, {'÷','ø',37}, {'÷','ü',49}, {'÷','ÿ',1}, {'ø','ß',1}, {'ø','à',150}, -+{'ø','â',5}, {'ø','å',388}, {'ø','è',188}, {'ø','ê',201}, {'ø','ë',68}, {'ø','ì',4}, {'ø','í',78}, {'ø','î',53}, {'ø','ï',8}, {'ø','ð',3}, {'ø','ñ',2}, {'ø','ò',17}, {'ø','ó',45}, {'ø','õ',1}, {'ø','ö',1}, {'ø','ü',200}, -+{'ø','ý',1}, {'ù','Ï',1}, {'ù','Ò',1}, {'ù','à',68}, {'ù','å',242}, {'ù','è',96}, {'ù','í',7}, {'ù','î',1}, {'ù','ð',1}, {'ù','ñ',3}, {'ù','ó',20}, {'ù','ü',2}, {'û','À',14}, {'û','Á',6}, {'û','Â',28}, {'û','Ã',4}, -+{'û','Ä',8}, {'û','Å',6}, {'û','Æ',1}, {'û','Ç',4}, {'û','È',12}, {'û','Ê',10}, {'û','Ë',2}, {'û','Ì',15}, {'û','Í',16}, {'û','Î',13}, {'û','Ï',6}, {'û','Ð',3}, {'û','Ñ',7}, {'û','Ò',10}, {'û','Ó',1}, {'û','Ô',1}, -+{'û','×',4}, {'û','Ý',5}, {'û','Þ',1}, {'û','ß',10}, {'û','à',10}, {'û','á',66}, {'û','â',248}, {'û','ã',37}, {'û','ä',65}, {'û','å',138}, {'û','æ',21}, {'û','ç',45}, {'û','è',74}, {'û','é',264}, {'û','ê',83}, {'û','ë',305}, -+{'û','ì',164}, {'û','í',141}, {'û','î',34}, {'û','ï',231}, {'û','ð',61}, {'û','ñ',189}, {'û','ò',148}, {'û','ó',35}, {'û','ô',1}, {'û','õ',146}, {'û','ö',3}, {'û','÷',63}, {'û','ø',80}, {'û','ù',1}, {'û','ý',9}, {'û','ÿ',10}, -+{'ü','À',44}, {'ü','Á',8}, {'ü','Â',45}, {'ü','Ã',7}, {'ü','Ä',18}, {'ü','Å',12}, {'ü','Æ',1}, {'ü','Ç',4}, {'ü','È',29}, {'ü','Ê',19}, {'ü','Ì',18}, {'ü','Í',36}, {'ü','Î',25}, {'ü','Ï',42}, {'ü','Ð',4}, {'ü','Ñ',25}, -+{'ü','Ò',24}, {'ü','Ó',10}, {'ü','Ô',1}, {'ü','Õ',3}, {'ü','×',14}, {'ü','Ø',1}, {'ü','Ý',4}, {'ü','ß',21}, {'ü','à',38}, {'ü','á',63}, {'ü','â',196}, {'ü','ã',35}, {'ü','ä',110}, {'ü','å',154}, {'ü','æ',11}, {'ü','ç',58}, -+{'ü','è',194}, {'ü','é',1}, {'ü','ê',324}, {'ü','ë',36}, {'ü','ì',124}, {'ü','í',321}, {'ü','î',92}, {'ü','ï',164}, {'ü','ð',41}, {'ü','ñ',302}, {'ü','ò',152}, {'ü','ó',48}, {'ü','ô',5}, {'ü','õ',20}, {'ü','ö',15}, {'ü','÷',88}, -+{'ü','ø',85}, {'ü','ù',1}, {'ü','ý',27}, {'ü','þ',88}, {'ü','ÿ',110}, {'ý','È',1}, {'ý','á',1}, {'ý','ã',1}, {'ý','ä',2}, {'ý','ç',1}, {'ý','ê',6}, {'ý','ë',9}, {'ý','ì',6}, {'ý','í',3}, {'ý','ð',8}, {'ý','ñ',4}, -+{'ý','ò',531}, {'ý','ô',2}, {'ý','õ',1}, {'ý','ý',2}, {'þ','À',10}, {'þ','Á',1}, {'þ','Â',10}, {'þ','Ã',1}, {'þ','Ä',3}, {'þ','Æ',1}, {'þ','Ç',2}, {'þ','È',17}, {'þ','Ê',4}, {'þ','Ë',2}, {'þ','Ì',3}, {'þ','Í',16}, -+{'þ','Î',4}, {'þ','Ï',5}, {'þ','Ð',1}, {'þ','Ñ',3}, {'þ','Ò',2}, {'þ','Ó',2}, {'þ','Õ',3}, {'þ','×',1}, {'þ','Ø',2}, {'þ','Ý',2}, {'þ','ß',9}, {'þ','à',15}, {'þ','á',73}, {'þ','â',37}, {'þ','ã',12}, {'þ','ä',72}, -+{'þ','å',12}, {'þ','æ',6}, {'þ','ç',11}, {'þ','è',45}, {'þ','é',1}, {'þ','ê',30}, {'þ','ë',9}, {'þ','ì',28}, {'þ','í',58}, {'þ','î',17}, {'þ','ï',58}, {'þ','ð',14}, {'þ','ñ',71}, {'þ','ò',139}, {'þ','ó',10}, {'þ','ô',5}, -+{'þ','õ',5}, {'þ','ö',3}, {'þ','÷',42}, {'þ','ø',11}, {'þ','ù',27}, {'þ','ý',2}, {'þ','þ',10}, {'þ','ÿ',20}, {'ÿ','À',18}, {'ÿ','Á',5}, {'ÿ','Â',28}, {'ÿ','Ã',2}, {'ÿ','Ä',23}, {'ÿ','Å',6}, {'ÿ','Æ',2}, {'ÿ','Ç',3}, -+{'ÿ','È',15}, {'ÿ','Ê',14}, {'ÿ','Ë',3}, {'ÿ','Ì',10}, {'ÿ','Í',23}, {'ÿ','Î',22}, {'ÿ','Ï',26}, {'ÿ','Ð',5}, {'ÿ','Ñ',12}, {'ÿ','Ò',17}, {'ÿ','Ó',1}, {'ÿ','Õ',2}, {'ÿ','Ö',1}, {'ÿ','×',7}, {'ÿ','Ø',2}, {'ÿ','Ý',10}, -+{'ÿ','ß',18}, {'ÿ','à',23}, {'ÿ','á',85}, {'ÿ','â',260}, {'ÿ','ã',44}, {'ÿ','ä',170}, {'ÿ','å',70}, {'ÿ','æ',63}, {'ÿ','ç',114}, {'ÿ','è',146}, {'ÿ','é',7}, {'ÿ','ê',145}, {'ÿ','ë',137}, {'ÿ','ì',108}, {'ÿ','í',275}, {'ÿ','î',110}, -+{'ÿ','ï',204}, {'ÿ','ð',43}, {'ÿ','ñ',259}, {'ÿ','ò',457}, {'ÿ','ó',64}, {'ÿ','ô',2}, {'ÿ','õ',37}, {'ÿ','ö',18}, {'ÿ','÷',75}, {'ÿ','ø',13}, {'ÿ','ù',33}, {'ÿ','ý',22}, {'ÿ','þ',31}, {'ÿ','ÿ',47} -+}; -+ -+static const lng_stat koi[]={ -+{'À','À',10}, {'À','Á',15}, {'À','Â',73}, {'À','Ã',3}, {'À','Ä',72}, {'À','Å',12}, {'À','Æ',5}, {'À','Ç',12}, {'À','È',5}, {'À','É',45}, {'À','Ê',1}, {'À','Ë',30}, {'À','Ì',9}, {'À','Í',28}, {'À','Î',58}, {'À','Ï',17}, -+{'À','Ð',58}, {'À','Ñ',20}, {'À','Ò',14}, {'À','Ó',71}, {'À','Ô',139}, {'À','Õ',10}, {'À','Ö',6}, {'À','×',37}, {'À','Ú',11}, {'À','Û',11}, {'À','Ü',2}, {'À','Ý',27}, {'À','Þ',42}, {'À','á',10}, {'À','â',1}, {'À','ä',3}, -+{'À','ç',1}, {'À','è',3}, {'À','é',17}, {'À','ë',4}, {'À','ì',2}, {'À','í',3}, {'À','î',16}, {'À','ï',4}, {'À','ð',5}, {'À','ñ',9}, {'À','ò',1}, {'À','ó',3}, {'À','ô',2}, {'À','õ',2}, {'À','ö',1}, {'À','÷',10}, -+{'À','ú',2}, {'À','û',2}, {'À','ü',2}, {'À','þ',1}, {'Á','À',238}, {'Á','Á',69}, {'Á','Â',257}, {'Á','Ã',24}, {'Á','Ä',548}, {'Á','Å',328}, {'Á','Æ',38}, {'Á','Ç',218}, {'Á','È',228}, {'Á','É',225}, {'Á','Ê',194}, {'Á','Ë',1285}, -+{'Á','Ì',1288}, {'Á','Í',771}, {'Á','Î',911}, {'Á','Ï',166}, {'Á','Ð',421}, {'Á','Ñ',384}, {'Á','Ò',368}, {'Á','Ó',802}, {'Á','Ô',874}, {'Á','Õ',98}, {'Á','Ö',262}, {'Á','×',701}, {'Á','Ú',626}, {'Á','Û',121}, {'Á','Ü',63}, {'Á','Ý',27}, -+{'Á','Þ',300}, {'Á','á',56}, {'Á','â',18}, {'Á','ä',26}, {'Á','å',12}, {'Á','æ',1}, {'Á','ç',9}, {'Á','è',4}, {'Á','é',53}, {'Á','ë',59}, {'Á','ì',9}, {'Á','í',21}, {'Á','î',32}, {'Á','ï',27}, {'Á','ð',52}, {'Á','ñ',22}, -+{'Á','ò',7}, {'Á','ó',21}, {'Á','ô',42}, {'Á','õ',10}, {'Á','ö',7}, {'Á','÷',48}, {'Á','ú',11}, {'Á','û',2}, {'Á','ü',7}, {'Á','þ',16}, {'Â','À',1}, {'Â','Á',199}, {'Â','Â',6}, {'Â','Ã',3}, {'Â','Ä',6}, {'Â','Å',420}, -+{'Â','È',11}, {'Â','É',142}, {'Â','Ë',7}, {'Â','Ì',137}, {'Â','Í',7}, {'Â','Î',31}, {'Â','Ï',327}, {'Â','Ð',4}, {'Â','Ñ',134}, {'Â','Ò',172}, {'Â','Ó',18}, {'Â','Ô',1}, {'Â','Õ',288}, {'Â','×',13}, {'Â','Ø',10}, {'Â','Ù',561}, -+{'Â','Ú',2}, {'Â','Û',1}, {'Â','Ü',7}, {'Â','Ý',32}, {'Â','Þ',2}, {'Â','á',1}, {'Â','æ',1}, {'Â','ð',1}, {'Ã','Á',179}, {'Ã','Â',1}, {'Ã','Å',162}, {'Ã','É',75}, {'Ã','Ë',6}, {'Ã','Ì',5}, {'Ã','Í',1}, {'Ã','Î',2}, -+{'Ã','Ï',29}, {'Ã','Ð',4}, {'Ã','Ò',2}, {'Ã','Ó',4}, {'Ã','Ô',4}, {'Ã','Õ',41}, {'Ã','×',11}, {'Ã','Ù',41}, {'Ã','Ú',5}, {'Ã','Þ',2}, {'Ã','á',1}, {'Ã','ç',1}, {'Ã','é',2}, {'Ã','ë',1}, {'Ã','ì',1}, {'Ã','í',1}, -+{'Ã','ð',1}, {'Ã','ñ',1}, {'Ã','ô',1}, {'Ä','Á',795}, {'Ä','Â',7}, {'Ä','Ã',138}, {'Ä','Ä',14}, {'Ä','Å',839}, {'Ä','Æ',1}, {'Ä','Ç',6}, {'Ä','È',11}, {'Ä','É',487}, {'Ä','Ê',1}, {'Ä','Ë',79}, {'Ä','Ì',78}, {'Ä','Í',10}, -+{'Ä','Î',289}, {'Ä','Ï',613}, {'Ä','Ð',17}, {'Ä','Ñ',68}, {'Ä','Ò',195}, {'Ä','Ó',62}, {'Ä','Ô',41}, {'Ä','Õ',417}, {'Ä','Ö',8}, {'Ä','×',165}, {'Ä','Ø',200}, {'Ä','Ù',111}, {'Ä','Ú',7}, {'Ä','Ü',6}, {'Ä','Þ',6}, {'Ä','á',1}, -+{'Ä','ä',2}, {'Ä','æ',1}, {'Ä','é',2}, {'Ä','ë',1}, {'Ä','í',1}, {'Ä','î',2}, {'Ä','ð',2}, {'Ä','ñ',2}, {'Ä','ô',1}, {'Ä','õ',1}, {'Ä','÷',2}, {'Ä','ú',1}, {'Ä','þ',2}, {'Å','À',24}, {'Å','Á',44}, {'Å','Â',463}, -+{'Å','Ã',66}, {'Å','Ä',613}, {'Å','Å',281}, {'Å','Æ',15}, {'Å','Ç',592}, {'Å','È',182}, {'Å','É',177}, {'Å','Ê',297}, {'Å','Ë',398}, {'Å','Ì',926}, {'Å','Í',982}, {'Å','Î',1512}, {'Å','Ï',206}, {'Å','Ð',524}, {'Å','Ñ',87}, {'Å','Ò',1231}, -+{'Å','Ó',1082}, {'Å','Ô',1607}, {'Å','Õ',103}, {'Å','Ö',136}, {'Å','×',704}, {'Å','Ú',444}, {'Å','Û',235}, {'Å','Ü',79}, {'Å','Ý',137}, {'Å','Þ',308}, {'Å','à',1}, {'Å','á',30}, {'Å','â',8}, {'Å','ã',1}, {'Å','ä',34}, {'Å','å',13}, -+{'Å','æ',4}, {'Å','ç',7}, {'Å','è',2}, {'Å','é',21}, {'Å','ë',21}, {'Å','ì',4}, {'Å','í',13}, {'Å','î',20}, {'Å','ï',21}, {'Å','ð',31}, {'Å','ñ',25}, {'Å','ò',2}, {'Å','ó',13}, {'Å','ô',10}, {'Å','õ',7}, {'Å','ö',1}, -+{'Å','÷',33}, {'Å','ú',6}, {'Å','û',2}, {'Å','ü',11}, {'Å','þ',9}, {'Æ','À',2}, {'Æ','Á',21}, {'Æ','Å',45}, {'Æ','Æ',6}, {'Æ','É',47}, {'Æ','Ì',14}, {'Æ','Î',2}, {'Æ','Ï',24}, {'Æ','Ò',20}, {'Æ','Ó',4}, {'Æ','Ô',5}, -+{'Æ','Õ',8}, {'Æ','Ø',1}, {'Æ','Ù',4}, {'Æ','ã',2}, {'Æ','ð',1}, {'Ç','Á',210}, {'Ç','Â',18}, {'Ç','Ä',191}, {'Ç','Å',83}, {'Ç','Ç',3}, {'Ç','È',1}, {'Ç','É',103}, {'Ç','Ë',20}, {'Ç','Ì',205}, {'Ç','Í',3}, {'Ç','Î',62}, -+{'Ç','Ï',1340}, {'Ç','Ð',7}, {'Ç','Ñ',4}, {'Ç','Ò',180}, {'Ç','Ó',13}, {'Ç','Ô',4}, {'Ç','Õ',88}, {'Ç','×',6}, {'Ç','Ú',2}, {'Ç','Ü',1}, {'Ç','Þ',15}, {'Ç','á',3}, {'Ç','â',1}, {'Ç','ä',1}, {'Ç','é',3}, {'Ç','ì',4}, -+{'Ç','î',1}, {'Ç','ï',4}, {'Ç','ð',3}, {'Ç','ñ',2}, {'Ç','ò',1}, {'Ç','ó',2}, {'Ç','ô',2}, {'Ç','÷',3}, {'Ç','ú',3}, {'Ç','û',1}, {'Ç','þ',1}, {'È','Á',135}, {'È','Â',21}, {'È','Ã',2}, {'È','Ä',21}, {'È','Å',25}, -+{'È','Æ',3}, {'È','Ç',27}, {'È','È',4}, {'È','É',75}, {'È','Ë',16}, {'È','Ì',43}, {'È','Í',49}, {'È','Î',83}, {'È','Ï',450}, {'È','Ð',70}, {'È','Ñ',9}, {'È','Ò',19}, {'È','Ó',39}, {'È','Ô',27}, {'È','Õ',42}, {'È','Ö',4}, -+{'È','×',72}, {'È','Ø',6}, {'È','Ù',1}, {'È','Ú',13}, {'È','Û',8}, {'È','Ü',7}, {'È','Þ',18}, {'È','á',7}, {'È','ä',4}, {'È','å',3}, {'È','é',5}, {'È','ë',4}, {'È','ì',2}, {'È','í',1}, {'È','î',10}, {'È','ï',5}, -+{'È','ð',7}, {'È','ñ',5}, {'È','ó',4}, {'È','ô',5}, {'È','ö',3}, {'È','÷',7}, {'È','û',5}, {'È','ü',2}, {'È','þ',3}, {'É','À',22}, {'É','Á',90}, {'É','Â',242}, {'É','Ã',123}, {'É','Ä',435}, {'É','Å',280}, {'É','Æ',17}, -+{'É','Ç',153}, {'É','È',324}, {'É','É',301}, {'É','Ê',216}, {'É','Ë',492}, {'É','Ì',888}, {'É','Í',573}, {'É','Î',958}, {'É','Ï',216}, {'É','Ð',335}, {'É','Ñ',234}, {'É','Ò',275}, {'É','Ó',668}, {'É','Ô',949}, {'É','Õ',108}, {'É','Ö',87}, -+{'É','×',658}, {'É','Ú',388}, {'É','Û',134}, {'É','Ü',39}, {'É','Ý',36}, {'É','Þ',363}, {'É','á',39}, {'É','â',10}, {'É','ã',2}, {'É','ä',25}, {'É','å',11}, {'É','æ',3}, {'É','ç',5}, {'É','è',4}, {'É','é',30}, {'É','ë',24}, -+{'É','ì',5}, {'É','í',36}, {'É','î',39}, {'É','ï',25}, {'É','ð',49}, {'É','ñ',28}, {'É','ò',3}, {'É','ó',22}, {'É','ô',25}, {'É','õ',8}, {'É','ö',2}, {'É','÷',46}, {'É','ú',1}, {'É','û',3}, {'É','ü',7}, {'É','þ',4}, -+{'Ê','Á',21}, {'Ê','Â',36}, {'Ê','Ã',11}, {'Ê','Ä',100}, {'Ê','Å',15}, {'Ê','Æ',6}, {'Ê','Ç',26}, {'Ê','È',7}, {'Ê','É',88}, {'Ê','Ê',1}, {'Ê','Ë',87}, {'Ê','Ì',25}, {'Ê','Í',47}, {'Ê','Î',117}, {'Ê','Ï',55}, {'Ê','Ð',133}, -+{'Ê','Ñ',16}, {'Ê','Ò',42}, {'Ê','Ó',162}, {'Ê','Ô',131}, {'Ê','Õ',17}, {'Ê','Ö',21}, {'Ê','×',112}, {'Ê','Ú',30}, {'Ê','Û',20}, {'Ê','Ü',15}, {'Ê','Ý',2}, {'Ê','Þ',69}, {'Ê','á',20}, {'Ê','â',6}, {'Ê','ä',16}, {'Ê','å',6}, -+{'Ê','æ',1}, {'Ê','ç',6}, {'Ê','è',1}, {'Ê','é',22}, {'Ê','ë',18}, {'Ê','ì',2}, {'Ê','í',12}, {'Ê','î',13}, {'Ê','ï',15}, {'Ê','ð',13}, {'Ê','ñ',8}, {'Ê','ò',7}, {'Ê','ó',9}, {'Ê','ô',15}, {'Ê','õ',3}, {'Ê','÷',20}, -+{'Ê','ú',2}, {'Ê','ü',7}, {'Ê','þ',1}, {'Ë','Á',1358}, {'Ë','Â',49}, {'Ë','Ã',5}, {'Ë','Ä',48}, {'Ë','Å',93}, {'Ë','Æ',7}, {'Ë','Ç',15}, {'Ë','È',10}, {'Ë','É',678}, {'Ë','Ë',28}, {'Ë','Ì',81}, {'Ë','Í',22}, {'Ë','Î',151}, -+{'Ë','Ï',1337}, {'Ë','Ð',64}, {'Ë','Ñ',25}, {'Ë','Ò',273}, {'Ë','Ó',131}, {'Ë','Ô',238}, {'Ë','Õ',384}, {'Ë','Ö',22}, {'Ë','×',147}, {'Ë','Ù',2}, {'Ë','Ú',55}, {'Ë','Û',2}, {'Ë','Ü',13}, {'Ë','Þ',31}, {'Ë','á',11}, {'Ë','ã',1}, -+{'Ë','ä',4}, {'Ë','å',2}, {'Ë','ç',7}, {'Ë','è',1}, {'Ë','é',8}, {'Ë','ë',9}, {'Ë','ì',2}, {'Ë','í',5}, {'Ë','î',20}, {'Ë','ï',7}, {'Ë','ð',9}, {'Ë','ñ',8}, {'Ë','ó',7}, {'Ë','ô',9}, {'Ë','õ',4}, {'Ë','ö',1}, -+{'Ë','÷',13}, {'Ë','ú',5}, {'Ë','ü',2}, {'Ë','þ',4}, {'Ì','À',159}, {'Ì','Á',758}, {'Ì','Â',34}, {'Ì','Ã',2}, {'Ì','Ä',55}, {'Ì','Å',675}, {'Ì','Æ',5}, {'Ì','Ç',35}, {'Ì','È',7}, {'Ì','É',1300}, {'Ì','Ê',1}, {'Ì','Ë',114}, -+{'Ì','Ì',21}, {'Ì','Í',45}, {'Ì','Î',111}, {'Ì','Ï',947}, {'Ì','Ð',83}, {'Ì','Ñ',299}, {'Ì','Ò',18}, {'Ì','Ó',320}, {'Ì','Ô',61}, {'Ì','Õ',264}, {'Ì','Ö',33}, {'Ì','×',102}, {'Ì','Ø',642}, {'Ì','Ù',146}, {'Ì','Ú',23}, {'Ì','Û',1}, -+{'Ì','Ü',21}, {'Ì','Þ',66}, {'Ì','á',20}, {'Ì','â',2}, {'Ì','ã',1}, {'Ì','ä',14}, {'Ì','å',3}, {'Ì','æ',1}, {'Ì','ç',5}, {'Ì','è',1}, {'Ì','é',19}, {'Ì','ë',12}, {'Ì','ì',2}, {'Ì','í',14}, {'Ì','î',31}, {'Ì','ï',20}, -+{'Ì','ð',20}, {'Ì','ñ',19}, {'Ì','ò',1}, {'Ì','ó',20}, {'Ì','ô',10}, {'Ì','õ',1}, {'Ì','ö',1}, {'Ì','÷',25}, {'Ì','ü',4}, {'Ì','þ',2}, {'Í','Á',447}, {'Í','Â',69}, {'Í','Ã',4}, {'Í','Ä',41}, {'Í','Å',838}, {'Í','Æ',5}, -+{'Í','Ç',33}, {'Í','È',13}, {'Í','É',484}, {'Í','Ê',2}, {'Í','Ë',71}, {'Í','Ì',74}, {'Í','Í',96}, {'Í','Î',497}, {'Í','Ï',761}, {'Í','Ð',132}, {'Í','Ñ',82}, {'Í','Ò',41}, {'Í','Ó',137}, {'Í','Ô',74}, {'Í','Õ',411}, {'Í','Ö',27}, -+{'Í','×',119}, {'Í','Ø',33}, {'Í','Ù',207}, {'Í','Ú',38}, {'Í','Û',3}, {'Í','Ü',17}, {'Í','Ý',3}, {'Í','Þ',46}, {'Í','á',11}, {'Í','â',2}, {'Í','ä',10}, {'Í','å',1}, {'Í','ç',8}, {'Í','è',2}, {'Í','é',12}, {'Í','ë',10}, -+{'Í','í',6}, {'Í','î',23}, {'Í','ï',12}, {'Í','ð',12}, {'Í','ñ',10}, {'Í','ò',1}, {'Í','ó',9}, {'Í','ô',16}, {'Í','õ',2}, {'Í','÷',14}, {'Í','ú',5}, {'Í','û',1}, {'Í','ü',1}, {'Í','þ',3}, {'Î','À',30}, {'Î','Á',1706}, -+{'Î','Â',28}, {'Î','Ã',65}, {'Î','Ä',97}, {'Î','Å',1870}, {'Î','Æ',14}, {'Î','Ç',48}, {'Î','È',4}, {'Î','É',1319}, {'Î','Ë',84}, {'Î','Ì',7}, {'Î','Í',11}, {'Î','Î',331}, {'Î','Ï',1483}, {'Î','Ð',54}, {'Î','Ñ',396}, {'Î','Ò',27}, -+{'Î','Ó',133}, {'Î','Ô',165}, {'Î','Õ',480}, {'Î','Ö',5}, {'Î','×',55}, {'Î','Ø',196}, {'Î','Ù',385}, {'Î','Ú',20}, {'Î','Û',3}, {'Î','Ü',7}, {'Î','Ý',31}, {'Î','Þ',55}, {'Î','á',11}, {'Î','ã',1}, {'Î','ä',3}, {'Î','å',4}, -+{'Î','ç',8}, {'Î','é',7}, {'Î','ë',10}, {'Î','ì',1}, {'Î','í',2}, {'Î','î',6}, {'Î','ï',2}, {'Î','ð',9}, {'Î','ñ',2}, {'Î','ò',2}, {'Î','ó',2}, {'Î','ô',6}, {'Î','õ',1}, {'Î','÷',5}, {'Î','û',1}, {'Î','ü',2}, -+{'Î','þ',6}, {'Ï','À',81}, {'Ï','Á',34}, {'Ï','Â',652}, {'Ï','Ã',51}, {'Ï','Ä',946}, {'Ï','Å',457}, {'Ï','Æ',35}, {'Ï','Ç',915}, {'Ï','È',137}, {'Ï','É',291}, {'Ï','Ê',602}, {'Ï','Ë',498}, {'Ï','Ì',923}, {'Ï','Í',1073}, {'Ï','Î',1281}, -+{'Ï','Ï',241}, {'Ï','Ð',588}, {'Ï','Ñ',154}, {'Ï','Ò',921}, {'Ï','Ó',1264}, {'Ï','Ô',1536}, {'Ï','Õ',152}, {'Ï','Ö',437}, {'Ï','×',1590}, {'Ï','Ú',279}, {'Ï','Û',223}, {'Ï','Ü',89}, {'Ï','Ý',56}, {'Ï','Þ',459}, {'Ï','á',34}, {'Ï','â',5}, -+{'Ï','ã',2}, {'Ï','ä',16}, {'Ï','å',16}, {'Ï','æ',7}, {'Ï','ç',9}, {'Ï','è',4}, {'Ï','é',43}, {'Ï','ë',17}, {'Ï','ì',3}, {'Ï','í',23}, {'Ï','î',49}, {'Ï','ï',23}, {'Ï','ð',40}, {'Ï','ñ',27}, {'Ï','ò',6}, {'Ï','ó',14}, -+{'Ï','ô',19}, {'Ï','õ',4}, {'Ï','ö',4}, {'Ï','÷',44}, {'Ï','ú',17}, {'Ï','ü',5}, {'Ï','þ',12}, {'Ð','Á',252}, {'Ð','Ä',1}, {'Ð','Å',364}, {'Ð','É',356}, {'Ð','Ë',8}, {'Ð','Ì',189}, {'Ð','Î',11}, {'Ð','Ï',1543}, {'Ð','Ð',6}, -+{'Ð','Ñ',149}, {'Ð','Ò',845}, {'Ð','Ó',6}, {'Ð','Ô',23}, {'Ð','Õ',202}, {'Ð','×',1}, {'Ð','Ø',122}, {'Ð','Ù',33}, {'Ð','Þ',2}, {'Ð','é',1}, {'Ð','ë',1}, {'Ð','÷',2}, {'Ñ','À',31}, {'Ñ','Á',23}, {'Ñ','Â',85}, {'Ñ','Ã',18}, -+{'Ñ','Ä',170}, {'Ñ','Å',70}, {'Ñ','Æ',2}, {'Ñ','Ç',44}, {'Ñ','È',37}, {'Ñ','É',146}, {'Ñ','Ê',7}, {'Ñ','Ë',145}, {'Ñ','Ì',137}, {'Ñ','Í',108}, {'Ñ','Î',275}, {'Ñ','Ï',110}, {'Ñ','Ð',204}, {'Ñ','Ñ',47}, {'Ñ','Ò',43}, {'Ñ','Ó',259}, -+{'Ñ','Ô',457}, {'Ñ','Õ',64}, {'Ñ','Ö',63}, {'Ñ','×',260}, {'Ñ','Ú',114}, {'Ñ','Û',13}, {'Ñ','Ü',22}, {'Ñ','Ý',33}, {'Ñ','Þ',75}, {'Ñ','á',18}, {'Ñ','â',5}, {'Ñ','ã',1}, {'Ñ','ä',23}, {'Ñ','å',6}, {'Ñ','ç',2}, {'Ñ','è',2}, -+{'Ñ','é',15}, {'Ñ','ë',14}, {'Ñ','ì',3}, {'Ñ','í',10}, {'Ñ','î',23}, {'Ñ','ï',22}, {'Ñ','ð',26}, {'Ñ','ñ',18}, {'Ñ','ò',5}, {'Ñ','ó',12}, {'Ñ','ô',17}, {'Ñ','õ',1}, {'Ñ','ö',2}, {'Ñ','÷',28}, {'Ñ','ú',3}, {'Ñ','û',2}, -+{'Ñ','ü',10}, {'Ñ','þ',7}, {'Ò','À',59}, {'Ò','Á',1264}, {'Ò','Â',29}, {'Ò','Ã',23}, {'Ò','Ä',129}, {'Ò','Å',936}, {'Ò','Æ',8}, {'Ò','Ç',53}, {'Ò','È',36}, {'Ò','É',777}, {'Ò','Ê',1}, {'Ò','Ë',54}, {'Ò','Ì',29}, {'Ò','Í',39}, -+{'Ò','Î',181}, {'Ò','Ï',1126}, {'Ò','Ð',38}, {'Ò','Ñ',159}, {'Ò','Ò',34}, {'Ò','Ó',76}, {'Ò','Ô',122}, {'Ò','Õ',355}, {'Ò','Ö',41}, {'Ò','×',98}, {'Ò','Ø',98}, {'Ò','Ù',169}, {'Ò','Ú',20}, {'Ò','Û',49}, {'Ò','Ü',7}, {'Ò','Ý',5}, -+{'Ò','Þ',9}, {'Ò','á',3}, {'Ò','â',4}, {'Ò','ä',6}, {'Ò','å',2}, {'Ò','æ',2}, {'Ò','è',1}, {'Ò','ë',2}, {'Ò','í',1}, {'Ò','î',5}, {'Ò','ï',8}, {'Ò','ð',10}, {'Ò','ñ',6}, {'Ò','ó',2}, {'Ò','ô',4}, {'Ò','÷',3}, -+{'Ò','ú',1}, {'Ò','ü',3}, {'Ò','þ',2}, {'Ó','À',27}, {'Ó','Á',306}, {'Ó','Â',33}, {'Ó','Ã',6}, {'Ó','Ä',41}, {'Ó','Å',973}, {'Ó','Æ',18}, {'Ó','Ç',18}, {'Ó','È',34}, {'Ó','É',295}, {'Ó','Ë',691}, {'Ó','Ì',519}, {'Ó','Í',222}, -+{'Ó','Î',236}, {'Ó','Ï',403}, {'Ó','Ð',274}, {'Ó','Ñ',680}, {'Ó','Ò',58}, {'Ó','Ó',222}, {'Ó','Ô',1721}, {'Ó','Õ',146}, {'Ó','Ö',8}, {'Ó','×',259}, {'Ó','Ø',401}, {'Ó','Ù',79}, {'Ó','Ú',11}, {'Ó','Û',20}, {'Ó','Ü',10}, {'Ó','Ý',2}, -+{'Ó','Þ',48}, {'Ó','á',6}, {'Ó','ä',2}, {'Ó','ç',2}, {'Ó','é',4}, {'Ó','ë',2}, {'Ó','ì',3}, {'Ó','í',4}, {'Ó','î',5}, {'Ó','ï',3}, {'Ó','ð',3}, {'Ó','ñ',1}, {'Ó','ò',1}, {'Ó','ó',2}, {'Ó','ô',1}, {'Ó','ö',1}, -+{'Ó','÷',4}, {'Ó','ú',1}, {'Ó','ü',3}, {'Ó','þ',1}, {'Ô','À',13}, {'Ô','Á',1225}, {'Ô','Â',56}, {'Ô','Ã',10}, {'Ô','Ä',67}, {'Ô','Å',864}, {'Ô','Æ',1}, {'Ô','Ç',25}, {'Ô','È',24}, {'Ô','É',758}, {'Ô','Ê',1}, {'Ô','Ë',180}, -+{'Ô','Ì',52}, {'Ô','Í',65}, {'Ô','Î',329}, {'Ô','Ï',2625}, {'Ô','Ð',119}, {'Ô','Ñ',103}, {'Ô','Ò',616}, {'Ô','Ó',337}, {'Ô','Ô',117}, {'Ô','Õ',398}, {'Ô','Ö',17}, {'Ô','×',436}, {'Ô','Ø',1292}, {'Ô','Ù',398}, {'Ô','Ú',33}, {'Ô','Û',3}, -+{'Ô','Ü',37}, {'Ô','Ý',4}, {'Ô','Þ',87}, {'Ô','à',1}, {'Ô','á',29}, {'Ô','â',5}, {'Ô','ä',11}, {'Ô','å',9}, {'Ô','æ',2}, {'Ô','ç',3}, {'Ô','è',3}, {'Ô','é',16}, {'Ô','ë',21}, {'Ô','í',20}, {'Ô','î',24}, {'Ô','ï',10}, -+{'Ô','ð',23}, {'Ô','ñ',16}, {'Ô','ò',2}, {'Ô','ó',10}, {'Ô','ô',13}, {'Ô','õ',2}, {'Ô','ö',2}, {'Ô','÷',25}, {'Ô','ú',5}, {'Ô','û',1}, {'Ô','ü',3}, {'Ô','þ',11}, {'Õ','À',156}, {'Õ','Á',45}, {'Õ','Â',142}, {'Õ','Ä',445}, -+{'Õ','Å',83}, {'Õ','Æ',5}, {'Õ','Ç',161}, {'Õ','È',97}, {'Õ','É',111}, {'Õ','Ê',40}, {'Õ','Ë',169}, {'Õ','Ì',251}, {'Õ','Í',322}, {'Õ','Î',195}, {'Õ','Ï',50}, {'Õ','Ð',258}, {'Õ','Ñ',31}, {'Õ','Ò',203}, {'Õ','Ó',380}, {'Õ','Ô',442}, -+{'Õ','Õ',24}, {'Õ','Ö',269}, {'Õ','×',184}, {'Õ','Ú',75}, {'Õ','Û',302}, {'Õ','Ü',19}, {'Õ','Ý',37}, {'Õ','Þ',241}, {'Õ','á',22}, {'Õ','â',4}, {'Õ','ä',20}, {'Õ','å',3}, {'Õ','æ',2}, {'Õ','ç',4}, {'Õ','è',5}, {'Õ','é',25}, -+{'Õ','ë',9}, {'Õ','ì',6}, {'Õ','í',12}, {'Õ','î',18}, {'Õ','ï',13}, {'Õ','ð',18}, {'Õ','ñ',17}, {'Õ','ò',1}, {'Õ','ó',18}, {'Õ','ô',12}, {'Õ','õ',2}, {'Õ','÷',19}, {'Õ','ú',2}, {'Õ','û',3}, {'Õ','ü',5}, {'Õ','þ',6}, -+{'Ö','Á',187}, {'Ö','Â',4}, {'Ö','Ä',145}, {'Ö','Å',690}, {'Ö','Ç',1}, {'Ö','È',1}, {'Ö','É',214}, {'Ö','Ë',35}, {'Ö','Ì',1}, {'Ö','Í',8}, {'Ö','Î',96}, {'Ö','Ï',13}, {'Ö','Ð',14}, {'Ö','Ñ',7}, {'Ö','Ò',7}, {'Ö','Ó',4}, -+{'Ö','Ô',8}, {'Ö','Õ',69}, {'Ö','Ö',4}, {'Ö','×',9}, {'Ö','Ø',6}, {'Ö','Ú',1}, {'Ö','Ü',2}, {'Ö','Þ',1}, {'Ö','é',2}, {'Ö','î',1}, {'Ö','ï',1}, {'Ö','ð',3}, {'Ö','÷',1}, {'×','À',3}, {'×','Á',989}, {'×','Â',26}, -+{'×','Ã',11}, {'×','Ä',74}, {'×','Å',911}, {'×','Æ',1}, {'×','Ç',43}, {'×','È',9}, {'×','É',387}, {'×','Ê',1}, {'×','Ë',105}, {'×','Ì',122}, {'×','Í',65}, {'×','Î',231}, {'×','Ï',1220}, {'×','Ð',118}, {'×','Ñ',48}, {'×','Ò',97}, -+{'×','Ó',851}, {'×','Ô',123}, {'×','Õ',116}, {'×','Ö',26}, {'×','×',62}, {'×','Ø',33}, {'×','Ù',518}, {'×','Ú',88}, {'×','Û',53}, {'×','Ü',44}, {'×','Ý',2}, {'×','Þ',47}, {'×','á',11}, {'×','â',1}, {'×','ã',1}, {'×','ä',5}, -+{'×','å',5}, {'×','ç',7}, {'×','è',8}, {'×','é',6}, {'×','ë',14}, {'×','ì',2}, {'×','í',9}, {'×','î',13}, {'×','ï',17}, {'×','ð',51}, {'×','ñ',4}, {'×','ò',7}, {'×','ó',18}, {'×','ô',4}, {'×','õ',2}, {'×','÷',6}, -+{'×','û',7}, {'×','ü',2}, {'×','þ',2}, {'Ø','À',88}, {'Ø','Á',38}, {'Ø','Â',63}, {'Ø','Ã',15}, {'Ø','Ä',110}, {'Ø','Å',154}, {'Ø','Æ',5}, {'Ø','Ç',35}, {'Ø','È',20}, {'Ø','É',194}, {'Ø','Ê',1}, {'Ø','Ë',324}, {'Ø','Ì',36}, -+{'Ø','Í',124}, {'Ø','Î',321}, {'Ø','Ï',92}, {'Ø','Ð',164}, {'Ø','Ñ',110}, {'Ø','Ò',41}, {'Ø','Ó',302}, {'Ø','Ô',152}, {'Ø','Õ',48}, {'Ø','Ö',11}, {'Ø','×',196}, {'Ø','Ú',58}, {'Ø','Û',85}, {'Ø','Ü',27}, {'Ø','Ý',1}, {'Ø','Þ',88}, -+{'Ø','á',44}, {'Ø','â',8}, {'Ø','ä',18}, {'Ø','å',12}, {'Ø','æ',1}, {'Ø','ç',7}, {'Ø','è',3}, {'Ø','é',29}, {'Ø','ë',19}, {'Ø','í',18}, {'Ø','î',36}, {'Ø','ï',25}, {'Ø','ð',42}, {'Ø','ñ',21}, {'Ø','ò',4}, {'Ø','ó',25}, -+{'Ø','ô',24}, {'Ø','õ',10}, {'Ø','ö',1}, {'Ø','÷',45}, {'Ø','ú',4}, {'Ø','û',1}, {'Ø','ü',4}, {'Ø','þ',14}, {'Ù','Á',10}, {'Ù','Â',66}, {'Ù','Ã',3}, {'Ù','Ä',65}, {'Ù','Å',138}, {'Ù','Æ',1}, {'Ù','Ç',37}, {'Ù','È',146}, -+{'Ù','É',74}, {'Ù','Ê',264}, {'Ù','Ë',83}, {'Ù','Ì',305}, {'Ù','Í',164}, {'Ù','Î',141}, {'Ù','Ï',34}, {'Ù','Ð',231}, {'Ù','Ñ',10}, {'Ù','Ò',61}, {'Ù','Ó',189}, {'Ù','Ô',148}, {'Ù','Õ',35}, {'Ù','Ö',21}, {'Ù','×',248}, {'Ù','Ú',45}, -+{'Ù','Û',80}, {'Ù','Ü',9}, {'Ù','Ý',1}, {'Ù','Þ',63}, {'Ù','à',1}, {'Ù','á',14}, {'Ù','â',6}, {'Ù','ä',8}, {'Ù','å',6}, {'Ù','æ',1}, {'Ù','ç',4}, {'Ù','é',12}, {'Ù','ë',10}, {'Ù','ì',2}, {'Ù','í',15}, {'Ù','î',16}, -+{'Ù','ï',13}, {'Ù','ð',6}, {'Ù','ñ',10}, {'Ù','ò',3}, {'Ù','ó',7}, {'Ù','ô',10}, {'Ù','õ',1}, {'Ù','ö',1}, {'Ù','÷',28}, {'Ù','ú',4}, {'Ù','ü',5}, {'Ù','þ',4}, {'Ú','Á',889}, {'Ú','Â',39}, {'Ú','Ä',174}, {'Ú','Å',56}, -+{'Ú','Ç',67}, {'Ú','È',3}, {'Ú','É',113}, {'Ú','Ë',16}, {'Ú','Ì',33}, {'Ú','Í',64}, {'Ú','Î',302}, {'Ú','Ï',109}, {'Ú','Ð',31}, {'Ú','Ñ',43}, {'Ú','Ò',53}, {'Ú','Ó',21}, {'Ú','Ô',7}, {'Ú','Õ',109}, {'Ú','Ö',18}, {'Ú','×',147}, -+{'Ú','Ø',20}, {'Ú','Ù',71}, {'Ú','Ú',11}, {'Ú','Û',4}, {'Ú','Ü',4}, {'Ú','Þ',11}, {'Ú','á',1}, {'Ú','ã',1}, {'Ú','é',2}, {'Ú','ë',1}, {'Ú','í',4}, {'Ú','î',3}, {'Ú','ï',1}, {'Ú','ð',8}, {'Ú','ñ',2}, {'Ú','ó',4}, -+{'Ú','ô',2}, {'Ú','ö',1}, {'Ú','÷',1}, {'Ú','þ',2}, {'Û','Á',150}, {'Û','Ã',1}, {'Û','Å',388}, {'Û','È',1}, {'Û','É',188}, {'Û','Ë',201}, {'Û','Ì',68}, {'Û','Í',4}, {'Û','Î',78}, {'Û','Ï',53}, {'Û','Ð',8}, {'Û','Ò',3}, -+{'Û','Ó',2}, {'Û','Ô',17}, {'Û','Õ',45}, {'Û','×',5}, {'Û','Ø',200}, {'Û','Ü',1}, {'Û','ñ',1}, {'Ü','Â',1}, {'Ü','Ä',2}, {'Ü','Æ',2}, {'Ü','Ç',1}, {'Ü','È',1}, {'Ü','Ë',6}, {'Ü','Ì',9}, {'Ü','Í',6}, {'Ü','Î',3}, -+{'Ü','Ò',8}, {'Ü','Ó',4}, {'Ü','Ô',531}, {'Ü','Ú',1}, {'Ü','Ü',2}, {'Ü','é',1}, {'Ý','Á',68}, {'Ý','Å',242}, {'Ý','É',96}, {'Ý','Î',7}, {'Ý','Ï',1}, {'Ý','Ò',1}, {'Ý','Ó',3}, {'Ý','Õ',20}, {'Ý','Ø',2}, {'Ý','ð',1}, -+{'Ý','ô',1}, {'Þ','Á',294}, {'Þ','Â',1}, {'Þ','Å',874}, {'Þ','É',319}, {'Þ','Ë',76}, {'Þ','Ì',9}, {'Þ','Í',4}, {'Þ','Î',158}, {'Þ','Ï',10}, {'Þ','Ð',3}, {'Þ','Ñ',1}, {'Þ','Ò',8}, {'Þ','Ó',2}, {'Þ','Ô',536}, {'Þ','Õ',101}, -+{'Þ','×',6}, {'Þ','Ø',49}, {'Þ','Û',37}, {'Þ','Þ',7}, {'Þ','å',1}, {'Þ','ç',1}, {'Þ','é',1}, {'Þ','î',3}, {'Þ','ï',1}, {'Þ','ó',3}, {'Þ','ô',2}, {'Þ','÷',1}, {'Þ','þ',1}, {'à','Ò',1}, {'à','Ú',2}, {'á','Á',1}, -+{'á','Â',6}, {'á','Ä',7}, {'á','Å',23}, {'á','Æ',1}, {'á','Ç',5}, {'á','È',6}, {'á','É',4}, {'á','Ê',1}, {'á','Ë',27}, {'á','Ì',15}, {'á','Í',10}, {'á','Î',25}, {'á','Ï',21}, {'á','Ð',51}, {'á','Ñ',20}, {'á','Ò',12}, -+{'á','Ó',13}, {'á','Ô',31}, {'á','Õ',15}, {'á','Ö',2}, {'á','×',60}, {'á','Ú',6}, {'á','Ü',8}, {'á','Þ',17}, {'á','á',1}, {'á','æ',1}, {'á','è',1}, {'á','é',1}, {'á','ë',1}, {'á','ì',1}, {'á','í',8}, {'á','î',2}, -+{'á','ð',2}, {'á','ò',1}, {'á','ó',4}, {'á','ô',2}, {'á','÷',1}, {'á','ú',1}, {'á','û',1}, {'á','ü',1}, {'á','þ',1}, {'â','Á',3}, {'â','Å',16}, {'â','É',1}, {'â','Ì',4}, {'â','Î',3}, {'â','Ï',25}, {'â','Ò',10}, -+{'â','Õ',9}, {'â','×',2}, {'â','Ù',8}, {'â','ä',1}, {'â','î',2}, {'â','ô',1}, {'â','÷',1}, {'ã','Á',7}, {'ã','É',3}, {'ã','Ó',1}, {'ã','Ô',1}, {'ã','Ù',1}, {'ä','Á',167}, {'ä','Å',17}, {'ä','É',3}, {'ä','Ì',7}, -+{'ä','Í',3}, {'ä','Î',1}, {'ä','Ï',20}, {'ä','Ò',9}, {'ä','Õ',19}, {'ä','×',6}, {'å','Ä',1}, {'å','Å',1}, {'å','Æ',1}, {'å','È',1}, {'å','Ê',1}, {'å','Ì',5}, {'å','Í',2}, {'å','Ò',19}, {'å','Ó',69}, {'å','×',9}, -+{'å','Ý',5}, {'å','ç',2}, {'å','è',1}, {'å','û',1}, {'æ','Á',7}, {'æ','Å',2}, {'æ','Æ',2}, {'æ','Ï',1}, {'æ','Ò',16}, {'æ','á',1}, {'ç','Á',6}, {'ç','Ä',16}, {'ç','Å',26}, {'ç','É',4}, {'ç','Ì',3}, {'ç','Í',1}, -+{'ç','Ï',31}, {'ç','Ò',7}, {'ç','Õ',2}, {'ç','ï',2}, {'è','Á',8}, {'è','Å',3}, {'è','Ï',20}, {'è','Ò',14}, {'è','×',1}, {'è','æ',1}, {'é','Á',2}, {'é','Â',8}, {'é','Ä',20}, {'é','Å',7}, {'é','Æ',2}, {'é','Ç',7}, -+{'é','È',3}, {'é','É',3}, {'é','Ë',27}, {'é','Ì',15}, {'é','Í',11}, {'é','Î',21}, {'é','Ï',26}, {'é','Ð',21}, {'é','Ñ',12}, {'é','Ò',4}, {'é','Ó',21}, {'é','Ô',37}, {'é','Õ',5}, {'é','Ö',1}, {'é','×',78}, {'é','Ú',17}, -+{'é','Û',1}, {'é','Ü',2}, {'é','Þ',8}, {'é','á',1}, {'é','ì',2}, {'é','í',2}, {'é','ó',2}, {'é','÷',1}, {'ë','Á',100}, {'ë','É',4}, {'ë','Ë',1}, {'ë','Ì',14}, {'ë','Î',4}, {'ë','Ï',62}, {'ë','Ð',2}, {'ë','Ò',24}, -+{'ë','Ô',10}, {'ë','Õ',62}, {'ë','ð',3}, {'ì','À',3}, {'ì','Á',7}, {'ì','Å',11}, {'ì','É',4}, {'ì','Ï',12}, {'ì','Ñ',1}, {'ì','Õ',15}, {'ì','á',1}, {'ì','é',1}, {'ì','ï',2}, {'í','Á',31}, {'í','Å',10}, {'í','Ç',1}, -+{'í','É',44}, {'í','Ì',1}, {'í','Î',19}, {'í','Ï',93}, {'í','Ò',1}, {'í','Õ',6}, {'í','×',3}, {'í','Ù',29}, {'í','á',1}, {'í','é',1}, {'í','ï',1}, {'í','ð',1}, {'î','Á',56}, {'î','Å',111}, {'î','É',47}, {'î','Î',2}, -+{'î','Ï',98}, {'î','Õ',100}, {'î','á',2}, {'î','é',3}, {'î','ú',1}, {'ï','Â',18}, {'ï','Ä',20}, {'ï','Ç',4}, {'ï','É',2}, {'ï','Ë',7}, {'ï','Ì',9}, {'ï','Í',2}, {'ï','Î',96}, {'ï','Ï',5}, {'ï','Ð',17}, {'ï','Ò',16}, -+{'ï','Ó',21}, {'ï','Ô',35}, {'ï','×',1}, {'ï','Ú',2}, {'ï','Ü',6}, {'ï','Ý',1}, {'ï','Þ',13}, {'ï','å',2}, {'ï','î',6}, {'ï','ñ',1}, {'ï','ò',1}, {'ï','ô',1}, {'ï','õ',1}, {'ï','÷',1}, {'ð','Á',18}, {'ð','Å',148}, -+{'ð','É',11}, {'ð','Ì',9}, {'ð','Ï',186}, {'ð','Ò',43}, {'ð','Õ',38}, {'ð','Ø',4}, {'ð','ó',3}, {'ñ','Â',4}, {'ñ','Ä',8}, {'ñ','Å',9}, {'ñ','Ç',5}, {'ñ','È',3}, {'ñ','É',4}, {'ñ','Ë',10}, {'ñ','Ì',5}, {'ñ','Í',6}, -+{'ñ','Î',28}, {'ñ','Ï',24}, {'ñ','Ð',39}, {'ñ','Ò',4}, {'ñ','Ó',30}, {'ñ','Ô',7}, {'ñ','Õ',5}, {'ñ','Ö',2}, {'ñ','×',49}, {'ñ','Ú',12}, {'ñ','Û',3}, {'ñ','Ü',3}, {'ñ','Þ',4}, {'ñ','î',1}, {'ò','Á',22}, {'ò','Å',13}, -+{'ò','É',5}, {'ò','Ï',13}, {'ò','Ò',1}, {'ò','Õ',1}, {'ò','ì',1}, {'ó','Á',19}, {'ó','Â',1}, {'ó','Ä',1}, {'ó','Å',56}, {'ó','È',2}, {'ó','É',16}, {'ó','Ë',22}, {'ó','Ì',11}, {'ó','Í',12}, {'ó','Î',6}, {'ó','Ï',26}, -+{'ó','Ð',6}, {'ó','Ñ',1}, {'ó','Ò',6}, {'ó','Ó',3}, {'ó','Ô',35}, {'ó','Õ',4}, {'ó','×',4}, {'ó','Ù',1}, {'ó','Ü',1}, {'ó','Þ',2}, {'ó','á',2}, {'ó','ó',3}, {'ó','÷',1}, {'ô','Á',79}, {'ô','Å',18}, {'ô','É',17}, -+{'ô','Ï',34}, {'ô','Ñ',3}, {'ô','Ò',11}, {'ô','Õ',31}, {'ô','×',1}, {'ô','Ø',2}, {'ô','Ù',55}, {'ô','á',4}, {'ô','å',1}, {'ô','é',1}, {'ô','ï',1}, {'õ','Â',2}, {'õ','Ä',3}, {'õ','Å',2}, {'õ','Ç',1}, {'õ','È',2}, -+{'õ','É',1}, {'õ','Ê',2}, {'õ','Ë',1}, {'õ','Ì',2}, {'õ','Í',9}, {'õ','Î',5}, {'õ','Ï',1}, {'õ','Ð',1}, {'õ','Ó',9}, {'õ','Ô',8}, {'õ','Ö',4}, {'õ','×',3}, {'õ','Ú',4}, {'õ','Û',1}, {'õ','Þ',1}, {'ö','Á',5}, -+{'ö','Ä',1}, {'ö','Å',14}, {'ö','É',5}, {'ö','Ï',2}, {'ö','Ò',1}, {'÷','Á',15}, {'÷','Ä',5}, {'÷','Å',98}, {'÷','Ç',3}, {'÷','É',7}, {'÷','Ë',5}, {'÷','Ì',8}, {'÷','Í',7}, {'÷','Î',6}, {'÷','Ï',107}, {'÷','Ð',18}, -+{'÷','Ò',2}, {'÷','Ó',74}, {'÷','Ô',6}, {'÷','Õ',1}, {'÷','×',2}, {'÷','Ù',39}, {'÷','Ú',5}, {'÷','Ü',8}, {'÷','Þ',3}, {'÷','á',1}, {'÷','è',1}, {'÷','ë',2}, {'÷','í',1}, {'÷','ï',3}, {'÷','ð',8}, {'÷','ó',2}, -+{'÷','û',2}, {'ú','Á',31}, {'ú','Å',1}, {'ú','É',2}, {'ú','Î',23}, {'ú','Ò',2}, {'ú','Õ',12}, {'ú','×',3}, {'ú','é',1}, {'û','Á',3}, {'û','Å',7}, {'û','É',8}, {'û','Ô',8}, {'û','Õ',7}, {'û','Û',1}, {'û','é',1}, -+{'ü','Â',5}, {'ü','È',1}, {'ü','Ê',1}, {'ü','Ì',4}, {'ü','Î',1}, {'ü','Ò',10}, {'ü','Ó',1}, {'ü','Ô',61}, {'ü','×',1}, {'ü','ô',1}, {'þ','Å',46}, {'þ','Ô',60}, {'þ','Õ',8}, {'þ','Ø',1} -+}; -+ -+static int -+is_win_charset(char *txt, int len){ -+ int j,ki=0,wi=0,d=839,l,koi_stat=0,win_stat=0,ws,ks; -+ unsigned char a,b; -+ l=strlen(txt); -+ if ((len)&&(l>len)) l=len; -+ for(j=0;j<l-1;j++){ -+ a=txt[j]; -+ b=txt[j+1]; -+ //skip bottom half of table -+ if(a<128 || b<128) -+ continue; -+ wi=839; -+ ki=839; -+ ws=0; -+ ks=0; -+ d=839; -+ //binary search through lng_stats -+ do{ -+ d>>=1; -+ if(!ws){ -+ if(a==win[wi].a){ -+ if(b==win[wi].b){ -+ ws=1; -+ win_stat+=win[wi].rate; -+ }else if(b<win[wi].b){ -+ wi-=d; -+ }else{ //b>win[wi].b -+ wi+=d; -+ } -+ }else if(a<win[wi].a){ -+ wi-=d; -+ }else{ //a>win[wi].a -+ wi+=d; -+ } -+ } -+ if(!ks){ -+ if(a==koi[ki].a){ -+ if(b==koi[ki].b){ -+ ks=1; -+ koi_stat+=koi[ki].rate; -+ }else if(b<koi[ki].b){ -+ ki-=d; -+ }else{ //b>win[wi].b -+ ki+=d; -+ } -+ }else if(a<koi[ki].a){ -+ ki-=d; -+ }else{ //a>win[wi].a -+ ki+=d; -+ } -+ } -+ }while(d); -+ } -+// fprintf(stderr,"\nwin %i, koi %i\n",win_stat,koi_stat); -+ if(win_stat>koi_stat) -+ return 1; -+ else -+ return 0; -+} -+ -+/* Only CP1251 and KOI8-R still */ -+int autocharset_russian(char *buf,int len) { -+ if (is_win_charset(buf,len)) return 0; -+ return 1; -+} -diff -dPNur xmms-1.2.7/libxmms/charset.c xmms-1.2.7-new/libxmms/charset.c ---- xmms-1.2.7/libxmms/charset.c 1969-12-31 19:00:00.000000000 -0500 -+++ xmms-1.2.7-new/libxmms/charset.c 2003-06-20 00:02:06.000000000 -0400 -@@ -0,0 +1,512 @@ -+#include <stdio.h> -+#include <stdlib.h> -+#include <string.h> -+#include <errno.h> -+#include <glib.h> -+#include <iconv.h> -+#include <assert.h> -+ -+#include "charset.h" -+#include "charset_config.h" -+ -+#define LOCALE_STRING_LENGTH 64 -+static char charset_default[LOCALE_STRING_LENGTH]; -+static char xmms_charset_tmp[CHARSET_MAX_STRING_SIZE]; -+ -+static int xmms_charset_changed = -1; -+ -+static int xmms_charset_id3; -+static int xmms_charset_output; -+static int xmms_charset_fs; -+static int xmms_charset_pl; -+ -+static iconv_t iconv_id3=(iconv_t)-1; /* id3 to output */ -+static iconv_t iconv_output=(iconv_t)-1; /* output to id3 */ -+static iconv_t iconv_fs=(iconv_t)-1; /* fs to output */ -+static iconv_t iconv_utf=(iconv_t)-1; /* id3 to UTF-8 */ -+static iconv_t iconv_pl2fs=(iconv_t)-1; /* playlist to fs */ -+static iconv_t iconv_fs2pl=(iconv_t)-1; /* fs to playlist */ -+ -+static int xmms_autocharset_mode = 0; -+static int xmms_autocharset_changed = 0; -+static iconv_t *xmms_autocharset = NULL; -+static iconv_t *xmms_autocharset_id2id = NULL; -+static iconv_t *xmms_autocharset_id2fs = NULL; -+static int xmms_autocharset_number = -1; -+ -+static int recode_fsout; -+static int recode_fs2utf; -+#include "charset_auto_russian.h" -+ -+extern int errno; -+ -+/***************************************************************************** -+************************ Auto Recoding *************************************** -+*****************************************************************************/ -+static int xmms_autocharset_number_charsets(int m) { -+ const char **encodings; -+ int i; -+ -+ if (!m) m=xmms_autocharset_mode; -+ encodings=autocharset_list[m].encodings; -+ for (i=0;encodings[i];i++); -+ return i; -+} -+ -+ -+static void xmms_autocharset_iconv_close() { -+ int i; -+ -+ for (i=0;i<xmms_autocharset_number;i++) { -+ if ((xmms_autocharset)&&(xmms_autocharset[i] != (iconv_t)-1)&&(xmms_autocharset[i] != (iconv_t)-2)) -+ iconv_close(xmms_autocharset[i]); -+ if ((xmms_autocharset_id2id)&&(xmms_autocharset_id2id[i] != (iconv_t)-1)&&(xmms_autocharset_id2id[i] != (iconv_t)-2)) -+ iconv_close(xmms_autocharset_id2id[i]); -+ if ((xmms_autocharset_id2fs)&&(xmms_autocharset_id2fs[i] != (iconv_t)-1)&&(xmms_autocharset_id2fs[i] != (iconv_t)-2)) -+ iconv_close(xmms_autocharset_id2fs[i]); -+ } -+ if (xmms_autocharset) free(xmms_autocharset); -+ if (xmms_autocharset_id2id) free(xmms_autocharset_id2id); -+ if (xmms_autocharset_id2fs) free(xmms_autocharset_id2fs); -+ -+ xmms_autocharset=NULL; -+ xmms_autocharset_id2id=NULL; -+ xmms_autocharset_id2fs=NULL; -+ xmms_autocharset_number = -1; -+} -+ -+void xmms_autocharset_new_mode(int m) { -+ xmms_autocharset_mode=m; -+ xmms_autocharset_changed=1; -+} -+ -+void xmms_autocharset_init(int m) { -+ xmms_autocharset_mode=m; -+ xmms_autocharset_changed=1; -+} -+ -+void xmms_autocharset_free() { -+ xmms_autocharset_iconv_close(); -+} -+ -+static void xmms_autocharset_iconv_open() { -+ const char **encodings; -+ const char *output, *id3, *fs; -+ int i; -+ -+ if ((!xmms_autocharset_changed)&&(!xmms_charset_changed)) return; -+ xmms_autocharset_iconv_close(); -+ xmms_autocharset_changed=0; -+ -+ xmms_autocharset_number = xmms_autocharset_number_charsets(0); -+ if (!xmms_autocharset_number) return; -+ -+ xmms_autocharset = (iconv_t*)malloc((xmms_autocharset_number+1)*sizeof(iconv_t)); -+ xmms_autocharset_id2id = (iconv_t*)malloc((xmms_autocharset_number+1)*sizeof(iconv_t)); -+ xmms_autocharset_id2fs = (iconv_t*)malloc((xmms_autocharset_number+1)*sizeof(iconv_t)); -+ if ((!xmms_autocharset)||(!xmms_autocharset_id2id)||(!xmms_autocharset_id2fs)) { -+ if (xmms_autocharset) { -+ free(xmms_autocharset); -+ xmms_autocharset=NULL; -+ } -+ if (xmms_autocharset_id2id) { -+ free(xmms_autocharset_id2id); -+ xmms_autocharset_id2id=NULL; -+ } -+ if (xmms_autocharset_id2fs) { -+ free(xmms_autocharset_id2fs); -+ xmms_autocharset_id2fs=NULL; -+ } -+ xmms_autocharset_number = -1; -+ perror("iconv: allocate memory"); -+ return; -+ } -+ -+ -+ if (xmms_charset_output) output=charset_list[xmms_charset_output]; -+ else output=charset_default; -+ if (xmms_charset_id3) id3=charset_list[xmms_charset_id3]; -+ else id3=charset_default; -+ if (xmms_charset_fs) fs=charset_list[xmms_charset_fs]; -+ else fs=output; -+ -+ encodings = autocharset_list[xmms_autocharset_mode].encodings; -+ -+ for (i=0;encodings[i];i++) { -+ if (strcmp(output,encodings[i])) -+ xmms_autocharset[i] = iconv_open(output,encodings[i]); -+ else -+ xmms_autocharset[i] = (iconv_t)-2; -+ -+ if (strcmp(id3,encodings[i])) -+ xmms_autocharset_id2id[i] = iconv_open(id3,encodings[i]); -+ else -+ xmms_autocharset_id2id[i] = (iconv_t)-2; -+ -+ if (strcmp(fs,encodings[i])) -+ xmms_autocharset_id2fs[i] = iconv_open(fs,encodings[i]); -+ else -+ xmms_autocharset_id2fs[i] = (iconv_t)-2; -+ } -+} -+ -+ -+static iconv_t xmms_autocharset_get(char *buf, int len) { -+ int i; -+ xmms_autocharset_iconv_open(); -+ if ((xmms_autocharset)&&(xmms_autocharset_number>0)) { -+ i=autocharset_list[xmms_autocharset_mode].func(buf,len); -+ if (i<xmms_autocharset_number) return xmms_autocharset[i]; -+ } -+ return (iconv_t)-1; -+} -+ -+static iconv_t xmms_autocharset_get_id2id(char *buf, int len) { -+ int i; -+ xmms_autocharset_iconv_open(); -+ if ((xmms_autocharset_id2id)&&(xmms_autocharset_number>0)) { -+ i=autocharset_list[xmms_autocharset_mode].func(buf,len); -+ if (i<xmms_autocharset_number) return xmms_autocharset_id2id[i]; -+ } -+ return (iconv_t)-1; -+} -+ -+static iconv_t xmms_autocharset_get_id2fs(char *buf, int len) { -+ int i; -+ xmms_autocharset_iconv_open(); -+ if ((xmms_autocharset_id2fs)&&(xmms_autocharset_number>0)) { -+ i=autocharset_list[xmms_autocharset_mode].func(buf,len); -+ if (i<xmms_autocharset_number) return xmms_autocharset_id2fs[i]; -+ } -+ return (iconv_t)-1; -+} -+ -+/***************************************************************************** -+************************ Recoding ******************************************** -+*****************************************************************************/ -+ -+static void xmms_charset_iconv_close() { -+ if (iconv_id3 != (iconv_t)-1) { -+ if (iconv_close(iconv_id3)<0) perror("iconv close: id3"); -+ iconv_id3 = (iconv_t)-1; -+ } -+ if (iconv_output != (iconv_t)-1) { -+ if (iconv_close(iconv_output)<0) perror("iconv close: output"); -+ iconv_output = (iconv_t)-1; -+ } -+ if (iconv_fs != (iconv_t)-1) { -+ if (iconv_close(iconv_fs)<0) perror("iconv close: fs"); -+ iconv_fs = (iconv_t)-1; -+ } -+ if (iconv_fs2pl != (iconv_t)-1) { -+ if (iconv_close(iconv_fs2pl)<0) perror("iconv close: fs2pl"); -+ iconv_fs2pl = (iconv_t)-1; -+ } -+ if (iconv_pl2fs != (iconv_t)-1) { -+ if (iconv_close(iconv_pl2fs)<0) perror("iconv close: pl2fs"); -+ iconv_pl2fs = (iconv_t)-1; -+ } -+ if (iconv_utf != (iconv_t)-1) { -+ if (iconv_close(iconv_utf)<0) perror("iconv close: utf"); -+ iconv_utf=(iconv_t)-1; -+ } -+} -+ -+static void xmms_charset_iconv_open() { -+ const char *id3, *output, *fs, *pl; -+ assert(xmms_charset_changed>=0); -+ if (!xmms_charset_changed) return; -+ -+ xmms_charset_iconv_close(); -+ if (xmms_charset_id3) id3=charset_list[xmms_charset_id3]; -+ else id3=charset_default; -+ if (xmms_charset_output) output=charset_list[xmms_charset_output]; -+ else output=charset_default; -+ if (xmms_charset_fs) fs=charset_list[xmms_charset_fs]; -+ else fs=output; -+ if (xmms_charset_pl) pl=charset_list[xmms_charset_pl]; -+ else pl=id3; -+ -+ -+ if ((xmms_charset_id3 != xmms_charset_output)&&(strcmp(id3,output))) { -+ iconv_id3 = iconv_open(output, id3); -+ iconv_output = iconv_open(id3, output); -+ if (!xmms_charset_fs) iconv_fs = iconv_open(id3, fs); -+ } -+ -+ if (strcmp(fs,id3)) { -+ iconv_fs = iconv_open(id3, fs); -+ } -+ -+ if (strcmp(fs,pl)) { -+ iconv_fs2pl = iconv_open(pl, fs); -+ iconv_pl2fs = iconv_open(fs,pl); -+ } -+ -+ if (strcmp(id3, "UTF-8")) { -+ iconv_utf = iconv_open("UTF-8",id3); -+ } -+ -+ if ((xmms_charset_fs)&&(xmms_charset_fs!=xmms_charset_output)) { -+ recode_fsout=1; -+ } else { -+ recode_fsout=0; -+ } -+ -+ if (strcmp(fs, "UTF-8")) { -+ recode_fs2utf=1; -+ } else { -+ recode_fs2utf=0; -+ } -+ -+ xmms_charset_changed = 0; -+} -+ -+ -+static int xmms_charset_number(char *c) { -+ int i; -+ if (!c) return 0; -+ for (i=0;charset_list[i];i++) -+ if (strcmp(charset_list[i], c)==0) return i; -+ return 0; /* Default, - if not found */ -+} -+ -+static void xmms_charset_setdefault() { -+ char *str1, *str2; -+ str1 = getenv(ENV_VARIABLE); -+ if (str1) { -+ str2 = strrchr(str1,'.'); -+ if (str2) strncpy(charset_default,str2+1,LOCALE_STRING_LENGTH); -+ else strncpy(charset_default,str1,LOCALE_STRING_LENGTH); -+ charset_default[LOCALE_STRING_LENGTH-1]=0; -+ str2 = strchr(charset_default,'@'); -+ if (str2) *str2 = 0; -+ } else { -+ strcpy(charset_default,"UTF-8"); -+ } -+} -+ -+void xmms_charset_init(char *id3, char *output, char *fs, char *pl) { -+ if (xmms_charset_changed<0) xmms_charset_setdefault(); -+ -+ xmms_charset_changed = 1; -+ xmms_charset_id3 = xmms_charset_number(id3); -+ xmms_charset_output = xmms_charset_number(output); -+ xmms_charset_fs = xmms_charset_number(fs); -+ xmms_charset_pl = xmms_charset_number(pl); -+} -+ -+void xmms_charset_free() { -+ xmms_charset_iconv_close(); -+} -+ -+void xmms_charset_new_charsets(int id3, int output, int fs, int pl) { -+ if (xmms_charset_changed<0) -+ xmms_charset_setdefault(); -+ else -+ if ((xmms_charset_id3==id3)&&(xmms_charset_output==output)&&(xmms_charset_fs==fs)&&(xmms_charset_pl==pl)) return; -+ -+ xmms_charset_changed = 1; -+ xmms_charset_id3 = id3; -+ xmms_charset_output = output; -+ xmms_charset_fs = fs; -+ xmms_charset_pl = pl; -+} -+ -+// Multi-byte strings still unsupported -+static void iconv_copysymbol(char **in_buf, int *in_left, char **out_buf, int *out_left) { -+ if ((out_left>0)&&(in_left>0)) { -+ (**out_buf)=(**in_buf); -+ (*out_buf)++; -+ (*in_buf)++; -+ (*in_left)--; -+ (*out_left)--; -+ } -+} -+ -+static char *xmms_charset_recode(iconv_t icnv, char *buf, int len, int *rlen) { -+ char *in_buf, *out_buf, *res, err; -+ int in_left, out_left, olen; -+ int errors=0; -+ -+ assert(buf); -+ -+ if (!len) { -+ len=strlen(buf); -+ } else { -+ olen=strlen(buf); -+ if (olen<len) len=olen; -+ } -+ -+ if (iconv(icnv, NULL, NULL, NULL, NULL) == -1) { -+ perror( "iconv convert: initialize" ); -+ return NULL; -+ } -+ -+ in_buf = buf; -+ in_left = len; -+ out_buf = &xmms_charset_tmp; -+ out_left = CHARSET_MAX_STRING_SIZE; -+ -+loop: -+ err=iconv(icnv, &in_buf, &in_left, &out_buf, &out_left); -+// printf("%s, %i %u\n",buf,err,errno); -+ if (err<0) { -+ if (errno==E2BIG) { -+ *(int*)(xmms_charset_tmp+(CHARSET_MAX_STRING_SIZE-sizeof(int)))=0; -+ } else if (errno==EILSEQ) { -+ if (errors<CHARSET_MAX_ERRORS) { -+ errors++; -+ iconv_copysymbol(&in_buf, &in_left, &out_buf, &out_left); -+ if (in_left>0) goto loop; -+ } else { -+ perror("iconv convert: invalid encoding?"); -+ return NULL; -+ } -+ } else { -+ perror("iconv convert: convert"); -+// perror(buf); -+ return NULL; -+ } -+ } -+ -+ olen = CHARSET_MAX_STRING_SIZE - out_left; -+ res = g_malloc(olen+1); -+ if (!res) { -+ perror( "iconv convert: malloc" ); -+ return NULL; -+ } -+ -+ memcpy(res,xmms_charset_tmp,olen); -+ res[olen]=0; -+ if (rlen) *rlen=olen; -+ return res; -+} -+ -+char *xmms_charset_recode_id3(char *buf, int len, int *rlen) { -+ iconv_t icnv; -+ -+ xmms_charset_iconv_open(); -+ icnv = xmms_autocharset_get(buf,len); -+ -+ if (icnv == (iconv_t)-2) return NULL; -+ -+ if (icnv != (iconv_t)-1) -+ return xmms_charset_recode(icnv, buf, len, rlen); -+ -+ if (iconv_id3 != (iconv_t)-1) -+ return xmms_charset_recode(iconv_id3, buf, len, rlen); -+ return NULL; -+} -+ -+char *xmms_charset_recode_output(char *buf, int len, int *rlen) { -+ xmms_charset_iconv_open(); -+ if (iconv_output != (iconv_t)-1) -+ return xmms_charset_recode(iconv_output, buf, len, rlen); -+ return NULL; -+} -+ -+char *xmms_charset_recode_fs(char *buf, int len, int *rlen) { -+ xmms_charset_iconv_open(); -+ if (iconv_fs != (iconv_t)-1) -+ return xmms_charset_recode(iconv_fs, buf, len, rlen); -+ return NULL; -+} -+ -+char *xmms_charset_recode_fsout(char *buf, int len, int *rlen) { -+ int olen; -+ char *str = NULL; -+ -+ xmms_charset_iconv_open(); -+ if (recode_fsout) { -+ if (iconv_fs != (iconv_t)-1) { -+ str = xmms_charset_recode(iconv_fs, buf, len, &olen); -+ if (!str) return NULL; -+ len=olen; -+ } -+ if (iconv_id3 != (iconv_t)-1) { -+ buf = xmms_charset_recode(iconv_id3, str ? str : buf, len, &olen); -+ if (str) free(str); -+ } else if (str) { -+ buf = str; -+ } else { -+ buf = NULL; -+ } -+ if (rlen) *rlen=olen; -+ return buf; -+ } -+ return NULL; -+} -+ -+char *xmms_charset_recode_fs2pl(char *buf, int len, int *rlen) { -+ xmms_charset_iconv_open(); -+ if (iconv_fs2pl != (iconv_t)-1) -+ return xmms_charset_recode(iconv_fs2pl, buf, len, rlen); -+ return NULL; -+} -+ -+char *xmms_charset_recode_pl2fs(char *buf, int len, int *rlen) { -+ iconv_t icnv; -+ -+ xmms_charset_iconv_open(); -+ icnv = xmms_autocharset_get_id2fs(buf,len); -+ -+ if (icnv==(iconv_t)-2) return NULL; -+ -+ if (icnv != (iconv_t)-1) -+ return xmms_charset_recode(icnv, buf, len, rlen); -+ -+ if (iconv_pl2fs != (iconv_t)-1) -+ return xmms_charset_recode(iconv_pl2fs, buf, len, rlen); -+ return NULL; -+} -+ -+ -+char *xmms_charset_recode_id2utf(char *buf, int len, int *rlen) { -+ char *str = NULL; -+ int olen; -+ iconv_t icnv; -+ -+ xmms_charset_iconv_open(); -+ -+ icnv = xmms_autocharset_get_id2id(buf,len); -+ if ((icnv != (iconv_t)-1)&&(icnv != (iconv_t)-2)) { -+ str = xmms_charset_recode(icnv, buf, len, &olen); -+ if (!str) return NULL; -+ len = olen; -+ } -+ -+ xmms_charset_iconv_open(); -+ if (iconv_utf != (iconv_t)-1) { -+ buf=xmms_charset_recode(iconv_utf, str ? str : buf, len, rlen); -+ if (str) free(str); -+ return buf; -+ } -+ -+ return NULL; -+} -+ -+char *xmms_charset_recode_fs2utf(char *buf, int len, int *rlen) { -+ int olen; -+ char *str = NULL; -+ -+ xmms_charset_iconv_open(); -+ if (recode_fs2utf) { -+ if (iconv_fs != (iconv_t)-1) { -+ str = xmms_charset_recode(iconv_fs, buf, len, &olen); -+ if (!str) return NULL; -+ len=olen; -+ } -+ if (iconv_utf != (iconv_t)-1) { -+ buf = xmms_charset_recode(iconv_utf, str ? str : buf, len, &olen); -+ if (str) free(str); -+ } else if (str) { -+ buf = str; -+ } else { -+ buf = NULL; -+ } -+ if (rlen) *rlen=olen; -+ return buf; -+ } -+ return NULL; -+} -diff -dPNur xmms-1.2.7/libxmms/charset_config.h xmms-1.2.7-new/libxmms/charset_config.h ---- xmms-1.2.7/libxmms/charset_config.h 1969-12-31 19:00:00.000000000 -0500 -+++ xmms-1.2.7-new/libxmms/charset_config.h 2003-06-20 00:02:06.000000000 -0400 -@@ -0,0 +1,13 @@ -+/* Misc configuration options */ -+ -+#define ENV_VARIABLE "LANG" -+#define CHARSET_MAX_STRING_SIZE 1024 /* 256 symbols in UTF-32 */ -+#define CHARSET_MAX_ERRORS 3 -+ -+const char *charset_list[] = { "Default", "KOI8-R", "CP1251", "CP866", "UTF-8", NULL }; -+ -+const int autocharset_list_ni=2; -+const struct autocharset_list_t autocharset_list[] = { -+ {"Off", NULL, {NULL}}, -+ {"Russian", &autocharset_russian, {"CP1251","KOI8-R"} }, -+}; -diff -dPNur xmms-1.2.7/libxmms/charset.h xmms-1.2.7-new/libxmms/charset.h ---- xmms-1.2.7/libxmms/charset.h 1969-12-31 19:00:00.000000000 -0500 -+++ xmms-1.2.7-new/libxmms/charset.h 2003-06-20 00:02:06.000000000 -0400 -@@ -0,0 +1,36 @@ -+#ifndef XMMS_CHARSET_H -+#define XMMS_CHARSET_H -+ -+#define AUTOCHARSET_MAX_ENCODINGS 5 -+int autocharset_russian(char *buf,int len); -+ -+struct autocharset_list_t { -+ char *title; -+ int (*func)(char *buf, int len); -+ char *encodings[AUTOCHARSET_MAX_ENCODINGS]; -+}; -+ -+extern const char *charset_list[]; -+extern const int autocharset_list_ni; -+extern const struct autocharset_list_t autocharset_list[]; -+ -+/* Initialization functions */ -+void xmms_autocharset_new_mode(int m); -+void xmms_autocharset_init(int m); -+void xmms_autocharset_free(); -+ -+void xmms_charset_init(char *id3, char *output, char *fs, char *pl); -+void xmms_charset_free(); -+void xmms_charset_new_charsets(int id3, int output, int fs, int pl); -+ -+/* Recoding functions */ -+char *xmms_charset_recode_id3(char *buf, int len, int *rlen); -+char *xmms_charset_recode_output(char *buf, int len, int *rlen); -+char *xmms_charset_recode_fs(char *buf, int len, int *rlen); -+char *xmms_charset_recode_fsout(char *buf, int len, int *rlen); -+char *xmms_charset_recode_id2utf(char *buf, int len, int *rlen); -+char *xmms_charset_recode_fs2utf(char *buf, int len, int *rlen); -+char *xmms_charset_recode_fs2pl(char *buf, int len, int *rlen); -+char *xmms_charset_recode_pl2fs(char *buf, int len, int *rlen); -+ -+#endif /* XMMS_CHARSET_H */ -diff -dPNur xmms-1.2.7/libxmms/Makefile.am xmms-1.2.7-new/libxmms/Makefile.am ---- xmms-1.2.7/libxmms/Makefile.am 2001-09-07 08:11:02.000000000 -0400 -+++ xmms-1.2.7-new/libxmms/Makefile.am 2003-06-20 00:02:06.000000000 -0400 -@@ -7,7 +7,7 @@ - libxmms_la_LIBADD = @GTK_LIBS@ @POSIX_LIBS@ - INCLUDES = @GTK_CFLAGS@ -I../intl - --libxmms_la_SOURCES = configfile.c configfile.h xmmsctrl.c xmmsctrl.h dirbrowser.c dirbrowser.h util.c util.h formatter.c formatter.h titlestring.c titlestring.h -+libxmms_la_SOURCES = configfile.c configfile.h xmmsctrl.c xmmsctrl.h dirbrowser.c dirbrowser.h util.c util.h formatter.c formatter.h titlestring.c titlestring.h charset.c charset.h charset_auto_russian.h charset_config.h - --xmmsinclude_HEADERS = configfile.h xmmsctrl.h dirbrowser.h util.h formatter.h titlestring.h -+xmmsinclude_HEADERS = configfile.h xmmsctrl.h dirbrowser.h util.h formatter.h titlestring.h charset.h charset_auto_russian.h - -diff -dPNur xmms-1.2.7/libxmms/Makefile.in xmms-1.2.7-new/libxmms/Makefile.in ---- xmms-1.2.7/libxmms/Makefile.in 2002-03-04 16:58:23.000000000 -0500 -+++ xmms-1.2.7-new/libxmms/Makefile.in 2003-06-20 00:22:17.000000000 -0400 -@@ -93,9 +93,9 @@ - libxmms_la_LIBADD = @GTK_LIBS@ @POSIX_LIBS@ - INCLUDES = @GTK_CFLAGS@ -I../intl - --libxmms_la_SOURCES = configfile.c configfile.h xmmsctrl.c xmmsctrl.h dirbrowser.c dirbrowser.h util.c util.h formatter.c formatter.h titlestring.c titlestring.h -+libxmms_la_SOURCES = configfile.c configfile.h xmmsctrl.c xmmsctrl.h dirbrowser.c dirbrowser.h util.c util.h formatter.c formatter.h titlestring.c titlestring.h charset.c charset.h charset_auto_russian.h charset_config.h - --xmmsinclude_HEADERS = configfile.h xmmsctrl.h dirbrowser.h util.h formatter.h titlestring.h -+xmmsinclude_HEADERS = configfile.h xmmsctrl.h dirbrowser.h util.h formatter.h titlestring.h charset.h charset_auto_russian.h - ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 - mkinstalldirs = $(SHELL) $(top_srcdir)/../mkinstalldirs - CONFIG_HEADER = config.h -@@ -109,7 +109,7 @@ - LIBS = @LIBS@ - libxmms_la_DEPENDENCIES = - libxmms_la_OBJECTS = configfile.lo xmmsctrl.lo dirbrowser.lo util.lo \ --formatter.lo titlestring.lo -+formatter.lo titlestring.lo charset.lo - CFLAGS = @CFLAGS@ - COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) - LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -diff -dPNur xmms-1.2.7/libxmms/titlestring.c xmms-1.2.7-new/libxmms/titlestring.c ---- xmms-1.2.7/libxmms/titlestring.c 2002-01-08 09:09:08.000000000 -0500 -+++ xmms-1.2.7-new/libxmms/titlestring.c 2003-06-20 00:02:06.000000000 -0400 -@@ -40,6 +40,8 @@ - gchar *xmms_get_titlestring(gchar *fmt, TitleInput *input) - { - gchar c, *p, outbuf[256], convert[16], *string; -+ gchar *cstring = NULL; -+ gint stringlen; - gint numdigits, numpr, val, size, i; - gint f_left, f_space, f_zero, someflag, width, precision; - gboolean did_output = FALSE; -@@ -164,9 +166,17 @@ - goto Print_string; - case 'f': - string = VS(input, file_name); -+ if (string) { -+ cstring=xmms_charset_recode_fs(string,0,&stringlen); -+ if (cstring) string=cstring; -+ } - goto Print_string; - case 'F': - string = VS(input, file_path); -+ if (string) { -+ cstring=xmms_charset_recode_fs(string,0,&stringlen); -+ if (cstring) string=cstring; -+ } - goto Print_string; - case 'g': - string = VS(input, genre); -@@ -208,6 +218,10 @@ - while ((c = *string++) != '\0') - PUTCH(c); - } -+ if (cstring) { -+ g_free(cstring); -+ cstring=NULL; -+ } - - RIGHTPAD(width - numpr); - break; -diff -dPNur xmms-1.2.7/xmms/charset.c xmms-1.2.7-new/xmms/charset.c ---- xmms-1.2.7/xmms/charset.c 1969-12-31 19:00:00.000000000 -0500 -+++ xmms-1.2.7-new/xmms/charset.c 2003-06-20 00:02:06.000000000 -0400 -@@ -0,0 +1,393 @@ -+#include <stdio.h> -+#include <locale.h> -+#include <string.h> -+#include <gtk/gtk.h> -+#include "xmms.h" -+#include "libxmms/charset.h" -+#include "charset.h" -+ -+#define CHARSET_MAX_STRING_SIZE 1024 /* 256 symbols in UTF-32 */ -+static char xmms_charset_tmp[CHARSET_MAX_STRING_SIZE]; -+ -+extern TextBox *playlistwin_sinfo; -+ -+static gint selected_id3_charset, selected_output_charset, selected_fs_charset; -+static gint selected_pl_charset; -+static gint selected_autocharset; -+static GtkWidget *prefswin_options_font_shade_entry, *prefswin_options_font_shade_browse; -+ -+static void prefswin_font_shade_browse_ok(GtkWidget * w, gpointer data) -+{ -+ GtkFontSelectionDialog *fontsel = GTK_FONT_SELECTION_DIALOG(data); -+ gchar *fontname; -+ -+ fontname = gtk_font_selection_dialog_get_font_name(fontsel); -+ -+ if (fontname) -+ gtk_entry_set_text(GTK_ENTRY(prefswin_options_font_shade_entry), fontname); -+ -+ gtk_widget_destroy(GTK_WIDGET(fontsel)); -+} -+ -+static void prefswin_font_shade_browse_cb(GtkWidget * w, gpointer data) -+{ -+ static GtkWidget *fontsel; -+ -+ if (fontsel != NULL) -+ return; -+ -+ fontsel = gtk_font_selection_dialog_new(_("Select playlist font:")); -+ gtk_font_selection_dialog_set_font_name(GTK_FONT_SELECTION_DIALOG(fontsel), gtk_entry_get_text(GTK_ENTRY(prefswin_options_font_shade_entry))); -+ gtk_signal_connect(GTK_OBJECT(GTK_FONT_SELECTION_DIALOG(fontsel)->ok_button), "clicked", GTK_SIGNAL_FUNC(prefswin_font_shade_browse_ok), fontsel); -+ gtk_signal_connect_object(GTK_OBJECT(GTK_FONT_SELECTION_DIALOG(fontsel)->cancel_button), "clicked", GTK_SIGNAL_FUNC(gtk_widget_destroy), GTK_OBJECT(fontsel)); -+ gtk_signal_connect(GTK_OBJECT(fontsel), "destroy", GTK_SIGNAL_FUNC(gtk_widget_destroyed), &fontsel); -+ gtk_widget_show(fontsel); -+} -+ -+ -+static void prefswin_charset_cb(GtkWidget * w, gpointer item) -+{ -+ int i; -+ i = GPOINTER_TO_INT(item); -+ if (i>=0x3FFFF) selected_pl_charset=i-0x3FFFF; -+ else if (i>=0x2FFFF) selected_autocharset=i-0x2FFFF; -+ else if (i>=0x1FFFF) selected_fs_charset=i-0x1FFFF; -+ else if (i>=0xFFFF) selected_output_charset=i-0xFFFF; -+ else selected_id3_charset=i; -+} -+ -+static void charset_options_add(Config *cfg, GtkOptionMenu *cmenu1, GtkOptionMenu *cmenu2, GtkOptionMenu *cmenu3, GtkOptionMenu *cmenu4) -+{ -+ int i; -+ GtkWidget *menu1, *item1; -+ GtkWidget *menu2, *item2; -+ GtkWidget *menu3, *item3; -+ GtkWidget *menu4, *item4; -+ -+ menu1 = gtk_menu_new(); -+ gtk_option_menu_remove_menu(cmenu1); -+ gtk_option_menu_set_menu(cmenu1, menu1); -+ -+ menu2 = gtk_menu_new(); -+ gtk_option_menu_remove_menu(cmenu2); -+ gtk_option_menu_set_menu(cmenu2, menu2); -+ -+ menu3 = gtk_menu_new(); -+ gtk_option_menu_remove_menu(cmenu3); -+ gtk_option_menu_set_menu(cmenu3, menu3); -+ -+ menu4 = gtk_menu_new(); -+ gtk_option_menu_remove_menu(cmenu4); -+ gtk_option_menu_set_menu(cmenu4, menu4); -+ -+ selected_id3_charset=0; -+ selected_output_charset=0; -+ selected_fs_charset=0; -+ selected_pl_charset=0; -+ -+ for (i=0;charset_list[i];i++) { -+ item1 = gtk_menu_item_new_with_label(charset_list[i]); -+ gtk_signal_connect(GTK_OBJECT(item1), "activate", GTK_SIGNAL_FUNC(prefswin_charset_cb), GINT_TO_POINTER(i)); -+ gtk_widget_show(item1); -+ gtk_menu_append(GTK_MENU(menu1), item1); -+ item2 = gtk_menu_item_new_with_label(charset_list[i]); -+ gtk_signal_connect(GTK_OBJECT(item2), "activate", GTK_SIGNAL_FUNC(prefswin_charset_cb), GINT_TO_POINTER(i+0xFFFF)); -+ gtk_widget_show(item2); -+ gtk_menu_append(GTK_MENU(menu2), item2); -+ item3 = gtk_menu_item_new_with_label(charset_list[i]); -+ gtk_signal_connect(GTK_OBJECT(item3), "activate", GTK_SIGNAL_FUNC(prefswin_charset_cb), GINT_TO_POINTER(i+0x1FFFF)); -+ gtk_widget_show(item3); -+ gtk_menu_append(GTK_MENU(menu3), item3); -+ item4 = gtk_menu_item_new_with_label(charset_list[i]); -+ gtk_signal_connect(GTK_OBJECT(item4), "activate", GTK_SIGNAL_FUNC(prefswin_charset_cb), GINT_TO_POINTER(i+0x3FFFF)); -+ gtk_widget_show(item4); -+ gtk_menu_append(GTK_MENU(menu4), item4); -+ if ((cfg->charset_id3)&&(!strcmp(cfg->charset_id3,charset_list[i]))) { -+ selected_id3_charset=i; -+ } -+ if ((cfg->charset_output)&&(!strcmp(cfg->charset_output,charset_list[i]))) { -+ selected_output_charset=i; -+ } -+ if ((cfg->charset_fs)&&(!strcmp(cfg->charset_fs,charset_list[i]))) { -+ selected_fs_charset=i; -+ } -+ if ((cfg->charset_pl)&&(!strcmp(cfg->charset_pl,charset_list[i]))) { -+ selected_pl_charset=i; -+ } -+ } -+ -+ gtk_option_menu_set_history(cmenu1, selected_id3_charset); -+ gtk_option_menu_set_history(cmenu2, selected_output_charset); -+ gtk_option_menu_set_history(cmenu3, selected_fs_charset); -+ gtk_option_menu_set_history(cmenu4, selected_pl_charset); -+} -+ -+static void autocharset_options_add(Config *cfg, GtkOptionMenu *cmenu) -+{ -+ int i; -+ GtkWidget *menu, *item; -+ -+ menu = gtk_menu_new(); -+ gtk_option_menu_remove_menu(cmenu); -+ gtk_option_menu_set_menu(cmenu, menu); -+ -+ selected_autocharset=0; -+ -+ -+ for (i=0;i<autocharset_list_ni;i++) { -+ item = gtk_menu_item_new_with_label(autocharset_list[i].title); -+ gtk_signal_connect(GTK_OBJECT(item), "activate", GTK_SIGNAL_FUNC(prefswin_charset_cb), GINT_TO_POINTER(i+0x2FFFF)); -+ gtk_widget_show(item); -+ gtk_menu_append(GTK_MENU(menu), item); -+ if ((cfg->autocharset)&&(cfg->autocharset==i)) { -+ selected_autocharset=i; -+ } -+ } -+ -+ gtk_option_menu_set_history(cmenu, selected_autocharset); -+} -+ -+void charset_create_prefs_window(Config *cfg, GtkNotebook *prefswin_notebook, GtkWidget *prefswin_fonts_vbox) { -+ GtkWidget *prefswin_encodings_vbox; -+ GtkWidget *prefswin_fonts_shade_frame; -+ GtkWidget *options_font_shade_hbox, *options_font_shade_vbox; -+ GtkWidget *prefswin_charset_frame, *prefswin_charset_vbox; -+ GtkWidget *prefswin_charset_list1, *prefswin_charset_list2, *prefswin_charset_list3, *prefswin_charset_list4; -+ GtkWidget *prefswin_charset_hbox1, *prefswin_charset_hbox2, *prefswin_charset_hbox3, *prefswin_charset_hbox4; -+ GtkWidget *prefswin_charset_label1, *prefswin_charset_label2, *prefswin_charset_label3, *prefswin_charset_label4; -+ GtkWidget *prefswin_autocharset_frame, *prefswin_autocharset_vbox; -+ GtkWidget *prefswin_autocharset_list; -+ GtkWidget *prefswin_autocharset_hbox; -+ GtkWidget *prefswin_autocharset_label; -+ -+ prefswin_fonts_shade_frame = gtk_frame_new(_("Shade")); -+ gtk_container_set_border_width(GTK_CONTAINER(prefswin_fonts_shade_frame), 5); -+ gtk_box_pack_start(GTK_BOX(prefswin_fonts_vbox), prefswin_fonts_shade_frame, FALSE, FALSE, 0); -+ options_font_shade_vbox = gtk_vbox_new(FALSE, 5); -+ gtk_container_border_width(GTK_CONTAINER(options_font_shade_vbox), 5); -+ gtk_container_add(GTK_CONTAINER(prefswin_fonts_shade_frame), options_font_shade_vbox); -+ options_font_shade_hbox = gtk_hbox_new(FALSE, 5); -+ gtk_box_pack_start_defaults(GTK_BOX(options_font_shade_vbox), options_font_shade_hbox); -+ prefswin_options_font_shade_entry = gtk_entry_new(); -+ gtk_box_pack_start(GTK_BOX(options_font_shade_hbox), prefswin_options_font_shade_entry, TRUE, TRUE, 0); -+ prefswin_options_font_shade_browse = gtk_button_new_with_label(_("Browse")); -+ gtk_signal_connect(GTK_OBJECT(prefswin_options_font_shade_browse), "clicked", GTK_SIGNAL_FUNC(prefswin_font_shade_browse_cb), NULL); -+ gtk_widget_set_usize(prefswin_options_font_shade_browse, 85, 17); -+ gtk_box_pack_start(GTK_BOX(options_font_shade_hbox), prefswin_options_font_shade_browse, FALSE, TRUE, 0); -+ -+ prefswin_encodings_vbox = gtk_vbox_new(FALSE, 0); -+ -+ prefswin_charset_frame = gtk_frame_new(_("Encodings")); -+ gtk_box_pack_start(GTK_BOX(prefswin_encodings_vbox), prefswin_charset_frame, FALSE, FALSE, 0); -+ gtk_container_border_width(GTK_CONTAINER(prefswin_charset_frame), 5); -+ prefswin_charset_vbox = gtk_vbox_new(FALSE, 3); -+ gtk_container_add(GTK_CONTAINER(prefswin_charset_frame), prefswin_charset_vbox); -+ gtk_container_border_width(GTK_CONTAINER(prefswin_charset_vbox), 5); -+ -+ prefswin_charset_hbox1 = gtk_hbox_new(FALSE, 10); -+ gtk_container_add(GTK_CONTAINER(prefswin_charset_vbox), prefswin_charset_hbox1); -+ gtk_container_border_width(GTK_CONTAINER(prefswin_charset_hbox1), 5); -+ prefswin_charset_label1 = gtk_label_new(_("ID3 Encoding")); -+ gtk_widget_set_usize(prefswin_charset_label1, 120, 17); -+ gtk_box_pack_start(GTK_BOX(prefswin_charset_hbox1), prefswin_charset_label1, FALSE, FALSE, 0); -+ prefswin_charset_list1 = gtk_option_menu_new(); -+ gtk_box_pack_start(GTK_BOX(prefswin_charset_hbox1), prefswin_charset_list1, TRUE, TRUE, 0); -+ -+ prefswin_charset_hbox3 = gtk_hbox_new(FALSE, 10); -+ gtk_container_add(GTK_CONTAINER(prefswin_charset_vbox), prefswin_charset_hbox3); -+ gtk_container_border_width(GTK_CONTAINER(prefswin_charset_hbox3), 5); -+ prefswin_charset_label3 = gtk_label_new(_("FileSystem Encoding")); -+ gtk_widget_set_usize(prefswin_charset_label3, 120, 17); -+ gtk_box_pack_start(GTK_BOX(prefswin_charset_hbox3), prefswin_charset_label3, FALSE, FALSE, 0); -+ prefswin_charset_list3 = gtk_option_menu_new(); -+ gtk_box_pack_start(GTK_BOX(prefswin_charset_hbox3), prefswin_charset_list3, TRUE, TRUE, 0); -+ -+ prefswin_charset_hbox4 = gtk_hbox_new(FALSE, 10); -+ gtk_container_add(GTK_CONTAINER(prefswin_charset_vbox), prefswin_charset_hbox4); -+ gtk_container_border_width(GTK_CONTAINER(prefswin_charset_hbox4), 5); -+ prefswin_charset_label4 = gtk_label_new(_("Playlist Encoding")); -+ gtk_widget_set_usize(prefswin_charset_label4, 120, 17); -+ gtk_box_pack_start(GTK_BOX(prefswin_charset_hbox4), prefswin_charset_label4, FALSE, FALSE, 0); -+ prefswin_charset_list4 = gtk_option_menu_new(); -+ gtk_box_pack_start(GTK_BOX(prefswin_charset_hbox4), prefswin_charset_list4, TRUE, TRUE, 0); -+ -+ prefswin_charset_hbox2 = gtk_hbox_new(FALSE, 10); -+ gtk_container_add(GTK_CONTAINER(prefswin_charset_vbox), prefswin_charset_hbox2); -+ gtk_container_border_width(GTK_CONTAINER(prefswin_charset_hbox2), 5); -+ prefswin_charset_label2 = gtk_label_new(_("Output Encoding")); -+ gtk_widget_set_usize(prefswin_charset_label2, 120, 17); -+ gtk_box_pack_start(GTK_BOX(prefswin_charset_hbox2), prefswin_charset_label2, FALSE, FALSE, 0); -+ prefswin_charset_list2 = gtk_option_menu_new(); -+ gtk_box_pack_start(GTK_BOX(prefswin_charset_hbox2), prefswin_charset_list2, TRUE, TRUE, 0); -+ -+ charset_options_add(cfg, GTK_OPTION_MENU(prefswin_charset_list1),GTK_OPTION_MENU(prefswin_charset_list2),GTK_OPTION_MENU(prefswin_charset_list3), GTK_OPTION_MENU(prefswin_charset_list4)); -+ -+ prefswin_autocharset_frame = gtk_frame_new(_("Encoding Autoselection")); -+ gtk_box_pack_start(GTK_BOX(prefswin_encodings_vbox), prefswin_autocharset_frame, FALSE, FALSE, 0); -+ gtk_container_border_width(GTK_CONTAINER(prefswin_autocharset_frame), 5); -+ prefswin_autocharset_vbox = gtk_vbox_new(FALSE, 3); -+ gtk_container_add(GTK_CONTAINER(prefswin_autocharset_frame), prefswin_autocharset_vbox); -+ gtk_container_border_width(GTK_CONTAINER(prefswin_autocharset_vbox), 5); -+ -+ prefswin_autocharset_hbox = gtk_hbox_new(FALSE, 10); -+ gtk_container_add(GTK_CONTAINER(prefswin_autocharset_vbox), prefswin_autocharset_hbox); -+ gtk_container_border_width(GTK_CONTAINER(prefswin_autocharset_hbox), 5); -+ prefswin_autocharset_label = gtk_label_new(_("Language")); -+ gtk_widget_set_usize(prefswin_autocharset_label, 120, 17); -+ gtk_box_pack_start(GTK_BOX(prefswin_autocharset_hbox), prefswin_autocharset_label, FALSE, FALSE, 0); -+ prefswin_autocharset_list = gtk_option_menu_new(); -+ gtk_box_pack_start(GTK_BOX(prefswin_autocharset_hbox), prefswin_autocharset_list, TRUE, TRUE, 0); -+ -+ autocharset_options_add(cfg, GTK_OPTION_MENU(prefswin_autocharset_list)); -+ -+ gtk_notebook_append_page(prefswin_notebook, prefswin_encodings_vbox, gtk_label_new(_("Encodings"))); -+} -+ -+void charset_prefswin_apply_changes(Config *cfg) { -+ if (cfg->charset_id3) g_free(cfg->charset_id3); -+ if (cfg->charset_output) g_free(cfg->charset_output); -+ if (cfg->charset_fs) g_free(cfg->charset_fs); -+ if (cfg->charset_pl) g_free(cfg->charset_pl); -+ cfg->charset_id3=g_strdup(charset_list[selected_id3_charset]); -+ cfg->charset_output=g_strdup(charset_list[selected_output_charset]); -+ cfg->charset_fs=g_strdup(charset_list[selected_fs_charset]); -+ cfg->charset_pl=g_strdup(charset_list[selected_pl_charset]); -+ xmms_charset_new_charsets(selected_id3_charset, selected_output_charset, selected_fs_charset, selected_pl_charset); -+ cfg->autocharset=selected_autocharset; -+ xmms_autocharset_new_mode(selected_autocharset); -+ -+ if (cfg->shade_font) g_free(cfg->shade_font); -+ cfg->shade_font = g_strdup(gtk_entry_get_text(GTK_ENTRY(prefswin_options_font_shade_entry))); -+ textbox_set_xfont(playlistwin_sinfo, cfg->mainwin_use_xfont, cfg->shade_font); -+} -+ -+void charset_show_prefs_window(Config *cfg) { -+ gtk_entry_set_text(GTK_ENTRY(prefswin_options_font_shade_entry), cfg->shade_font); -+} -+ -+void charset_create_playlist_window(Config *cfg) { -+ textbox_set_xfont(playlistwin_sinfo, cfg->mainwin_use_xfont, cfg->shade_font); -+} -+/***************************************************************************** -+************************ Initialization / Deinitilization ******************** -+*****************************************************************************/ -+void charset_free(Config *cfg) { -+ xmms_charset_free(); -+ xmms_autocharset_free(); -+} -+ -+void charset_init(Config *cfg) { -+ xmms_charset_init(cfg->charset_id3, cfg->charset_output, cfg->charset_fs, cfg->charset_pl); -+ xmms_autocharset_init(cfg->autocharset); -+} -+ -+void charset_read_config(ConfigFile *cfgfile, Config *cfg) { -+ cfg->autocharset=0; -+ xmms_cfg_read_string(cfgfile, "xmms", "shade_font", &cfg->shade_font); -+ xmms_cfg_read_string(cfgfile, "xmms", "charset_id3", &cfg->charset_id3); -+ xmms_cfg_read_string(cfgfile, "xmms", "charset_output", &cfg->charset_output); -+ xmms_cfg_read_string(cfgfile, "xmms", "charset_fs", &cfg->charset_fs); -+ xmms_cfg_read_string(cfgfile, "xmms", "charset_pl", &cfg->charset_pl); -+ xmms_cfg_read_int(cfgfile,"xmms","autocharset",&cfg->autocharset); -+} -+ -+void charset_write_config(ConfigFile *cfgfile, Config *cfg) { -+ xmms_cfg_write_string(cfgfile, "xmms", "shade_font", cfg->shade_font); -+ xmms_cfg_write_string(cfgfile, "xmms", "charset_id3", cfg->charset_id3); -+ xmms_cfg_write_string(cfgfile, "xmms", "charset_output", cfg->charset_output); -+ xmms_cfg_write_string(cfgfile, "xmms", "charset_fs", cfg->charset_fs); -+ xmms_cfg_write_string(cfgfile, "xmms", "charset_pl", cfg->charset_pl); -+ xmms_cfg_write_int(cfgfile,"xmms","autocharset",cfg->autocharset); -+} -+ -+void charset_default_config(Config *cfg) { -+ if (cfg->shade_font && strlen(cfg->shade_font) == 0) -+ { -+ g_free(cfg->shade_font); -+ cfg->shade_font = NULL; -+ } -+ if (cfg->shade_font == NULL) -+ cfg->shade_font = g_strdup("-misc-fixed-medium-r-*-*-7-*"); -+} -+ -+/***************************************************************************** -+*********************************** Sort ************************************* -+*****************************************************************************/ -+gchar *saved_locale; -+ -+static void charset_sort_null_entry(gpointer entry, gpointer data) { -+ ((PlaylistEntry*)entry)->sort=NULL; -+} -+ -+static void charset_sort_free_entry(gpointer entry, gpointer data) { -+ if (((PlaylistEntry*)entry)->sort) -+ g_free(((PlaylistEntry*)entry)->sort); -+} -+ -+void charset_sort_prepare(GList *playlist) { -+ g_list_foreach(playlist, charset_sort_null_entry, NULL); -+ saved_locale=g_strdup(setlocale(LC_COLLATE,NULL)); -+ setlocale(LC_COLLATE,"UTF-8"); -+} -+ -+void charset_sort_free(GList *playlist) { -+ g_list_foreach(playlist, charset_sort_free_entry, NULL); -+ if (saved_locale) { -+ setlocale(LC_COLLATE,saved_locale); -+ g_free(saved_locale); -+ } -+} -+ -+char *charset_sort_convert(PlaylistEntry *entry, gchar *title, int fs) { -+ char *str; -+ if (entry->sort) return entry->sort; -+ if (fs) -+ str=xmms_charset_recode_fs2utf(title,0,NULL); -+ else -+ str=xmms_charset_recode_id2utf(title,0,NULL); -+ -+ if (!str) -+ entry->sort=g_strdup(title); -+ else { -+ strxfrm(xmms_charset_tmp,str,CHARSET_MAX_STRING_SIZE); -+// *(int*)(xmms_charset_tmp+(CHARSET_MAX_STRING_SIZE-sizeof(int)))=0; -+ xmms_charset_tmp[CHARSET_MAX_STRING_SIZE-1]=0; -+ entry->sort=g_strdup(xmms_charset_tmp); -+ g_free(str); -+ } -+ -+ if (entry->sort) -+ return entry->sort; -+ -+ return title; -+} -+ -+/***************************************************************************** -+*********************************** Misc ************************************* -+*****************************************************************************/ -+ -+void textbox_set_ctext(TextBox * tb, gchar * text) -+{ -+ gchar *rtext; -+ -+ lock_widget(tb); -+ -+ rtext=xmms_charset_recode_id3(text,0,NULL); -+ if (rtext) text=rtext; -+ if (tb->tb_text) -+ { -+ if (!strcmp(text, tb->tb_text)) -+ { -+ if (rtext) free(rtext); -+ unlock_widget(tb); -+ return; -+ } -+ g_free(tb->tb_text); -+ } -+ -+ tb->tb_text = g_strdup(text); -+ if (rtext) free(rtext); -+ -+ unlock_widget(tb); -+ draw_widget(tb); -+} -diff -dPNur xmms-1.2.7/xmms/charset.h xmms-1.2.7-new/xmms/charset.h ---- xmms-1.2.7/xmms/charset.h 1969-12-31 19:00:00.000000000 -0500 -+++ xmms-1.2.7-new/xmms/charset.h 2003-06-20 00:02:06.000000000 -0400 -@@ -0,0 +1,19 @@ -+#include "libxmms/configfile.h" -+#include "libxmms/charset.h" -+void charset_create_prefs_window(Config *cfg, GtkNotebook *prefswin_notebook, GtkWidget *prefswin_fonts_vbox); -+void charset_show_prefs_window(Config *cfg); -+void charset_prefswin_apply_changes(Config *cfg); -+void charset_create_playlist_window(Config *cfg); -+ -+void charset_init(Config *cfg); -+void charset_free(Config *cfg); -+ -+void charset_read_config(ConfigFile *cfgfile, Config *cfg); -+void charset_default_config(Config *cfg); -+void charset_write_config(ConfigFile *cfgfile, Config *cfg); -+ -+void charset_sort_prepare(GList *playlist); -+void charset_sort_free(GList *playlist); -+char *charset_sort_convert(PlaylistEntry *entry, gchar *title, int fs); -+ -+void textbox_set_ctext(TextBox * tb, gchar * text); -diff -dPNur xmms-1.2.7/xmms/input.c xmms-1.2.7-new/xmms/input.c ---- xmms-1.2.7/xmms/input.c 2001-07-11 08:19:23.000000000 -0400 -+++ xmms-1.2.7-new/xmms/input.c 2003-06-20 00:02:06.000000000 -0400 -@@ -19,6 +19,7 @@ - #include "xmms.h" - #include "fft.h" - #include "libxmms/titlestring.h" -+#include "libxmms/charset.h" - - static pthread_mutex_t vis_mutex = PTHREAD_MUTEX_INITIALIZER; - -@@ -332,7 +333,7 @@ - { - GList *node; - InputPlugin *ip = NULL; -- -+ - node = get_input_list(); - while (node) - { -@@ -360,8 +361,11 @@ - - (*title) = xmms_get_titlestring(xmms_get_gentitle_format(), - input); -- if ( (*title) == NULL ) -- (*title) = g_strdup(input->file_name); -+ if ( (*title) == NULL ) { -+ (*title) = xmms_charset_recode_fs(input->file_name,0,NULL); -+ if (!*title) (*title) = g_strdup(input->file_name); -+ } -+ - (*length) = -1; - g_free(temp); - g_free(input); -diff -dPNur xmms-1.2.7/xmms/main.c xmms-1.2.7-new/xmms/main.c ---- xmms-1.2.7/xmms/main.c 2002-02-27 09:30:28.000000000 -0500 -+++ xmms-1.2.7-new/xmms/main.c 2003-06-20 00:02:06.000000000 -0400 -@@ -35,6 +35,7 @@ - #include "libxmms/xmmsctrl.h" - #include "libxmms/util.h" - #include "libxmms/dirbrowser.h" -+#include "charset.h" - #include "xmms_mini.xpm" - - GtkWidget *mainwin, *mainwin_url_window = NULL, *mainwin_dir_browser = NULL; -@@ -378,7 +379,6 @@ - - cfg.gentitle_format = NULL; - -- - filename = g_strconcat(g_get_home_dir(), "/.xmms/config", NULL); - cfgfile = xmms_cfg_open_file(filename); - if (cfgfile) -@@ -431,6 +431,7 @@ - xmms_cfg_read_boolean(cfgfile, "xmms", "use_fontsets", &cfg.use_fontsets); - xmms_cfg_read_boolean(cfgfile, "xmms", "mainwin_use_xfont", &cfg.mainwin_use_xfont); - xmms_cfg_read_string(cfgfile, "xmms", "mainwin_font", &cfg.mainwin_font); -+ charset_read_config(cfgfile,&cfg); - xmms_cfg_read_int(cfgfile, "xmms", "playlist_position", &cfg.playlist_position); - xmms_cfg_read_int(cfgfile, "xmms", "equalizer_x", &cfg.equalizer_x); - xmms_cfg_read_int(cfgfile, "xmms", "equalizer_y", &cfg.equalizer_y); -@@ -519,6 +520,8 @@ - if (cfg.eqpreset_extension == NULL) - cfg.eqpreset_extension = g_strdup("preset"); - -+ charset_default_config(&cfg); -+ - g_free(filename); - } - -@@ -601,6 +604,7 @@ - xmms_cfg_write_boolean(cfgfile, "xmms", "use_fontsets", cfg.use_fontsets); - xmms_cfg_write_boolean(cfgfile, "xmms", "mainwin_use_xfont", cfg.mainwin_use_xfont); - xmms_cfg_write_string(cfgfile, "xmms", "mainwin_font", cfg.mainwin_font); -+ charset_write_config(cfgfile,&cfg); - xmms_cfg_write_int(cfgfile, "xmms", "playlist_position", get_playlist_position()); - /* dock_get_widget_pos(equalizerwin, &cfg.equalizer_x, &cfg.equalizer_y); */ - xmms_cfg_write_int(cfgfile, "xmms", "equalizer_x", cfg.equalizer_x); -@@ -894,6 +898,7 @@ - gtk_timeout_remove(mainwin_timeout_tag); - util_set_cursor(NULL); - save_config(); -+ charset_free(&cfg); - cleanup_ctrlsocket(); - playlist_stop_get_info_thread(); - playlist_clear(); -@@ -992,11 +997,11 @@ - - if ((text = input_get_info_text()) != NULL) - { -- textbox_set_text(mainwin_info, text); -+ textbox_set_ctext(mainwin_info, text); - } - else if ((text = playlist_get_info_text()) != NULL) - { -- textbox_set_text(mainwin_info, text); -+ textbox_set_ctext(mainwin_info, text); - g_free(text); - } - else -@@ -3405,6 +3410,7 @@ - #endif - - read_config(); -+ charset_init(&cfg); - - if (geteuid() == 0) - { -diff -dPNur xmms-1.2.7/xmms/main.h xmms-1.2.7-new/xmms/main.h ---- xmms-1.2.7/xmms/main.h 2002-01-21 09:22:38.000000000 -0500 -+++ xmms-1.2.7-new/xmms/main.h 2003-06-20 00:02:06.000000000 -0400 -@@ -19,6 +19,7 @@ - */ - #ifndef MAIN_H - #define MAIN_H -+#include "libxmms/charset.h" - - typedef enum - { -@@ -62,6 +63,9 @@ - gint mouse_change; - gboolean playlist_transparent; - gchar *gentitle_format; -+ gchar *charset_id3, *charset_output, *charset_fs, *charset_pl; -+ gint autocharset; -+ gchar *shade_font; - } - Config; - -diff -dPNur xmms-1.2.7/xmms/Makefile.am xmms-1.2.7-new/xmms/Makefile.am ---- xmms-1.2.7/xmms/Makefile.am 2001-06-14 08:30:33.000000000 -0400 -+++ xmms-1.2.7-new/xmms/Makefile.am 2003-06-20 00:02:06.000000000 -0400 -@@ -54,7 +54,8 @@ - getopt.c getopt1.c getopt.h \ - urldecode.c urldecode.h \ - dnd.h \ --mkdtemp.c -+mkdtemp.c \ -+charset.c charset.h - - EXTRA_DIST= xmms_logo.xpm xmms_mini.xpm xmms.desktop xmms.wmconfig - -diff -dPNur xmms-1.2.7/xmms/Makefile.in xmms-1.2.7-new/xmms/Makefile.in ---- xmms-1.2.7/xmms/Makefile.in 2002-03-04 16:58:25.000000000 -0500 -+++ xmms-1.2.7-new/xmms/Makefile.in 2003-06-20 00:22:49.000000000 -0400 -@@ -219,8 +219,8 @@ - getopt.c getopt1.c getopt.h \ - urldecode.c urldecode.h \ - dnd.h \ --mkdtemp.c -- -+mkdtemp.c \ -+charset.c charset.h - - EXTRA_DIST = xmms_logo.xpm xmms_mini.xpm xmms.desktop xmms.wmconfig - -@@ -248,7 +248,7 @@ - main.$(OBJEXT) skinwin.$(OBJEXT) prefswin.$(OBJEXT) \ - playlistwin.$(OBJEXT) equalizer.$(OBJEXT) hints.$(OBJEXT) \ - about.$(OBJEXT) sm.$(OBJEXT) getopt.$(OBJEXT) getopt1.$(OBJEXT) \ --urldecode.$(OBJEXT) mkdtemp.$(OBJEXT) -+urldecode.$(OBJEXT) mkdtemp.$(OBJEXT) charset.$(OBJEXT) - xmms_DEPENDENCIES = $(top_builddir)/libxmms/libxmms.la - CFLAGS = @CFLAGS@ - COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -diff -dPNur xmms-1.2.7/xmms/playlist.c xmms-1.2.7-new/xmms/playlist.c ---- xmms-1.2.7/xmms/playlist.c 2002-02-20 09:17:31.000000000 -0500 -+++ xmms-1.2.7-new/xmms/playlist.c 2003-06-20 00:02:06.000000000 -0400 -@@ -20,6 +20,7 @@ - #include "xmms.h" - #include <time.h> - #include "libxmms/util.h" -+#include "charset.h" - #include <sys/stat.h> - #include <unistd.h> - -@@ -752,6 +753,7 @@ - char *playlist_get_info_text(void) - { - char *text, *title, *tmp, *numbers, *length; -+ char *ctitle; - - PL_LOCK(); - if (!playlist_position) -@@ -760,10 +762,17 @@ - return NULL; - } - -- if (playlist_position->title) -+ if (playlist_position->title) { -+ ctitle = xmms_charset_recode_id3(playlist_position->title,0,NULL); -+ if (ctitle) title=ctitle; -+ else - title = playlist_position->title; -- else -+ } else { -+ ctitle = xmms_charset_recode_fsout(g_basename(playlist_position->filename),0,NULL); -+ if (ctitle) title=ctitle; -+ else - title = g_basename(playlist_position->filename); -+ } - - /* - * If the user don't want numbers in the playlist, don't -@@ -785,6 +794,7 @@ - text = g_strdup_printf("%s%s%s", numbers, title, length); - g_free(numbers); - g_free(length); -+ if (ctitle) g_free(ctitle); - - PL_UNLOCK(); - -@@ -821,6 +831,7 @@ - GList *node; - FILE *file; - gchar *ext; -+ gchar *fn, *cfn; - gboolean is_pls = FALSE; - - if ((file = fopen(filename, "w")) == NULL) -@@ -842,10 +853,13 @@ - while (node) - { - PlaylistEntry *entry = node->data; -+ cfn=xmms_charset_recode_fs2pl(entry->filename,0,NULL); -+ if (cfn) fn=cfn; -+ else fn=entry->filename; - if (is_pls) - fprintf(file, "File%d=%s\n", - g_list_position(playlist, node) + 1, -- entry->filename); -+ fn); - else - { - if (entry->title) -@@ -860,8 +874,9 @@ - fprintf(file, "#EXTINF:%d,%s\n", - seconds, entry->title); - } -- fprintf(file, "%s\n", entry->filename); -+ fprintf(file, "%s\n", fn); - } -+ if (cfn) g_free(cfn); - node = g_list_next(node); - } - PL_UNLOCK(); -@@ -939,6 +954,7 @@ - { - FILE *file; - char *line, *ext; -+ char *cline; - guint entries = 0; - int linelen = 1024; - gboolean extm3u = FALSE; -@@ -964,8 +980,10 @@ - line = read_ini_string(filename, "playlist", key); - if (line != NULL) - { -- playlist_load_ins_file(line, filename, pos, -+ cline = xmms_charset_recode_pl2fs(line,0,NULL); -+ playlist_load_ins_file(cline ? cline : line, filename, pos, - NULL, -1); -+ if (cline) g_free(cline); - entries++; - if (pos >= 0) - pos++; -@@ -1032,7 +1050,9 @@ - ext_info = NULL; - } - -- playlist_load_ins_file(line, filename, pos, ext_title, ext_len); -+ cline = xmms_charset_recode_pl2fs(line,linelen,NULL); -+ playlist_load_ins_file(cline ? cline : line, filename, pos, ext_title, ext_len); -+ if (cline) g_free(cline); - - g_free(ext_title); - ext_title = NULL; -@@ -1125,19 +1145,27 @@ - - if (entry->title == NULL && entry->length == -1) - { -- if (playlist_get_info_entry(entry)) -+ if (playlist_get_info_entry(entry)) { -+ title = xmms_charset_recode_id3(entry->title,0,NULL); -+ if (!title) - title = g_strdup(entry->title); -+ } - - PL_UNLOCK(); - } - else - { -+ title = xmms_charset_recode_id3(entry->title,0,NULL); -+ if (!title) - title = g_strdup(entry->title); - PL_UNLOCK(); - } - -- if (title == NULL) -+ if (title == NULL) { -+ title = xmms_charset_recode_fsout(g_basename(filename),0,NULL); -+ if (!title) - title = g_strdup(g_basename(filename)); -+ } - - g_free(filename); - -@@ -1183,6 +1211,7 @@ - gint playlist_sort_by_title_cmpfunc(PlaylistEntry * a, PlaylistEntry * b) - { - char *a_title, *b_title; -+ int a_fs=0, b_fs=0; - - if (a->title) - a_title = a->title; -@@ -1192,6 +1221,7 @@ - a_title = strrchr(a->filename, '/') + 1; - else - a_title = a->filename; -+ a_fs=1; - } - - if (b->title) -@@ -1202,15 +1232,21 @@ - b_title = strrchr(b->filename, '/') + 1; - else - b_title = b->filename; -- -+ b_fs=1; - } -+ -+ a_title=charset_sort_convert(a,a_title,a_fs); -+ b_title=charset_sort_convert(b,b_title,b_fs); -+ - return strcasecmp(a_title, b_title); - } - - void playlist_sort_by_title(void) - { - PL_LOCK(); -+ charset_sort_prepare(playlist); - playlist = g_list_sort(playlist, (GCompareFunc) playlist_sort_by_title_cmpfunc); -+ charset_sort_free(playlist); - PL_UNLOCK(); - } - -@@ -1228,25 +1264,35 @@ - else - b_filename = b->filename; - -+ a_filename=charset_sort_convert(a,a_filename,1); -+ b_filename=charset_sort_convert(b,b_filename,1); -+ - return strcasecmp(a_filename, b_filename); - } - - void playlist_sort_by_filename(void) - { - PL_LOCK(); -+ charset_sort_prepare(playlist); - playlist = g_list_sort(playlist, (GCompareFunc) playlist_sort_by_filename_cmpfunc); -+ charset_sort_free(playlist); - PL_UNLOCK(); - } - - gint playlist_sort_by_path_cmpfunc(PlaylistEntry * a, PlaylistEntry * b) - { -- return strcasecmp(a->filename, b->filename); -+ char *a_filename, *b_filename; -+ a_filename=charset_sort_convert(a,a->filename,1); -+ b_filename=charset_sort_convert(b,b->filename,1); -+ return strcasecmp(a_filename, b_filename); - } - - void playlist_sort_by_path(void) - { - PL_LOCK(); -+ charset_sort_prepare(playlist); - playlist = g_list_sort(playlist, (GCompareFunc) playlist_sort_by_path_cmpfunc); -+ charset_sort_free(playlist); - PL_UNLOCK(); - } - -@@ -1331,21 +1377,27 @@ - void playlist_sort_selected_by_title(void) - { - PL_LOCK(); -+ charset_sort_prepare(playlist); - playlist = playlist_sort_selected(playlist, (GCompareFunc) playlist_sort_by_title_cmpfunc); -+ charset_sort_free(playlist); - PL_UNLOCK(); - } - - void playlist_sort_selected_by_filename(void) - { - PL_LOCK(); -+ charset_sort_prepare(playlist); - playlist = playlist_sort_selected(playlist, (GCompareFunc) playlist_sort_by_filename_cmpfunc); -+ charset_sort_free(playlist); - PL_UNLOCK(); - } - - void playlist_sort_selected_by_path(void) - { - PL_LOCK(); -+ charset_sort_prepare(playlist); - playlist = playlist_sort_selected(playlist, (GCompareFunc) playlist_sort_by_path_cmpfunc); -+ charset_sort_free(playlist); - PL_UNLOCK(); - } - -diff -dPNur xmms-1.2.7/xmms/playlist.h xmms-1.2.7-new/xmms/playlist.h ---- xmms-1.2.7/xmms/playlist.h 2001-12-05 09:00:09.000000000 -0500 -+++ xmms-1.2.7-new/xmms/playlist.h 2003-06-20 00:02:06.000000000 -0400 -@@ -24,6 +24,7 @@ - { - gchar *filename; - gchar *title; -+ gchar *sort; - gint length; - gboolean selected; - } -diff -dPNur xmms-1.2.7/xmms/playlist_list.c xmms-1.2.7-new/xmms/playlist_list.c ---- xmms-1.2.7/xmms/playlist_list.c 2002-02-18 09:26:30.000000000 -0500 -+++ xmms-1.2.7-new/xmms/playlist_list.c 2003-06-20 00:02:06.000000000 -0400 -@@ -272,6 +272,7 @@ - { - GdkWChar *wtext; - int len, newlen; -+ gchar *rtext; - /* - * Convert the string to a wide character string to avoid - * destroying multibyte strings, when converting underscores, -@@ -281,6 +282,10 @@ - * Allocate some extra space, we might extend it by one - * character below - */ -+ -+ rtext = xmms_charset_recode_id3(text,0,NULL); -+ if (rtext) text = rtext; -+ - wtext = g_malloc((strlen(text) + 3) * sizeof(GdkWChar)); - len = gdk_mbstowcs(wtext, text, strlen(text) + 1); - if (len == -1) -@@ -297,6 +302,7 @@ - if (wtext[i] == L'_') - wtext[i] = L' '; - } -+ if (rtext) g_free(rtext); - - if (cfg.convert_twenty && len > 2) - { -@@ -346,6 +352,7 @@ - { - int len; - char *tmp; -+ gchar *rtext; - - if (cfg.convert_underscore) - while ((tmp = strchr(text, '_')) != NULL) -@@ -369,7 +376,10 @@ - text[len] = '\0'; - } - -+ rtext = xmms_charset_recode_id3(text,0,NULL); -+ if (rtext) text = rtext; - gdk_draw_text(pl->pl_widget.parent, font, pl->pl_widget.gc, pl->pl_widget.x, pl->pl_widget.y + line * pl->pl_fheight + font->ascent, text, len); -+ if (rtext) g_free(rtext); - } - - #if 0 -@@ -406,6 +416,7 @@ - gint width, height; - gchar *text, *title; - gint i, tw, max_first; -+ gchar *ctitle = NULL; - - gc = pl->pl_widget.gc; - width = pl->pl_widget.width; -@@ -457,8 +468,11 @@ - - if (entry->title) - title = entry->title; -- else -- title = g_basename(entry->filename); -+ else { -+ ctitle = xmms_charset_recode_fs(g_basename(entry->filename),0,NULL); -+ if (ctitle) title = ctitle; -+ else title = g_basename(entry->filename); -+ } - - if (entry->length != -1) - { -@@ -480,6 +494,10 @@ - else - playlist_list_draw_string(pl, playlist_list_font, i - pl->pl_first, tw, text); - g_free(text); -+ if (ctitle) { -+ g_free(ctitle); -+ ctitle=NULL; -+ } - - list = list->next; - i++; -diff -dPNur xmms-1.2.7/xmms/playlistwin.c xmms-1.2.7-new/xmms/playlistwin.c ---- xmms-1.2.7/xmms/playlistwin.c 2002-01-21 09:22:39.000000000 -0500 -+++ xmms-1.2.7-new/xmms/playlistwin.c 2003-06-20 00:02:06.000000000 -0400 -@@ -1610,6 +1610,7 @@ - static void playlistwin_create_widgets(void) - { - playlistwin_sinfo = create_textbox(&playlistwin_wlist, playlistwin_bg, playlistwin_gc, 4, 4, cfg.playlist_width - 35, FALSE, SKIN_TEXT); -+ charset_create_playlist_window(&cfg); - if (!cfg.playlist_shaded) - hide_widget(playlistwin_sinfo); - if (cfg.playlist_shaded) -diff -dPNur xmms-1.2.7/xmms/prefswin.c xmms-1.2.7-new/xmms/prefswin.c ---- xmms-1.2.7/xmms/prefswin.c 2001-11-16 09:39:13.000000000 -0500 -+++ xmms-1.2.7-new/xmms/prefswin.c 2003-06-20 00:02:06.000000000 -0400 -@@ -20,6 +20,7 @@ - #include "xmms.h" - #include "libxmms/util.h" - #include "libxmms/titlestring.h" -+#include "charset.h" - - static GtkWidget *prefswin, *prefswin_notebook, *prefswin_ok; - static GtkWidget *prefswin_audio_ie_cbox; -@@ -46,6 +47,7 @@ - extern PButton *playlistwin_shade, *playlistwin_close, *equalizerwin_close; - extern PButton *mainwin_menubtn, *mainwin_minimize, *mainwin_shade, *mainwin_close; - extern TextBox *mainwin_info; -+extern TextBox *playlistwin_sinfo; - extern gboolean mainwin_focus, equalizerwin_focus, playlistwin_focus; - - static gboolean is_opening = FALSE; -@@ -302,6 +304,8 @@ - cfg.use_eplugins = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(prefswin_egplugins_euse_cbox)); - cfg.mouse_change = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(prefswin_options_mouse_spin)); - -+ charset_prefswin_apply_changes(&cfg); -+ - set_current_output_plugin(selected_oplugin); - set_current_effect_plugin(selected_eplugin); - -@@ -335,7 +339,6 @@ - textbox_set_scroll(mainwin_info, FALSE); - textbox_set_scroll(mainwin_info, TRUE); - } -- - if (show_wm_old != cfg.show_wm_decorations) - prefswin_toggle_wm_decorations(); - -@@ -964,6 +967,8 @@ - - gtk_notebook_append_page(GTK_NOTEBOOK(prefswin_notebook), prefswin_fonts_vbox, gtk_label_new(_("Fonts"))); - -+ charset_create_prefs_window(&cfg,GTK_NOTEBOOK(prefswin_notebook), prefswin_fonts_vbox); -+ - /* - * Title page - */ -@@ -1274,6 +1279,8 @@ - gtk_entry_set_text(GTK_ENTRY(prefswin_options_pbs_entry), temp); - gtk_spin_button_set_value(GTK_SPIN_BUTTON(prefswin_options_mouse_spin), cfg.mouse_change); - -+ charset_show_prefs_window(&cfg); -+ - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(prefswin_egplugins_euse_cbox), cfg.use_eplugins); - - gtk_widget_show_all(prefswin); diff --git a/media-sound/xmms/files/xmms-sigterm.patch b/media-sound/xmms/files/xmms-sigterm.patch deleted file mode 100644 index af04b04bfb12..000000000000 --- a/media-sound/xmms/files/xmms-sigterm.patch +++ /dev/null @@ -1,30 +0,0 @@ ---- xmms-1.2.7/xmms/main.c 2003-01-09 23:14:04.000000000 +0100 -+++ xmms-1.2.7/xmms/main-exit.c 2003-01-09 23:13:53.000000000 +0100 -@@ -3257,6 +3257,18 @@ - exit(1); - } - -+/* Try to exit nicely when receiving a nice exit signal */ -+void sigterm_handler(int sig) -+{ -+ /* Original author of patch said that you should not use mainwin_quit_cb(), -+ * but his way deadlock xmms, and it anyhow just calls ctrlsocket stuff with -+ * with CMD_QUIT, which anyhow calls mainwin_quit_cb() in turn. This is not -+ * entirely clean, but works. -+ * <azarah@gentoo.org> (19 Jan 2003) -+ xmms_remote_quit(ctrlsocket_get_session_id()); */ -+ mainwin_quit_cb(); -+} -+ - static gboolean pposition_configure(GtkWidget *w, GdkEventConfigure *event, gpointer data) - { - gint x,y; -@@ -3387,6 +3393,8 @@ - #endif - - signal(SIGPIPE, SIG_IGN); /* for controlsocket.c */ -+ signal(SIGTERM, sigterm_handler); -+ signal(SIGINT, sigterm_handler); - signal(SIGSEGV, segfault_handler); - g_thread_init(NULL); - if (!g_thread_supported()) |