PWB1/sys/source/s4/nlist.c

Compare this file to the similar file:
Show the results in this format:

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;
}