/*
- * Copyright (C) 1997, Index Data I/S
+ * Copyright (C) 1997-1999, Index Data
* All rights reserved.
* Sebastian Hammer, Adam Dickmeiss
*
* $Log: marcread.c,v $
- * Revision 1.2 1997-09-17 12:19:21 adam
+ * Revision 1.12 2002-04-09 14:36:53 adam
+ * Fix XML attributes for MARC reader
+ *
+ * Revision 1.11 2000/05/15 15:32:51 adam
+ * Added support for 64 bit input file support.
+ *
+ * Revision 1.10 1999/11/30 13:48:04 adam
+ * Improved installation. Updated for inclusion of YAZ header files.
+ *
+ * Revision 1.9 1999/06/25 13:47:25 adam
+ * Minor change that prevents MSVC warning.
+ *
+ * Revision 1.8 1999/05/26 07:49:14 adam
+ * C++ compilation.
+ *
+ * Revision 1.7 1999/05/20 12:57:18 adam
+ * Implemented TCL filter. Updated recctrl system.
+ *
+ * Revision 1.6 1999/02/02 14:51:27 adam
+ * Updated WIN32 code specific sections. Changed header.
+ *
+ * Revision 1.5 1997/11/18 10:03:24 adam
+ * Member num_children removed from data1_node.
+ *
+ * Revision 1.4 1997/10/27 14:34:26 adam
+ * Fixed bug - data1 root node wasn't tagged at all!
+ *
+ * Revision 1.3 1997/09/24 13:36:51 adam
+ * *** empty log message ***
+ *
+ * Revision 1.2 1997/09/17 12:19:21 adam
* Zebra version corresponds to YAZ version 1.4.
* Changed Zebra server so that it doesn't depend on global common_resource.
*
#include <ctype.h>
#include <assert.h>
-#include <log.h>
-#include <yaz-util.h>
-#include <marcdisp.h>
+#include <yaz/log.h>
+#include <yaz/yaz-util.h>
+#include <yaz/marcdisp.h>
#include "grsread.h"
data1_node *data1_mk_node_wp (data1_handle dh, NMEM mem, data1_node *parent)
parent->child = parent->last_child = res;
else
parent->last_child->next = res;
- parent->num_children++;
parent->last_child = res;
}
return res;
res->u.data.what = DATA1I_text;
res->u.data.len = len;
if (res->u.data.len > DATA1_LOCALDATA) {
- res->u.data.data = xmalloc (res->u.data.len);
+ res->u.data.data = (char *) xmalloc (res->u.data.len);
res->destroy = destroy_data;
}
else
res->which = DATA1N_tag;
res->u.tag.tag = res->lbuf;
res->u.tag.get_bytes = -1;
+#if DATA1_USING_XATTR
+ res->u.tag.attributes = 0;
+#endif
if (len >= DATA1_LOCALDATA)
len = DATA1_LOCALDATA-1;
data1_node *res_root;
data1_absyn *absyn;
char *absynName;
+ data1_marctab *marctab;
if ((*p->readf)(p->fh, buf, 5) != 5)
return NULL;
if (read_bytes == record_length - 4)
{
off_t cur_offset = (*p->tellf)(p->fh);
- assert (cur_offset > 26);
+ if (cur_offset <= 27)
+ return NULL;
if (p->endf)
(*p->endf)(p->fh, cur_offset - 1);
}
return NULL;
}
res_root = data1_mk_node_wp (p->dh, p->mem, NULL);
- res_root->u.root.type = nmem_malloc (p->mem, strlen(absynName)+1);
+ res_root->which = DATA1N_root;
+ res_root->u.root.type = (char *) nmem_malloc (p->mem, strlen(absynName)+1);
strcpy (res_root->u.root.type, absynName);
res_root->u.root.absyn = absyn;
- indicator_length = atoi_n (buf+10, 1);
- identifier_length = atoi_n (buf+11, 1);
+ marctab = absyn->marc;
+
+ if (marctab && marctab->force_indicator_length >= 0)
+ indicator_length = marctab->force_indicator_length;
+ else
+ indicator_length = atoi_n (buf+10, 1);
+ if (marctab && marctab->force_identifier_length >= 0)
+ identifier_length = marctab->force_identifier_length;
+ else
+ identifier_length = atoi_n (buf+11, 1);
base_address = atoi_n (buf+12, 4);
- length_data_entry = atoi_n (buf+20, 1);
- length_data_entry = atoi_n (buf+20, 1);
+
length_data_entry = atoi_n (buf+20, 1);
length_starting = atoi_n (buf+21, 1);
length_implementation = atoi_n (buf+22, 1);
}
return res_root;
}
+
+static void *grs_init_marc(void)
+{
+ return 0;
+}
+
+static void grs_destroy_marc(void *clientData)
+{
+}
+
+static struct recTypeGrs marc_type = {
+ "marc",
+ grs_init_marc,
+ grs_destroy_marc,
+ grs_read_marc
+};
+
+RecTypeGrs recTypeGrs_marc = &marc_type;