#include <stdlib.h> #include <stdio.h> #include <string.h> #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "wv.h" #include "iconv.h" #include "iconv_internal.h" typedef struct _convertt { char *name; wvConvertToUnicode proc; }convertt; #define NOINPUTS 9 /* #define NOINPUTS 13 */ convertt inputs[NOINPUTS] = { { "CP874", wvConvert874ToUnicode }, /* { "CP932", wvConvert932ToUnicode }, { "CP936", wvConvert936ToUnicode }, { "CP949", wvConvert949ToUnicode }, { "CP950", wvConvert950ToUnicode }, */ { "CP1250", wvConvert1250ToUnicode }, { "CP1251", wvConvert1251ToUnicode }, { "CP1252", wvConvert1252ToUnicode }, { "CP1253", wvConvert1253ToUnicode }, { "CP1254", wvConvert1254ToUnicode }, { "CP1255", wvConvert1255ToUnicode }, { "CP1256", wvConvert1256ToUnicode }, { "CP1257", wvConvert1257ToUnicode } }; #define NOOUTPUTS 4 convertt outputs[NOOUTPUTS] = { { "utf-8", wvConvertUnicodeToUTF_8}, { "iso-8859-15", wvConvertUnicodeToiso8859_15}, { "koi8-r", wvConvertUnicodeToKOI8_R}, { "tis-620", wvConvertUnicodeToTIS620} }; iconv_t iconv_open (const char *tocode, const char *fromcode) { int i; /* if converting from unicode */ if (!(strcasecmp(fromcode,"UCS-2"))) { for (i=0;i<NOOUTPUTS;i++) { if (!(strcasecmp(tocode,outputs[i].name))) return(outputs[i].proc); } } /* if converting to unicode */ else if (!(strcasecmp(tocode,"UCS-2"))) { for (i=0;i<NOINPUTS;i++) { if (!(strcasecmp(fromcode,inputs[i].name))) return(inputs[i].proc); } } return((iconv_t)-1); } int iconv_close (iconv_t cd) { return(0); } size_t iconv (iconv_t cd, const char **inbuf, size_t *inbytesleft, char **outbuf, size_t *outbytesleft) { size_t len; wvConvertToUnicode proc= (wvConvertToUnicode)cd; len = proc(inbuf,inbytesleft,outbuf,outbytesleft); return(len); }