merge common code from dmf and dmz drivers
[unix-history] / usr / src / usr.sbin / config / main.c
... / ...
CommitLineData
1/*
2 * Copyright (c) 1980 Regents of the University of California.
3 * All rights reserved. The Berkeley software License Agreement
4 * specifies the terms and conditions for redistribution.
5 */
6
7#ifndef lint
8char copyright[] =
9"@(#) Copyright (c) 1980 Regents of the University of California.\n\
10 All rights reserved.\n";
11#endif not lint
12
13#ifndef lint
14static char sccsid[] = "@(#)main.c 5.4 (Berkeley) %G%";
15#endif not lint
16
17#include <stdio.h>
18#include <ctype.h>
19#include "y.tab.h"
20#include "config.h"
21
22/*
23 * Config builds a set of files for building a UNIX
24 * system given a description of the desired system.
25 */
26main(argc, argv)
27 int argc;
28 char **argv;
29{
30
31 if (argc > 1 && eq("-p", argv[1])) {
32 profiling++;
33 argc--, argv++;
34 }
35 if (argc != 2) {
36 fprintf(stderr, "usage: config [ -p ] sysname\n");
37 exit(1);
38 }
39 PREFIX = argv[1];
40 if (freopen(argv[1], "r", stdin) == NULL) {
41 perror(argv[1]);
42 exit(2);
43 }
44 dtab = NULL;
45 confp = &conf_list;
46 if (yyparse())
47 exit(3);
48 switch (machine) {
49
50 case MACHINE_VAX:
51 vax_ioconf(); /* Print ioconf.c */
52 ubglue(); /* Create ubglue.s */
53 break;
54
55 case MACHINE_TAHOE:
56 tahoe_ioconf();
57 vbglue();
58 break;
59
60 default:
61 printf("Specify machine type, e.g. ``machine vax''\n");
62 exit(1);
63 }
64 /*
65 * make symbolic links in compilation directory
66 * for "sys" (to make genassym.c work along with #include <sys/xxx>)
67 * and similarly for "machine".
68 */
69 {
70 char xxx[80];
71
72 (void) symlink("../h", path("sys"));
73 sprintf(xxx, "../%s", machinename);
74 (void) symlink(xxx, path("machine"));
75 }
76 makefile(); /* build Makefile */
77 headers(); /* make a lot of .h files */
78 swapconf(); /* swap config files */
79 printf("Don't forget to run \"make depend\"\n");
80}
81
82/*
83 * get_word
84 * returns EOF on end of file
85 * NULL on end of line
86 * pointer to the word otherwise
87 */
88char *
89get_word(fp)
90 register FILE *fp;
91{
92 static char line[80];
93 register int ch;
94 register char *cp;
95
96 while ((ch = getc(fp)) != EOF)
97 if (ch != ' ' && ch != '\t')
98 break;
99 if (ch == EOF)
100 return ((char *)EOF);
101 if (ch == '\n')
102 return (NULL);
103 cp = line;
104 *cp++ = ch;
105 while ((ch = getc(fp)) != EOF) {
106 if (isspace(ch))
107 break;
108 *cp++ = ch;
109 }
110 *cp = 0;
111 if (ch == EOF)
112 return ((char *)EOF);
113 (void) ungetc(ch, fp);
114 return (line);
115}
116
117/*
118 * prepend the path to a filename
119 */
120char *
121path(file)
122 char *file;
123{
124 register char *cp;
125
126 cp = malloc((unsigned)(strlen(PREFIX)+strlen(file)+5));
127 (void) strcpy(cp, "../");
128 (void) strcat(cp, PREFIX);
129 (void) strcat(cp, "/");
130 (void) strcat(cp, file);
131 return (cp);
132}