#ifndef lint
char copyright[] =
"@(#) Copyright (c) 1980 Regents of the University of California.\n\
All rights reserved.\n";
#endif
#ifndef lint
static char sccsid[] __attribute__((used)) = "@(#)main.c 5.9 (Berkeley) 6/18/88";
#endif
#include <stdio.h>
#include <ctype.h>
#include "parser.h"
#include "config.h"
int
main(int argc, char *argv[])
{
source_directory = "..";
object_directory = "..";
config_directory = (char *) 0;
while ((argc > 1) && (argv[1][0] == '-')) {
char *c;
argv++; argc--;
for (c = &argv[0][1]; *c ; c++) {
switch (*c) {
case 'b':
build_directory = argv[1];
goto check_arg;
case 'd':
source_directory = argv[1];
goto check_arg;
case 'o':
object_directory = argv[1];
goto check_arg;
case 'c':
config_directory = argv[1];
check_arg:
if (argv[1] == (char *) 0)
goto usage_error;
argv++; argc--;
break;
case 'p':
profiling++;
break;
default:
goto usage_error;
}
}
}
if (config_directory == (char *) 0) {
config_directory =
malloc((unsigned) strlen(source_directory) + 6);
(void) sprintf(config_directory, "%s/conf", source_directory);
}
if (argc != 2) {
usage_error: ;
fprintf(stderr, "usage: config [ -bcdo dir ] [ -p ] sysname\n");
exit(1);
}
if (!build_directory)
build_directory = argv[1];
if (freopen(argv[1], "r", stdin) == NULL) {
perror(argv[1]);
exit(2);
}
dtab = NULL;
confp = &conf_list;
opt = 0;
if (yyparse())
exit(3);
switch (machine) {
case MACHINE_VAX:
vax_ioconf();
ubglue();
break;
case MACHINE_SUN:
sun_ioconf();
break;
case MACHINE_SUN2:
case MACHINE_SUN3:
case MACHINE_SUN4:
sun_ioconf();
mbglue();
break;
case MACHINE_ROMP:
romp_ioconf();
break;
case MACHINE_MMAX:
mmax_ioconf();
break;
case MACHINE_SQT:
sqt_ioconf();
break;
case MACHINE_I386:
case MACHINE_IX:
i386_ioconf();
break;
case MACHINE_MIPSY:
case MACHINE_MIPS:
mips_ioconf();
break;
case MACHINE_I860:
break;
case MACHINE_M68K:
m68k_ioconf();
break;
case MACHINE_M88K:
m88k_ioconf();
break;
case MACHINE_M98K:
m98k_ioconf();
break;
case MACHINE_HPPA:
hppa_ioconf();
break;
case MACHINE_SPARC:
sparc_ioconf();
break;
case MACHINE_PPC:
ppc_ioconf();
break;
case MACHINE_ARM:
arm_ioconf();
break;
case MACHINE_X86_64:
x86_64_ioconf();
break;
default:
printf("Specify machine type, e.g. ``machine vax''\n");
exit(1);
}
makefile();
headers();
swapconf();
return 0;
}
const char *
get_word(FILE *fp)
{
static char line[80];
register int ch;
register char *cp;
while ((ch = getc(fp)) != EOF)
if (ch != ' ' && ch != '\t')
break;
if (ch == EOF)
return ((char *)EOF);
if (ch == '\n')
return (NULL);
if (ch == '|')
return( "|");
cp = line;
*cp++ = ch;
while ((ch = getc(fp)) != EOF) {
if (isspace(ch))
break;
*cp++ = ch;
}
*cp = 0;
if (ch == EOF)
return ((char *)EOF);
(void) ungetc(ch, fp);
return (line);
}
char *
get_rest(FILE *fp)
{
static char line[80];
register int ch;
register char *cp;
cp = line;
while ((ch = getc(fp)) != EOF) {
if (ch == '\n')
break;
*cp++ = ch;
}
*cp = 0;
if (ch == EOF)
return ((char *)EOF);
return (line);
}
char *
path(const char *file)
{
register char *cp;
cp = malloc((unsigned)(strlen(build_directory)+
strlen(file)+
strlen(object_directory)+
3));
(void) sprintf(cp, "%s/%s/%s", object_directory, build_directory, file);
return (cp);
}