1: #ifndef lint
2: static char *sccsid = "@(#)xhdr.c 1.6 (Berkeley) 2/25/88";
3: #endif
4:
5: #include "common.h"
6:
7: #ifdef XHDR
8:
9: /*
10: * XHDR header [<messageid>|articlerange]
11: *
12: * header is a case-insensitive header field, minus any colons.
13: *
14: * articlerange is one of:
15: * an article number
16: * an article number followed by a dash to indicate all following
17: * an article number followed by a dash followed by another
18: * article number.
19: * e.g.,
20: * XHDR subject retrieve subject of current article
21: * XHDR subject 5589-6325 retrieve subject of arts 5589 to 6325
22: * XHDR subject 5589- retrieve subject of arts 5589 and up
23: * XHDR subject 5589 retrieve subject of art 5589 only
24: * XHDR subject <123@ucbvax> retrieve subject of art <123@ucbvax>
25: *
26: * This command is an extention, and not included in RFC 977.
27: */
28:
29: xhdr(argc, argv)
30: int argc;
31: char *argv[];
32: {
33: char buf[MAXPATHLEN];
34: register int artptr;
35: register int artnum;
36: register int low, high;
37: register FILE *fp;
38: register char *cp;
39:
40: if (argc < 2 || argc > 3) {
41: printf("%d Usage: XHDR headerfield [artrange|<message-id>]\r\n",
42: ERR_CMDSYN);
43: (void) fflush(stdout);
44: return;
45: }
46:
47: if (!canread) {
48: printf("%d You only have permission to transfer, sorry.\r\n",
49: ERR_ACCESS);
50: (void) fflush(stdout);
51: return;
52: }
53:
54: /* Handle message-id requests */
55:
56: if (argc == 3 && *argv[2] == '<') { /* Message ID */
57: fp = openartbyid(argv[2]);
58: if (fp == NULL) {
59: printf("%d No article by message-id %s, sorry.\r\n",
60: ERR_NOART, argv[2]);
61: (void) fflush(stdout);
62: return;
63: }
64: printf("%d 0 %s header of article %s.\r\n",
65: OK_HEAD, argv[1], argv[2]);
66: print_header(fp, argv[1], argv[2]);
67: (void) fclose(fp);
68:
69: putchar('.');
70: putchar('\r');
71: putchar('\n');
72: (void) fflush(stdout);
73: return;
74: }
75:
76: /*
77: * It must be a range of articles, which means that we need
78: * to be in a newsgroup already.
79: */
80:
81: if (!ingroup) {
82: printf("%d You are not currently in a newsgroup.\r\n",
83: ERR_NCING);
84: (void) fflush(stdout);
85: return;
86: }
87:
88: artptr = 0;
89:
90: if (argc == 2) {
91: if (art_ptr < 0 || art_ptr >= num_arts) {
92: printf("%d No article is currently selected.\r\n",
93: ERR_NOCRNT);
94: (void) fflush(stdout);
95: return;
96: }
97: high = low = art_array[art_ptr];
98: artptr = art_ptr;
99: } else {
100: cp = index(argv[2], '-');
101: if (cp == NULL)
102: low = high = atoi(argv[2]);
103: else {
104: *cp = '\0';
105: low = atoi(argv[2]);
106: cp++;
107: high = atoi(cp);
108: if (high < low)
109: high = art_array[num_arts-1];
110: }
111: }
112:
113: printf("%d %s fields follow\r\n", OK_HEAD, argv[1]);
114:
115: for (;; artptr++) {
116: if ((artnum = art_array[artptr]) < low)
117: continue;
118: if (artnum > high)
119: break;
120:
121: (void) sprintf(buf, "%d", artnum);
122: fp = fopen(buf, "r");
123: if (fp == NULL)
124: continue;
125: print_header(fp, argv[1], buf);
126: (void) fclose(fp);
127: }
128:
129: putchar('.');
130: putchar('\r');
131: putchar('\n');
132: (void) fflush(stdout);
133: }
134:
135:
136: (fp, header, artname)
137: register FILE *fp;
138: register char *header;
139: register char *artname;
140: {
141: char line[NNTP_STRLEN];
142: register char *cp, *cp1;
143:
144: while (fgets(line, sizeof (line), fp) != NULL) {
145: if (*line == '\n' || *line == '\0') {
146: printf("%s (none)\r\n", artname);
147: return;
148: }
149: if (cp = index(line, ':')) {
150: *cp = '\0';
151: if (!strcasecmp(header, line)) {
152: if (cp1 = index(cp + 2, '\n'))
153: *cp1 = '\0';
154: printf("%s %s\r\n", artname, cp + 2);
155: return;
156: }
157: }
158: }
159: }
160:
161: #else not XHDR
162:
163: /* Kludge to get around Greenhills C compiler */
164:
165: xhdr_greenkluydge()
166: {
167: }
168:
169: #endif not XHDR
Defined functions
defined in line
136; used 2 times
xhdr
defined in line
29; used 2 times
Defined variables
sccsid
defined in line
2;
never used