|
|
1.1 root 1: /*
2: * write config tables and addresses
3: */
4:
5: #include <libc.h>
6: #include "mkconf.h"
7:
8: writconf(f)
9: char *f;
10: {
11: int fd;
12: register Dev *dp;
13: register int i;
14: register int max;
15: register Include *ip;
16: Dev *putaddr();
17:
18: if ((fd = creat(f, 0666)) < 0) {
19: perror(f);
20: exit(1);
21: }
22: fprint(fd, "/*\n * config data\n */\n\n");
23: fprint(fd, "#include \"sys/param.h\"\n");
24: fprint(fd, "#include \"sys/conf.h\"\n");
25: for (ip = inclist; ip; ip = ip->next)
26: if (ip->inuse) {
27: fprint(fd, "#include \"%s\"\n", ip->incl);
28: while (ip->next && ip->next->incl == ip->incl)
29: ip = ip->next;
30: }
31: /*
32: * device switches
33: */
34: max = 0;
35: for (i = 0; i <= nblk; i++)
36: if (bdevsw[i].used) {
37: fprint(fd, "extern struct bdevsw %sbdev;\n", bdevsw[i].dev->tag);
38: max = i;
39: }
40: fprint(fd, "int nblkdev = %d;\n", max + 1);
41: nblk = max;
42: max = 0;
43: for (i = 0; i <= nchr; i++)
44: if (cdevsw[i].used) {
45: fprint(fd, "extern struct cdevsw %scdev;\n", cdevsw[i].dev->tag);
46: max = i;
47: }
48: fprint(fd, "int nchrdev = %d;\n", max + 1);
49: nchr = max;
50: max = 0;
51: for (i = 0; i <= nfs; i++)
52: if (fstypsw[i].used) {
53: fprint(fd, "extern struct fstypsw %sfs;\n", fstypsw[i].dev->tag);
54: max = i;
55: }
56: fprint(fd, "int nfstyp = %d;\n", max + 1);
57: nfs = max;
58: max = 0;
59: for (i = 0; i <= nld; i++)
60: if (ldispsw[i].used) {
61: fprint(fd, "extern struct streamtab %sstream;\n", ldispsw[i].dev->tag);
62: max = i;
63: }
64: fprint(fd, "int nstreamtab = %d;\n", max + 1);
65: nld = max;
66: fprint(fd, "\nstruct bdevsw *bdevsw[] = {\n");
67: for (i = 0; i <= nblk; i++)
68: if (bdevsw[i].used)
69: fprint(fd, "\t&%sbdev,\t/* %d */\n", bdevsw[i].dev->tag, i);
70: else
71: fprint(fd, "\tNULL,\n");
72: fprint(fd, "};\nstruct cdevsw *cdevsw[] = {\n");
73: for (i = 0; i <= nchr; i++)
74: if (cdevsw[i].used)
75: fprint(fd, "\t&%scdev,\t/* %d */\n", cdevsw[i].dev->tag, i);
76: else
77: fprint(fd, "\tNULL,\n");
78: fprint(fd, "};\nstruct fstypsw *fstypsw[] = {\n");
79: for (i = 0; i <= nfs; i++)
80: if (fstypsw[i].used)
81: fprint(fd, "\t&%sfs,\t/* %d */\n", fstypsw[i].dev->tag, i);
82: else
83: fprint(fd, "\tNULL,\n");
84: fprint(fd, "};\nstruct streamtab *streamtab[] = {\n");
85: for (i = 0; i <= nld; i++)
86: if (ldispsw[i].used)
87: fprint(fd, "\t&%sstream,\t/* %d */\n", ldispsw[i].dev->tag, i);
88: else
89: fprint(fd, "\tNULL,\n");
90: fprint(fd, "};\n");
91: /*
92: * put out addresses and data structures
93: */
94: for (dp = dlist; dp; dp = advtype(dp))
95: (*acode[dp->mdev->atype].putaddr)(fd, dp);
96: /*
97: * other stuff
98: */
99: fprint(fd, "int rootfstyp = %d;\n", rootfs);
100: fprint(fd, "dev_t rootdev = makedev(%d, %d);\n", rootmaj, rootmin);
101: fprint(fd, "dev_t swapdev = makedev(%d, %d);\n", swapmaj, swapmin);
102: fprint(fd, "struct swdevt swdevt[] = {\n");
103: for (i = 0; i < nswapdev; i++)
104: fprint(fd, "\t{makedev(%d, %d), %ldL},\n",
105: swaptab[i].major, swaptab[i].minor, swaptab[i].size);
106: fprint(fd, "};\nint nswdevt = %d;\n", nswapdev);
107: if (dumprout == NULL)
108: dumprout = "nulldev";
109: fprint(fd, "extern int %s();\nint (*dumprout)() = %s;\n", dumprout, dumprout);
110: fprint(fd, "int dumpunit = %d;\nlong dumplow = %ld;\nlong dumpsize = %ld;\n",
111: dumpunit, dumplow, dumpsize);
112: close(fd);
113: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.