/* getnodeent.c */ #ifndef NODES_DB #define NODES_DB nodes.dat #endif /* NODES_DB */ #include #include #include #include #include #include #define MAXAREASIZE 2 #define MAXNUMSIZE 4 #define MAXNAMESIZE 6 #define MAXADDRSIZE 4 static char line[BUFSIZ+1]; static char dnet_db[] = NODES_DB; static char nodearea[MAXAREASIZE+1]; static char nodenum[MAXNUMSIZE+1]; static char nodename[MAXNAMESIZE + 1]; static char nodeaddr[MAXADDRSIZE]; static struct nodeent node; static int stayopen = 0; static FILE *_dnfile = -1; setnodeent(f) int f; { extern long hseek(); extern char *dnet_path(); stayopen |= f; /* if (_dnfile != -1) { if (hseek(_dnfile, 0L, 0) < 0) return(-1); else return(0); } */ if ((_dnfile = fopen(dnet_db, "r")) < 0) { return(-1); } return(0); } endnodeent() { if ((_dnfile != -1) && !stayopen) { fclose(_dnfile); _dnfile = -1; } } struct nodeent *getnodeent() { struct dnet_nodeent nodedb; char *p; nodearea[0]='\0'; nodenum[0]='\0'; nodename[0]='\0'; if (_dnfile == -1) { if (setnodeent(0) != 0) { return(NULL); } } if ( fgets(line, BUFSIZ, _dnfile) == 0) { return(NULL); } p = line; if (*p != ' ') { strncat(nodearea,p++,1); } else { p++; } strncat(nodearea,p++,1); if (*p != '.') return(NULL); p++; while (*p != ' ') { strncat(nodenum,p++,1); } p++; if (*p != '(') return(NULL); p++; while (*p != ')') { strncat(nodename,p++,1); } node.n_addr = nodeaddr; node.n_name = nodename; node.n_addrtype = AF_DECnet; *((u_short *) node.n_addr) = ((atoi(nodearea) << 10) & 0xFC00) | (atoi(nodenum) & 0x03FF); node.n_length = sizeof(u_short); return(&node); }