* Copyright (C) 1995-2006, Index Data ApS
* See the file LICENSE for details.
*
- * $Id: marcdisp.c,v 1.31 2006-07-06 10:17:53 adam Exp $
+ * $Id: marcdisp.c,v 1.33 2006-08-28 12:34:40 adam Exp $
*/
/**
wrbuf_puts (wr, mt->subfield_str);
wrbuf_iconv_write(wr, mt->iconv_cd, s->code_data,
using_code_len);
- wrbuf_printf(wr, " ");
+ wrbuf_iconv_puts(wr, mt->iconv_cd, " ");
wrbuf_iconv_puts(wr, mt->iconv_cd,
s->code_data + using_code_len);
+ wrbuf_iconv_puts(wr, mt->iconv_cd, " ");
+ wr->pos--;
}
wrbuf_puts (wr, mt->endline_str);
break;
case YAZ_MARC_CONTROLFIELD:
- wrbuf_printf(wr, "%s ", n->u.controlfield.tag);
+ wrbuf_printf(wr, "%s", n->u.controlfield.tag);
+ wrbuf_iconv_puts(wr, mt->iconv_cd, " ");
wrbuf_iconv_puts(wr, mt->iconv_cd, n->u.controlfield.data);
+ wrbuf_iconv_puts(wr, mt->iconv_cd, " ");
+ wr->pos--;
wrbuf_puts (wr, mt->endline_str);
break;
case YAZ_MARC_COMMENT:
for (n = mt->nodes; n; n = n->next)
{
struct yaz_marc_subfield *s;
+
switch(n->which)
{
case YAZ_MARC_DATAFIELD:
wrbuf_printf(wr, " ind%d=\"", i+1);
wrbuf_iconv_write_cdata(wr, mt->iconv_cd,
n->u.datafield.indicator+i, 1);
- wrbuf_printf(wr, "\"");
+ wrbuf_iconv_puts(wr, mt->iconv_cd, "\"");
}
}
wrbuf_printf(wr, ">\n");
:
cdata_one_character(mt, s->code_data);
- wrbuf_puts(wr, " <subfield code=\"");
+ wrbuf_iconv_puts(wr, mt->iconv_cd, " <subfield code=\"");
wrbuf_iconv_write_cdata(wr, mt->iconv_cd,
s->code_data, using_code_len);
- wrbuf_puts(wr, "\">");
+ wrbuf_iconv_puts(wr, mt->iconv_cd, "\">");
wrbuf_iconv_write_cdata(wr, mt->iconv_cd,
s->code_data + using_code_len,
strlen(s->code_data + using_code_len));
- wrbuf_puts(wr, "</subfield>\n");
+ wrbuf_iconv_puts(wr, mt->iconv_cd, "</subfield>");
+ wrbuf_puts(wr, "\n");
}
wrbuf_printf(wr, " </datafield>\n");
break;
wrbuf_printf(wr, " <controlfield tag=\"");
wrbuf_iconv_write_cdata(wr, mt->iconv_cd, n->u.controlfield.tag,
strlen(n->u.controlfield.tag));
- wrbuf_printf(wr, "\">");
+ wrbuf_iconv_puts(wr, mt->iconv_cd, "\">");
wrbuf_iconv_puts(wr, mt->iconv_cd, n->u.controlfield.data);
- wrbuf_printf(wr, "</controlfield>\n");
+ wrbuf_iconv_puts(wr, mt->iconv_cd, "</controlfield>");
+ wrbuf_puts(wr, "\n");
break;
case YAZ_MARC_COMMENT:
wrbuf_printf(wr, "<!-- ");
int length_implementation;
int data_offset = 0;
const char *leader = 0;
- WRBUF wr_dir, wr_head;
+ WRBUF wr_dir, wr_head, wr_data_tmp;
int base_address;
for (n = mt->nodes; n; n = n->next)
if (!atoi_n_check(leader+22, 1, &length_implementation))
return -1;
+ wr_data_tmp = wrbuf_alloc();
wr_dir = wrbuf_alloc();
for (n = mt->nodes; n; n = n->next)
{
int data_length = 0;
struct yaz_marc_subfield *s;
+
switch(n->which)
{
case YAZ_MARC_DATAFIELD:
wrbuf_printf(wr_dir, "%.3s", n->u.datafield.tag);
data_length += indicator_length;
+ wrbuf_rewind(wr_data_tmp);
for (s = n->u.datafield.subfields; s; s = s->next)
- data_length += 1+strlen(s->code_data);
- data_length++;
+ {
+ /* write dummy IDFS + content */
+ wrbuf_iconv_putchar(wr_data_tmp, mt->iconv_cd, ' ');
+ wrbuf_iconv_puts(wr_data_tmp, mt->iconv_cd, s->code_data);
+ }
+ /* write dummy FS (makes MARC-8 to become ASCII) */
+ wrbuf_iconv_putchar(wr_data_tmp, mt->iconv_cd, ' ');
+ data_length += wrbuf_len(wr_data_tmp);
break;
case YAZ_MARC_CONTROLFIELD:
wrbuf_printf(wr_dir, "%.3s", n->u.controlfield.tag);
- data_length += strlen(n->u.controlfield.data);
- data_length++;
+
+ wrbuf_rewind(wr_data_tmp);
+ wrbuf_iconv_puts(wr_data_tmp, mt->iconv_cd,
+ n->u.controlfield.data);
+ wrbuf_iconv_putchar(wr_data_tmp, mt->iconv_cd, ' ');/* field sep */
+ data_length += wrbuf_len(wr_data_tmp);
break;
case YAZ_MARC_COMMENT:
break;
wrbuf_write(wr, wrbuf_buf(wr_dir), wrbuf_len(wr_dir));
wrbuf_free(wr_head, 1);
wrbuf_free(wr_dir, 1);
+ wrbuf_free(wr_data_tmp, 1);
for (n = mt->nodes; n; n = n->next)
{
struct yaz_marc_subfield *s;
+
switch(n->which)
{
case YAZ_MARC_DATAFIELD:
n->u.datafield.indicator);
for (s = n->u.datafield.subfields; s; s = s->next)
{
- wrbuf_printf(wr, "%c", ISO2709_IDFS);
- wrbuf_puts(wr, s->code_data);
+ wrbuf_putc(wr, ISO2709_IDFS);
+ wrbuf_iconv_puts(wr, mt->iconv_cd, s->code_data);
+ /* write dummy blank - makes MARC-8 to become ASCII */
+ wrbuf_iconv_putchar(wr, mt->iconv_cd, ' ');
+ wr->pos--;
}
- wrbuf_printf(wr, "%c", ISO2709_FS);
+ wrbuf_putc(wr, ISO2709_FS);
break;
case YAZ_MARC_CONTROLFIELD:
- wrbuf_puts(wr, n->u.controlfield.data);
- wrbuf_printf(wr, "%c", ISO2709_FS);
+ wrbuf_iconv_puts(wr, mt->iconv_cd, n->u.controlfield.data);
+ /* write dummy blank - makes MARC-8 to become ASCII */
+ wrbuf_iconv_putchar(wr, mt->iconv_cd, ' ');
+ wr->pos--;
+ wrbuf_putc(wr, ISO2709_FS);
break;
case YAZ_MARC_COMMENT:
break;