/*
- * Copyright (c) 1995, Index Data.
+ * Copyright (c) 1995-2003, Index Data.
* See the file LICENSE for details.
- * Sebastian Hammer, Adam Dickmeiss
- *
- * $Log: read-grs.c,v $
- * Revision 1.2 1998-02-11 11:53:36 adam
- * Changed code so that it compiles as C++.
- *
- * Revision 1.1 1997/09/01 08:55:53 adam
- * New windows NT/95 port using MSV5.0. Test server ztest now in
- * separate directory. When using NT, this test server may operate
- * as an NT service. Note that the service.[ch] should be part of
- * generic, but it isn't yet.
- *
- * Revision 1.1 1995/08/17 12:45:23 quinn
- * Fixed minor problems with GRS-1. Added support in c&s.
- *
*
+ * $Id: read-grs.c,v 1.11 2004-12-30 00:18:04 adam Exp $
*/
/*
- * Little toy-thing to read a GRS-1 record from a file.
+ * Little toy-thing to read a GRS-1 records from a file.
*/
#include <stdio.h>
#include <ctype.h>
#include <stdlib.h>
-#include <proto.h>
-#include <log.h>
+#include <yaz/proto.h>
+#include <yaz/log.h>
#define GRS_MAX_FIELDS 50
-Z_GenericRecord *read_grs1(FILE *f, ODR o)
+static Z_GenericRecord *read_grs1(FILE *f, ODR o)
{
char line[512], *buf;
int type, ivalue;
while (fgets(buf = line, 512, f))
{
- while (*buf && isspace(*buf))
+ while (*buf && isspace(*(unsigned char *) buf))
buf++;
if (!*buf || *buf == '#')
continue;
return r;
if (sscanf(buf, "(%d,%[^)])", &type, value) != 2)
{
- logf(LOG_WARN, "Bad data in '%s'", buf);
+ yaz_log(YLOG_WARN, "Bad data in '%s'", buf);
return 0;
}
if (!type && *value == '0')
if (!(buf = strchr(buf, ')')))
return 0;
buf++;
- while (*buf && isspace(*buf))
+ while (*buf && isspace(*(unsigned char *) buf))
buf++;
if (!*buf)
return 0;
if (!r)
{
r = (Z_GenericRecord *)odr_malloc(o, sizeof(*r));
- r->elements = (Z_TaggedElement **)odr_malloc(o, sizeof(Z_TaggedElement*) *
- GRS_MAX_FIELDS);
+ r->elements = (Z_TaggedElement **)
+ odr_malloc(o, sizeof(Z_TaggedElement*) * GRS_MAX_FIELDS);
r->num_elements = 0;
}
- r->elements[r->num_elements] = t = (Z_TaggedElement *)odr_malloc(o,
- sizeof(Z_TaggedElement));
- t->tagType = (int *)odr_malloc(o, sizeof(int));
- *t->tagType = type;
- t->tagValue = (Z_StringOrNumeric *)odr_malloc(o, sizeof(Z_StringOrNumeric));
+ r->elements[r->num_elements] = t = (Z_TaggedElement *)
+ odr_malloc(o, sizeof(Z_TaggedElement));
+ t->tagType = odr_intdup(o, type);
+ t->tagValue = (Z_StringOrNumeric *)
+ odr_malloc(o, sizeof(Z_StringOrNumeric));
if ((ivalue = atoi(value)))
{
t->tagValue->which = Z_StringOrNumeric_numeric;
- t->tagValue->u.numeric = (int *)odr_malloc(o, sizeof(int));
- *t->tagValue->u.numeric = ivalue;
+ t->tagValue->u.numeric = odr_intdup(o, ivalue);
}
else
{
{
c->which = Z_ElementData_string;
buf[strlen(buf)-1] = '\0';
- c->u.string = (char *)odr_malloc(o, strlen(buf)+1);
- strcpy(c->u.string, buf);
+ c->u.string = odr_strdup(o, buf);
}
r->num_elements++;
}
}
+
+Z_GenericRecord *dummy_grs_record (int num, ODR o)
+{
+ FILE *f = fopen("dummy-grs", "r");
+ char line[512];
+ Z_GenericRecord *r = 0;
+ int n;
+
+ if (!f)
+ return 0;
+ while (fgets(line, 512, f))
+ if (*line == '#' && sscanf(line, "#%d", &n) == 1 && n == num)
+ {
+ r = read_grs1(f, o);
+ break;
+ }
+ fclose(f);
+ return r;
+}
+