/* ftamfaduid.c - FPM: encode/decode FADU identities */
static char *rcsid
= "$Header: /f/osi/ftam/RCS/ftamfaduid.c,v 7.1 91/02/22 09:22:51 mrose Interim $";
* $Header: /f/osi/ftam/RCS/ftamfaduid.c,v 7.1 91/02/22 09:22:51 mrose Interim $
* Revision 7.1 91/02/22 09:22:51 mrose
* Revision 7.0 89/11/23 21:53:36 mrose
* 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
struct type_FTAM_FADU__Identity
*faduid2fpm (fsb
, fa
, fti
)
register struct ftamblk
*fsb
;
register struct FADUidentity
*fa
;
struct FTAMindication
*fti
;
register struct type_FTAM_FADU__Identity
*fpm
;
register struct name_element
**f4
;
if ((fpm
= (struct type_FTAM_FADU__Identity
*) calloc (1, sizeof *fpm
))
(void) ftamlose (fti
, FS_GEN (fsb
), 1, NULLCP
, "out of memory");
free_FTAM_FADU__Identity (fpm
);
fpm
-> offset
= type_FTAM_FADU__Identity_first__last
;
switch (fa
-> fa_firstlast
) {
(void) ftamlose (fti
, FS_GEN (fsb
), 0, NULLCP
,
"bad value in FADU identity");
fpm
-> un
.first__last
= fa
-> fa_firstlast
;
fpm
-> offset
= type_FTAM_FADU__Identity_relative
;
switch (fa
-> fa_relative
) {
fpm
-> un
.relative
= fa
-> fa_relative
;
fpm
-> offset
= type_FTAM_FADU__Identity_begin__end
;
switch (fa
-> fa_beginend
) {
fpm
-> un
.begin__end
= fa
-> fa_beginend
;
if (!fa
-> fa_singlename
)
fpm
-> offset
= type_FTAM_FADU__Identity_single__name
;
if ((fpm
-> un
.single__name
=
str2qb (fa
-> fa_singlename
,
strlen (fa
-> fa_singlename
),
f4
= &fpm
-> un
.name__list
;
for (n
= fa
-> fa_nname
- 1, ap
= fa
-> fa_names
;
if ((*f4
= (struct name_element
*) calloc (1, sizeof **f4
))
|| ((*f4
) -> Node__Name
=
str2qb (*ap
, strlen (*ap
), 1)) == NULL
)
fpm
-> offset
= type_FTAM_FADU__Identity_fadu__number
;
fpm
-> un
.fadu__number
= fa
-> fa_fadunumber
;
(void) ftamlose (fti
, FS_GEN (fsb
), 0, NULLCP
,
"bad type for FADU identity");
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 struct name_element
*f4
;
bzero ((char *) fa
, sizeof *fa
);
case type_FTAM_FADU__Identity_first__last
:
fa
-> fa_type
= FA_FIRSTLAST
;
fa
-> fa_firstlast
= fpm
-> un
.first__last
;
case type_FTAM_FADU__Identity_relative
:
fa
-> fa_type
= FA_RELATIVE
;
fa
-> fa_relative
= fpm
-> un
.relative
;
case type_FTAM_FADU__Identity_begin__end
:
fa
-> fa_type
= FA_BEGINEND
;
fa
-> fa_beginend
= fpm
-> un
.begin__end
;
case type_FTAM_FADU__Identity_single__name
:
fa
-> fa_type
= FA_SINGLE
;
if ((fa
-> fa_singlename
= qb2str (fpm
-> un
.single__name
))
return ftamlose (fti
, FS_GEN (fsb
), 1, NULLCP
,
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
) {
return ftamlose (fti
, FS_GEN (fsb
), 1, NULLCP
,
"too many nodes in FADU name");
if ((*ap
++ = qb2str (f4
-> Node__Name
)) == NULL
)
case type_FTAM_FADU__Identity_fadu__number
:
fa
-> fa_type
= FA_FADUNUMBER
;
fa
-> fa_fadunumber
= fpm
-> un
.fadu__number
;