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: print_header(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

print_header defined in line 136; used 2 times
xhdr defined in line 29; used 2 times
xhdr_greenkluydge defined in line 165; never used

Defined variables

sccsid defined in line 2; never used
Last modified: 1988-02-26
Generated: 2016-12-26
Generated by src2html V0.67
page hit count: 3397
Valid CSS Valid XHTML 1.0 Strict