Annotation of researchv10dc/sys/mkconf/readlow.c, revision 1.1.1.1

1.1       root        1: /*
                      2:  * read template for trap and interrupt vectors
                      3:  *     offset  type    name
                      4:  */    
                      5: 
                      6: #include <fio.h>
                      7: #include <libc.h>
                      8: #include <ctype.h>
                      9: #include "mkconf.h"
                     10: 
                     11: readlow(f)
                     12: char *f;
                     13: {
                     14:        int fd;
                     15:        register char *p;
                     16:        char *args[4];
                     17:        int off;
                     18: 
                     19:        if ((fd = open(f, 0)) < 0) {
                     20:                perror(f);
                     21:                exit(1);
                     22:        }
                     23:        while ((p = Frdline(fd)) != NULL) {
                     24:                while (isspace(*p))
                     25:                        p++;
                     26:                if (*p == 0 || *p == '#')
                     27:                        continue;
                     28:                if (crack(p, args, 4) != 3) {
                     29:                        fprint(STDERR, "bad scb line: %s\n", p);
                     30:                        errs++;
                     31:                        continue;
                     32:                }
                     33:                off = nconv(args[0]);
                     34:                switch (args[1][0]) {
                     35:                case 't':
                     36:                        newvec(off, STRAP, args[2]);
                     37:                        break;
                     38: 
                     39:                case 'i':
                     40:                        newvec(off, SINTR, args[2]);
                     41:                        break;
                     42: 
                     43:                default:
                     44:                        fprint(STDERR, "scb offset %s: unknown flag %s\n",
                     45:                                args[0], args[1]);
                     46:                        errs++;
                     47:                        break;
                     48:                }
                     49:        }
                     50:        close(fd);
                     51: }
                     52: 
                     53: /*
                     54:  * new interrupt vector into scb list
                     55:  * the hard part is keeping the list ordered
                     56:  */
                     57: newvec(off, typ, name)
                     58: int off;
                     59: int typ;
                     60: char *name;
                     61: {
                     62:        register Scb *sp;
                     63:        register Scb *tp, *bp;
                     64: 
                     65:        sp = (Scb *)ealloc(sizeof(Scb));
                     66:        sp->name = estrdup(name);
                     67:        sp->type = typ;
                     68:        sp->offset = off;
                     69:        bp = NULL;
                     70:        for (tp = llist; tp; bp = tp, tp = tp->next) {
                     71:                if (tp->offset == sp->offset) {
                     72:                        fprint(STDERR, "duplicate scb vector 0x%x %s %s\n",
                     73:                                sp->offset, sp->name, tp->name);
                     74:                        errs++;
                     75:                        return;
                     76:                }
                     77:                if (tp->offset > sp->offset)
                     78:                        break;
                     79:        }
                     80:        if (bp == NULL) {
                     81:                sp->next = llist;
                     82:                llist = sp;
                     83:        }
                     84:        else {
                     85:                sp->next = bp->next;
                     86:                bp->next = sp;
                     87:        }
                     88: }

unix.superglobalmegacorp.com

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