Improved installation. Moved header files to include/yaz.
[yaz-moved-to-github.git] / retrieval / d1_marc.c
index 198e852..0bf408f 100644 (file)
@@ -1,10 +1,28 @@
 /*
- * Copyright (c) 1995-1998, Index Data.
+ * Copyright (c) 1995-1999, Index Data.
  * See the file LICENSE for details.
  * Sebastian Hammer, Adam Dickmeiss
  *
  * $Log: d1_marc.c,v $
- * Revision 1.12  1998-02-23 10:57:09  adam
+ * Revision 1.16  1999-11-30 13:47:12  adam
+ * Improved installation. Moved header files to include/yaz.
+ *
+ * Revision 1.15  1999/10/21 12:06:29  adam
+ * Retrieval module no longer uses ctype.h - functions.
+ *
+ * Revision 1.14  1999/08/27 09:40:32  adam
+ * Renamed logf function to yaz_log. Removed VC++ project files.
+ *
+ * Revision 1.13  1998/10/13 16:09:52  adam
+ * Added support for arbitrary OID's for tagsets, schemas and attribute sets.
+ * Added support for multiple attribute set references and tagset references
+ * from an abstract syntax file.
+ * Fixed many bad logs-calls in routines that read the various
+ * specifications regarding data1 (*.abs,*.att,...) and made the messages
+ * consistent whenever possible.
+ * Added extra 'lineno' argument to function readconf_line.
+ *
+ * Revision 1.12  1998/02/23 10:57:09  adam
  * Take care of integer data nodes as well in conversion.
  *
  * Revision 1.11  1998/02/11 11:53:35  adam
 #include <assert.h>
 #include <stdlib.h>
 #include <string.h>
-#include <ctype.h>
 
-#include <oid.h>
-#include <log.h>
-#include <marcdisp.h>
-#include <readconf.h>
-#include <xmalloc.h>
-#include <data1.h>
-#include <tpath.h>
+#include <yaz/oid.h>
+#include <yaz/log.h>
+#include <yaz/marcdisp.h>
+#include <yaz/readconf.h>
+#include <yaz/xmalloc.h>
+#include <yaz/data1.h>
+#include <yaz/tpath.h>
 
 data1_marctab *data1_read_marctab (data1_handle dh, const char *file)
 {
@@ -63,11 +80,12 @@ data1_marctab *data1_read_marctab (data1_handle dh, const char *file)
     NMEM mem = data1_nmem_get (dh);
     data1_marctab *res = (data1_marctab *)nmem_malloc(mem, sizeof(*res));
     char line[512], *argv[50];
+    int lineno = 0;
     int argc;
     
     if (!(f = yaz_path_fopen(data1_get_tabpath(dh), file, "r")))
     {
-       logf(LOG_WARN|LOG_ERRNO, "%s", file);
+       yaz_log(LOG_WARN|LOG_ERRNO, "%s", file);
        return 0;
     }
 
@@ -86,87 +104,96 @@ data1_marctab *data1_read_marctab (data1_handle dh, const char *file)
     res->force_indicator_length = -1;
     res->force_identifier_length = -1;
     strcpy(res->user_systems, "z  ");
-
-    while ((argc = readconf_line(f, line, 512, argv, 50)))
-       if (!strcmp(argv[0], "name"))
+    
+    while ((argc = readconf_line(f, &lineno, line, 512, argv, 50)))
+       if (!strcmp(*argv, "name"))
        {
            if (argc != 2)
            {
-               logf(LOG_WARN, "%s: Bad name directive");
+               yaz_log(LOG_WARN, "%s:%d:Missing arg for %s", file, lineno,
+                       *argv);
                continue;
            }
            res->name = nmem_strdup(mem, argv[1]);
        }
-       else if (!strcmp(argv[0], "reference"))
+       else if (!strcmp(*argv, "reference"))
        {
            if (argc != 2)
            {
-               logf(LOG_WARN, "%s: Bad name directive");
+               yaz_log(LOG_WARN, "%s:%d: Missing arg for %s", file, lineno,
+                       *argv);
                continue;
            }
            if ((res->reference = oid_getvalbyname(argv[1])) == VAL_NONE)
            {
-               logf(LOG_WARN, "%s: Unknown tagset ref '%s' in %s", file,
-                   argv[1]);
+               yaz_log(LOG_WARN, "%s:%d: Unknown tagset reference '%s'",
+                       file, lineno, argv[1]);
                continue;
            }
        }
-       else if (!strcmp(argv[0], "length-data-entry"))
+       else if (!strcmp(*argv, "length-data-entry"))
        {
            if (argc != 2)
            {
-               logf(LOG_WARN, "%s: Bad data-length-entry");
+               yaz_log(LOG_WARN, "%s:%d: Missing arg for %s", file, lineno,
+                       *argv);
                continue;
            }
            res->length_data_entry = atoi(argv[1]);
        }
-       else if (!strcmp(argv[0], "length-starting"))
+       else if (!strcmp(*argv, "length-starting"))
        {
            if (argc != 2)
            {
-               logf(LOG_WARN, "%s: Bad length-starting");
+               yaz_log(LOG_WARN, "%s:%d: Missing arg for %s", file, lineno,
+                       *argv);
                continue;
            }
            res->length_starting = atoi(argv[1]);
        }
-       else if (!strcmp(argv[0], "length-implementation"))
+       else if (!strcmp(*argv, "length-implementation"))
        {
            if (argc != 2)
            {
-               logf(LOG_WARN, "%s: Bad length-implentation");
+               yaz_log(LOG_WARN, "%s:%d: Missing arg for %s", file, lineno,
+                       *argv);
                continue;
            }
            res->length_implementation = atoi(argv[1]);
        }
-       else if (!strcmp(argv[0], "future-use"))
+       else if (!strcmp(*argv, "future-use"))
        {
            if (argc != 2)
            {
-               logf(LOG_WARN, "%s: Bad future-use");
+               yaz_log(LOG_WARN, "%s:%d: Missing arg for %s", file, lineno,
+                       *argv);
                continue;
            }
            strncpy(res->future_use, argv[1], 2);
        }
-       else if (!strcmp(argv[0], "force-indicator-length"))
+       else if (!strcmp(*argv, "force-indicator-length"))
        {
            if (argc != 2)
            {
-               logf(LOG_WARN, "%s: Bad future-use");
+               yaz_log(LOG_WARN, "%s:%d: Missing arg for %s", file, lineno,
+                       *argv);
                continue;
            }
            res->force_indicator_length = atoi(argv[1]);
        }
-       else if (!strcmp(argv[0], "force-identifier-length"))
+       else if (!strcmp(*argv, "force-identifier-length"))
        {
            if (argc != 2)
            {
-               logf(LOG_WARN, "%s: Bad future-use");
+               yaz_log(LOG_WARN, "%s:%d: Missing arg for %s", file, lineno,
+                       *argv);
                continue;
            }
            res->force_identifier_length = atoi(argv[1]);
        }
        else
-           logf(LOG_WARN, "%s: Bad directive '%s'", file, argv[0]);
+           yaz_log(LOG_WARN, "%s:%d: Unknown directive '%s'", file, lineno,
+                   *argv);
 
     fclose(f);
     return res;
@@ -191,7 +218,7 @@ static char *get_data(data1_node *n, int *len)
     }
 
     *len = n->u.data.len;
-    while (*len && isspace(n->u.data.data[*len - 1]))
+    while (*len && d1_isspace(n->u.data.data[*len - 1]))
        (*len)--;
     return n->u.data.data;
 }
@@ -232,12 +259,12 @@ static int nodetomarc(data1_marctab *p, data1_node *n, int selected,
     char *op;
     data1_node *field, *subf;
 
-    logf (LOG_DEBUG, "nodetomarc");
+    yaz_log (LOG_DEBUG, "nodetomarc");
     for (field = n->child; field; field = field->next)
     {
        if (field->which != DATA1N_tag)
        {
-           logf(LOG_WARN, "Malformed field composition for marc output.");
+           yaz_log(LOG_WARN, "Malformed field composition for marc output.");
            return -1;
        }
        if (selected && !field->u.tag.node_selected)
@@ -258,7 +285,7 @@ static int nodetomarc(data1_marctab *p, data1_node *n, int selected,
         {
            if (subf->which != DATA1N_tag)
            {
-               logf(LOG_WARN,
+               yaz_log(LOG_WARN,
                    "Malformed subfield composition for marc output.");
                return -1;
            }