* Copyright (c) 1997-2002, Index Data
* See the file LICENSE for details.
*
- * $Id: siconv.c,v 1.6 2002-09-25 12:37:08 adam Exp $
+ * $Id: siconv.c,v 1.7 2002-12-10 10:59:28 adam Exp $
*/
/* mini iconv and wrapper for system iconv library (if present) */
return 0;
}
+int yaz_iconv_isbuiltin(yaz_iconv_t cd)
+{
+ return cd->read_handle && cd->write_handle;
+}
+
yaz_iconv_t yaz_iconv_open (const char *tocode, const char *fromcode)
{
yaz_iconv_t cd = (yaz_iconv_t) xmalloc (sizeof(*cd));
cd->init_handle = 0;
cd->my_errno = YAZ_ICONV_UNKNOWN;
- if (!yaz_matchstr(fromcode, "UTF8"))
+ /* a useful hack: if fromcode has leading @,
+ the library not use YAZ's own conversions .. */
+ if (fromcode[0] == '@')
+ fromcode++;
+ else
{
- cd->read_handle = yaz_read_UTF8;
- cd->init_handle = yaz_init_UTF8;
+ if (!yaz_matchstr(fromcode, "UTF8"))
+ {
+ cd->read_handle = yaz_read_UTF8;
+ cd->init_handle = yaz_init_UTF8;
+ }
+ else if (!yaz_matchstr(fromcode, "ISO88591"))
+ cd->read_handle = yaz_read_ISO8859_1;
+ else if (!yaz_matchstr(fromcode, "UCS4"))
+ cd->read_handle = yaz_read_UCS4;
+ else if (!yaz_matchstr(fromcode, "UCS4LE"))
+ cd->read_handle = yaz_read_UCS4LE;
+
+ if (!yaz_matchstr(tocode, "UTF8"))
+ cd->write_handle = yaz_write_UTF8;
+ else if (!yaz_matchstr(tocode, "ISO88591"))
+ cd->write_handle = yaz_write_ISO8859_1;
+ else if (!yaz_matchstr (tocode, "UCS4"))
+ cd->write_handle = yaz_write_UCS4;
+ else if (!yaz_matchstr(tocode, "UCS4LE"))
+ cd->write_handle = yaz_write_UCS4LE;
}
- else if (!yaz_matchstr(fromcode, "ISO88591"))
- cd->read_handle = yaz_read_ISO8859_1;
- else if (!yaz_matchstr(fromcode, "UCS4"))
- cd->read_handle = yaz_read_UCS4;
- else if (!yaz_matchstr(fromcode, "UCS4LE"))
- cd->read_handle = yaz_read_UCS4LE;
-
- if (!yaz_matchstr(tocode, "UTF8"))
- cd->write_handle = yaz_write_UTF8;
- else if (!yaz_matchstr(tocode, "ISO88591"))
- cd->write_handle = yaz_write_ISO8859_1;
- else if (!yaz_matchstr (tocode, "UCS4"))
- cd->write_handle = yaz_write_UCS4;
- else if (!yaz_matchstr(tocode, "UCS4LE"))
- cd->write_handle = yaz_write_UCS4LE;
-
#if HAVE_ICONV_H
cd->iconv_cd = 0;
if (!cd->read_handle || !cd->write_handle)
* Copyright (c) 1997-2002, Index Data
* See the file LICENSE for details.
*
- * $Id: siconvtst.c,v 1.5 2002-12-10 10:23:21 adam Exp $
+ * $Id: siconvtst.c,v 1.6 2002-12-10 10:59:28 adam Exp $
*/
#if HAVE_CONFIG_H
int main (int argc, char **argv)
{
int ret;
+ int verbose = 0;
char *from = 0;
char *to = 0;
char *arg;
yaz_iconv_t cd;
FILE *inf = stdin;
- while ((ret = options ("f:t:", argv, argc, &arg)) != -2)
+ while ((ret = options ("vf:t:", argv, argc, &arg)) != -2)
{
switch (ret)
{
case 't':
to = arg;
break;
+ case 'v':
+ verbose++;
+ break;
default:
fprintf (stderr, "yaziconv: Usage\n"
- "siconv -f encoding -t encoding [file]\n");
+ "siconv -f encoding -t encoding [-v] [file]\n");
exit(1);
}
}
fprintf (stderr, "yaziconv: unsupported encoding\n");
exit (5);
}
-
+ else
+ {
+ if (verbose)
+ {
+ fprintf (stderr, "yaziconv: using %s\n",
+ yaz_iconv_isbuiltin(cd) ? "YAZ" : "iconv");
+ }
+ }
convert (inf, cd);
yaz_iconv_close (cd);
return 0;