1 /* This file is part of the YAZ toolkit.
2 * Copyright (C) Index Data
3 * See the file LICENSE for details.
7 * \brief Danmarc2 character set decoding
20 #include <yaz/xmalloc.h>
27 static unsigned long read_danmarc(yaz_iconv_t cd,
28 yaz_iconv_decoder_t d,
30 size_t inbytesleft, size_t *no_read)
32 struct decoder_data *data = (struct decoder_data *) d->data;
33 unsigned long x = inp[0];
47 yaz_iconv_set_errno(cd, YAZ_ICONV_EINVAL);
55 case 0xa4: /* CURRENCY SIGN */
59 case 0xe5: /* LATIN SMALL LETTER A WITH RING ABOVE */
63 case 0xc5: /* LATIN CAPITAL LETTER A WITH RING ABOVE */
70 yaz_iconv_set_errno(cd, YAZ_ICONV_EINVAL);
77 sscanf((const char *) inp+1, "%4lx", &v);
89 static size_t init_danmarc(yaz_iconv_t cd, yaz_iconv_decoder_t d,
91 size_t inbytesleft, size_t *no_read)
93 struct decoder_data *data = (struct decoder_data *) d->data;
98 void destroy_danmarc(yaz_iconv_decoder_t d)
100 struct decoder_data *data = (struct decoder_data *) d->data;
104 yaz_iconv_decoder_t yaz_danmarc_decoder(const char *fromcode,
105 yaz_iconv_decoder_t d)
108 if (!yaz_matchstr(fromcode, "danmarc"))
110 struct decoder_data *data = (struct decoder_data *)
111 xmalloc(sizeof(*data));
114 d->read_handle = read_danmarc;
115 d->init_handle = init_danmarc;
116 d->destroy_handle = destroy_danmarc;
126 * c-file-style: "Stroustrup"
127 * indent-tabs-mode: nil
129 * vim: shiftwidth=4 tabstop=8 expandtab