projects
/
yaz-moved-to-github.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Version 5.4.1
[yaz-moved-to-github.git]
/
src
/
iconv_encode_marc8.c
diff --git
a/src/iconv_encode_marc8.c
b/src/iconv_encode_marc8.c
index
e8434ff
..
ac18e79
100644
(file)
--- a/
src/iconv_encode_marc8.c
+++ b/
src/iconv_encode_marc8.c
@@
-1,5
+1,5
@@
/* This file is part of the YAZ toolkit.
/* This file is part of the YAZ toolkit.
- * Copyright (C) 1995-2013 Index Data
+ * Copyright (C) Index Data
* See the file LICENSE for details.
*/
/**
* See the file LICENSE for details.
*/
/**
@@
-283,15
+283,23
@@
static size_t yaz_write_marc8_2(yaz_iconv_t cd, struct encoder_data *w,
if (!y)
{
if (!y)
{
- if (loss_mode == 0)
- return (size_t) (-1);
page_chr = ESC "(B";
page_chr = ESC "(B";
- if (loss_mode == 1)
- y = '|';
- else
+ switch (loss_mode)
{
{
+ case 0:
+ return (size_t) (-1);
+ case 1:
+ y = '|';
+ break;
+ case 2:
y = x;
enable_ncr = 1;
y = x;
enable_ncr = 1;
+ break;
+ case 3:
+ if (x < 32 && x != 27)
+ y = x;
+ else
+ return (size_t) (-1);
}
}
}
}
@@
-401,6
+409,14
@@
static size_t write_marc8_lossless(yaz_iconv_t cd, yaz_iconv_encoder_t e,
x, outbuf, outbytesleft, 2);
}
x, outbuf, outbytesleft, 2);
}
+static size_t write_marc8_control(yaz_iconv_t cd, yaz_iconv_encoder_t e,
+ unsigned long x,
+ char **outbuf, size_t *outbytesleft)
+{
+ return yaz_write_marc8_generic(cd, (struct encoder_data *) e->data,
+ x, outbuf, outbytesleft, 3);
+}
+
static void destroy_marc8(yaz_iconv_encoder_t e)
{
xfree(e->data);
static void destroy_marc8(yaz_iconv_encoder_t e)
{
xfree(e->data);
@@
-418,6
+434,8
@@
yaz_iconv_encoder_t yaz_marc8_encoder(const char *tocode,
e->write_handle = write_marc8_lossy;
else if (!yaz_matchstr(tocode, "MARC8lossless"))
e->write_handle = write_marc8_lossless;
e->write_handle = write_marc8_lossy;
else if (!yaz_matchstr(tocode, "MARC8lossless"))
e->write_handle = write_marc8_lossless;
+ else if (!yaz_matchstr(tocode, "MARC8c"))
+ e->write_handle = write_marc8_control;
else
return 0;
else
return 0;