Added --with-yc option to configure. For the data1_node in data1.h:
[yaz-moved-to-github.git] / retrieval / d1_write.c
index 544fba3..b631903 100644 (file)
@@ -1,10 +1,24 @@
 /*
- * Copyright (c) 1995, Index Data.
+ * Copyright (c) 1995-1998, Index Data.
  * See the file LICENSE for details.
  * Sebastian Hammer, Adam Dickmeiss
  *
  * $Log: d1_write.c,v $
- * Revision 1.1  1995-12-13 15:38:43  quinn
+ * Revision 1.5  1998-06-05 08:57:43  adam
+ * Fixed problem with function wordlen.
+ *
+ * Revision 1.4  1998/05/18 13:07:08  adam
+ * Changed the way attribute sets are handled by the retriaval module.
+ * Extended Explain conversion / schema.
+ * Modified server and client to work with ASN.1 compiled protocol handlers.
+ *
+ * Revision 1.3  1997/09/17 12:10:39  adam
+ * YAZ version 1.4.
+ *
+ * Revision 1.2  1995/12/13 17:14:27  quinn
+ * *** empty log message ***
+ *
+ * Revision 1.1  1995/12/13  15:38:43  quinn
  * Added SGML-output filter.
  *
  *
 
 #define IDSGML_MARGIN 75
 
-static int wordlen(char *b)
+static int wordlen(char *b, int max)
 {
     int l = 0;
 
-    while (*b && !isspace(*b))
+    while (l < max && !isspace(*b))
        l++, b++;
     return l;
 }
@@ -52,7 +66,7 @@ static int nodetoidsgml(data1_node *n, int select, WRBUF b, int col)
            }
            if (nodetoidsgml(c, select, b, col) < 0)
                return -1;
-           wrbuf_write(b, "</>\n", 5);
+           wrbuf_write(b, "</>\n", 4);
            col = 0;
        }
        else if (c->which == DATA1N_data)
@@ -61,8 +75,9 @@ static int nodetoidsgml(data1_node *n, int select, WRBUF b, int col)
            int l = c->u.data.len;
            int first = 1;
 
-           if (c->u.data.what == DATA1I_text)
+           switch (c->u.data.what)
            {
+           case DATA1I_text:
                while (l)
                {
                    int wlen;
@@ -72,7 +87,7 @@ static int nodetoidsgml(data1_node *n, int select, WRBUF b, int col)
                    if (!l)
                        break;
                    /* break if we'll cross margin and word is not too long */
-                   if (col + (wlen = wordlen(p)) > IDSGML_MARGIN && wlen <
+                   if (col + (wlen = wordlen(p, l)) > IDSGML_MARGIN && wlen <
                        IDSGML_MARGIN)
                    {
                        sprintf(line, "\n");
@@ -106,9 +121,12 @@ static int nodetoidsgml(data1_node *n, int select, WRBUF b, int col)
                }
                wrbuf_write(b, "\n", 1);
                col = 0;
-           }
-           else if (c->u.data.what == DATA1I_num)
-           {
+               break;
+           case DATA1I_num:
+               wrbuf_putc(b, ' ');
+               wrbuf_write(b, c->u.data.data, c->u.data.len);
+               break;
+           case DATA1I_oid:
                wrbuf_putc(b, ' ');
                wrbuf_write(b, c->u.data.data, c->u.data.len);
            }
@@ -117,15 +135,12 @@ static int nodetoidsgml(data1_node *n, int select, WRBUF b, int col)
     return 0;
 }
 
-char *data1_nodetoidsgml(data1_node *n, int select, int *len)
+char *data1_nodetoidsgml (data1_handle dh, data1_node *n, int select, int *len)
 {
-    static WRBUF b = 0;
+    WRBUF b = data1_get_wrbuf (dh);
     char line[1024];
 
-    if (!b)
-       b = wrbuf_alloc();
-    else
-       wrbuf_rewind(b);
+    wrbuf_rewind(b);
     
     sprintf(line, "<%s>\n", n->u.root.type);
     wrbuf_write(b, line, strlen(line));