X-Git-Url: https://diplodocus.org/git/nmh/blobdiff_plain/b5d9d6e4b1b05797ad7b2d86bdaf7cbf86d5e3da..e0e0c1e0fce54f31e8b126d78a0b364208f7d36f:/h/mh.h diff --git a/h/mh.h b/h/mh.h index 09d9f27e..b8e56442 100644 --- a/h/mh.h +++ b/h/mh.h @@ -55,6 +55,11 @@ struct node { #define UNKWNSW (-1) /* from smatch() on unknown switch */ struct swit { + + /* + * Switch name + */ + char *sw; /* The minchars field is apparently used like this: @@ -63,8 +68,54 @@ struct swit { 0 : Switch can't be abbreviated; switch shown in -help. # : Switch can be abbreviated to # characters; switch shown in -help. */ int minchars; + + /* + * If we pick this switch, return this value from smatch + */ + + int swret; }; +/* + * Macros to use when declaring struct swit arrays. + * + * These macros are what known as X-Macros. In your source code you + * use them like this: + * + * #define FOO_SWITCHES \ + * X("switch1", 0, SWITCHSW) \ + * X("switch2", 0, SWITCH2SW) \ + * X("thirdswitch", 2, SWITCH3SW) \ + * + * The argument to each entry in FOO_SWITCHES are the switch name (sw), + * the minchars field (see above) and the return value for this switch. + * + * After you define FOO_SWITCHES, you instantiate it as follows: + * + * #define X(sw, minchars, id) id, + * DEFINE_SWITCH_ENUM(FOO); + * #undef X + * + * #define X(sw, minchars, id) { sw, minchars, id }, + * DEFINE_SWITCH_ARRAY(FOO); + * #undef X + * + * DEFINE_SWITCH_ENUM defines an extra enum at the end of the list called + * LEN_FOO. + */ + +#define DEFINE_SWITCH_ENUM(name) \ + enum { \ + name ## _SWITCHES \ + LEN_ ## name \ + } + +#define DEFINE_SWITCH_ARRAY(name, array) \ + static struct swit array[] = { \ + name ## _SWITCHES \ + { NULL, 0, 0 } \ + } + extern struct swit anoyes[]; /* standard yes/no switches */ #define ATTACHFORMATS 3 /* Number of send attach formats. */ @@ -237,11 +288,12 @@ struct msgs { #define FMTERR (-3) /* Message Format error */ #define FLD 0 /* Field returned */ #define FLDPLUS 1 /* Field returned with more to come */ -#define FLDEOF 2 /* Field returned ending at eom */ #define BODY 3 /* Body returned with more to come */ -#define BODYEOF 4 /* Body returned ending at eom */ #define FILEEOF 5 /* Reached end of input file */ +struct m_getfld_state; +typedef struct m_getfld_state *m_getfld_state_t; + /* * Maildrop styles */ @@ -251,10 +303,6 @@ struct msgs { #define MS_MMDF 3 /* string mmdlm2 */ #define MS_MSH 4 /* whacko msh */ -extern int msg_count; /* m_getfld() indicators */ -extern int msg_style; /* .. */ -extern char *msg_delim; /* .. */ - #define NOUSE 0 /* draft being re-used */ #define TFOLDER 0 /* path() given a +folder */ @@ -298,6 +346,13 @@ extern char *defpath; /* pathname of user's profile */ extern char *ctxpath; /* pathname of user's context */ extern struct node *m_defs; /* list of profile/context entries */ +/* What style to use for generated Message-ID and Content-ID header + fields. The localname style is pid.time@localname, where time is + in seconds. The random style replaces the localname with some + (pseudo)random bytes and uses microsecond-resolution time. */ +int save_message_id_style (const char *); +char *message_id (time_t, int); + /* * These standard strings are defined in config.c. They are the * only system-dependent parameters in nmh, and thus by redefining @@ -309,7 +364,6 @@ extern char *catproc; extern char *components; extern char *context; extern char *current; -extern char *defaulteditor; extern char *defaultfolder; extern char *digestcomps; extern char *distcomps; @@ -320,7 +374,6 @@ extern char *formatproc; extern char *forwcomps; extern char *inbox; extern char *incproc; -extern char *installproc; extern char *lproc; extern char *mailproc; extern char *mh_defaults;