1/*	$NetBSD: mac_expand.h,v 1.4 2022/10/08 16:12:50 christos Exp $	*/
2
3#ifndef _MAC_EXPAND_H_INCLUDED_
4#define _MAC_EXPAND_H_INCLUDED_
5
6/*++
7/* NAME
8/*	mac_expand 3h
9/* SUMMARY
10/*	expand macro references in string
11/* SYNOPSIS
12/*	#include <mac_expand.h>
13/* DESCRIPTION
14/* .nf
15
16 /*
17  * Utility library.
18  */
19#include <vstring.h>
20#include <mac_parse.h>
21
22 /*
23  * Features.
24  */
25#define MAC_EXP_FLAG_NONE	(0)
26#define MAC_EXP_FLAG_RECURSE	(1<<0)
27#define MAC_EXP_FLAG_APPEND	(1<<1)
28#define MAC_EXP_FLAG_SCAN	(1<<2)
29#define MAC_EXP_FLAG_PRINTABLE  (1<<3)
30
31 /*
32  * Token codes, public so tha they are available to mac_expand_add_relop()
33  */
34#define MAC_EXP_OP_TOK_NONE	0	/* Sentinel */
35#define MAC_EXP_OP_TOK_EQ	1	/* == */
36#define MAC_EXP_OP_TOK_NE	2	/* != */
37#define MAC_EXP_OP_TOK_LT	3	/* < */
38#define MAC_EXP_OP_TOK_LE	4	/* <= */
39#define MAC_EXP_OP_TOK_GE	5	/* >= */
40#define MAC_EXP_OP_TOK_GT	6	/* > */
41
42 /*
43  * Relational operator results. An enum to discourage assuming that 0 is
44  * false, !0 is true.
45  */
46typedef enum MAC_EXP_OP_RES {
47    MAC_EXP_OP_RES_TRUE,
48    MAC_EXP_OP_RES_FALSE,
49    MAC_EXP_OP_RES_ERROR,
50} MAC_EXP_OP_RES;
51
52
53extern MAC_EXP_OP_RES mac_exp_op_res_bool[2];
54
55 /*
56  * Real lookup or just a test?
57  */
58#define MAC_EXP_MODE_TEST	(0)
59#define MAC_EXP_MODE_USE	(1)
60
61typedef const char *(*MAC_EXP_LOOKUP_FN) (const char *, int, void *);
62typedef MAC_EXP_OP_RES (*MAC_EXPAND_RELOP_FN) (const char *, int, const char *);
63
64extern int mac_expand(VSTRING *, const char *, int, const char *, MAC_EXP_LOOKUP_FN, void *);
65void    mac_expand_add_relop(int *, const char *, MAC_EXPAND_RELOP_FN);
66
67/* LICENSE
68/* .ad
69/* .fi
70/*	The Secure Mailer license must be distributed with this software.
71/* AUTHOR(S)
72/*	Wietse Venema
73/*	IBM T.J. Watson Research
74/*	P.O. Box 704
75/*	Yorktown Heights, NY 10598, USA
76/*
77/*	Wietse Venema
78/*	Google, Inc.
79/*	111 8th Avenue
80/*	New York, NY 10011, USA
81/*--*/
82
83#endif
84