X-Git-Url: https://diplodocus.org/git/nmh/blobdiff_plain/d2e40bd9ce3c3973a1666eaa9477cea927baf84f..e0e0c1e0fce54f31e8b126d78a0b364208f7d36f:/h/mh.h diff --git a/h/mh.h b/h/mh.h index e3a382a3..b8e56442 100644 --- a/h/mh.h +++ b/h/mh.h @@ -32,8 +32,10 @@ typedef unsigned char boolean; /* not int so we can pack in a structure */ */ #if __GNUC__ > 2 #define NORETURN __attribute__((__noreturn__)) +#define NMH_UNUSED(i) (void) i #else #define NORETURN +#define NMH_UNUSED(i) i #endif /* @@ -53,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: @@ -61,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. */ @@ -235,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 */ @@ -249,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 */ @@ -264,6 +314,8 @@ extern char *msg_delim; /* .. */ #define LINK "@" /* Name of link to file to which you are */ /* replying. */ +#define NMH_ATTACH_HEADER "Nmh-Attachment" /* Default header for -attach */ + /* * miscellaneous macros */ @@ -294,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 @@ -305,18 +364,16 @@ extern char *catproc; extern char *components; extern char *context; extern char *current; -extern char *defaulteditor; extern char *defaultfolder; extern char *digestcomps; extern char *distcomps; extern char *draft; -extern char *faceproc; extern char *fileproc; extern char *foldprot; +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; @@ -342,7 +399,6 @@ extern char *rcvdistcomps; extern char *rcvstoreproc; extern char *replcomps; extern char *replgroupcomps; -extern char *rmfproc; extern char *rmmproc; extern char *sendproc; extern char *showmimeproc;