1 typedef struct Node Node;
2 typedef struct Field Field;
3 typedef Node *Nodeptr;
4 #define YYSTYPE Nodeptr
5 
6 struct Node {
7 	Node	*next;
8 	int	c;	/* token type */
9 	char	addr;	/* true if this is an address */
10 	String	*s;	/* string representing token */
11 	String	*white;	/* white space following token */
12 	char	*start;	/* first byte for this token */
13 	char	*end;	/* next byte in input */
14 };
15 
16 struct Field {
17 	Field	*next;
18 	Node	*node;
19 	int	source;
20 };
21 
22 typedef struct DS	DS;
23 struct DS {
24 	/* dist string */
25 	char	buf[128];
26 	char	expand[128];
27 	char	*netdir;
28 	char	*proto;
29 	char	*host;
30 	char	*service;
31 };
32 
33 extern Field	*firstfield;
34 extern Field	*lastfield;
35 extern Node	*usender;
36 extern Node	*usys;
37 extern Node	*udate;
38 extern int	originator;
39 extern int	destination;
40 extern int	date;
41 extern int	messageid;
42 
43 Node*	anonymous(Node*);
44 Node*	address(Node*);
45 int	badfieldname(Node*);
46 Node*	bang(Node*, Node*);
47 Node*	colon(Node*, Node*);
48 int	cistrcmp(char*, char*);
49 Node*	link2(Node*, Node*);
50 Node*	link3(Node*, Node*, Node*);
51 void	freenode(Node*);
52 void	newfield(Node*, int);
53 void	freefield(Field*);
54 void	yyinit(char*, int);
55 int	yyparse(void);
56 int	yylex(void);
57 String*	yywhite(void);
58 Node*	whiten(Node*);
59 void	yycleanup(void);
60 int	mxdial(char*, char*, char*);
61 void	dial_string_parse(char*, DS*);
62