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

1.1     ! root        1: /*
        !             2:  * master devices file:
        !             3:  *     name    tag     [stuff]
        !             4:  */
        !             5: 
        !             6: #include <fio.h>
        !             7: #include <libc.h>
        !             8: #include <ctype.h>
        !             9: #include "mkconf.h"
        !            10: 
        !            11: #define        BIGARGS 30
        !            12: 
        !            13: readdevs(f)
        !            14: char *f;
        !            15: {
        !            16:        int fd;
        !            17:        register char *p;
        !            18:        char *args[BIGARGS];
        !            19:        register int n;
        !            20:        register Mdev *mp;
        !            21:        register int i;
        !            22: 
        !            23:        if ((fd = open(f, 0)) < 0) {
        !            24:                perror(f);
        !            25:                exit(1);
        !            26:        }
        !            27:        while ((p = Frdline(fd)) != NULL) {
        !            28:                while (isspace(*p))
        !            29:                        p++;
        !            30:                if (*p == '#' || *p == 0)
        !            31:                        continue;
        !            32:                if ((n = crack(p, args, BIGARGS)) < 2) {
        !            33:                        fprint(STDERR, "%s: bad line ignored: %s\n", f, p);
        !            34:                        errs++;
        !            35:                        continue;
        !            36:                }
        !            37:                if ((mp = (Mdev *)ealloc(sizeof(Mdev))) == NULL) {
        !            38:                        fprint(STDERR, "out of memory\n");
        !            39:                        exit(1);
        !            40:                }
        !            41:                mp->name = estrdup(args[0]);
        !            42:                mp->tag = estrdup(args[1]);
        !            43:                mp->atype = ANONE;
        !            44:                mp->adptype = ANONE;
        !            45:                mp->nvec = 1;
        !            46:                mp->rept = 1;
        !            47:                mp->flags = 0;
        !            48:                for (i = 0; i < NSTR; i++) {
        !            49:                        mp->strs[i] = 0;
        !            50:                        mp->fstrs[i] = 0;
        !            51:                }
        !            52:                mdflags(mp, &args[2], n - 2);
        !            53:                if (badmdev(mp)) {
        !            54:                        free((char *)mp);
        !            55:                        errs++;
        !            56:                        continue;
        !            57:                }
        !            58:                mp->next = mlist;
        !            59:                mlist = mp;
        !            60:        }
        !            61:        close(fd);
        !            62: }
        !            63: 
        !            64: badmdev(mp)
        !            65: register Mdev *mp;
        !            66: {
        !            67:        /* various consistency checks here */
        !            68:        return (0);
        !            69: }
        !            70: 
        !            71: mdflags(mp, a, n)
        !            72: register Mdev *mp;
        !            73: register char **a;
        !            74: register int n;
        !            75: {
        !            76:        register int i;
        !            77: 
        !            78:        for (; --n >= 0; a++) {
        !            79:                /*
        !            80:                 * address types: mine or the bus i control
        !            81:                 */
        !            82:                if (strcmp(*a, "sbi") == 0)
        !            83:                        mp->atype = ASBI;
        !            84:                else if (strcmp(*a, "sbia") == 0)
        !            85:                        mp->adptype = ASBI;
        !            86:                else if (strcmp(*a, "vaxbi") == 0)
        !            87:                        mp->atype = AVBI;
        !            88:                else if (strcmp(*a, "vaxbia") == 0)
        !            89:                        mp->adptype = AVBI;
        !            90:                else if (strcmp(*a, "mb") == 0)
        !            91:                        mp->atype = AMBA;
        !            92:                else if (strcmp(*a, "mba") == 0)
        !            93:                        mp->adptype = AMBA;
        !            94:                else if (strcmp(*a, "ub") == 0)
        !            95:                        mp->atype = AUBA;
        !            96:                else if (strcmp(*a, "uba") == 0)
        !            97:                        mp->adptype = AUBA;
        !            98:                else if (strcmp(*a, "sub") == 0)
        !            99:                        mp->atype = ASUB;
        !           100:                else if (strcmp(*a, "count") == 0)
        !           101:                        mp->atype = ACNT;
        !           102:                else if (strcmp(*a, "param") == 0)
        !           103:                        mp->atype = APARAM;
        !           104:                else if (strcmp(*a, "mscp") == 0)
        !           105:                        mp->atype = AMSCP;
        !           106:                else if (strcmp(*a, "mscpa") == 0)
        !           107:                        mp->adptype = AMSCP;
        !           108:                else if (strcmp(*a, "nobus") == 0)
        !           109:                        mp->atype = ANOBUS;
        !           110:                /*
        !           111:                 * hacks
        !           112:                 */
        !           113:                else if (strcmp(*a, "vec") == 0) {
        !           114:                        if (--n < 0) {
        !           115:                                fprint(STDERR, "%s: vec what?\n", mp->name);
        !           116:                                errs++;
        !           117:                                continue;
        !           118:                        }
        !           119:                        mp->nvec = atoi(*++a);
        !           120:                } else if (strcmp(*a, "rep") == 0) {
        !           121:                        if (--n < 0) {
        !           122:                                fprint(STDERR, "%s: rep what?\n", mp->name);
        !           123:                                errs++;
        !           124:                                continue;
        !           125:                        }
        !           126:                        mp->rept = atoi(*++a);
        !           127:                } else if (strcmp(*a, "dupok") == 0)
        !           128:                        mp->flags |= FDUPOK;
        !           129:                else if (strcmp(*a, "rawvec") == 0)
        !           130:                        mp->flags |= FRAWVEC;
        !           131:                /*
        !           132:                 * structures, includes
        !           133:                 */
        !           134:                else if (strcmp(*a, "data") == 0) {
        !           135:                        i = mddata(mp, a, n);
        !           136:                        a += i;
        !           137:                        n -= i;
        !           138:                } else if (strcmp(*a, "inc") == 0) {
        !           139:                        i = mdincl(mp, a, n);
        !           140:                        a += i;
        !           141:                        n -= i;
        !           142:                } else {
        !           143:                        fprint(STDERR, "%s: unknown arg %s\n", mp->name, *a);
        !           144:                        errs++;
        !           145:                }
        !           146:        }
        !           147: }
        !           148: 
        !           149: int
        !           150: mddata(mp, a, n)
        !           151: register Mdev *mp;
        !           152: register char **a;
        !           153: int n;
        !           154: {
        !           155:        register int i;
        !           156:        char buf[80];
        !           157:        register char *p, *q;
        !           158:        register int xn;
        !           159:        int c;
        !           160: 
        !           161:        i = 0;
        !           162:        xn = n - 1;
        !           163:        ++a;            /* skip "data" */
        !           164:        while (xn >= 0) {
        !           165:                q = buf;
        !           166:                do {
        !           167:                        p = *a++;
        !           168:                        while ((*q++ = *p++) != 0)
        !           169:                                ;
        !           170:                        q[-1] = ' ';
        !           171:                } while (--xn >= 0 && q[-2] != ';' && q[-2] != ',');
        !           172:                *--q = 0;       /* smash last blank */
        !           173:                c = q[-1];
        !           174:                if (c == ';' || c == ',')
        !           175:                        *--q = 0;
        !           176:                if (i < NSTR-1)
        !           177:                        mp->strs[i++] = estrdup(buf);
        !           178:                else {
        !           179:                        fprint(STDERR, "%s: too much data\n", mp->name);
        !           180:                        errs++;
        !           181:                }
        !           182:                if (c == ';')
        !           183:                        break;
        !           184:        }
        !           185:        return (n - xn - 1);
        !           186: }
        !           187: 
        !           188: Include *inclist;
        !           189: 
        !           190: int
        !           191: mdincl(mp, a, n)
        !           192: Mdev *mp;
        !           193: register char **a;
        !           194: int n;
        !           195: {
        !           196:        register int xn;
        !           197:        register Include *ip, *jp;
        !           198:        register char *p;
        !           199:        Include *bjp;
        !           200:        char *s;
        !           201:        int last;
        !           202: 
        !           203:        xn = n;
        !           204:        a++;            /* skip "inc" */
        !           205:        last = 0;
        !           206:        while (last == 0 && --xn >= 0) {
        !           207:                s = *a++;
        !           208:                for (p = s; *p; p++)
        !           209:                        ;
        !           210:                if (*--p == ';') {
        !           211:                        *p = 0;
        !           212:                        last = 1;
        !           213:                }
        !           214:                bjp = NULL;
        !           215:                for (jp = inclist; jp; bjp = jp, jp = jp->next)
        !           216:                        if (strcmp(jp->incl, s) == 0)
        !           217:                                break;
        !           218:                ip = (Include *)ealloc(sizeof(Include));
        !           219:                ip->inuse = 0;
        !           220:                ip->dev = mp;
        !           221:                if (jp)
        !           222:                        ip->incl = jp->incl;
        !           223:                else
        !           224:                        ip->incl = estrdup(s);
        !           225:                if (bjp) {
        !           226:                        ip->next = bjp->next;
        !           227:                        bjp->next = ip;
        !           228:                }
        !           229:                else {
        !           230:                        ip->next = inclist;
        !           231:                        inclist = ip;
        !           232:                }
        !           233:        }
        !           234:        return (n - xn);
        !           235: }
        !           236: 
        !           237: incfix(dp)
        !           238: Dev *dp;
        !           239: {
        !           240:        register Mdev *mp;
        !           241:        register Include *ip;
        !           242: 
        !           243:        mp = dp->mdev;
        !           244:        for (ip = inclist; ip; ip = ip->next)
        !           245:                if (ip->dev == mp)
        !           246:                        ip->inuse = 1;
        !           247: }

unix.superglobalmegacorp.com

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