xref: /csrg-svn/old/htable/htable.c (revision 8732)
1*8732Ssam #ifndef lint
2*8732Ssam static char sccsid[] = "@(#)htable.c	4.1 (Berkeley) 10/20/82";
3*8732Ssam #endif
4*8732Ssam 
5*8732Ssam /*
6*8732Ssam  * htable - convert NIC host table into a UNIX format.
7*8732Ssam  * NIC format is described in RFC 810, 1 March 1982.
8*8732Ssam  */
9*8732Ssam #include <stdio.h>
10*8732Ssam #include <ctype.h>
11*8732Ssam #include "htable.h"
12*8732Ssam 
13*8732Ssam FILE *hf;
14*8732Ssam FILE *gf;
15*8732Ssam 
16*8732Ssam main(argc, argv)
17*8732Ssam 	int argc;
18*8732Ssam 	char *argv[];
19*8732Ssam {
20*8732Ssam 	if (argc > 2) {
21*8732Ssam 		fprintf(stderr, "usage: %s [ input-file ]\n",
22*8732Ssam 			argv[0]);
23*8732Ssam 		exit(1);
24*8732Ssam 	}
25*8732Ssam 	infile = "(stdin)";
26*8732Ssam 	if (argc == 2) {
27*8732Ssam 		infile = argv[1];
28*8732Ssam 		if (freopen(infile, "r", stdin) == NULL) {
29*8732Ssam 			perror(infile);
30*8732Ssam 			exit(1);
31*8732Ssam 		}
32*8732Ssam 	}
33*8732Ssam 	hf = fopen("hosts", "w");
34*8732Ssam 	if (hf == NULL) {
35*8732Ssam 		perror("hosts");
36*8732Ssam 		exit(1);
37*8732Ssam 	}
38*8732Ssam 	copylocal();
39*8732Ssam #ifdef GATEWAYS
40*8732Ssam 	hf = fopen("gateways", "w");
41*8732Ssam 	if (hf == NULL) {
42*8732Ssam 		perror("gateways");
43*8732Ssam 		exit(1);
44*8732Ssam 	}
45*8732Ssam #endif
46*8732Ssam 	exit(yyparse());
47*8732Ssam }
48*8732Ssam 
49*8732Ssam struct name *
50*8732Ssam newname(str)
51*8732Ssam 	char *str;
52*8732Ssam {
53*8732Ssam 	char *p;
54*8732Ssam 	struct name *nm;
55*8732Ssam 
56*8732Ssam 	p = malloc(strlen(str) + 1);
57*8732Ssam 	strcpy(p, str);
58*8732Ssam 	nm = alloc_name();
59*8732Ssam 	nm->name_val = p;
60*8732Ssam 	nm->name_link = NONAME;
61*8732Ssam 	return (nm);
62*8732Ssam }
63*8732Ssam 
64*8732Ssam char *
65*8732Ssam lower(str)
66*8732Ssam 	char *str;
67*8732Ssam {
68*8732Ssam 	register char *cp = str;
69*8732Ssam 
70*8732Ssam 	while (*cp) {
71*8732Ssam 		if (isupper(*cp))
72*8732Ssam 			*cp = tolower(*cp);
73*8732Ssam 		cp++;
74*8732Ssam 	}
75*8732Ssam 	return (str);
76*8732Ssam }
77*8732Ssam 
78*8732Ssam do_entry(keyword, addrlist, namelist, cputype, opsys, protos)
79*8732Ssam 	int keyword;
80*8732Ssam 	struct addr *addrlist;
81*8732Ssam 	struct name *namelist, *cputype, *opsys, *protos;
82*8732Ssam {
83*8732Ssam 	register struct addr *al, *al2;
84*8732Ssam 	register struct name *nl, *nl2;
85*8732Ssam 	register flag;
86*8732Ssam 
87*8732Ssam 	switch (keyword) {
88*8732Ssam 
89*8732Ssam 	case KW_NET:
90*8732Ssam 		break;
91*8732Ssam 
92*8732Ssam 	case KW_GATEWAY:
93*8732Ssam 		break;
94*8732Ssam 
95*8732Ssam 	case KW_HOST:
96*8732Ssam 		for (al = addrlist; al; al = al2) {
97*8732Ssam 			if (net(al->addr_val) != LOCALNET) {
98*8732Ssam 				fprintf(hf, "%d.%d.%d.%d\t",
99*8732Ssam 					net(al->addr_val), host(al->addr_val),
100*8732Ssam 					lhost(al->addr_val), imp(al->addr_val));
101*8732Ssam 				for (nl = namelist; nl; nl = nl->name_link)
102*8732Ssam 					fprintf(hf, " %s", lower(nl->name_val));
103*8732Ssam 				putc('\n', hf);
104*8732Ssam 			}
105*8732Ssam 			al2 = al->addr_link;
106*8732Ssam 			free_addr(al);
107*8732Ssam 		}
108*8732Ssam 		break;
109*8732Ssam 
110*8732Ssam 	default:
111*8732Ssam 		fprintf(stderr, "Unknown keyword: %d.\n", keyword);
112*8732Ssam 	}
113*8732Ssam 	for (nl = namelist; nl; nl = nl2) {
114*8732Ssam 		nl2 = nl->name_link;
115*8732Ssam 		free_name(nl);
116*8732Ssam 	}
117*8732Ssam 	for (nl = protos; nl; nl = nl2) {
118*8732Ssam 		nl2 = nl->name_link;
119*8732Ssam 		free_name(nl);
120*8732Ssam 	}
121*8732Ssam }
122*8732Ssam 
123*8732Ssam copylocal()
124*8732Ssam {
125*8732Ssam 	register FILE *lhf;
126*8732Ssam 	register cc;
127*8732Ssam 	char buf[BUFSIZ];
128*8732Ssam 
129*8732Ssam 	lhf = fopen("localhosts", "r");
130*8732Ssam 	if (lhf == NULL) {
131*8732Ssam 		perror("localhosts");
132*8732Ssam 		fprintf(stderr, "(continuing)\n");
133*8732Ssam 		return;
134*8732Ssam 	}
135*8732Ssam 	while (cc = fread(buf, 1, sizeof(buf), lhf))
136*8732Ssam 		fwrite(buf, 1, cc, hf);
137*8732Ssam 	fclose(lhf);
138*8732Ssam }
139