Annotation of lucent/sys/src/boot/pc/conf.c, revision 1.1

1.1     ! root        1: #include "u.h"
        !             2: #include "lib.h"
        !             3: #include "mem.h"
        !             4: #include "dat.h"
        !             5: #include "fns.h"
        !             6: #include "io.h"
        !             7: 
        !             8: #include "dosfs.h"
        !             9: 
        !            10: static char *confname[MAXCONF];
        !            11: static char *confval[MAXCONF];
        !            12: static int nconf;
        !            13: 
        !            14: extern char **ini;
        !            15: 
        !            16: char*
        !            17: getconf(char *name)
        !            18: {
        !            19:        int i;
        !            20: 
        !            21:        for(i = 0; i < nconf; i++)
        !            22:                if(strcmp(confname[i], name) == 0)
        !            23:                        return confval[i];
        !            24:        return 0;
        !            25: }
        !            26: 
        !            27: /*
        !            28:  *  read configuration file
        !            29:  */
        !            30: int
        !            31: plan9ini(Dos *dos)
        !            32: {
        !            33:        Dosfile rc;
        !            34:        int i, n;
        !            35:        char *cp, *line[MAXCONF];
        !            36: 
        !            37:        if(dosstat(dos, *ini, &rc) <= 0)
        !            38:                return -1;
        !            39: 
        !            40:        cp = BOOTARGS;
        !            41:        *cp = 0;
        !            42:        n = dosread(&rc, cp, BOOTARGSLEN-1);
        !            43:        if(n <= 0)
        !            44:                return -1;
        !            45:        cp[n] = 0;
        !            46: 
        !            47:        /*
        !            48:         * Make a working copy.
        !            49:         * We could change this to pass the parsed strings
        !            50:         * to the booted programme instead of the raw
        !            51:         * string, then it only gets done once.
        !            52:         */
        !            53:        memmove(cp+BOOTARGSLEN, cp, n+1);
        !            54:        n = getfields(cp+BOOTARGSLEN, line, MAXCONF, '\n');
        !            55:        for(i = 0; i < n; i++){
        !            56:                cp = strchr(line[i], '\r');
        !            57:                if(cp)
        !            58:                        *cp = 0;
        !            59:                cp = strchr(line[i], '=');
        !            60:                if(cp == 0)
        !            61:                        continue;
        !            62:                *cp++ = 0;
        !            63:                if(cp - line[i] >= NAMELEN+1)
        !            64:                        *(line[i]+NAMELEN-1) = 0;
        !            65:                confname[nconf] = line[i];
        !            66:                confval[nconf] = cp;
        !            67:                nconf++;
        !            68:        }
        !            69:        return 0;
        !            70: }
        !            71: 
        !            72: static int
        !            73: parseether(uchar *to, char *from)
        !            74: {
        !            75:        char nip[4];
        !            76:        char *p;
        !            77:        int i;
        !            78: 
        !            79:        p = from;
        !            80:        while(*p == ' ')
        !            81:                ++p;
        !            82:        for(i = 0; i < 6; i++){
        !            83:                if(*p == 0)
        !            84:                        return -1;
        !            85:                nip[0] = *p++;
        !            86:                if(*p == 0)
        !            87:                        return -1;
        !            88:                nip[1] = *p++;
        !            89:                nip[2] = 0;
        !            90:                to[i] = strtoul(nip, 0, 16);
        !            91:                if(*p == ':')
        !            92:                        p++;
        !            93:        }
        !            94:        return 0;
        !            95: }
        !            96: 
        !            97: int
        !            98: isaconfig(char *class, int ctlrno, ISAConf *isa)
        !            99: {
        !           100:        char cc[NAMELEN], *p, *q;
        !           101:        int n;
        !           102: 
        !           103:        sprint(cc, "%s%d", class, ctlrno);
        !           104:        for(n = 0; n < nconf; n++){
        !           105:                if(strncmp(confname[n], cc, NAMELEN))
        !           106:                        continue;
        !           107:                p = confval[n];
        !           108:                while(*p){
        !           109:                        while(*p == ' ' || *p == '\t')
        !           110:                                p++;
        !           111:                        if(*p == '\0')
        !           112:                                break;
        !           113:                        if(strncmp(p, "type=", 5) == 0){
        !           114:                                p += 5;
        !           115:                                for(q = isa->type; q < &isa->type[NAMELEN-1]; q++){
        !           116:                                        if(*p == '\0' || *p == ' ' || *p == '\t')
        !           117:                                                break;
        !           118:                                        *q = *p++;
        !           119:                                }
        !           120:                                *q = '\0';
        !           121:                        }
        !           122:                        else if(strncmp(p, "port=", 5) == 0)
        !           123:                                isa->port = strtoul(p+5, &p, 0);
        !           124:                        else if(strncmp(p, "irq=", 4) == 0)
        !           125:                                isa->irq = strtoul(p+4, &p, 0);
        !           126:                        else if(strncmp(p, "mem=", 4) == 0)
        !           127:                                isa->mem = strtoul(p+4, &p, 0);
        !           128:                        else if(strncmp(p, "size=", 5) == 0)
        !           129:                                isa->size = strtoul(p+5, &p, 0);
        !           130:                        else if(strncmp(p, "ea=", 3) == 0){
        !           131:                                if(parseether(isa->ea, p+3) == -1)
        !           132:                                        memset(isa->ea, 0, 6);
        !           133:                        }
        !           134:                        while(*p && *p != ' ' && *p != '\t')
        !           135:                                p++;
        !           136:                }
        !           137:                return 1;
        !           138:        }
        !           139:        return 0;
        !           140: }

unix.superglobalmegacorp.com

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