#include <stdarg.h>
#include <string.h>
#include "sz.h"
extern int yylex(void);
extern int yyparse(void);
extern int yyerror(char *);

struct header {
	sz *name, *value;
};

struct message {
	size_t num_headers, max_headers;
	struct header **headers;
	sz *fromline;
	sz *body;
};

struct mlist {
	struct mlist *next;
	struct message *m;
};

extern struct mlist *first_message, *last_message;
extern int debug_level;

extern struct header *new_header(sz *, sz *);
extern struct message *new_message(struct header *);
extern struct mlist *new_mlist(struct message *);
extern void free_message(struct message *);
extern void free_header(struct header *);
extern void add_header(struct message *, struct header *);
extern int debug(int, char *, ...);
extern sz *get_header(struct message *, char *);
