X-Git-Url: http://jsfdemo.indexdata.com/?a=blobdiff_plain;f=util%2Fiso2709.c;h=927df072eaf2c0df1c769d03678580b86f6fa29d;hb=890cdaa817fe87d209ce4038a0615346106df4cf;hp=62cb8fe0a7e0d6e88719f7bd0bf6eda63cd98b4c;hpb=061d3d5b03fe909376317e1c03208a6b063bc9d0;p=egate.git diff --git a/util/iso2709.c b/util/iso2709.c index 62cb8fe..927df07 100644 --- a/util/iso2709.c +++ b/util/iso2709.c @@ -4,9 +4,14 @@ 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 @@ -78,6 +83,7 @@ Iso2709Rec iso2709_cvt (const char *buf) 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); @@ -91,8 +97,8 @@ Iso2709Rec iso2709_cvt (const char *buf) 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) { @@ -108,6 +114,7 @@ Iso2709Rec iso2709_cvt (const char *buf) dpp = &(*dpp)->next; } pos++; + /* deal with datafields */ #if 0 fprintf (stderr, "indicator_len=%d, identifier_len=%d\n", p->indicator_length, p->identifier_length); @@ -117,7 +124,6 @@ Iso2709Rec iso2709_cvt (const char *buf) int tag00; struct iso2709_field **fpp; int dpos = pos+dp->offset; - char *save_indicator = NULL; fpp = &dp->fields; @@ -125,18 +131,20 @@ Iso2709Rec iso2709_cvt (const char *buf) (*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; @@ -158,21 +166,38 @@ Iso2709Rec iso2709_cvt (const char *buf) 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); + } +}