62 lines
1.2 KiB
C
62 lines
1.2 KiB
C
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*);
|