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