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