|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: T f
Length: 4698 (0x125a) Types: TextFile Names: »ftamfaduid.c«
└─⟦3d0c2be1b⟧ Bits:30001254 ISODE-5.0 Tape └─⟦eba4602b1⟧ »./isode-5.0.tar.Z« └─⟦d3ac74d73⟧ └─⟦this⟧ »isode-5.0/ftam/ftamfaduid.c«
/* ftamfaduid.c - FPM: encode/decode FADU identities */ #ifndef lint static char *rcsid = "$Header: /f/osi/ftam/RCS/ftamfaduid.c,v 6.0 89/03/18 23:30:38 mrose Rel $"; #endif /* * $Header: /f/osi/ftam/RCS/ftamfaduid.c,v 6.0 89/03/18 23:30:38 mrose Rel $ * * * $Log: ftamfaduid.c,v $ * Revision 6.0 89/03/18 23:30:38 mrose * Release 5.0 * */ /* * NOTICE * * Acquisition, use, and distribution of this module and related * materials are subject to the restrictions of a license agreement. * Consult the Preface in the User's Manual for the full terms of * this agreement. * */ /* LINTLIBRARY */ #include <stdio.h> #include "fpkt.h" /* \f */ struct type_FTAM_FADU__Identity *faduid2fpm (fsb, fa, fti) register struct ftamblk *fsb; register struct FADUidentity *fa; struct FTAMindication *fti; { register int n; register char **ap; register struct type_FTAM_FADU__Identity *fpm; register struct name_element **f4; if ((fpm = (struct type_FTAM_FADU__Identity *) calloc (1, sizeof *fpm)) == NULL) { no_mem: ; (void) ftamlose (fti, FS_GEN (fsb), 1, NULLCP, "out of memory"); out: ; if (fpm) free_FTAM_FADU__Identity (fpm); return NULL; } switch (fa -> fa_type) { case FA_FIRSTLAST: fpm -> offset = type_FTAM_FADU__Identity_first__last; switch (fa -> fa_firstlast) { case FA_FIRST: case FA_LAST: break; default: bad_value:; (void) ftamlose (fti, FS_GEN (fsb), 0, NULLCP, "bad value in FADU identity"); goto out; } fpm -> un.first__last = fa -> fa_firstlast; break; case FA_RELATIVE: fpm -> offset = type_FTAM_FADU__Identity_relative; switch (fa -> fa_relative) { case FA_PREVIOUS: case FA_CURRENT: case FA_NEXT: break; default: goto bad_value; } fpm -> un.relative = fa -> fa_relative; break; case FA_BEGINEND: fpm -> offset = type_FTAM_FADU__Identity_begin__end; switch (fa -> fa_beginend) { case FA_BEGIN: case FA_END: break; default: goto out; } fpm -> un.begin__end = fa -> fa_beginend; break; case FA_SINGLE: if (!fa -> fa_singlename) goto bad_value; fpm -> offset = type_FTAM_FADU__Identity_single__name; if ((fpm -> un.single__name = str2qb (fa -> fa_singlename, strlen (fa -> fa_singlename), 1)) == NULL) goto no_mem; break; case FA_NAMELIST: f4 = &fpm -> un.name__list; for (n = fa -> fa_nname - 1, ap = fa -> fa_names; n >= 0; ap++, n--) { if (!*ap) goto bad_value; if ((*f4 = (struct name_element *) calloc (1, sizeof **f4)) == NULL || ((*f4) -> Node__Name = str2qb (*ap, strlen (*ap), 1)) == NULL) goto no_mem; f4 = &((*f4) -> next); } break; case FA_FADUNUMBER: fpm -> offset = type_FTAM_FADU__Identity_fadu__number; fpm -> un.fadu__number = fa -> fa_fadunumber; break; default: (void) ftamlose (fti, FS_GEN (fsb), 0, NULLCP, "bad type for FADU identity"); goto out; } return fpm; } /* \f */ int fpm2faduid (fsb, fpm, fa, fti) register struct ftamblk *fsb; register struct type_FTAM_FADU__Identity *fpm; register struct FADUidentity *fa; struct FTAMindication *fti; { register int n; register char **ap; register struct name_element *f4; bzero ((char *) fa, sizeof *fa); switch (fpm -> offset) { case type_FTAM_FADU__Identity_first__last: fa -> fa_type = FA_FIRSTLAST; fa -> fa_firstlast = fpm -> un.first__last; break; case type_FTAM_FADU__Identity_relative: fa -> fa_type = FA_RELATIVE; fa -> fa_relative = fpm -> un.relative; break; case type_FTAM_FADU__Identity_begin__end: fa -> fa_type = FA_BEGINEND; fa -> fa_beginend = fpm -> un.begin__end; break; case type_FTAM_FADU__Identity_single__name: fa -> fa_type = FA_SINGLE; if ((fa -> fa_singlename = qb2str (fpm -> un.single__name)) == NULL) { no_mem: ; FUFREE (fa); return ftamlose (fti, FS_GEN (fsb), 1, NULLCP, "out of memory"); } break; case type_FTAM_FADU__Identity_name__list: fa -> fa_type = FA_NAMELIST; ap = fa -> fa_names, n = NANAME; for (f4 = fpm -> un.name__list; f4; f4 = f4 -> next) { if (n-- <= 0) { FUFREE (fa); return ftamlose (fti, FS_GEN (fsb), 1, NULLCP, "too many nodes in FADU name"); } if ((*ap++ = qb2str (f4 -> Node__Name)) == NULL) goto no_mem; } break; case type_FTAM_FADU__Identity_fadu__number: fa -> fa_type = FA_FADUNUMBER; fa -> fa_fadunumber = fpm -> un.fadu__number; break; } return OK; }