4.3BSD/usr/contrib/rn/head.h

Compare this file to the similar file:
Show the results in this format:

/* $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();