1/*	$NetBSD$	*/
2
3#ifndef _TOK822_H_INCLUDED_
4#define _TOK822_H_INCLUDED_
5
6/*++
7/* NAME
8/*	tok822 3h
9/* SUMMARY
10/*	RFC822 token structures
11/* SYNOPSIS
12/*	#include <tok822.h>
13/* DESCRIPTION
14/* .nf
15
16 /*
17  * Utility library.
18  */
19#include <vstring.h>
20
21 /*
22  * Global library.
23  */
24#include <resolve_clnt.h>
25
26 /*
27  * Internal address representation: a token tree.
28  */
29typedef struct TOK822 {
30    int     type;			/* token value, see below */
31    VSTRING *vstr;			/* token contents */
32    struct TOK822 *prev;		/* peer */
33    struct TOK822 *next;		/* peer */
34    struct TOK822 *head;		/* group members */
35    struct TOK822 *tail;		/* group members */
36    struct TOK822 *owner;		/* group owner */
37} TOK822;
38
39 /*
40  * Token values for multi-character objects. Single-character operators are
41  * represented by their own character value.
42  */
43#define TOK822_MINTOK	256
44#define	TOK822_ATOM	256		/* non-special character sequence */
45#define	TOK822_QSTRING	257		/* stuff between "", not nesting */
46#define	TOK822_COMMENT	258		/* comment including (), may nest */
47#define	TOK822_DOMLIT	259		/* stuff between [] not nesting */
48#define	TOK822_ADDR	260		/* actually a token group */
49#define TOK822_STARTGRP	261		/* start of named group */
50#define TOK822_MAXTOK	261
51
52 /*
53  * tok822_node.c
54  */
55extern TOK822 *tok822_alloc(int, const char *);
56extern TOK822 *tok822_free(TOK822 *);
57
58 /*
59  * tok822_tree.c
60  */
61extern TOK822 *tok822_append(TOK822 *, TOK822 *);
62extern TOK822 *tok822_prepend(TOK822 *, TOK822 *);
63extern TOK822 *tok822_cut_before(TOK822 *);
64extern TOK822 *tok822_cut_after(TOK822 *);
65extern TOK822 *tok822_unlink(TOK822 *);
66extern TOK822 *tok822_sub_append(TOK822 *, TOK822 *);
67extern TOK822 *tok822_sub_prepend(TOK822 *, TOK822 *);
68extern TOK822 *tok822_sub_keep_before(TOK822 *, TOK822 *);
69extern TOK822 *tok822_sub_keep_after(TOK822 *, TOK822 *);
70extern TOK822 *tok822_free_tree(TOK822 *);
71
72typedef int (*TOK822_ACTION) (TOK822 *);
73extern int tok822_apply(TOK822 *, int, TOK822_ACTION);
74extern TOK822 **tok822_grep(TOK822 *, int);
75
76 /*
77  * tok822_parse.c
78  */
79extern TOK822 *tok822_scan_limit(const char *, TOK822 **, int);
80extern TOK822 *tok822_scan_addr(const char *);
81extern TOK822 *tok822_parse_limit(const char *, int);
82extern VSTRING *tok822_externalize(VSTRING *, TOK822 *, int);
83extern VSTRING *tok822_internalize(VSTRING *, TOK822 *, int);
84
85#define tok822_scan(cp, ptr)	tok822_scan_limit((cp), (ptr), 0)
86#define tok822_parse(cp)	tok822_parse_limit((cp), 0)
87
88#define TOK822_STR_NONE	(0)
89#define TOK822_STR_WIPE	(1<<0)
90#define TOK822_STR_TERM	(1<<1)
91#define TOK822_STR_LINE	(1<<2)
92#define TOK822_STR_TRNC	(1<<3)
93#define TOK822_STR_DEFL	(TOK822_STR_WIPE | TOK822_STR_TERM)
94#define TOK822_STR_HEAD	(TOK822_STR_TERM | TOK822_STR_LINE | TOK822_STR_TRNC)
95
96 /*
97  * tok822_find.c
98  */
99extern TOK822 *tok822_find_type(TOK822 *, int);
100extern TOK822 *tok822_rfind_type(TOK822 *, int);
101
102 /*
103  * tok822_rewrite.c
104  */
105extern TOK822 *tok822_rewrite(TOK822 *, const char *);
106
107 /*
108  * tok822_resolve.c
109  */
110#define tok822_resolve(t, r) tok822_resolve_from(RESOLVE_NULL_FROM, (t), (r))
111
112extern void tok822_resolve_from(const char *, TOK822 *, RESOLVE_REPLY *);
113
114/* LICENSE
115/* .ad
116/* .fi
117/*	The Secure Mailer license must be distributed with this software.
118/* AUTHOR(S)
119/*	Wietse Venema
120/*	IBM T.J. Watson Research
121/*	P.O. Box 704
122/*	Yorktown Heights, NY 10598, USA
123/*--*/
124
125#endif
126