1 /*        $NetBSD: mac_expand.h,v 1.5 2025/02/25 19:15:52 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   */
46 typedef 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 
53 extern 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 
61 typedef const char *(*MAC_EXP_LOOKUP_FN) (const char *, int, void *);
62 typedef MAC_EXP_OP_RES(*MAC_EXPAND_RELOP_FN) (const char *, int, const char *);
63 
64 extern int mac_expand(VSTRING *, const char *, int, const char *, MAC_EXP_LOOKUP_FN, void *);
65 void    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