1 /* This file is part of the YAZ toolkit.
2 * Copyright (C) 1995-2009 Index Data
3 * See the file LICENSE for details.
7 * \brief Danmarc2 character set decoding
21 #include <yaz/xmalloc.h>
28 static unsigned long read_danmarc(yaz_iconv_t cd,
29 yaz_iconv_decoder_t d,
31 size_t inbytesleft, size_t *no_read)
33 struct decoder_data *data = (struct decoder_data *) d->data;
34 unsigned long x = inp[0];
48 yaz_iconv_set_errno(cd, YAZ_ICONV_EINVAL);
56 case 0xa4: /* CURRENCY SIGN */
60 case 0xe5: /* LATIN SMALL LETTER A WITH RING ABOVE */
65 case 0xc5: /* LATIN CAPITAL LETTER A WITH RING ABOVE */
73 yaz_iconv_set_errno(cd, YAZ_ICONV_EINVAL);
80 sscanf((const char *) inp+1, "%4lx", &v);
92 static size_t init_danmarc(yaz_iconv_t cd, yaz_iconv_decoder_t d,
94 size_t inbytesleft, size_t *no_read)
96 struct decoder_data *data = (struct decoder_data *) d->data;
101 void destroy_danmarc(yaz_iconv_decoder_t d)
103 struct decoder_data *data = (struct decoder_data *) d->data;
107 yaz_iconv_decoder_t yaz_danmarc_decoder(const char *fromcode,
108 yaz_iconv_decoder_t d)
111 if (!yaz_matchstr(fromcode, "danmarc"))
113 struct decoder_data *data = (struct decoder_data *)
114 xmalloc(sizeof(*data));
117 d->read_handle = read_danmarc;
118 d->init_handle = init_danmarc;
119 d->destroy_handle = destroy_danmarc;
129 * c-file-style: "Stroustrup"
130 * indent-tabs-mode: nil
132 * vim: shiftwidth=4 tabstop=8 expandtab