#ifndef _TOK822_H_INCLUDED_
#define _TOK822_H_INCLUDED_
#include <vstring.h>
#include <resolve_clnt.h>
typedef struct TOK822 {
int type;
VSTRING *vstr;
struct TOK822 *prev;
struct TOK822 *next;
struct TOK822 *head;
struct TOK822 *tail;
struct TOK822 *owner;
} TOK822;
#define TOK822_MINTOK 256
#define TOK822_ATOM 256
#define TOK822_QSTRING 257
#define TOK822_COMMENT 258
#define TOK822_DOMLIT 259
#define TOK822_ADDR 260
#define TOK822_STARTGRP 261
#define TOK822_MAXTOK 261
extern TOK822 *tok822_alloc(int, const char *);
extern TOK822 *tok822_free(TOK822 *);
extern TOK822 *tok822_append(TOK822 *, TOK822 *);
extern TOK822 *tok822_prepend(TOK822 *, TOK822 *);
extern TOK822 *tok822_cut_before(TOK822 *);
extern TOK822 *tok822_cut_after(TOK822 *);
extern TOK822 *tok822_unlink(TOK822 *);
extern TOK822 *tok822_sub_append(TOK822 *, TOK822 *);
extern TOK822 *tok822_sub_prepend(TOK822 *, TOK822 *);
extern TOK822 *tok822_sub_keep_before(TOK822 *, TOK822 *);
extern TOK822 *tok822_sub_keep_after(TOK822 *, TOK822 *);
extern TOK822 *tok822_free_tree(TOK822 *);
typedef int (*TOK822_ACTION) (TOK822 *);
extern int tok822_apply(TOK822 *, int, TOK822_ACTION);
extern TOK822 **tok822_grep(TOK822 *, int);
extern TOK822 *tok822_scan_limit(const char *, TOK822 **, int);
extern TOK822 *tok822_scan_addr(const char *);
extern TOK822 *tok822_parse_limit(const char *, int);
extern VSTRING *tok822_externalize(VSTRING *, TOK822 *, int);
extern VSTRING *tok822_internalize(VSTRING *, TOK822 *, int);
#define tok822_scan(cp, ptr) tok822_scan_limit((cp), (ptr), 0)
#define tok822_parse(cp) tok822_parse_limit((cp), 0)
#define TOK822_STR_NONE (0)
#define TOK822_STR_WIPE (1<<0)
#define TOK822_STR_TERM (1<<1)
#define TOK822_STR_LINE (1<<2)
#define TOK822_STR_TRNC (1<<3)
#define TOK822_STR_DEFL (TOK822_STR_WIPE | TOK822_STR_TERM)
#define TOK822_STR_HEAD (TOK822_STR_TERM | TOK822_STR_LINE | TOK822_STR_TRNC)
extern TOK822 *tok822_find_type(TOK822 *, int);
extern TOK822 *tok822_rfind_type(TOK822 *, int);
extern TOK822 *tok822_rewrite(TOK822 *, const char *);
#define tok822_resolve(t, r) tok822_resolve_from(RESOLVE_NULL_FROM, (t), (r))
extern void tok822_resolve_from(const char *, TOK822 *, RESOLVE_REPLY *);
#endif