From 77d8b0bc50992a2e6fe098a058da151f2c4c99c4 Mon Sep 17 00:00:00 2001 From: Adam Dickmeiss Date: Thu, 30 Mar 1995 14:22:02 +0000 Subject: [PATCH] Uses MARC anchor functions now. --- fml/fmlmarc.c | 75 +++++++++++++++++---------------------------------------- 1 file changed, 22 insertions(+), 53 deletions(-) diff --git a/fml/fmlmarc.c b/fml/fmlmarc.c index 60eadff..9108c2a 100644 --- a/fml/fmlmarc.c +++ b/fml/fmlmarc.c @@ -2,7 +2,10 @@ * FML interpreter. Europagate, 1995 * * $Log: fmlmarc.c,v $ - * Revision 1.4 1995/02/23 08:32:05 adam + * Revision 1.5 1995/03/30 14:22:02 adam + * Uses MARC anchor functions now. + * + * Revision 1.4 1995/02/23 08:32:05 adam * Changed header. * * Revision 1.2 1995/02/10 16:52:08 adam @@ -21,48 +24,10 @@ #include #include -#include +#include #include "fmlp.h" -#if 0 -struct fml_node *marc_to_fml (Fml fml, Iso2709Rec rec) -{ - struct fml_node *ptr_0 = NULL, *ptr_1; - struct iso2709_dir *dir; - - for (dir = rec->directory; dir; dir=dir->next) - { - struct fml_node *ptr; - - ptr = fml_node_alloc (fml); - if (ptr_0) - ptr_1->p[1] = ptr; - else - ptr_0 = ptr_1 = ptr; - - ptr_1 = ptr; - - if (dir->fields) - { - struct iso2709_field *fields = dir->fields; - - ptr = fml_node_alloc (fml); - ptr->p[0] = fml_atom_alloc (fml, fields->data); - ptr->is_atom = 1; - - while ((fields = fields->next)) - { - ptr = ptr->p[0] = fml_node_alloc (fml); - ptr->p[0] = fml_atom_alloc (fml, fields->data); - ptr->is_atom = 1; - } - } - } - return ptr_0; -} -#endif - static void add_string (const char *str, char **buf, int *max, int *size) { if (*size + strlen(str) >= *max) @@ -86,45 +51,49 @@ static void add_string (const char *str, char **buf, int *max, int *size) char *marc_to_str (Fml fml, Iso2709Rec rec) { - struct iso2709_dir *dir; static char *buf = NULL; static int max = 0; int size = 0; + Iso2709Anchor a; + char *tag, *indicator, *identifier, *data; add_string ("{", &buf, &max, &size); - for (dir = rec->directory; dir; dir=dir->next) + a = iso2709_a_mk (rec); + do { - struct iso2709_field *fields; - + if (!iso2709_a_info_line (a, &tag, &indicator)) + break; add_string ("{\'", &buf, &max, &size); - add_string (dir->tag, &buf, &max, &size); + add_string (tag, &buf, &max, &size); add_string ("\'",&buf, &max, &size); - if (dir->indicator) + if (indicator) { add_string ("\'", &buf, &max, &size); - add_string (dir->indicator, &buf, &max, &size); + add_string (indicator, &buf, &max, &size); add_string ("\'", &buf, &max, &size); } else add_string ("{}", &buf, &max, &size); add_string ("{", &buf, &max, &size); - for (fields = dir->fields; fields; fields=fields->next) + do { + iso2709_a_info_field (a, NULL, NULL, &identifier, &data); add_string ("{", &buf, &max, &size); - if (fields->identifier) + if (identifier) { add_string ("\'", &buf, &max, &size); - add_string (fields->identifier, &buf, &max, &size); + add_string (identifier, &buf, &max, &size); add_string ("\'", &buf, &max, &size); } else add_string ("{}", &buf, &max, &size); add_string (" \'", &buf, &max, &size); - add_string (fields->data, &buf, &max, &size); + add_string (data, &buf, &max, &size); add_string ("\'}", &buf, &max, &size); - } + } while (iso2709_a_next_field (a)); add_string ("}}\n", &buf, &max, &size); - } + } while (iso2709_a_next_line (a)); add_string ("}", &buf, &max, &size); + iso2709_a_rm (a); return buf; } -- 1.7.10.4