1: /* down!honey 4/84 */
2:
3: #define HISTORY "/usr/new/lib/news/history"
4: #define NEWSDIR "/usr/spool/news"
5:
6: char *formats[] = { /* add as appropriate */
7: "<%s.uucp>",
8: "<%s>",
9: "<%s.arpa>",
10: "<%s.oz>",
11: 0
12: };
13:
14: #include <stdio.h>
15: #include <sysexits.h>
16: #include <ctype.h>
17:
18: typedef struct {
19: char *dptr;
20: int dsize;
21: } datum;
22:
23: long lseek();
24: char *index();
25: datum fetch(), dofetch();
26:
27: main(argc, argv)
28: char **argv;
29: {
30: int fd;
31: char buf[BUFSIZ], *ptr1, *ptr2;
32: datum content;
33: long offset;
34:
35: if ((fd = open(HISTORY, 0)) < 0) {
36: perror(HISTORY);
37: exit(EX_UNAVAILABLE);
38: }
39: if (dbminit(HISTORY) < 0) {
40: fprintf(stderr, "dbm error\n");
41: exit(EX_UNAVAILABLE);
42: }
43: for (--argc, argv++; argc; --argc, argv++) {
44: content = dofetch(*argv);
45: if (content.dptr == 0) {
46: printf("%s: No such key\n", *argv);
47: continue;
48: }
49: /* ensure alignment */
50: bcopy(content.dptr, (char *)&offset, sizeof offset);
51: if (lseek(fd, offset, 0) < 0)
52: continue;
53: if (read(fd, buf, sizeof buf) <= 0)
54: continue;
55: if ((ptr2 = index(buf, '\n')) == 0)
56: continue;
57: *ptr2 = '\0';
58: if ((ptr1 = index(buf, '\t')) == 0)
59: continue;
60: ptr1++;
61: if ((ptr1 = index(ptr1, '\t')) == 0)
62: continue;
63: ptr1++;
64: for (ptr2 = ptr1; ptr2 = index(ptr2, '.'); *ptr2 = '/')
65: ;
66: if ((ptr2 = index(ptr1, ' ')) != NULL)
67: *ptr2 = '\0';
68: if (*ptr1 == '\0')
69: printf("expired\n");
70: else
71: printf("%s/%s\n", NEWSDIR, ptr1);
72: }
73: exit(EX_OK);
74: }
75:
76: datum
77: dofetch(str)
78: char *str;
79: {
80: datum key, content;
81: char buf[BUFSIZ], **fmt;
82: register char *rcp;
83:
84: for (fmt = formats; *fmt; fmt++) {
85: sprintf(buf, *fmt, str);
86: rcp = buf - 1;
87: while (*++rcp)
88: if (isupper(*rcp))
89: *rcp = tolower(*rcp);
90: key.dptr = buf;
91: key.dsize = strlen(buf) + 1;
92: content = fetch(key);
93: if (content.dptr)
94: break;
95: }
96: return(content);
97: }
Defined functions
main
defined in line
27;
never used
Defined variables
Defined macros