X-Git-Url: http://git.indexdata.com/?p=yaz-moved-to-github.git;a=blobdiff_plain;f=src%2Ficonv_encode_marc8.c;h=e05874f8d2565a2a7c416af49f108fa7a6360552;hp=7fa89f952ec13e1ee466b0562c911e6c815dcb0b;hb=b9e057ce1b31f4cef4364de7c36b5c119cc94cc3;hpb=2788a4851b551e1a3efb320a2878b809f2d8a9d7 diff --git a/src/iconv_encode_marc8.c b/src/iconv_encode_marc8.c index 7fa89f9..e05874f 100644 --- a/src/iconv_encode_marc8.c +++ b/src/iconv_encode_marc8.c @@ -1,5 +1,5 @@ /* This file is part of the YAZ toolkit. - * Copyright (C) 1995-2009 Index Data + * Copyright (C) 1995-2013 Index Data * See the file LICENSE for details. */ /** @@ -17,7 +17,6 @@ #include #include #include -#include #include #include @@ -59,7 +58,7 @@ static void init_marc8(yaz_iconv_encoder_t w) data->write_marc8_g1 = 0; } -static size_t yaz_write_marc8_page_chr(yaz_iconv_t cd, +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); @@ -73,6 +72,11 @@ static unsigned long lookup_marc8(yaz_iconv_t cd, size_t utf8_outbytesleft = sizeof(utf8_buf)-1, r; int error_code; + if (x <= ' ' && x != 27) + { + *page_chr = ESC "(B"; + return x; + } r = yaz_write_UTF8_char(x, &utf8_outbuf, &utf8_outbytesleft, &error_code); if (r == (size_t)(-1)) { @@ -85,7 +89,7 @@ static unsigned long lookup_marc8(yaz_iconv_t cd, size_t inbytesleft, no_read_sub = 0; unsigned long x; - *utf8_outbuf = '\0'; + *utf8_outbuf = '\0'; inp = (unsigned char *) utf8_buf; inbytesleft = strlen(utf8_buf); @@ -211,7 +215,7 @@ static size_t flush_combos(yaz_iconv_t cd, { *(*outbuf)++ = w->write_marc8_second_half_char; (*outbytesleft)--; - } + } w->write_marc8_last = 0; w->write_marc8_ncr = 0; @@ -220,7 +224,7 @@ static size_t flush_combos(yaz_iconv_t cd, return 0; } -static size_t yaz_write_marc8_page_chr(yaz_iconv_t cd, +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) @@ -235,17 +239,17 @@ static size_t yaz_write_marc8_page_chr(yaz_iconv_t cd, { size_t plen = 0; const char *page_out = page_chr; - + if (*outbytesleft < 8) { yaz_iconv_set_errno(cd, YAZ_ICONV_E2BIG); - + return (size_t) (-1); } if (*old_page_chr) { - if (!strcmp(*old_page_chr, ESC "p") + if (!strcmp(*old_page_chr, ESC "p") || !strcmp(*old_page_chr, ESC "g") || !strcmp(*old_page_chr, ESC "b")) { @@ -291,7 +295,7 @@ static size_t yaz_write_marc8_2(yaz_iconv_t cd, struct encoder_data *w, y = '|'; else { - y = x; + y = x; enable_ncr = 1; } } @@ -357,7 +361,7 @@ static size_t yaz_write_marc8_generic(yaz_iconv_t cd, struct encoder_data *w, int ncr = w->write_marc8_ncr; const char *lpage = w->write_marc8_lpage; size_t r; - + r = yaz_write_marc8_2(cd, w, x1, outbuf, outbytesleft, loss_mode); if (r) @@ -409,7 +413,7 @@ static void destroy_marc8(yaz_iconv_encoder_t e) yaz_iconv_encoder_t yaz_marc8_encoder(const char *tocode, yaz_iconv_encoder_t e) - + { if (!yaz_matchstr(tocode, "MARC8")) e->write_handle = write_marc8_normal; @@ -437,7 +441,9 @@ yaz_iconv_encoder_t yaz_marc8_encoder(const char *tocode, /* * Local variables: * c-basic-offset: 4 + * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ +