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
Remove extra space in request log output
[yaz-moved-to-github.git]
/
src
/
marcdisp.c
diff --git
a/src/marcdisp.c
b/src/marcdisp.c
index
171e5a3
..
e42080a
100644
(file)
--- a/
src/marcdisp.c
+++ b/
src/marcdisp.c
@@
-2,7
+2,12
@@
* Copyright (c) 1995-2004, Index Data
* See the file LICENSE for details.
*
* Copyright (c) 1995-2004, Index Data
* See the file LICENSE for details.
*
- * $Id: marcdisp.c,v 1.7 2004-10-01 11:45:48 adam Exp $
+ * $Id: marcdisp.c,v 1.10 2004-11-26 11:01:05 adam Exp $
+ */
+
+/**
+ * \file marcdisp.c
+ * \brief Implements MARC display - and conversion utilities
*/
#if HAVE_CONFIG_H
*/
#if HAVE_CONFIG_H
@@
-90,7
+95,17
@@
int yaz_marc_decode_wrbuf (yaz_marc_t mt, const char *buf, int bsize, WRBUF wr)
base_address = atoi_n (buf+12, 5);
length_data_entry = atoi_n (buf+20, 1);
base_address = atoi_n (buf+12, 5);
length_data_entry = atoi_n (buf+20, 1);
+ if (buf[20] <= '0' || buf[20] >= '9')
+ {
+ wrbuf_printf(wr, "<!-- Length data entry should hold a digit. Assuming 4 -->\n");
+ length_data_entry = 4;
+ }
length_starting = atoi_n (buf+21, 1);
length_starting = atoi_n (buf+21, 1);
+ if (buf[21] <= '0' || buf[21] >= '9')
+ {
+ wrbuf_printf(wr, "<!-- Length starting should hold a digit. Assuming 5 -->\n");
+ length_starting = 5;
+ }
length_implementation = atoi_n (buf+22, 1);
if (mt->xml != YAZ_MARC_LINE)
length_implementation = atoi_n (buf+22, 1);
if (mt->xml != YAZ_MARC_LINE)
@@
-242,10
+257,12
@@
int yaz_marc_decode_wrbuf (yaz_marc_t mt, const char *buf, int bsize, WRBUF wr)
int end_offset;
int i, j;
char tag[4];
int end_offset;
int i, j;
char tag[4];
- int identifier_flag = 1;
+ int identifier_flag = 0;
+ int entry_p0;
memcpy (tag, buf+entry_p, 3);
entry_p += 3;
memcpy (tag, buf+entry_p, 3);
entry_p += 3;
+ entry_p0 = entry_p;
tag[3] = '\0';
data_length = atoi_n (buf+entry_p, length_data_entry);
entry_p += length_data_entry;
tag[3] = '\0';
data_length = atoi_n (buf+entry_p, length_data_entry);
entry_p += length_data_entry;
@@
-254,13
+271,21
@@
int yaz_marc_decode_wrbuf (yaz_marc_t mt, const char *buf, int bsize, WRBUF wr)
i = data_offset + base_address;
end_offset = i+data_length-1;
i = data_offset + base_address;
end_offset = i+data_length-1;
+ if (mt->debug)
+ {
+ wrbuf_printf(wr, "<!-- offset=%d data dlength=%d doffset=%d -->\n",
+ entry_p0, data_length, data_offset);
+ }
+
if (indicator_length < 4 && indicator_length > 0)
{
if (indicator_length < 4 && indicator_length > 0)
{
- if (buf[i + indicator_length] != ISO2709_IDFS)
- identifier_flag = 0;
+ if (buf[i + indicator_length] == ISO2709_IDFS)
+ identifier_flag = 1;
+ else if (buf[i + indicator_length + 1] == ISO2709_IDFS)
+ identifier_flag = 2;
}
}
- else if (!memcmp (tag, "00", 2))
- identifier_flag = 0;
+ else if (memcmp (tag, "00", 2))
+ identifier_flag = 1;
switch(mt->xml)
{
switch(mt->xml)
{
@@
-294,6
+319,7
@@
int yaz_marc_decode_wrbuf (yaz_marc_t mt, const char *buf, int bsize, WRBUF wr)
if (identifier_flag)
{
if (identifier_flag)
{
+ i += identifier_flag-1;
for (j = 0; j<indicator_length; j++, i++)
{
switch(mt->xml)
for (j = 0; j<indicator_length; j++, i++)
{
switch(mt->xml)
@@
-401,9
+427,9
@@
int yaz_marc_decode_wrbuf (yaz_marc_t mt, const char *buf, int bsize, WRBUF wr)
if (mt->xml == YAZ_MARC_LINE)
wrbuf_putc (wr, '\n');
if (i < end_offset)
if (mt->xml == YAZ_MARC_LINE)
wrbuf_putc (wr, '\n');
if (i < end_offset)
- wrbuf_puts (wr, " <!-- separator but not at end of field -->\n");
+ wrbuf_printf(wr, " <!-- separator but not at end of field length=%d-->\n", data_length);
if (buf[i] != ISO2709_RS && buf[i] != ISO2709_FS)
if (buf[i] != ISO2709_RS && buf[i] != ISO2709_FS)
- wrbuf_puts (wr, " <!-- no separator at end of field -->\n");
+ wrbuf_printf(wr, " <!-- no separator at end of field length=%d-->\n", data_length);
switch(mt->xml)
{
case YAZ_MARC_SIMPLEXML:
switch(mt->xml)
{
case YAZ_MARC_SIMPLEXML: