Europagate, 1994-1995.
$Log: iso2709.c,v $
- Revision 1.1 1995/02/09 17:27:10 adam
- Initial revision
-
+ Revision 1.2 1995/02/10 16:50:32 adam
+ Indicator field moved to 'struct iso2709_dir' from 'struct
+ iso2709_field'.
+ Function iso2709_rm implemented - to delete a MARC record.
+
+ * Revision 1.1.1.1 1995/02/09 17:27:11 adam
+ * Initial version of email gateway under CVS control.
+ *
*/
#include <stdlib.h>
if (!(p = malloc (sizeof(*p))))
return NULL;
+ /* deal with record label (24 characters) */
p->record_length = atoin (buf, 5);
strncpyx (p->record_status, buf+5, 1);
strncpyx (p->implementation_codes, buf+6, 4);
p->length_implementation = atoin (buf+22, 1);
strncpyx (p->future_use, buf+23, 1);
+ /* deal with directory */
dpp = &p->directory;
-
*dpp = NULL;
while (buf[pos] != ISO2709_FS)
{
dpp = &(*dpp)->next;
}
pos++;
+ /* deal with datafields */
#if 0
fprintf (stderr, "indicator_len=%d, identifier_len=%d\n",
p->indicator_length, p->identifier_length);
int tag00;
struct iso2709_field **fpp;
int dpos = pos+dp->offset;
- char *save_indicator = NULL;
fpp = &dp->fields;
(*fpp)->next = NULL;
if (p->indicator_length && memcmp (dp->tag, "00", 2))
{
- (*fpp)->indicator = malloc (p->indicator_length+1);
- strncpyx ((*fpp)->indicator, buf+dpos, p->indicator_length);
+ dp->indicator = malloc (p->indicator_length+1);
+ strncpyx (dp->indicator, buf+dpos, p->indicator_length);
dpos += p->indicator_length;
}
else
- (*fpp)->indicator = NULL;
+ dp->indicator = NULL;
if (memcmp (dp->tag, "00", 2))
tag00 = 0;
else
tag00 = 1;
fprintf (stderr, "%s", dp->tag);
+ if (dp->indicator)
+ fprintf (stderr, " %s", dp->indicator);
while (1)
{
int dpos_n;
strncpyx ((*fpp)->data, buf+dpos, dpos_n - dpos);
dpos = dpos_n;
- if (!save_indicator && (*fpp)->indicator)
- fprintf (stderr, " %s", (*fpp)->indicator);
if ((*fpp)->identifier)
fprintf (stderr, " *%s", (*fpp)->identifier);
fprintf (stderr, " %s", (*fpp)->data);
if (buf[dpos] == ISO2709_FS)
break;
- save_indicator = (*fpp)->indicator;
fpp = &(*fpp)->next;
*fpp = malloc (sizeof(**fpp));
(*fpp)->next = NULL;
- (*fpp)->indicator = save_indicator;
}
fprintf (stderr, "\n");
}
return p;
}
+
+void iso2709_rm (Iso2709Rec rec)
+{
+ struct iso2709_dir *dir, *dir1;
+
+ for (dir = rec->directory; dir; dir = dir1)
+ {
+ struct iso2709_field *field, *field1;
+
+ for (field = dir->fields; field; field = field1)
+ {
+ free (field->identifier);
+ free (field->data);
+ field1 = field->next;
+ free (field);
+ }
+ free (dir->indicator);
+ dir1 = dir->next;
+ free (dir);
+ }
+}