1: #ifndef lint
2: static char *sccsid = "@(#)ahbs.c 1.8 (Berkeley) 1/11/88";
3: #endif
4:
5: #include "common.h"
6:
7: static char *verbage[] = {
8: "head and body follow",
9: "head follows",
10: "body follows",
11: "request text separately"
12: };
13:
14: /*
15: * {ARTICLE,HEAD,BODY,STAT} <messageid>|articlenum
16: *
17: * Retrieve article, head, body, or stat, depending on the
18: * command we were invoked with.
19: */
20:
21: ahbs(argc, argv)
22: int argc;
23: char *argv[];
24: {
25: char artbuf[MAXPATHLEN], art_id[MAXBUFLEN];
26: register char c;
27: int method;
28: register FILE *fp; /* For Message-ID retrieval only */
29:
30: if (argc > 2) {
31: printf("%d Usage: %s <message-id>|article_number.\r\n", argv[0],
32: ERR_CMDSYN);
33: (void) fflush(stdout);
34: return;
35: }
36:
37: if ((c = *argv[0]) == 'a' || c == 'A')
38: method = ARTICLE;
39: else if ((c == 's' || c == 'S'))
40: method = STAT;
41: else
42: method = ((c == 'h' || c == 'H') ? HEAD : BODY);
43:
44: if (argc == 2 && *argv[1] == '<') { /* Message ID */
45: fp = openartbyid(argv[1]);
46: if (fp == NULL) {
47: printf("%d No article by message-id %s, sorry.\r\n",
48: ERR_NOART, argv[1]);
49: (void) fflush(stdout);
50: return;
51: }
52: if (check_ngperm(fp) == 0) {
53: printf("%d Can't give that to you, sorry.\r\n",
54: ERR_ACCESS);
55: (void) fflush(stdout);
56: (void) fclose(fp);
57: return;
58: }
59: printf("%d 0 %s Article retrieved, %s.\r\n",
60: OK_ARTICLE + method, argv[1], verbage[method]);
61: spew(fp, method);
62: (void) fclose(fp);
63: #ifdef LOG
64: if (nn_told)
65: nn_took++;
66: #endif
67: return;
68: }
69:
70: /* Else we're trying to read */
71:
72: if (!canread) {
73: printf("%d You only have permission to transfer, sorry.\r\n",
74: ERR_ACCESS);
75: (void) fflush(stdout);
76: return;
77: }
78:
79: if (!ingroup) {
80: printf("%d You are not currently in a newsgroup.\r\n",
81: ERR_NCING);
82: (void) fflush(stdout);
83: return;
84: }
85:
86: if (argc == 1) {
87: if (art_ptr < 0 || art_ptr >= num_arts) {
88: printf("%d No article is currently selected.\r\n",
89: ERR_NOCRNT);
90: (void) fflush(stdout);
91: return;
92: }
93: (void) sprintf(artbuf, "%d", art_array[art_ptr]);
94: } else
95: (void) strcpy(artbuf, argv[1]);
96:
97: if (!valid_art(artbuf)) {
98: printf("%d Invalid article number: %s.\r\n",
99: ERR_NOARTIG, artbuf);
100: (void) fflush(stdout);
101: return;
102: }
103:
104: while (open_valid_art(artbuf, art_id) == NULL) {
105: if (argc > 1) {
106: printf("%d Invalid article number: %s.\r\n",
107: ERR_NOARTIG, artbuf);
108: (void) fflush(stdout);
109: return;
110: } else {
111: if (++art_ptr >= num_arts) {
112: printf("%d Invalid article number.\r\n",
113: ERR_NOARTIG);
114: (void) fflush(stdout);
115: return;
116: }
117: (void) sprintf(artbuf, "%d", art_array[art_ptr]);
118: }
119: }
120:
121: printf("%d %s %s Article retrieved; %s.\r\n",
122: OK_ARTICLE + method, artbuf, art_id, verbage[method]);
123:
124: spew(art_fp, method);
125:
126: if (argc > 1)
127: art_ptr = findart(artbuf);
128: }
Defined functions
ahbs
defined in line
21; used 5 times
Defined variables
sccsid
defined in line
2;
never used