Annotation of 43BSDReno/contrib/isode-beta/snmp/syntax.c, revision 1.1

1.1     ! root        1: /* syntax.c - SMI syntax handling */
        !             2: 
        !             3: #ifndef        lint
        !             4: static char *rcsid = "$Header: /f/osi/snmp/RCS/syntax.c,v 7.8 90/07/09 14:49:41 mrose Exp $";
        !             5: #endif
        !             6: 
        !             7: /* 
        !             8:  * $Header: /f/osi/snmp/RCS/syntax.c,v 7.8 90/07/09 14:49:41 mrose Exp $
        !             9:  *
        !            10:  * Contributed by NYSERNet Inc.  This work was partially supported by the
        !            11:  * U.S. Defense Advanced Research Projects Agency and the Rome Air Development
        !            12:  * Center of the U.S. Air Force Systems Command under contract number
        !            13:  * F30602-88-C-0016.
        !            14:  *
        !            15:  *
        !            16:  * $Log:       syntax.c,v $
        !            17:  * Revision 7.8  90/07/09  14:49:41  mrose
        !            18:  * sync
        !            19:  * 
        !            20:  * Revision 7.7  90/04/18  08:52:03  mrose
        !            21:  * oid_normalize
        !            22:  * 
        !            23:  * Revision 7.6  90/04/08  03:23:20  mrose
        !            24:  * touch-up
        !            25:  * 
        !            26:  * Revision 7.5  90/03/23  17:27:35  mrose
        !            27:  * update
        !            28:  * 
        !            29:  * Revision 7.4  90/03/08  08:05:25  mrose
        !            30:  * touch-up
        !            31:  * 
        !            32:  * Revision 7.3  90/02/19  19:23:14  mrose
        !            33:  * again
        !            34:  * 
        !            35:  * Revision 7.2  90/02/19  19:17:11  mrose
        !            36:  * again
        !            37:  * 
        !            38:  * Revision 7.1  90/01/11  18:34:48  mrose
        !            39:  * real-sync
        !            40:  * 
        !            41:  * Revision 7.0  89/11/23  22:23:32  mrose
        !            42:  * Release 6.0
        !            43:  * 
        !            44:  */
        !            45: 
        !            46: /*
        !            47:  *                               NOTICE
        !            48:  *
        !            49:  *    Acquisition, use, and distribution of this module and related
        !            50:  *    materials are subject to the restrictions of a license agreement.
        !            51:  *    Consult the Preface in the User's Manual for the full terms of
        !            52:  *    this agreement.
        !            53:  *
        !            54:  */
        !            55: 
        !            56: 
        !            57: #include <ctype.h>
        !            58: #include <stdio.h>
        !            59: #include "SNMP-types.h"
        !            60: #include "objects.h"
        !            61: #include "tailor.h"
        !            62: 
        !            63: #include "internet.h"
        !            64: #include "clnp.h"
        !            65: 
        !            66: /*    DATA */
        !            67: 
        !            68: #define        MAXSYN  50
        !            69: 
        !            70: static object_syntax syntaxes[MAXSYN + 1];
        !            71: static OS    synlast = syntaxes;
        !            72: 
        !            73: 
        !            74: #if    defined(sun) || defined(BSD44)
        !            75: #define        HAVE_STRTOL
        !            76: 
        !            77: long   strtol ();
        !            78: #endif
        !            79: 
        !            80: 
        !            81: /*    INTEGER */
        !            82: 
        !            83: static int  integer_encode (x, pe)
        !            84: integer        *x;
        !            85: PE     *pe;
        !            86: {
        !            87:     if ((*pe = int2prim (*x)) == NULLPE)
        !            88:        return NOTOK;
        !            89: 
        !            90:     return OK;
        !            91: }
        !            92: 
        !            93: 
        !            94: static int  integer_decode (x, pe)
        !            95: integer **x;
        !            96: PE     pe;
        !            97: {
        !            98:     integer    i = prim2num (pe);
        !            99: 
        !           100:     if (i == NOTOK && pe -> pe_errno != PE_ERR_NONE)
        !           101:        return NOTOK;
        !           102:     if ((*x = (integer *) malloc (sizeof **x)) == NULL)
        !           103:        return NOTOK;
        !           104:     **x = i;
        !           105: 
        !           106:     return OK;
        !           107: }
        !           108: 
        !           109: 
        !           110: static int  integer_free (x)
        !           111: integer *x;
        !           112: {
        !           113:     free ((char *) x);
        !           114: }
        !           115: 
        !           116: 
        !           117: static int  integer_parse (x, s)
        !           118: integer **x;
        !           119: char   *s;
        !           120: {
        !           121:     long    l;
        !           122: #ifdef HAVE_STRTOL
        !           123:     char   *cp;
        !           124: #endif
        !           125:     
        !           126: #ifdef HAVE_STRTOL
        !           127:     if ((l = strtol (s, &cp, 0)) == 0L && cp == s)
        !           128:        return NOTOK;
        !           129: #else
        !           130:     if (sscanf (s, "%ld", &l) != 1)
        !           131:        return NOTOK;
        !           132: #endif
        !           133:     if ((*x = (integer *) malloc (sizeof **x)) == NULL)
        !           134:        return NOTOK;
        !           135:     **x = (integer) l;
        !           136: 
        !           137:     return OK;
        !           138: }
        !           139: 
        !           140: 
        !           141: /* ARGSUSED */
        !           142: 
        !           143: static int  integer_print (x, os)
        !           144: integer *x;
        !           145: OS     os;
        !           146: {
        !           147:     printf ("%d", *x);
        !           148: }
        !           149: 
        !           150: 
        !           151: /* ARGSUSED */
        !           152: 
        !           153: static int  services_print (x, os)
        !           154: integer *x;
        !           155: OS     os;
        !           156: {
        !           157:     printf ("%s", sprintb (*x,
        !           158:                           "\020\01physical\02datalink/subnetwork\03internet\04transport\05session\06presentation\07application"));
        !           159: }
        !           160: 
        !           161: 
        !           162: /* ARGSUSED */
        !           163: 
        !           164: static int  privs_print (x, os)
        !           165: integer *x;
        !           166: OS     os;
        !           167: {
        !           168:     printf ("%s", sprintb (*x,
        !           169:                           "\020\01get\02get-next\03get-response\04set\05trap"));
        !           170: }
        !           171: 
        !           172: 
        !           173: static add_integer ()
        !           174: {
        !           175:     (void) add_syntax ("INTEGER", integer_encode, integer_decode, integer_free,
        !           176:                integer_parse, integer_print);
        !           177:     (void) add_syntax ("Services", integer_encode, integer_decode,
        !           178:                       integer_free, integer_parse, services_print);
        !           179:     (void) add_syntax ("Privileges", integer_encode, integer_decode,
        !           180:                       integer_free, integer_parse, privs_print);
        !           181: }
        !           182: 
        !           183: /*    OCTET STRING */
        !           184: 
        !           185: static int  string_encode (x, pe)
        !           186: struct qbuf *x;
        !           187: PE     *pe;
        !           188: {
        !           189:     if ((*pe = qb2prim_aux (x, PE_CLASS_UNIV, PE_PRIM_OCTS, 0)) == NULLPE)
        !           190:        return NOTOK;
        !           191: 
        !           192:     return OK;
        !           193: }
        !           194: 
        !           195: 
        !           196: static int  string_decode (x, pe)
        !           197: struct qbuf **x;
        !           198: PE     pe;
        !           199: {
        !           200:     struct qbuf *qb = prim2qb (pe);
        !           201: 
        !           202:     if (qb == NULL)
        !           203:        return NOTOK;
        !           204:     *x = qb;
        !           205: 
        !           206:     return OK;
        !           207: }
        !           208: 
        !           209: 
        !           210: static int  string_parse (x, s)
        !           211: struct qbuf **x;
        !           212: char   *s;
        !           213: {
        !           214:     struct qbuf *qb = str2qb (s, strlen (s), 1);
        !           215: 
        !           216:     if (qb == NULL)
        !           217:        return NOTOK;
        !           218:     *x = qb;
        !           219: 
        !           220:     return OK;    
        !           221: }
        !           222: 
        !           223: 
        !           224: /* ARGSUSED */
        !           225: 
        !           226: static int  string_print (x, os)
        !           227: struct qbuf *x;
        !           228: OS     os;
        !           229: {
        !           230:     register char *cp,
        !           231:                  *ep;
        !           232:     char   *p;
        !           233:     register struct qbuf *qb;
        !           234: 
        !           235:     p = "";
        !           236:     for (qb = x -> qb_forw; qb != x; qb = qb -> qb_forw)
        !           237:        for (ep = (cp = qb -> qb_data) + qb -> qb_len; cp < ep; cp++) {
        !           238:            printf ("%s%02x", p, *cp & 0xff);
        !           239:            p = ":";
        !           240:        }
        !           241: }
        !           242: 
        !           243: 
        !           244: /* ARGSUSED */
        !           245: 
        !           246: static int  string_display (x, os)
        !           247: struct qbuf *x;
        !           248: OS     os;
        !           249: {
        !           250:     register struct qbuf *qb;
        !           251: 
        !           252:     printf ("\"");
        !           253:     for (qb = x -> qb_forw; qb != x; qb = qb -> qb_forw)
        !           254:        printf ("%*.*s", qb -> qb_len, qb -> qb_len, qb -> qb_data);
        !           255:     printf ("\"");
        !           256: }
        !           257: 
        !           258: 
        !           259: static add_string ()
        !           260: {
        !           261:     (void) add_syntax ("OctetString", string_encode, string_decode, qb_free,
        !           262:                string_parse, string_print);
        !           263:     (void) add_syntax ("DisplayString", string_encode, string_decode, qb_free,
        !           264:                string_parse, string_display);
        !           265: }
        !           266: 
        !           267: /*    OBJECT IDENTIFIER */
        !           268: 
        !           269: static int  object_encode (x, pe)
        !           270: OID    x;
        !           271: PE     *pe;
        !           272: {
        !           273:     if ((*pe = oid2prim (x)) == NULLPE)
        !           274:        return NOTOK;
        !           275: 
        !           276:     return OK;
        !           277: }
        !           278: 
        !           279: 
        !           280: static int  object_decode (x, pe)
        !           281: OID    *x;
        !           282: PE     pe;
        !           283: {
        !           284:     OID    oid = prim2oid (pe);
        !           285: 
        !           286:     if (oid == NULLOID || (*x = oid_cpy (oid)) == NULLOID)
        !           287:        return NOTOK;
        !           288: 
        !           289:     return OK;
        !           290: }
        !           291: 
        !           292: 
        !           293: static int  object_parse (x, s)
        !           294: OID   *x;
        !           295: char   *s;
        !           296: {
        !           297:     OID            oid = text2oid (s);
        !           298: 
        !           299:     if (oid == NULL)
        !           300:        return NOTOK;
        !           301:     *x = oid;
        !           302: 
        !           303:     return OK;    
        !           304: }
        !           305: 
        !           306: 
        !           307: /* ARGSUSED */
        !           308: 
        !           309: static int  object_print (x, os)
        !           310: OID    x;
        !           311: OS     os;
        !           312: {
        !           313:     char  *cp,
        !           314:           ode[BUFSIZ];
        !           315: 
        !           316:     (void) strcpy (ode, oid2ode (x));
        !           317:     printf ("%s", ode);
        !           318:     if (strcmp (ode, cp = sprintoid (x)))
        !           319:        printf (" (%s)", cp);
        !           320: }
        !           321: 
        !           322: 
        !           323: static add_object ()
        !           324: {
        !           325:     (void) add_syntax ("ObjectID", object_encode, object_decode, oid_free,
        !           326:                object_parse, object_print);
        !           327: }
        !           328: 
        !           329: /*    NULL */
        !           330: 
        !           331: /* ARGSUSED */
        !           332: 
        !           333: static int  null_encode (x, pe)
        !           334: char   *x;
        !           335: PE     *pe;
        !           336: {
        !           337:     if ((*pe = pe_alloc (PE_CLASS_UNIV, PE_FORM_PRIM, PE_PRIM_NULL)) == NULLPE)
        !           338:        return NOTOK;
        !           339: 
        !           340:     return OK;
        !           341: }
        !           342: 
        !           343: 
        !           344: /* ARGSUSED */
        !           345: 
        !           346: static int  null_decode (x, pe)
        !           347: char  **x;
        !           348: PE     pe;
        !           349: {
        !           350:     if ((*x = (char *) calloc (1, sizeof **x)) == NULL)
        !           351:        return NOTOK;
        !           352: 
        !           353:     return OK;
        !           354: }
        !           355: 
        !           356: 
        !           357: static int  null_free (x)
        !           358: char *x;
        !           359: {
        !           360:     free ((char *) x);
        !           361: }
        !           362: 
        !           363: 
        !           364: static int  null_parse (x, s)
        !           365: char  **x;
        !           366: char   *s;
        !           367: {
        !           368:     if (lexequ (s, "NULL"))
        !           369:        return NOTOK;
        !           370: 
        !           371:     if ((*x = (char *) calloc (1, sizeof **x)) == NULL)
        !           372:        return NOTOK;
        !           373: 
        !           374:     return OK;    
        !           375: }
        !           376: 
        !           377: 
        !           378: /* ARGSUSED */
        !           379: 
        !           380: static int  null_print (x, os)
        !           381: char   *x;
        !           382: OS     os;
        !           383: {
        !           384:     printf ("NULL");
        !           385: }
        !           386: 
        !           387: 
        !           388: static add_null ()
        !           389: {
        !           390:     (void) add_syntax ("NULL", null_encode, null_decode, null_free, null_parse,
        !           391:                null_print);
        !           392: }
        !           393: 
        !           394: /*    IpAddress */
        !           395: 
        !           396: static int  ipaddr_encode (x, pe)
        !           397: struct sockaddr_in *x;
        !           398: PE     *pe;
        !           399: {
        !           400:     if ((*pe = str2prim ((char *) &x -> sin_addr, 4, PE_CLASS_APPL, 0))
        !           401:            == NULLPE)
        !           402:        return NOTOK;
        !           403: 
        !           404:     return OK;
        !           405: }
        !           406: 
        !           407: 
        !           408: static int  ipaddr_decode (x, pe)
        !           409: struct sockaddr_in **x;
        !           410: PE     pe;
        !           411: {
        !           412:     struct type_SNMP_IpAddress *ip;
        !           413:     struct qbuf *qb;
        !           414:     struct sockaddr_in *isock;
        !           415: 
        !           416:     if (decode_SNMP_IpAddress (pe, 1, NULLIP, NULLVP, &ip) == NOTOK)
        !           417:        return NOTOK;
        !           418:     if (qb_pullup (ip) == NOTOK
        !           419:            || (isock = (struct sockaddr_in *) calloc (1, sizeof *isock))
        !           420:                    == NULL) {
        !           421:        free_SNMP_IpAddress (ip);
        !           422:        return NOTOK;
        !           423:     }
        !           424:     if ((qb = ip -> qb_forw) -> qb_len != 4) {
        !           425:        free_SNMP_IpAddress (ip);
        !           426:        return NOTOK;
        !           427:     }
        !           428:     isock -> sin_family = AF_INET;
        !           429:     bcopy (qb -> qb_data,
        !           430:           (char *) &isock -> sin_addr,
        !           431:           sizeof isock -> sin_addr);
        !           432: 
        !           433:     *x = isock;
        !           434: 
        !           435:     free_SNMP_IpAddress (ip);
        !           436:     return OK;
        !           437: }
        !           438: 
        !           439: 
        !           440: static int  ipaddr_free (x)
        !           441: struct sockaddr_in *x;
        !           442: {
        !           443:     free ((char *) x);
        !           444: }
        !           445: 
        !           446: 
        !           447: static int  ipaddr_parse (x, s)
        !           448: struct sockaddr_in **x;
        !           449: char   *s;
        !           450: {
        !           451:     register struct hostent *hp = gethostbystring (s);
        !           452:     register struct sockaddr_in *isock;
        !           453: 
        !           454:     if (hp == NULL)
        !           455:        return NOTOK;
        !           456: 
        !           457:     if ((isock = (struct sockaddr_in *) calloc (1, sizeof *isock)) == NULL)
        !           458:        return NOTOK;
        !           459:     isock -> sin_family = AF_INET;
        !           460:     inaddr_copy (hp, isock);
        !           461:     *x = isock;
        !           462: 
        !           463:     return OK;    
        !           464: }
        !           465: 
        !           466: 
        !           467: /* ARGSUSED */
        !           468: 
        !           469: static int  ipaddr_print (x, os)
        !           470: struct sockaddr_in *x;
        !           471: OS     os;
        !           472: {
        !           473:     printf ("%s", inet_ntoa (x -> sin_addr));
        !           474: }
        !           475: 
        !           476: 
        !           477: static add_ipaddr ()
        !           478: {
        !           479:     (void) add_syntax ("IpAddress", ipaddr_encode, ipaddr_decode, ipaddr_free,
        !           480:                ipaddr_parse, ipaddr_print);
        !           481: }
        !           482: 
        !           483: /*    NetworkAddress */
        !           484: 
        !           485: /* good enough for now (and probably forever)... */
        !           486: 
        !           487: static add_netaddr ()
        !           488: {
        !           489:     (void) add_syntax ("NetworkAddress", ipaddr_encode, ipaddr_decode,
        !           490:                       ipaddr_free, ipaddr_parse, ipaddr_print);
        !           491: }
        !           492: 
        !           493: /*    Counter */
        !           494: 
        !           495: static int  counter_encode (x, pe)
        !           496: integer        *x;
        !           497: PE     *pe;
        !           498: {
        !           499:     if ((*pe = num2prim (*x, PE_CLASS_APPL, 1)) == NULLPE)
        !           500:        return NOTOK;
        !           501: 
        !           502:     return OK;
        !           503: }
        !           504: 
        !           505: 
        !           506: static int  counter_parse (x, s)
        !           507: integer **x;
        !           508: char   *s;
        !           509: {
        !           510:     long    l;
        !           511:     char   *cp;
        !           512: 
        !           513: #ifdef HAVE_STRTOL
        !           514:     if ((l = strtol (s, &cp, 0)) == 0L && cp == s)
        !           515:        return NOTOK;
        !           516: #else
        !           517:     if (sscanf (s, "%ld", &l) != 1)
        !           518:        return NOTOK;
        !           519: #endif
        !           520:     if (l < 0 || l > 4294967295L)
        !           521:        return NOTOK;
        !           522:     if ((*x = (integer *) malloc (sizeof **x)) == NULL)
        !           523:        return NOTOK;
        !           524:     **x = (integer) l;
        !           525: 
        !           526:     return OK;    
        !           527: }
        !           528: 
        !           529: 
        !           530: static add_counter ()
        !           531: {
        !           532:     (void) add_syntax ("Counter", counter_encode, integer_decode, integer_free,
        !           533:                counter_parse, integer_print);
        !           534: }
        !           535: 
        !           536: /*    Gauge */
        !           537: 
        !           538: static int  gauge_encode (x, pe)
        !           539: integer        *x;
        !           540: PE     *pe;
        !           541: {
        !           542:     if ((*pe = num2prim (*x, PE_CLASS_APPL, 2)) == NULLPE)
        !           543:        return NOTOK;
        !           544: 
        !           545:     return OK;
        !           546: }
        !           547: 
        !           548: 
        !           549: static add_gauge ()
        !           550: {
        !           551:     (void) add_syntax ("Gauge", gauge_encode, integer_decode, integer_free,
        !           552:                counter_parse, integer_print);
        !           553: }
        !           554: 
        !           555: /*    TimeTicks */
        !           556: 
        !           557: static int  timeticks_encode (x, pe)
        !           558: integer        *x;
        !           559: PE     *pe;
        !           560: {
        !           561:     if ((*pe = num2prim (*x, PE_CLASS_APPL, 3)) == NULLPE)
        !           562:        return NOTOK;
        !           563: 
        !           564:     return OK;
        !           565: }
        !           566: 
        !           567: 
        !           568: /* ARGSUSED */
        !           569: 
        !           570: static int  timeticks_print (x, os)
        !           571: integer *x;
        !           572: OS     os;
        !           573: {
        !           574:     int            d,
        !           575:            h,
        !           576:            m,
        !           577:            s,
        !           578:            ds;
        !           579: 
        !           580:     ds = *x;
        !           581:     s = ds / 100, ds = ds % 100;
        !           582:     m = s / 60, s = s % 60;
        !           583:     h = m / 60, m = m % 60;
        !           584:     d = h / 24, h = h % 24;
        !           585: 
        !           586:     if (d > 0)
        !           587:        printf ("%d days, ", d);
        !           588:     if (d > 0 || h > 0)
        !           589:        printf ("%d hours, ", h);
        !           590:     if (d > 0 || h > 0 || m > 0)
        !           591:        printf ("%d minutes, ", m);
        !           592:     printf ("%d", s);
        !           593:     if (ds > 0)
        !           594:        printf (".%02d", ds);
        !           595:     printf (" seconds (%d timeticks)", *x);
        !           596: }
        !           597: 
        !           598: 
        !           599: static add_timeticks ()
        !           600: {
        !           601:     (void) add_syntax ("TimeTicks", timeticks_encode, integer_decode,
        !           602:                       integer_free, integer_parse, timeticks_print);
        !           603: }
        !           604: 
        !           605: /*    CnlpAddress */
        !           606: 
        !           607: static int  clnpaddr_encode (x, pe)
        !           608: struct sockaddr_iso *x;
        !           609: PE     *pe;
        !           610: {
        !           611:     char    buffer[sizeof x -> siso_data + 1];
        !           612: 
        !           613:     buffer[0] = x -> siso_nlen & 0xff;
        !           614:     bcopy (x -> siso_data, buffer + 1, (int) x -> siso_nlen);
        !           615: 
        !           616:     if ((*pe = str2prim (buffer, (int) (x -> siso_nlen + 1), PE_CLASS_APPL,
        !           617:                         5)) == NULLPE)
        !           618:        return NOTOK;
        !           619: 
        !           620:     return OK;
        !           621: }
        !           622: 
        !           623: 
        !           624: static int  clnpaddr_decode (x, pe)
        !           625: struct sockaddr_iso **x;
        !           626: PE     pe;
        !           627: {
        !           628:     int            len;
        !           629:     struct type_SNMP_ClnpAddress *clnp;
        !           630:     struct qbuf *qb;
        !           631:     struct sockaddr_iso *isock;
        !           632: 
        !           633:     if (decode_SNMP_ClnpAddress (pe, 1, NULLIP, NULLVP, &clnp) == NOTOK)
        !           634:        return NOTOK;
        !           635:     if (qb_pullup (clnp) == NOTOK
        !           636:            || (isock = (struct sockaddr_iso *) calloc (1, sizeof *isock))
        !           637:                    == NULL) {
        !           638:        free_SNMP_ClnpAddress (clnp);
        !           639:        return NOTOK;
        !           640:     }
        !           641:     qb = clnp -> qb_forw;
        !           642:     isock -> siso_family = AF_ISO;
        !           643:     if ((len = qb -> qb_data[0] & 0xff) >= qb -> qb_len)
        !           644:        len = qb -> qb_len - 1;
        !           645:     bcopy (qb -> qb_data + 1, isock -> siso_data,
        !           646:           (int) (isock -> siso_nlen = len));
        !           647: 
        !           648:     *x = isock;
        !           649: 
        !           650:     free_SNMP_ClnpAddress (clnp);
        !           651:     return OK;
        !           652: }
        !           653: 
        !           654: 
        !           655: static int  clnpaddr_free (x)
        !           656: struct sockaddr_iso *x;
        !           657: {
        !           658:     free ((char *) x);
        !           659: }
        !           660: 
        !           661: 
        !           662: static int  clnpaddr_parse (x, s)
        !           663: struct sockaddr_iso **x;
        !           664: char   *s;
        !           665: {
        !           666:     register struct sockaddr_iso *isock;
        !           667: 
        !           668:     if ((isock = (struct sockaddr_iso *) calloc (1, sizeof *isock)) == NULL)
        !           669:        return NOTOK;
        !           670:     isock -> siso_family = AF_ISO;
        !           671:     isock -> siso_nlen = implode ((u_char *) isock -> siso_data, s,
        !           672:                                  strlen (s));
        !           673:     *x = isock;
        !           674: 
        !           675:     return OK;    
        !           676: }
        !           677: 
        !           678: 
        !           679: /* ARGSUSED */
        !           680: 
        !           681: static int  clnpaddr_print (x, os)
        !           682: struct sockaddr_iso *x;
        !           683: OS     os;
        !           684: {
        !           685:     char    buffer[sizeof x -> siso_data * 2 + 1];
        !           686: 
        !           687:     buffer[explode (buffer, (u_char *) x -> siso_data, (int) x -> siso_nlen)] =
        !           688:        NULL;
        !           689:     printf ("NS+%s", buffer);
        !           690: }
        !           691: 
        !           692: 
        !           693: static add_clnpaddr ()
        !           694: {
        !           695:     (void) add_syntax ("ClnpAddress", clnpaddr_encode, clnpaddr_decode,
        !           696:                       clnpaddr_free, clnpaddr_parse, clnpaddr_print);
        !           697: }
        !           698: 
        !           699: /*  */
        !           700: 
        !           701: int    readsyntax ()
        !           702: {
        !           703:     add_integer ();
        !           704:     add_string ();
        !           705:     add_object ();
        !           706:     add_null ();
        !           707:     add_ipaddr ();
        !           708:     add_netaddr ();
        !           709:     add_counter ();
        !           710:     add_gauge ();
        !           711:     add_timeticks ();
        !           712: 
        !           713:     add_clnpaddr ();
        !           714: }
        !           715: 
        !           716: /*  */
        !           717: 
        !           718: int    add_syntax (name, f_encode, f_decode, f_free, f_parse, f_print)
        !           719: char   *name;
        !           720: IFP    f_encode,
        !           721:        f_decode,
        !           722:        f_free,
        !           723:        f_parse,
        !           724:        f_print;
        !           725: {
        !           726:     int            i;
        !           727:     register OS            os = synlast++;
        !           728: 
        !           729:     if ((i = synlast - syntaxes) >= MAXSYN)
        !           730:        return NOTOK;
        !           731:     os -> os_name = name;
        !           732:     os -> os_encode = f_encode;
        !           733:     os -> os_decode = f_decode;
        !           734:     os -> os_free = f_free;
        !           735:     os -> os_parse = f_parse;
        !           736:     os -> os_print = f_print;
        !           737: 
        !           738:     return i;
        !           739: }
        !           740: 
        !           741: /*  */
        !           742: 
        !           743: OS     text2syn (name)
        !           744: char   *name;
        !           745: {
        !           746:     register OS            os;
        !           747: 
        !           748:     for (os = syntaxes; os < synlast; os++)
        !           749:        if (lexequ (os -> os_name, name) == 0)
        !           750:            return os;
        !           751: 
        !           752:     return NULLOS;
        !           753: }

unix.superglobalmegacorp.com

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