V10/lsys/mkconf/writconf.c
/*
* write config tables and addresses
*/
#include <libc.h>
#include "mkconf.h"
writconf(f)
char *f;
{
int fd;
register Dev *dp;
register int i;
register int max;
register Include *ip;
Dev *putaddr();
if ((fd = creat(f, 0666)) < 0) {
perror(f);
exit(1);
}
fprint(fd, "/*\n * config data\n */\n\n");
fprint(fd, "#include \"sys/param.h\"\n");
fprint(fd, "#include \"sys/conf.h\"\n");
for (ip = inclist; ip; ip = ip->next)
if (ip->inuse) {
fprint(fd, "#include \"%s\"\n", ip->incl);
while (ip->next && ip->next->incl == ip->incl)
ip = ip->next;
}
/*
* device switches
*/
max = 0;
for (i = 0; i <= nblk; i++)
if (bdevsw[i].used) {
fprint(fd, "extern struct bdevsw %sbdev;\n", bdevsw[i].dev->tag);
max = i;
}
fprint(fd, "int nblkdev = %d;\n", max + 1);
nblk = max;
max = 0;
for (i = 0; i <= nchr; i++)
if (cdevsw[i].used) {
fprint(fd, "extern struct cdevsw %scdev;\n", cdevsw[i].dev->tag);
max = i;
}
fprint(fd, "int nchrdev = %d;\n", max + 1);
nchr = max;
max = 0;
for (i = 0; i <= nfs; i++)
if (fstypsw[i].used) {
fprint(fd, "extern struct fstypsw %sfs;\n", fstypsw[i].dev->tag);
max = i;
}
fprint(fd, "int nfstyp = %d;\n", max + 1);
nfs = max;
max = 0;
for (i = 0; i <= nld; i++)
if (ldispsw[i].used) {
fprint(fd, "extern struct streamtab %sstream;\n", ldispsw[i].dev->tag);
max = i;
}
fprint(fd, "int nstreamtab = %d;\n", max + 1);
nld = max;
fprint(fd, "\nstruct bdevsw *bdevsw[] = {\n");
for (i = 0; i <= nblk; i++)
if (bdevsw[i].used)
fprint(fd, "\t&%sbdev,\t/* %d */\n", bdevsw[i].dev->tag, i);
else
fprint(fd, "\tNULL,\n");
fprint(fd, "};\nstruct cdevsw *cdevsw[] = {\n");
for (i = 0; i <= nchr; i++)
if (cdevsw[i].used)
fprint(fd, "\t&%scdev,\t/* %d */\n", cdevsw[i].dev->tag, i);
else
fprint(fd, "\tNULL,\n");
fprint(fd, "};\nstruct fstypsw *fstypsw[] = {\n");
for (i = 0; i <= nfs; i++)
if (fstypsw[i].used)
fprint(fd, "\t&%sfs,\t/* %d */\n", fstypsw[i].dev->tag, i);
else
fprint(fd, "\tNULL,\n");
fprint(fd, "};\nstruct streamtab *streamtab[] = {\n");
for (i = 0; i <= nld; i++)
if (ldispsw[i].used)
fprint(fd, "\t&%sstream,\t/* %d */\n", ldispsw[i].dev->tag, i);
else
fprint(fd, "\tNULL,\n");
fprint(fd, "};\n");
/*
* put out addresses and data structures
*/
for (dp = dlist; dp; dp = advtype(dp))
(*acode[dp->mdev->atype].putaddr)(fd, dp);
/*
* other stuff
*/
fprint(fd, "int rootfstyp = %d;\n", rootfs);
fprint(fd, "dev_t rootdev = makedev(%d, %d);\n", rootmaj, rootmin);
fprint(fd, "dev_t swapdev = makedev(%d, %d);\n", swapmaj, swapmin);
fprint(fd, "struct swdevt swdevt[] = {\n");
for (i = 0; i < nswapdev; i++)
fprint(fd, "\t{makedev(%d, %d), %ldL},\n",
swaptab[i].major, swaptab[i].minor, swaptab[i].size);
fprint(fd, "};\nint nswdevt = %d;\n", nswapdev);
if (dumprout == NULL)
dumprout = "nulldev";
fprint(fd, "extern int %s();\nint (*dumprout)() = %s;\n", dumprout, dumprout);
fprint(fd, "int dumpunit = %d;\nlong dumplow = %ld;\nlong dumpsize = %ld;\n",
dumpunit, dumplow, dumpsize);
close(fd);
}