|  | typedef struct Node Node; | 
|  | typedef struct Field Field; | 
|  | typedef Node *Nodeptr; | 
|  | #define YYSTYPE Nodeptr | 
|  |  | 
|  | struct Node { | 
|  | Node	*next; | 
|  | int	c;	/* token type */ | 
|  | char	addr;	/* true if this is an address */ | 
|  | String	*s;	/* string representing token */ | 
|  | String	*white;	/* white space following token */ | 
|  | char	*start;	/* first byte for this token */ | 
|  | char	*end;	/* next byte in input */ | 
|  | }; | 
|  |  | 
|  | struct Field { | 
|  | Field	*next; | 
|  | Node	*node; | 
|  | int	source; | 
|  | }; | 
|  |  | 
|  | typedef struct DS	DS; | 
|  | struct DS { | 
|  | /* dist string */ | 
|  | char	buf[128]; | 
|  | char	expand[128]; | 
|  | char	*netdir; | 
|  | char	*proto; | 
|  | char	*host; | 
|  | char	*service; | 
|  | }; | 
|  |  | 
|  | extern Field	*firstfield; | 
|  | extern Field	*lastfield; | 
|  | extern Node	*usender; | 
|  | extern Node	*usys; | 
|  | extern Node	*udate; | 
|  | extern int	originator; | 
|  | extern int	destination; | 
|  | extern int	date; | 
|  | extern int	messageid; | 
|  |  | 
|  | Node*	anonymous(Node*); | 
|  | Node*	address(Node*); | 
|  | int	badfieldname(Node*); | 
|  | Node*	bang(Node*, Node*); | 
|  | Node*	colon(Node*, Node*); | 
|  | int	cistrcmp(char*, char*); | 
|  | Node*	link2(Node*, Node*); | 
|  | Node*	link3(Node*, Node*, Node*); | 
|  | void	freenode(Node*); | 
|  | void	newfield(Node*, int); | 
|  | void	freefield(Field*); | 
|  | void	yyinit(char*, int); | 
|  | int	yyparse(void); | 
|  | int	yylex(void); | 
|  | String*	yywhite(void); | 
|  | Node*	whiten(Node*); | 
|  | void	yycleanup(void); | 
|  | int	mxdial(char*, char*, char*); | 
|  | void	dial_string_parse(char*, DS*); |