Annotation of 43BSDReno/contrib/isode-beta/pepsy/pepsy_misc.c, revision 1.1

1.1     ! root        1: /* pepy_misc.c - PE parser (yacc-based) misc routines */
        !             2: 
        !             3: #ifndef        lint
        !             4: static char *rcsid = "$Header: /f/osi/pepsy/RCS/pepsy_misc.c,v 7.0 90/07/01 19:54:27 mrose Exp $";
        !             5: #endif
        !             6: 
        !             7: /*
        !             8:  * $Header: /f/osi/pepsy/RCS/pepsy_misc.c,v 7.0 90/07/01 19:54:27 mrose Exp $
        !             9:  *
        !            10:  *
        !            11:  * $Log:       pepsy_misc.c,v $
        !            12:  * Revision 7.0  90/07/01  19:54:27  mrose
        !            13:  * *** empty log message ***
        !            14:  * 
        !            15:  * Revision 7.0  89/11/23  22:11:52  mrose
        !            16:  * Release 6.0
        !            17:  * 
        !            18:  */
        !            19: 
        !            20: /*
        !            21:  *                               NOTICE
        !            22:  *
        !            23:  *    Acquisition, use, and distribution of this module and related
        !            24:  *    materials are subject to the restrictions of a license agreement.
        !            25:  *    Consult the Preface in the User's Manual for the full terms of
        !            26:  *    this agreement.
        !            27:  *
        !            28:  */
        !            29: 
        !            30: 
        !            31: #include <ctype.h>
        !            32: #include <stdio.h>
        !            33: #include "pepsydefs.h"
        !            34: 
        !            35: /*  Oid manipulation */
        !            36: 
        !            37: typedef struct oidlist {
        !            38:     OID                op_oid;
        !            39:     char       *op_name;
        !            40:     struct oidlist *op_next;
        !            41: } oidlist, *OP;
        !            42: #define NULLOP ((OP) 0)
        !            43: 
        !            44: typedef struct symtable {
        !            45:     char       *sym_name;
        !            46:     char       *sym_module;
        !            47:     OID                sym_oid;
        !            48:     struct symtable *sym_next;
        !            49: } symtable, *SYM;
        !            50: #define NULLSYM ((SYM)0)
        !            51: 
        !            52: 
        !            53: static OP      myoids;
        !            54: static SYM     symtab[MAX_TBLS];
        !            55: 
        !            56: 
        !            57: OID    addoid (o1, o2)
        !            58: OID    o1, o2;
        !            59: {
        !            60:     OID                noid;
        !            61: 
        !            62:     if (o1 == NULLOID || o2 == NULLOID)
        !            63:        return NULLOID;
        !            64: 
        !            65:     noid = (OID) calloc (1, sizeof(*noid));
        !            66:     if (noid == NULLOID)
        !            67:        myyerror ("out of memory (%d needed)", sizeof(*noid));
        !            68: 
        !            69:     noid -> oid_nelem = o1->oid_nelem + o2->oid_nelem;
        !            70:     noid -> oid_elements = (unsigned int *) calloc ((unsigned)noid->oid_nelem,
        !            71:                                                    sizeof(unsigned int));
        !            72:     if (noid -> oid_elements == NULL)
        !            73:        myyerror ("out of memory (%d needed)", noid->oid_nelem);
        !            74: 
        !            75:     bcopy ((char *)o1->oid_elements, (char *)noid->oid_elements,
        !            76:           o1->oid_nelem * sizeof(unsigned int));
        !            77:     bcopy ((char *)o2 -> oid_elements,
        !            78:           (char *) &noid -> oid_elements[o1->oid_nelem],
        !            79:           o2 -> oid_nelem * sizeof(unsigned int));
        !            80:     return noid;
        !            81: }
        !            82: 
        !            83: defineoid (name, oid)
        !            84: char   *name;
        !            85: OID    oid;
        !            86: {
        !            87:     register char      *p;
        !            88:     register OP                op;
        !            89: 
        !            90:     if (oid == NULLOID) {
        !            91:        myyerror ("Warning Null oid in defineoid");
        !            92:        return;
        !            93:     }
        !            94:     for (op = myoids; op; op = op -> op_next)
        !            95:        if (strcmp (op -> op_name, name) == 0) {
        !            96:            if (oid_cmp(op->op_oid, oid) != 0) {
        !            97:                p = new_string(sprintoid (oid));
        !            98:                warning ("OID name clash %s => %s & %s",
        !            99:                          name, p, sprintoid(op->op_oid));
        !           100:                free (p);
        !           101:            }
        !           102:            else
        !           103:                return;
        !           104:        }
        !           105:     op = (OP) calloc (1, sizeof *op);
        !           106:     if (op == NULLOP)
        !           107:        myyerror ("out of memory (%d needed)", sizeof(*op));
        !           108:     op -> op_oid = oid_cpy(oid);
        !           109:     op -> op_name = new_string (name);
        !           110:     op -> op_next = myoids;
        !           111:     myoids = op;
        !           112: }
        !           113: 
        !           114: OID    oidlookup (name)
        !           115: char   *name;
        !           116: {
        !           117:     OP op;
        !           118: 
        !           119:     for (op = myoids; op; op = op -> op_next)
        !           120:        if (strcmp ( name, op->op_name) == 0)
        !           121:            return oid_cpy(op -> op_oid);
        !           122: 
        !           123:     warning ("unknown Object Identifier '%s'", name);
        !           124:     return NULLOID;
        !           125: }
        !           126: 
        !           127: char   *oidname (oid)
        !           128: OID    oid;
        !           129: {
        !           130:     OP op;
        !           131: 
        !           132:     for (op = myoids; op; op = op -> op_next)
        !           133:        if (oid_cmp (op->op_oid, oid) == 0)
        !           134:            return op -> op_name;
        !           135: 
        !           136:     return NULLCP;
        !           137: }
        !           138: 
        !           139: OID    int2oid (n)
        !           140: int    n;
        !           141: {
        !           142:     OID                noid;
        !           143: 
        !           144:     noid = (OID) calloc(1, sizeof(*noid));
        !           145:     if (noid == NULLOID)
        !           146:        myyerror ("out of memory (%d needed)", sizeof *noid);
        !           147: 
        !           148:     noid -> oid_elements = (unsigned int *) calloc (1, sizeof(unsigned int));
        !           149:     if (noid -> oid_elements == NULL)
        !           150:        myyerror ("out of memory (%d needed)", sizeof(unsigned int));
        !           151:     noid -> oid_nelem = 1;
        !           152:     noid -> oid_elements[0] = n;
        !           153:     return noid;
        !           154: }
        !           155: 
        !           156: /*  */
        !           157: 
        !           158: addtable (name, lt)
        !           159: char   *name;
        !           160: int    lt;
        !           161: {
        !           162:     SYM                sp;
        !           163: 
        !           164:     sp = (SYM)calloc (1, sizeof *sp);
        !           165:     sp -> sym_name = new_string (name);
        !           166:     sp -> sym_next = symtab[lt];
        !           167:     symtab[lt] = sp;
        !           168: }
        !           169: 
        !           170: addtableref (name, id, lt)
        !           171: char   *name;
        !           172: OID    id;
        !           173: int    lt;
        !           174: {
        !           175:     SYM                sp;
        !           176:     char       *nm;
        !           177:     OID                oid;
        !           178: 
        !           179:     nm = name ? new_string (name) : NULLCP;
        !           180:     oid = id ? oid_cpy (id) : NULLOID;
        !           181: 
        !           182:     for (sp = symtab[lt]; sp; sp = sp -> sym_next)
        !           183:        if (sp -> sym_module == NULLCP && sp -> sym_oid == NULLOID)
        !           184:        {
        !           185:            sp -> sym_module = nm;
        !           186:            sp -> sym_oid = oid;
        !           187:        }
        !           188: }
        !           189: 
        !           190: print_expimp ()
        !           191: {
        !           192:     SYM                sp;
        !           193:     int                ind;
        !           194:     OID                oid;
        !           195:     char       *p;
        !           196: 
        !           197:     if (sp = symtab[TBL_EXPORT])
        !           198:        (void) printf ("\nEXPORTS\n");
        !           199:        
        !           200:     for (ind = 0; sp; sp = sp->sym_next) {
        !           201:        if (ind == 0) {
        !           202:            (void) putchar('\t');
        !           203:            ind = 8;
        !           204:        }
        !           205:        (void) printf("%s", sp -> sym_name);
        !           206:        ind += strlen (sp -> sym_name);
        !           207:        if (sp -> sym_next){
        !           208:            (void) putchar (',');
        !           209:            ind ++;
        !           210:        }
        !           211:        else
        !           212:            (void) putchar (';');
        !           213:        if (ind > 72) {
        !           214:            (void) putchar ('\n');
        !           215:            ind = 0;
        !           216:        }
        !           217:        else {
        !           218:            (void) putchar (' ');
        !           219:            ind ++;
        !           220:        }
        !           221:     }
        !           222:     (void) putchar ('\n');
        !           223: 
        !           224:     if (sp = symtab[TBL_IMPORT]) {
        !           225:        (void) printf ("\nIMPORTS\n");
        !           226:        p = sp -> sym_module;
        !           227:        oid = sp -> sym_oid;
        !           228:     }
        !           229:     for (ind = 0; sp; sp = sp -> sym_next) {
        !           230:        if (ind == 0) {
        !           231:            (void) putchar ('\t');
        !           232:            ind = 8;
        !           233:        }
        !           234:        (void) printf ("%s", sp -> sym_name);
        !           235:        ind += strlen (sp -> sym_name);
        !           236:        if (sp -> sym_next) {
        !           237:            if (strcmp (p, sp -> sym_next -> sym_module) == 0) {
        !           238:                (void) putchar (',');
        !           239:                ind ++;
        !           240:                if ( ind > 72) {
        !           241:                    (void) putchar ('\n');
        !           242:                    ind = 0;
        !           243:                }
        !           244:                else {
        !           245:                    (void) putchar (' ');
        !           246:                    ind ++;
        !           247:                }
        !           248:            }
        !           249:            else {
        !           250:                if (ind != 8)
        !           251:                    (void) printf ("\n\t\t");
        !           252:                else
        !           253:                    (void) putchar ('\t');
        !           254:                (void) printf ("FROM %s", p);
        !           255:                if (oid)
        !           256:                    (void) printf (" %s", oidprint (oid));
        !           257:                (void) printf ("\n\t");
        !           258:                ind = 8;
        !           259:                p = sp -> sym_next -> sym_module;
        !           260:                oid = sp -> sym_next -> sym_oid;
        !           261:            }
        !           262:        }
        !           263:        else {
        !           264:            if (ind != 8)
        !           265:                (void) printf ("\n\t\t");
        !           266:            else
        !           267:                (void) putchar ('\t');
        !           268:            (void) printf ("FROM %s", p);
        !           269:            if (oid)
        !           270:                (void) printf (" %s", oidprint (oid));
        !           271:            (void) printf (";\n");
        !           272:         }
        !           273:     }
        !           274: }
        !           275: 
        !           276: check_impexp (yp)
        !           277: YP     yp;
        !           278: {
        !           279:     SYM                sp;
        !           280: 
        !           281:     for (sp = symtab[TBL_EXPORT]; sp; sp = sp->sym_next)
        !           282:        if (strcmp (sp -> sym_name, yp -> yp_identifier) == 0)
        !           283:        {
        !           284:            yp -> yp_flags |= YP_EXPORTED;
        !           285:            break;
        !           286:        }
        !           287: 
        !           288:     for (sp = symtab[TBL_IMPORT]; sp; sp = sp -> sym_next)
        !           289:        if (strcmp (sp -> sym_name, yp -> yp_identifier) == 0) {
        !           290:            if (yp->yp_flags & YP_EXPORTED)
        !           291:                myyerror ("Warning: %s imported & exported!", yp->yp_identifier);
        !           292:            yp -> yp_module = sp -> sym_module;
        !           293:            yp -> yp_modid = sp -> sym_oid;
        !           294: /*         yp -> yp_flags |= YP_IMPORTED;      */
        !           295:        }
        !           296: }
        !           297: static struct oidtbl {
        !           298:     char       *oid_name;
        !           299:     int                oid_value;
        !           300: } oidtable[] =  {
        !           301:                                /* Top level OIDS */
        !           302:     "ccitt",           0,
        !           303:     "iso",             1,
        !           304:     "joint-iso-ccitt", 2,
        !           305: 
        !           306:     NULL,
        !           307: };
        !           308: 
        !           309: initoidtbl ()
        !           310: {
        !           311:     struct oidtbl *op;
        !           312:     OID                oid;
        !           313: 
        !           314:     for (op = oidtable; op -> oid_name; op++) {
        !           315:        defineoid (op->oid_name, oid = int2oid(op->oid_value));
        !           316:        oid_free (oid);
        !           317:     }
        !           318: }
        !           319: 
        !           320: char   *oidprint (oid)
        !           321: OID    oid;
        !           322: {
        !           323:     static char buf[BUFSIZ];
        !           324:     char       *cp;
        !           325:     char       *p;
        !           326:     OID                o2;
        !           327:     unsigned int *ip;
        !           328:     int                i;
        !           329: 
        !           330:     if (oid == NULLOID)
        !           331:        return "";
        !           332: 
        !           333:     (void) strcpy (buf, "{ ");
        !           334:     cp = buf + strlen(buf);
        !           335: 
        !           336:     i = oid->oid_nelem;
        !           337:     ip = oid->oid_elements;
        !           338: 
        !           339:     p = oidname (o2 = int2oid((int)*ip));
        !           340:     oid_free (o2);
        !           341:     if (p) {
        !           342:        i --;
        !           343:        ip ++;
        !           344:        (void) sprintf (cp, "%s ", p);
        !           345:        cp += strlen(cp);
        !           346:     }
        !           347: 
        !           348:     for (; i > 0; i--) {
        !           349:        (void) sprintf (cp, "%d ", *ip++);
        !           350:        cp += strlen (cp);
        !           351:     }
        !           352: 
        !           353:     (void) strcat (cp, " }");
        !           354:     return buf;
        !           355: }
        !           356: 
        !           357:     

unix.superglobalmegacorp.com

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