+
+static int yaz_marc_line_gets(int (*getbyte)(void *client_data),
+ void (*ungetbyte)(int b, void *client_data),
+ void *client_data,
+ WRBUF w)
+{
+ int more;
+
+ wrbuf_rewind(w);
+ more = yaz_gets(getbyte, ungetbyte, client_data, w);
+ if (!more)
+ return 0;
+
+ while (more)
+ {
+ int i;
+ for (i = 0; i<4; i++)
+ {
+ int ch = getbyte(client_data);
+ if (ch != ' ')
+ {
+ if (ch)
+ ungetbyte(ch, client_data);
+ return 1;
+ }
+ }
+ if (wrbuf_len(w) > 60 && wrbuf_buf(w)[wrbuf_len(w)-1] == '=')
+ wrbuf_cut_right(w, 1);
+ else
+ wrbuf_puts(w, " ");
+ more = yaz_gets(getbyte, ungetbyte, client_data, w);
+ }
+ return 1;
+}
+