BSD 4_3 development
[unix-history] / usr / contrib / rn / head.h
/* $Header: head.h,v 4.3 85/05/01 11:38:31 lwall Exp $
*
* $Log: head.h,v $
* Revision 4.3 85/05/01 11:38:31 lwall
* Baseline for release with 4.3bsd.
*
*/
#define HEAD_FIRST 1
/* types of header lines (if only C really believed in enums)
* (These must stay in alphabetic order at least in the first letter.
* Within each letter it helps to arrange in increasing likelihood.)
*/
#define PAST_HEADER 0 /* body */
#define SOME_LINE 1 /* unrecognized */
#define ARTID_LINE 2 /* article-i.d. */
#define APPR_LINE 3 /* approved */
#define DIST_LINE 4 /* distribution */
#define DATE_LINE 5 /* date */
#define RECEIVED_LINE 6 /* date-received */
#define EXPIR_LINE 7 /* expires */
#define FOLLOW_LINE 8 /* followup-to */
#define FROM_LINE 9 /* from */
#define KEYW_LINE 10 /* keywords */
#define LINES_LINE 11 /* lines */
#define MESSID_LINE 12 /* message-id */
#define NFFR_LINE 13 /* nf-from */
#define NFID_LINE 14 /* nf-id */
#define NGS_LINE 15 /* newsgroups */
#define ORG_LINE 16 /* organization */
#define PATH_LINE 17 /* path */
#define POSTED_LINE 18 /* posted */
#define PVER_LINE 19 /* posting-version */
#define REPLY_LINE 20 /* reply-to */
#define REFS_LINE 21 /* references */
#define RVER_LINE 22 /* relay-version */
#define SENDER_LINE 23 /* sender */
#define SUMRY_LINE 24 /* summary */
#define SUBJ_LINE 25 /* subject */
#define XREF_LINE 26 /* xref */
#define HEAD_LAST 27 /* one more than the last one above */
struct headtype {
char *ht_name; /* header line identifier */
#ifdef pdp11
short ht_minpos;
short ht_maxpos;
#else
ART_POS ht_minpos; /* pointer to beginning of line in article */
ART_POS ht_maxpos; /* pointer to end of line in article */
#endif
char ht_length; /* could make these into nybbles but */
char ht_flags; /* it wouldn't save space normally */
}; /* due to alignment considerations */
#define HT_HIDE 1 /* -h on this line */
#define HT_MAGIC 2 /* do any special processing on this line */
/* This array must stay in the same order as the list above */
#ifndef DOINIT
EXT struct headtype htype[HEAD_LAST];
#else
struct headtype htype[HEAD_LAST] = {
/* name minpos maxpos length flag */
{"BODY", 0, 0, 4, 0 },
{"unrecognized", 0, 0, 12, 0 },
{"article-i.d.", 0, 0, 12, HT_HIDE },
{"approved", 0, 0, 8, HT_HIDE },
{"distribution", 0, 0, 12, 0 },
{"date", 0, 0, 4, 0 },
{"date-received", 0, 0, 13, 0 },
{"expires", 0, 0, 7, HT_HIDE|HT_MAGIC},
{"followup-to", 0, 0, 11, 0 },
{"from", 0, 0, 4, 0 },
{"keywords", 0, 0, 8, 0 },
{"lines", 0, 0, 5, 0 },
{"message-id", 0, 0, 10, 0 },
{"nf-from", 0, 0, 7, HT_HIDE },
{"nf-id", 0, 0, 5, HT_HIDE },
{"newsgroups", 0, 0, 10, HT_MAGIC|HT_HIDE},
{"organization", 0, 0, 12, 0 },
{"path", 0, 0, 4, HT_HIDE },
{"posted", 0, 0, 6, HT_HIDE },
{"posting-version", 0, 0, 15, HT_HIDE },
{"reply-to", 0, 0, 8, 0 },
{"references", 0, 0, 10, 0 },
{"relay-version", 0, 0, 13, HT_HIDE },
{"sender", 0, 0, 6, 0 },
{"summary", 0, 0, 7, 0 },
{"subject", 0, 0, 7, HT_MAGIC },
{"xref", 0, 0, 4, HT_HIDE }
};
#endif
#ifdef ASYNC_PARSE
EXT ART_NUM parsed_art INIT(0);
#endif
EXT char in_header INIT(0); /* are we decoding the header? */
#ifdef CACHESUBJ
EXT char **subj_list INIT(Null(char **));
#endif
void head_init();
int set_line_type();
void start_header();
bool parseline();
#ifdef ASYNC_PARSE
int parse_maybe();
#endif
char *fetchsubj();
char *fetchlines();