63 char **outbuf,
size_t *outbytesleft,
64 const char *page_chr);
67 unsigned long x,
int *comb,
68 const char **page_chr)
71 char *utf8_outbuf = utf8_buf;
72 size_t utf8_outbytesleft =
sizeof(utf8_buf)-1, r;
76 if (r == (
size_t)(-1))
84 size_t inbytesleft, no_read_sub = 0;
88 inp = (
unsigned char *) utf8_buf;
89 inbytesleft = strlen(utf8_buf);
100 *page_chr =
ESC "(B";
118 *page_chr =
ESC "(2";
124 *page_chr =
ESC "(N";
130 *page_chr =
ESC "(Q";
136 *page_chr =
ESC "(3";
142 *page_chr =
ESC "(4";
148 *page_chr =
ESC "(S";
154 *page_chr =
ESC "$1";
164 char **outbuf,
size_t *outbytesleft)
180 if (9 >= *outbytesleft)
183 return (
size_t) (-1);
188 (*outbytesleft) -= 8;
196 byte = (
unsigned char )((
y>>16) & 0xff);
198 (*outbuf)[out_no++] = byte;
199 byte = (
unsigned char)((
y>>8) & 0xff);
201 (*outbuf)[out_no++] = byte;
202 byte = (
unsigned char )(
y & 0xff);
204 (*outbuf)[out_no++] = byte;
206 (*outbytesleft) -= out_no;
224 char **outbuf,
size_t *outbytesleft,
225 const char *page_chr)
230 if (page_chr && page_chr[1] ==
')')
233 if (!*old_page_chr || strcmp(page_chr, *old_page_chr))
236 const char *page_out = page_chr;
238 if (*outbytesleft < 8)
242 return (
size_t) (-1);
247 if (!strcmp(*old_page_chr,
ESC "p")
248 || !strcmp(*old_page_chr,
ESC "g")
249 || !strcmp(*old_page_chr,
ESC "b"))
253 if (strcmp(page_chr,
ESC "(B"))
256 plen = strlen(page_out);
257 memcpy(*outbuf, page_out, plen);
259 (*outbytesleft) -= plen;
264 *old_page_chr = page_chr;
265 plen = strlen(page_out);
266 memcpy(*outbuf, page_out, plen);
268 (*outbytesleft) -= plen;
276 char **outbuf,
size_t *outbytesleft,
281 const char *page_chr = 0;
290 return (
size_t) (-1);
299 if (x < 32 && x != 27)
302 return (
size_t) (-1);
317 else if (x == 0x0360)
320 if (*outbytesleft <= 1)
323 return (
size_t) (-1);
325 *(*outbuf)++ = (char)
y;
342 char **outbuf,
size_t *outbytesleft)
354 char **outbuf,
size_t *outbytesleft,
357 unsigned long x1,
x2;
361 char *outbuf0 = *outbuf;
362 size_t outbytesleft0 = *outbytesleft;
369 outbuf, outbytesleft, loss_mode);
373 outbuf, outbytesleft, loss_mode);
378 *outbytesleft = outbytesleft0;
390 char **outbuf,
size_t *outbytesleft)
393 x, outbuf, outbytesleft, 0);
398 char **outbuf,
size_t *outbytesleft)
401 x, outbuf, outbytesleft, 1);
406 char **outbuf,
size_t *outbytesleft)
409 x, outbuf, outbytesleft, 2);
414 char **outbuf,
size_t *outbytesleft)
417 x, outbuf, outbytesleft, 3);
Header for errno utilities.
Internal header for iconv.
unsigned long yaz_conv_func_t(unsigned char *inp, size_t inbytesleft, size_t *no_read, int *combining, unsigned mask, int boffset)
void yaz_iconv_set_errno(yaz_iconv_t cd, int no)
int yaz_iso_8859_1_lookup_y(unsigned long v, unsigned long *x1, unsigned long *x2)
yaz_conv_func_t yaz_marc8r_45_conv
yaz_conv_func_t yaz_marc8r_4E_conv
static size_t write_marc8_lossless(yaz_iconv_t cd, yaz_iconv_encoder_t e, unsigned long x, char **outbuf, size_t *outbytesleft)
static size_t flush_combos(yaz_iconv_t cd, struct encoder_data *w, char **outbuf, size_t *outbytesleft)
static size_t yaz_write_marc8_generic(yaz_iconv_t cd, struct encoder_data *w, unsigned long x, char **outbuf, size_t *outbytesleft, int loss_mode)
static size_t write_marc8_normal(yaz_iconv_t cd, yaz_iconv_encoder_t e, unsigned long x, char **outbuf, size_t *outbytesleft)
static size_t write_marc8_control(yaz_iconv_t cd, yaz_iconv_encoder_t e, unsigned long x, char **outbuf, size_t *outbytesleft)
static size_t yaz_write_marc8_page_chr(yaz_iconv_t cd, struct encoder_data *w, char **outbuf, size_t *outbytesleft, const char *page_chr)
yaz_conv_func_t yaz_marc8r_62_conv
yaz_conv_func_t yaz_marc8r_42_conv
static unsigned long lookup_marc8(yaz_iconv_t cd, unsigned long x, int *comb, const char **page_chr)
yaz_conv_func_t yaz_marc8r_34_conv
static size_t write_marc8_lossy(yaz_iconv_t cd, yaz_iconv_encoder_t e, unsigned long x, char **outbuf, size_t *outbytesleft)
yaz_conv_func_t yaz_marc8r_70_conv
yaz_conv_func_t yaz_marc8r_32_conv
yaz_conv_func_t yaz_marc8r_67_conv
yaz_conv_func_t yaz_marc8r_31_conv
static size_t yaz_write_marc8_2(yaz_iconv_t cd, struct encoder_data *w, unsigned long x, char **outbuf, size_t *outbytesleft, int loss_mode)
static size_t flush_marc8(yaz_iconv_t cd, yaz_iconv_encoder_t en, char **outbuf, size_t *outbytesleft)
yaz_conv_func_t yaz_marc8r_53_conv
yaz_conv_func_t yaz_marc8r_33_conv
static void destroy_marc8(yaz_iconv_encoder_t e)
static void init_marc8(yaz_iconv_encoder_t w)
yaz_iconv_encoder_t yaz_marc8_encoder(const char *tocode, yaz_iconv_encoder_t e)
yaz_conv_func_t yaz_marc8r_51_conv
int yaz_matchstr(const char *s1, const char *s2)
match strings - independent of case and '-'
int yaz_iconv_error(yaz_iconv_t cd)
returns last error - like errno for iconv(3)
void yaz_snprintf(char *buf, size_t size, const char *fmt,...)
Header for config file reading utilities.
const char * write_marc8_lpage
const char * write_marc8_g0
const char * write_marc8_g1
unsigned write_marc8_second_half_char
unsigned long write_marc8_last
void(* init_handle)(yaz_iconv_encoder_t e)
size_t(* write_handle)(yaz_iconv_t cd, yaz_iconv_encoder_t e, unsigned long x, char **outbuf, size_t *outbytesleft)
void(* destroy_handle)(yaz_iconv_encoder_t e)
size_t(* flush_handle)(yaz_iconv_t cd, yaz_iconv_encoder_t e, char **outbuf, size_t *outbytesleft)
size_t yaz_write_UTF8_char(unsigned long x, char **outbuf, size_t *outbytesleft, int *error)
encodes UTF-8 sequence
Header for memory handling functions.
#define xfree(x)
utility macro which calls xfree_f
#define xmalloc(x)
utility macro which calls malloc_f
#define YAZ_ICONV_EILSEQ
error code: Invalid sequence
#define YAZ_ICONV_E2BIG
error code: Not sufficient room for output buffer