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

unix.superglobalmegacorp.com

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