New function marc_display_exl - used by YAZ client. Server returns
[yaz-moved-to-github.git] / util / marcdisp.c
index 63956f7..3249b53 100644 (file)
@@ -3,7 +3,14 @@
  * See the file LICENSE for details.
  *
  * $Log: marcdisp.c,v $
- * Revision 1.13  2001-10-15 19:36:48  adam
+ * Revision 1.15  2001-10-29 09:17:19  adam
+ * New function marc_display_exl - used by YAZ client. Server returns
+ * bad record on position 98 (for testing).
+ *
+ * Revision 1.14  2001/10/23 21:00:20  adam
+ * Old Z39.50 codecs gone. Added ZOOM. WRBUF MARC display util.
+ *
+ * Revision 1.13  2001/10/15 19:36:48  adam
  * New function marc_display_wrbuf.
  *
  * Revision 1.12  2000/10/02 11:07:44  adam
@@ -56,7 +63,8 @@
 #include <yaz/wrbuf.h>
 #include <yaz/yaz-util.h>
 
-int marc_display_wrbuf (const char *buf, WRBUF wr, int debug)
+int marc_display_wrbuf (const char *buf, WRBUF wr, int debug,
+                       int bsize)
 {
     int entry_p;
     int record_length;
@@ -79,6 +87,9 @@ int marc_display_wrbuf (const char *buf, WRBUF wr, int debug)
        }
         return -1;
     }
+    /* ballout if bsize is known and record_length is than that */
+    if (bsize != -1 && record_length > bsize)
+       return -1;
     if (isdigit(buf[10]))
         indicator_length = atoi_n (buf+10, 1);
     else
@@ -180,12 +191,12 @@ int marc_display_wrbuf (const char *buf, WRBUF wr, int debug)
     return record_length;
 }
 
-int marc_display_ex (const char *buf, FILE *outf, int debug)
+int marc_display_exl (const char *buf, FILE *outf, int debug, int length)
 {
     int record_length;
 
     WRBUF wrbuf = wrbuf_alloc ();
-    record_length = marc_display_wrbuf (buf, wrbuf, debug);
+    record_length = marc_display_wrbuf (buf, wrbuf, debug, length);
     if (!outf)
        outf = stdout;
     if (record_length > 0)
@@ -194,6 +205,12 @@ int marc_display_ex (const char *buf, FILE *outf, int debug)
     return record_length;
 }
 
+
+int marc_display_ex (const char *buf, FILE *outf, int debug)
+{
+    return marc_display_exl (buf, outf, debug, -1);
+}
+
 int marc_display (const char *buf, FILE *outf)
 {
     return marc_display_ex (buf, outf, 0);