Annotation of 43BSDReno/contrib/isode-beta/ftam/ftamdocument.c, revision 1.1

1.1     ! root        1: /* ftamdocument.c - FTAM document database */
        !             2: 
        !             3: #ifndef        lint
        !             4: static char *rcsid = "$Header: /f/osi/ftam/RCS/ftamdocument.c,v 7.0 89/11/23 21:53:33 mrose Rel $";
        !             5: #endif
        !             6: 
        !             7: /* 
        !             8:  * $Header: /f/osi/ftam/RCS/ftamdocument.c,v 7.0 89/11/23 21:53:33 mrose Rel $
        !             9:  *
        !            10:  *
        !            11:  * $Log:       ftamdocument.c,v $
        !            12:  * Revision 7.0  89/11/23  21:53:33  mrose
        !            13:  * Release 6.0
        !            14:  * 
        !            15:  */
        !            16: 
        !            17: /*
        !            18:  *                               NOTICE
        !            19:  *
        !            20:  *    Acquisition, use, and distribution of this module and related
        !            21:  *    materials are subject to the restrictions of a license agreement.
        !            22:  *    Consult the Preface in the User's Manual for the full terms of
        !            23:  *    this agreement.
        !            24:  *
        !            25:  */
        !            26: 
        !            27: 
        !            28: /* LINTLIBRARY */
        !            29: 
        !            30: #include <stdio.h>
        !            31: #include "ftam.h"
        !            32: #include "tailor.h"
        !            33: 
        !            34: /*    DATA */
        !            35: 
        !            36: static char *isodocuments = "isodocuments";
        !            37: 
        !            38: static FILE *servf = NULL;
        !            39: static int   stayopen = 0;
        !            40: 
        !            41: static struct isodocument ids;
        !            42: 
        !            43: /*  */
        !            44: 
        !            45: int    setisodocument (f)
        !            46: int    f;
        !            47: {
        !            48:     if (servf == NULL)
        !            49:        servf = fopen (isodefile (isodocuments, 0), "r");
        !            50:     else
        !            51:        rewind (servf);
        !            52:     stayopen |= f;
        !            53: 
        !            54:     return (servf != NULL);
        !            55: }
        !            56: 
        !            57: 
        !            58: int    endisodocument () {
        !            59:     if (servf && !stayopen) {
        !            60:        (void) fclose (servf);
        !            61:        servf = NULL;
        !            62:     }
        !            63: 
        !            64:     return 1;
        !            65: }
        !            66: 
        !            67: /*  */
        !            68: 
        !            69: struct isodocument *getisodocument () {
        !            70:     register char  *cp;
        !            71:     register struct isodocument *id = &ids;
        !            72:     static char buffer[BUFSIZ + 1];
        !            73:     static char *vec[NVEC + NSLACK + 1];
        !            74: 
        !            75:     if (servf == NULL
        !            76:            && (servf = fopen (isodefile (isodocuments, 0), "r")) == NULL)
        !            77:        return NULL;
        !            78: 
        !            79:     if (id -> id_type)
        !            80:        oid_free (id -> id_type);
        !            81:     if (id -> id_abstract)
        !            82:        oid_free (id -> id_abstract);
        !            83:     if (id -> id_transfer)
        !            84:        oid_free (id -> id_transfer);
        !            85:     if (id -> id_model)
        !            86:        oid_free (id -> id_model);
        !            87:     if (id -> id_constraint)
        !            88:        oid_free (id -> id_constraint);
        !            89: 
        !            90:     bzero ((char *) id, sizeof *id);
        !            91: 
        !            92:     while (fgets (buffer, sizeof buffer, servf) != NULL) {
        !            93:        if (*buffer == '#')
        !            94:            continue;
        !            95:        if (cp = index (buffer, '\n'))
        !            96:            *cp = NULL;
        !            97:        if (str2vec (buffer, vec) < 6)
        !            98:            continue;
        !            99: 
        !           100:        id -> id_entry = vec[0];
        !           101: 
        !           102:        if ((id -> id_type = str2oid (vec[1])) == NULLOID
        !           103:                || (id -> id_type = oid_cpy (id -> id_type)) == NULLOID)
        !           104:            continue;
        !           105: 
        !           106:        if ((id -> id_abstract = str2oid (vec[2])) == NULLOID
        !           107:                || (id -> id_abstract = oid_cpy (id -> id_abstract))
        !           108:                        == NULLOID)
        !           109:            goto free1;
        !           110: 
        !           111:        if ((id -> id_transfer = str2oid (vec[3])) == NULLOID
        !           112:                || (id -> id_transfer = oid_cpy (id -> id_transfer))
        !           113:                        == NULLOID)
        !           114:            goto free2;
        !           115: 
        !           116:        if ((id -> id_model = str2oid (vec[4])) == NULLOID
        !           117:                || (id -> id_model = oid_cpy (id -> id_model)) == NULLOID)
        !           118:            goto free3;
        !           119: 
        !           120:        if ((id -> id_constraint = str2oid (vec[5])) == NULLOID
        !           121:                || (id -> id_constraint = oid_cpy (id -> id_constraint))
        !           122:                == NULLOID) {
        !           123:            oid_free (id -> id_model);
        !           124:            id -> id_model = NULLOID;
        !           125: 
        !           126:     free3: ;
        !           127:            oid_free (id -> id_transfer);
        !           128:            id -> id_transfer = NULLOID;
        !           129: 
        !           130:     free2:  ;
        !           131:            oid_free (id -> id_abstract);
        !           132:            id -> id_abstract = NULLOID;
        !           133: 
        !           134:     free1:  ;
        !           135:            oid_free (id -> id_type);
        !           136:            id -> id_type = NULLOID;
        !           137: 
        !           138:            continue;
        !           139:        }
        !           140: 
        !           141:        return id;
        !           142:     }
        !           143: 
        !           144:     return NULL;
        !           145: }
        !           146: 
        !           147: /*  */
        !           148: 
        !           149: struct isodocument *getisodocumentbyentry (entry)
        !           150: char    *entry;
        !           151: {
        !           152:     register struct isodocument *id;
        !           153: 
        !           154:     (void) setisodocument (0);
        !           155:     while (id = getisodocument ())
        !           156:        if (strcmp (id -> id_entry, entry) == 0)
        !           157:            break;
        !           158:     (void) endisodocument ();
        !           159: 
        !           160:     return id;
        !           161: }
        !           162: 
        !           163: /*  */
        !           164: 
        !           165: struct isodocument *getisodocumentbytype (type)
        !           166: OID    type;
        !           167: {
        !           168:     register struct isodocument *id;
        !           169: 
        !           170:     (void) setisodocument (0);
        !           171:     while (id = getisodocument ())
        !           172:        if (oid_cmp (id -> id_type, type) == 0)
        !           173:            break;
        !           174:     (void) endisodocument ();
        !           175: 
        !           176:     return id;
        !           177: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.