Annotation of 43BSDReno/contrib/isode-beta/ftam/ftamdocument.c, revision 1.1.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.