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