]> diplodocus.org Git - nmh/blobdiff - h/mh.h
Update manpages to use .TP for tagged paragraphs (part I).
[nmh] / h / mh.h
diff --git a/h/mh.h b/h/mh.h
index 1d55618cc1514966cc86cfe49cfe90d49b5d4ed6..253af9cbaa08372826036ef26f14c7bb1f18fdb4 100644 (file)
--- 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,12 +364,10 @@ 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;