Annotation of researchv10no/sys/mkconf/subr.c, revision 1.1

1.1     ! root        1: /*
        !             2:  * miscellaneous common routines for config
        !             3:  */
        !             4: 
        !             5: #include <libc.h>
        !             6: #include <ctype.h>
        !             7: #include "mkconf.h"
        !             8: 
        !             9: /*
        !            10:  * little routines for input
        !            11:  */
        !            12: 
        !            13: int
        !            14: crack(p, a, n)
        !            15: char *p;
        !            16: char **a;
        !            17: int n;
        !            18: {
        !            19:        register char *rp;
        !            20: 
        !            21:        if ((rp = strchr(p, '#')) != NULL)
        !            22:                *rp = 0;
        !            23:        return (getmfields(p, a, n));
        !            24: }
        !            25: 
        !            26: /*
        !            27:  * common parsing hack for device addresses
        !            28:  */
        !            29: 
        !            30: char *
        !            31: keyread(lp, ap, n, kp)
        !            32: register long *lp;
        !            33: register char **ap;
        !            34: int n;
        !            35: register char **kp;
        !            36: {
        !            37:        register int i;
        !            38: 
        !            39:        for (; n > 1; n-=2, ap+=2) {
        !            40:                for (i = 0; kp[i]; i++)
        !            41:                        if (strcmp(ap[0], kp[i]) == 0) {
        !            42:                                lp[i] = nconv(ap[1]);
        !            43:                                break;
        !            44:                        }
        !            45:                if (kp[i] == 0)
        !            46:                        return (*ap);   /* unknown keyword */
        !            47:        }
        !            48:        return (NULL);
        !            49: }
        !            50: 
        !            51: /*
        !            52:  * 0nnn -> octal
        !            53:  * 0xnnn -> hex
        !            54:  * nnn -> decimal
        !            55:  */
        !            56: long
        !            57: nconv(a)
        !            58: register char *a;
        !            59: {
        !            60:        register long n;
        !            61:        register int base, d;
        !            62:        register int sign;
        !            63: 
        !            64:        base = 10;
        !            65:        sign = 1;
        !            66:        n = 0;
        !            67:        if (*a == '-') {
        !            68:                sign = -1;
        !            69:                a++;
        !            70:        }
        !            71:        if (*a == '0') {
        !            72:                base = 8;
        !            73:                a++;
        !            74:                if (*a == 'x' || *a == 'X') {
        !            75:                        base = 16;
        !            76:                        a++;
        !            77:                }
        !            78:        }
        !            79:        for (; isxdigit(*a); a++) {
        !            80:                d = *a - '0';
        !            81:                if (*a >= 'a')
        !            82:                        d -= 'a' - '0' - 10;
        !            83:                else if (*a >= 'A')
        !            84:                        d -= 'A' - '0' - 10;
        !            85:                if (d >= base)
        !            86:                        break;
        !            87:                n = n * base + d;
        !            88:        }
        !            89:        return (n * sign);
        !            90: }
        !            91: 
        !            92: Mdev *
        !            93: mdlook(name)
        !            94: char *name;
        !            95: {
        !            96:        register Mdev *mp;
        !            97: 
        !            98:        for (mp = mlist; mp; mp = mp->next)
        !            99:                if (strcmp(mp->name, name) == 0)
        !           100:                        return (mp);
        !           101:        return (NULL);
        !           102: }
        !           103: 
        !           104: /*
        !           105:  * skip to next type of device in dlist
        !           106:  */
        !           107: 
        !           108: Dev *
        !           109: advtype(dp)
        !           110: register Dev *dp;
        !           111: {
        !           112:        register Dev *ep;
        !           113: 
        !           114:        for (ep = dp; ep && ep->mdev == dp->mdev; ep = ep->next)
        !           115:                ;
        !           116:        return (ep);
        !           117: }
        !           118: 
        !           119: /*
        !           120:  * look up a driver in a table
        !           121:  */
        !           122: 
        !           123: int
        !           124: tablook(mp, tab, lim)
        !           125: register Mdev *mp;
        !           126: register Devtab *tab;
        !           127: register int lim;
        !           128: {
        !           129:        register int i;
        !           130: 
        !           131:        for (i = 0; i <= lim; i++, tab++)
        !           132:                if (tab->dev == mp)
        !           133:                        return (i);
        !           134:        return (-1);
        !           135: }
        !           136: 
        !           137: /*
        !           138:  * miscellany
        !           139:  */
        !           140: 
        !           141: char *
        !           142: ealloc(size)
        !           143: int size;
        !           144: {
        !           145:        char *p;
        !           146: 
        !           147:        if ((p = malloc(size)) != NULL)
        !           148:                return (p);
        !           149:        fprint(STDERR, "out of memory\n");
        !           150:        exit(1);
        !           151: }
        !           152: 
        !           153: char *
        !           154: estrdup(s)
        !           155: char *s;
        !           156: {
        !           157:        char *t;
        !           158: 
        !           159:        t = ealloc(strlen(s)+1);
        !           160:        strcpy(t, s);
        !           161:        return (t);
        !           162: }

unix.superglobalmegacorp.com

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