Directive s=pw sets structure to phrase if term includes blank(s).
[yaz-moved-to-github.git] / util / marcdisp.c
index 3806681..a0ae412 100644 (file)
@@ -1,10 +1,22 @@
 /*
- * Copyright (c) 1995, Index Data
+ * Copyright (c) 1995-2000, Index Data
  * See the file LICENSE for details.
- * Sebastian Hammer, Adam Dickmeiss
  *
  * $Log: marcdisp.c,v $
- * Revision 1.8  1999-11-30 13:47:12  adam
+ * Revision 1.12  2000-10-02 11:07:44  adam
+ * Added peer_name member for bend_init handler. Changed the YAZ
+ * client so that tcp: can be avoided in target spec.
+ *
+ * Revision 1.11  2000/02/29 13:44:55  adam
+ * Check for config.h (currently not generated).
+ *
+ * Revision 1.10  2000/02/05 10:47:19  adam
+ * Identifier-length and indicator-lenght no longer set to 2 (forced).
+ *
+ * Revision 1.9  1999/12/21 16:24:48  adam
+ * More robust ISO2709 handling (in case of real bad formats).
+ *
+ * Revision 1.8  1999/11/30 13:47:12  adam
  * Improved installation. Moved header files to include/yaz.
  *
  * Revision 1.7  1997/09/24 13:29:40  adam
  *
  */
 
+#if HAVE_CONFIG_H
+#include <config.h>
+#endif
+
 #include <stdio.h>
 #include <string.h>
 #include <ctype.h>
@@ -51,13 +67,24 @@ int marc_display_ex (const char *buf, FILE *outf, int debug)
         outf = stdout;
     record_length = atoi_n (buf, 5);
     if (record_length < 25)
+    {
+       if (debug)
+       {
+          fprintf (outf, "Record length %d - aborting\n", record_length);
+
+       }
         return -1;
-    indicator_length = atoi_n (buf+10, 1);
-    identifier_length = atoi_n (buf+11, 1);
+    }
+    if (isdigit(buf[10]))
+        indicator_length = atoi_n (buf+10, 1);
+    else
+        indicator_length = 2;
+    if (isdigit(buf[11]))
+       identifier_length = atoi_n (buf+11, 1);
+    else
+        identifier_length = 2;
     base_address = atoi_n (buf+12, 4);
 
-    indicator_length = identifier_length = 2;
-
     length_data_entry = atoi_n (buf+20, 1);
     length_starting = atoi_n (buf+21, 1);
     length_implementation = atoi_n (buf+22, 1);
@@ -73,7 +100,11 @@ int marc_display_ex (const char *buf, FILE *outf, int debug)
        fprintf (outf, "Length implementation %5d\n", length_implementation);
     }
     for (entry_p = 24; buf[entry_p] != ISO2709_FS; )
+    {
         entry_p += 3+length_data_entry+length_starting;
+        if (entry_p >= record_length)
+            return -1;
+    }
     base_address = entry_p+1;
     for (entry_p = 24; buf[entry_p] != ISO2709_FS; )
     {