PWB1/sys/source/s4/nlist.c
long itol();
struct
{
int high;
int low;
};
struct nlist
{
int name[4]; /* really char[8] */
int type;
int value;
};
nlist(name, list)
char *name;
struct nlist *list;
{
register struct nlist *p, *q;
int f, n, m;
long lng;
int buf[010];
struct nlist space[100];
for(p = list; p->name[0]; p++) {
p->type = 0;
p->value = 0;
}
f = open(name, 0);
if(f < 0)
return(-1);
read(f, buf, sizeof buf);
n = buf[0];
if(n != 0407 && n != 0410 && n != 0411) {
close(f);
return(-1);
}
lng = itol(0, buf[1]);
lng =+ itol(0, buf[2]);
if(buf[7] != 1)
lng = lng << 1;
lng =+ 020;
lseek(f, lng, 0);
n = buf[4];
loop:
if(n == 0) {
close(f);
return(0);
}
m = 1200;
if(n < 1200)
m = n;
read(f, space, m);
n =- m;
for(q = space; (m =- 12) >= 0; q++) {
for(p = list; p->name[0]; p++) {
if(p->name[0] != q->name[0])
continue;
if(p->name[1] != q->name[1])
continue;
if(p->name[2] != q->name[2])
continue;
if(p->name[3] != q->name[3])
continue;
p->value = q->value;
p->type = q->type;
break;
}
}
goto loop;
}