]> diplodocus.org Git - nmh/blobdiff - uip/mhparam.c
scansbr.c: Move interface to own file.
[nmh] / uip / mhparam.c
index 1da25d312a7e505ef57bad4974f03d56d15abd88..65082a0bd353c57ca11978fb757df6970a133b0b 100644 (file)
@@ -1,36 +1,95 @@
-
-/*
- * mhparam.c -- print mh_profile values
+/* mhparam.c -- print mh_profile values
  *
  * Originally contributed by
  * Jeffrey C Honig <Jeffrey_C_Honig@cornell.edu>
  *
- * $Id$
+ * This code is Copyright (c) 2002, by the authors of nmh.  See the
+ * COPYRIGHT file in the root directory of the nmh distribution for
+ * complete copyright information.
  */
 
-#include <h/mh.h>
-
-extern char *mhlibdir;
+#include "h/mh.h"
+#include "sbr/getarguments.h"
+#include "sbr/smatch.h"
+#include "sbr/context_find.h"
+#include "sbr/ambigsw.h"
+#include "sbr/print_version.h"
+#include "sbr/print_help.h"
+#include "sbr/error.h"
+#include "h/mts.h"
+#include "h/done.h"
+#include "h/utils.h"
+
+#define MHPARAM_SWITCHES \
+    X("components", 0, COMPSW) \
+    X("nocomponents", 0, NCOMPSW) \
+    X("all", 0, ALLSW) \
+    X("version", 0, VERSIONSW) \
+    X("help", 0, HELPSW) \
+    X("debug", 5, DEBUGSW) \
+
+#define X(sw, minchars, id) id,
+DEFINE_SWITCH_ENUM(MHPARAM);
+#undef X
+
+#define X(sw, minchars, id) { sw, minchars, id },
+DEFINE_SWITCH_ARRAY(MHPARAM, switches);
+#undef X
+
+extern char *mhbindir;
+extern char *mhlibexecdir;
 extern char *mhetcdir;
-
-char *sbackup = BACKUP_PREFIX;
-char *slink = LINK;
-
-static struct swit switches[] = {
-#define        COMPSW    0
-    { "components", 0 },
-#define        NCOMPSW   1
-    { "nocomponents", 0 },
-#define        ALLSW     2
-    { "all", 0 },
-#define VERSIONSW 3
-    { "version", 0 },
-#define        HELPSW    4
-    { "help", 4 },
-#define DEBUGSW   5
-    { "debug", -5 },
-    { NULL, 0 }
-};
+extern char *mhdocdir;
+
+static char *sbackup = BACKUP_PREFIX;
+
+static char *datalocking = "fcntl";
+static char *localmbox = "";
+static bool localmbox_primed;
+
+extern char *spoollocking;
+
+static char *sasl =
+#ifdef CYRUS_SASL
+    "cyrus_sasl";
+#else
+    "";
+#endif
+
+static char *tls =
+#ifdef TLS_SUPPORT
+    "tls";
+#else
+    "";
+#endif
+
+static char *mimetypeproc =
+#ifdef MIMETYPEPROC
+    MIMETYPEPROC;
+#else
+    "";
+#endif
+
+static char *mimeencodingproc =
+#ifdef MIMEENCODINGPROC
+    MIMEENCODINGPROC;
+#else
+    "";
+#endif
+
+static char *iconv =
+#ifdef HAVE_ICONV
+    "iconv";
+#else
+    "";
+#endif
+
+static char *oauth =
+#ifdef OAUTH_SUPPORT
+    "oauth";
+#else
+    "";
+#endif
 
 struct proc {
     char *p_name;
@@ -38,58 +97,63 @@ struct proc {
 };
 
 static struct proc procs [] = {
-     { "context",       &context },
-     { "mh-sequences",  &mh_seq },
-     { "buildmimeproc", &buildmimeproc },
-     { "faceproc",      &faceproc },
-     { "fileproc",      &fileproc },
-     { "foldprot",      &foldprot },
-     { "incproc",       &incproc },
-     { "installproc",   &installproc  },
-     { "lproc",         &lproc },
-     { "mailproc",      &mailproc },
-     { "mhlproc",       &mhlproc },
-     { "moreproc",      &moreproc },
-     { "msgprot",       &msgprot },
-     { "mshproc",       &mshproc },
-     { "packproc",      &packproc },
-     { "postproc",      &postproc },
-     { "rmfproc",       &rmfproc },
-     { "rmmproc",       &rmmproc },
-     { "sendproc",      &sendproc },
-     { "showmimeproc",  &showmimeproc },
-     { "showproc",      &showproc },
-     { "version",       &version_num },
-     { "vmhproc",       &vmhproc },
-     { "whatnowproc",   &whatnowproc },
-     { "whomproc",      &whomproc },
-     { "etcdir",        &mhetcdir },
-     { "libdir",        &mhlibdir },
-     { "sbackup",       &sbackup },
-     { "link",          &slink },
-     { NULL,            NULL },
+     { "context",          &context },
+     { "mh-sequences",     &mh_seq },
+     { "buildmimeproc",    &buildmimeproc },
+     { "fileproc",         &fileproc },
+     { "foldprot",         &foldprot },
+     { "formatproc",      &formatproc },
+     { "incproc",          &incproc },
+     { "lproc",            &lproc },
+     { "mailproc",         &mailproc },
+     { "mhlproc",          &mhlproc },
+     { "mimetypeproc",     &mimetypeproc },
+     { "mimeencodingproc", &mimeencodingproc },
+     { "moreproc",         &moreproc },
+     { "msgprot",          &msgprot },
+     { "packproc",         &packproc },
+     { "postproc",         &postproc },
+     { "rmmproc",          &rmmproc },
+     { "sendproc",         &sendproc },
+     { "showmimeproc",     &showmimeproc },
+     { "showproc",         &showproc },
+     { "version",          &version_num },
+     { "whatnowproc",      &whatnowproc },
+     { "whomproc",         &whomproc },
+     { "bindir",           &mhbindir },
+     { "libexecdir",       &mhlibexecdir },
+     { "etcdir",           &mhetcdir },
+     { "docdir",           &mhdocdir },
+     { "localmbox",       &localmbox },
+     { "sbackup",          &sbackup },
+     { "datalocking",      &datalocking },
+     { "spoollocking",     &spoollocking },
+     { "iconv",                   &iconv },
+     { "oauth",                   &oauth },
+     { "sasl",             &sasl },
+     { "tls",              &tls },
+     { NULL,               NULL },
 };
 
 
 /*
  * static prototypes
  */
-static char *p_find(char *);
+static char *p_find(char *) PURE;
 
 
 int
 main(int argc, char **argv)
 {
-    int i, compp = 0, missed = 0;
-    int all = 0, debug = 0;
+    int i, compp = 0;
+    bool missed;
+    bool all = false;
+    bool debug = false;
     int components = -1;
     char *cp, buf[BUFSIZ], **argp;
     char **arguments, *comps[MAXARGS];
 
-    invo_name = r1bindex (argv[0], '/');
-
-    /* read user profile/context */
-    context_read();
+    if (nmh_init(argv[0], true, false)) { return 1; }
 
     arguments = getarguments (invo_name, argc, argv, 1);
     argp = arguments;
@@ -101,16 +165,16 @@ main(int argc, char **argv)
                    ambigsw (cp, switches);
                    done (1);
                case UNKWNSW: 
-                   adios (NULL, "-%s unknown", cp);
+                   die("-%s unknown", cp);
 
                case HELPSW: 
                    snprintf (buf, sizeof(buf), "%s [profile-components] [switches]",
                        invo_name);
                    print_help (buf, switches, 1);
-                   done (1);
+                   done (0);
                case VERSIONSW:
                    print_version(invo_name);
-                   done (1);
+                   done (0);
 
                case COMPSW:
                    components = 1;
@@ -120,15 +184,19 @@ main(int argc, char **argv)
                    break;
 
                case ALLSW:
-                   all = 1;
+                   all = true;
                    break;
 
                case DEBUGSW:
-                   debug = 1;
+                   debug = true;
                    break;
            }
        } else {
            comps[compp++] = cp;
+           if (strcmp("localmbox", cp) == 0 && ! localmbox_primed) {
+               localmbox = getlocalmbox();
+               localmbox_primed = true;
+           }
        }
     }
 
@@ -136,33 +204,56 @@ main(int argc, char **argv)
         struct node *np;
 
        if (compp)
-           advise(NULL, "profile-components ignored with -all");
+           inform("profile-components ignored with -all");
 
        if (components >= 0)
-           advise(NULL, "-%scomponents ignored with -all",
+           inform("-%scomponents ignored with -all",
                   components ? "" : "no");
 
-       /* print all entries in context/profile list */
+       /* Print all entries in context/profile list.  That does not
+          include entries in mts.conf, such as spoollocking. */
        for (np = m_defs; np; np = np->n_next)
            printf("%s: %s\n", np->n_name, np->n_field);
 
-    } if (debug) {
+    }
+
+    if (debug) {
        struct proc *ps;
 
+       /* In case datalocking was set in profile. */
+       if ((cp = context_find("datalocking"))) { datalocking = cp; }
+
+       /* In case spoollocking was set in mts.conf. */
+       mts_init();
+
+       /* Also set localmbox here */
+       if (! localmbox_primed) {
+           localmbox = getlocalmbox();
+           localmbox_primed = true;
+       }
+
        /*
         * Print the current value of everything in
         * procs array.  This will show their current
         * value (as determined after context is read).
          */
        for (ps = procs; ps->p_name; ps++)
-           printf ("%s: %s\n", ps->p_name, *ps->p_field ? *ps->p_field : "");
+           printf ("%s: %s\n", ps->p_name, FENDNULL(*ps->p_field));
 
-    } else {
+    }
+
+    missed = false;
+    if (! all) {
         if (components < 0)
            components = compp > 1;
 
        for (i = 0; i < compp; i++)  {
-           register char *value;
+           char *value;
+
+           if (! strcmp ("spoollocking", comps[i])) {
+               /* In case spoollocking was set in mts.conf. */
+               mts_init();
+            }
 
            value = context_find (comps[i]);
            if (!value)
@@ -171,13 +262,13 @@ main(int argc, char **argv)
                if (components)
                    printf("%s: ", comps[i]);
 
-               printf("%s\n", value);
+               puts(value);
            } else
-               missed++;
+                missed = true;
        }
     }
-    
-    done (missed);
+
+    done(missed);
 }
 
 
@@ -188,7 +279,7 @@ p_find(char *str)
 
     for (ps = procs; ps->p_name; ps++)
        if (!strcasecmp (ps->p_name, str))
-           return (*ps->p_field);
+           return *ps->p_field;
 
     return NULL;
 }