const char * init_translation_table (int cpsource, int cpdisplay) { int i; iconv_t cd; const char *cpsour, *cpdisp; /* Fill inpit <-> display tables */ if (cpsource < 0 || cpdisplay < 0 || cpsource == cpdisplay) { for (i = 0; i <= 255; ++i) { conv_displ[i] = i; conv_input[i] = i; } return NULL; } for (i = 0; i <= 127; ++i) { conv_displ[i] = i; conv_input[i] = i; } cpsour = codepages[cpsource].id; cpdisp = codepages[cpdisplay].id; /* display <- inpit table */ cd = iconv_open (cpdisp, cpsour); if (cd == (iconv_t) - 1) { g_snprintf (errbuf, sizeof (errbuf), _("Cannot translate from %s to %s"), cpsour, cpdisp); return errbuf; } for (i = 128; i <= 255; ++i) conv_displ[i] = translate_character (cd, i); iconv_close (cd); /* inpit <- display table */ cd = iconv_open (cpsour, cpdisp); if (cd == (iconv_t) - 1) { g_snprintf (errbuf, sizeof (errbuf), _("Cannot translate from %s to %s"), cpdisp, cpsour); return errbuf; } for (i = 128; i <= 255; ++i) { unsigned char ch; ch = translate_character (cd, i); conv_input[i] = (ch == UNKNCHAR) ? i : ch; } iconv_close (cd); return NULL; }
char * init_translation_table (int cpsource, int cpdisplay) { int i; GIConv cd; /* Fill inpit <-> display tables */ if (cpsource < 0 || cpdisplay < 0 || cpsource == cpdisplay) { for (i = 0; i <= 255; ++i) { conv_displ[i] = i; conv_input[i] = i; cp_source = cp_display; } return NULL; } for (i = 0; i <= 127; ++i) { conv_displ[i] = i; conv_input[i] = i; } cp_source = ((codepage_desc *) g_ptr_array_index (codepages, cpsource))->id; cp_display = ((codepage_desc *) g_ptr_array_index (codepages, cpdisplay))->id; /* display <- inpit table */ cd = g_iconv_open (cp_display, cp_source); if (cd == INVALID_CONV) return g_strdup_printf (_("Cannot translate from %s to %s"), cp_source, cp_display); for (i = 128; i <= 255; ++i) conv_displ[i] = translate_character (cd, i); g_iconv_close (cd); /* inpit <- display table */ cd = g_iconv_open (cp_source, cp_display); if (cd == INVALID_CONV) return g_strdup_printf (_("Cannot translate from %s to %s"), cp_display, cp_source); for (i = 128; i <= 255; ++i) { unsigned char ch; ch = translate_character (cd, i); conv_input[i] = (ch == UNKNCHAR) ? i : ch; } g_iconv_close (cd); return NULL; }