]> diplodocus.org Git - nmh/blobdiff - uip/repl.c
man: Use `.B' instead of `.BR' when only one argument.
[nmh] / uip / repl.c
index 430e2cc3aa818730def82291d127986a9f512021..e588799e1b64f598ad46ea2d7fccbfb20592e8fc 100644 (file)
@@ -1,15 +1,40 @@
-
-/*
- * repl.c -- reply to a message
+/* repl.c -- reply to a message
  *
  * 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>
-#include <h/mime.h>
-#include <h/utils.h>
+#include "h/mh.h"
+#include "whatnowproc.h"
+#include "annosbr.h"
+#include "sbr/m_name.h"
+#include "sbr/getarguments.h"
+#include "sbr/read_switch_multiword.h"
+#include "sbr/concat.h"
+#include "sbr/seq_setprev.h"
+#include "sbr/seq_setcur.h"
+#include "sbr/seq_save.h"
+#include "sbr/showfile.h"
+#include "sbr/smatch.h"
+#include "sbr/refile.h"
+#include "sbr/m_draft.h"
+#include "sbr/m_convert.h"
+#include "sbr/getfolder.h"
+#include "sbr/folder_read.h"
+#include "sbr/context_save.h"
+#include "sbr/context_replace.h"
+#include "sbr/context_find.h"
+#include "sbr/ambigsw.h"
+#include "sbr/path.h"
+#include "sbr/print_version.h"
+#include "sbr/print_help.h"
+#include "sbr/error.h"
+#include "h/mime.h"
+#include "h/done.h"
+#include "h/utils.h"
+#include "sbr/m_maildir.h"
+#include "replsbr.h"
 
 #define REPL_SWITCHES \
     X("group", 0, GROUPSW) \
@@ -40,7 +65,7 @@
     X("width columns", 0, WIDTHSW) \
     X("version", 0, VERSIONSW) \
     X("help", 0, HELPSW) \
-    X("file file", 4, FILESW) /* interface from msh */ \
+    X("file file", 4, FILESW) \
     X("build", 5, BILDSW) /* interface from mhe */ \
     X("atfile", 0, ATFILESW) \
     X("noatfile", 0, NOATFILESW) \
@@ -92,15 +117,10 @@ static struct swit aqrl[] = {
     { NULL, 0, 0 }
 };
 
-short ccto = -1;               /* global for replsbr */
-short cccc = -1;
-short ccme = -1;
-short querysw = 0;
-
 static short outputlinelen = OUTPUTLINELEN;
-static short groupreply = 0;           /* Is this a group reply?        */
+static bool groupreply;                        /* Is this a group reply?        */
 
-static int mime = 0;                   /* include original as MIME part */
+static bool mime;                      /* include original as MIME part */
 static char *form   = NULL;            /* form (components) file        */
 static char *filter = NULL;            /* message filter file           */
 static char *fcc    = NULL;            /* folders to add to Fcc: header */
@@ -117,9 +137,11 @@ int
 main (int argc, char **argv)
 {
     int        i, isdf = 0;
-    int anot = 0, inplace = 1;
-    int nedit = 0, nwhat = 0;
-    int atfile = 0;
+    bool anot = false;
+    bool inplace = true;
+    bool nedit = false;
+    bool nwhat = false;
+    bool atfile = false;
     int fmtproc = -1;
     char *cp, *cwd, *dp, *maildir, *file = NULL;
     char *folder = NULL, *msg = NULL, *dfolder = NULL;
@@ -131,10 +153,9 @@ main (int argc, char **argv)
     struct msgs *mp = NULL;
     struct stat st;
     FILE *in;
+    bool buildsw = false;
 
-    int buildsw = 0;
-
-    if (nmh_init(argv[0], 1)) { return 1; }
+    if (nmh_init(argv[0], true, true)) { return 1; }
 
     arguments = getarguments (invo_name, argc, argv, 1);
     argp = arguments;
@@ -146,7 +167,7 @@ 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: [+folder] [msg] [switches]",
@@ -158,37 +179,37 @@ main (int argc, char **argv)
                    done (0);
 
                case GROUPSW:
-                   groupreply++;
+                   groupreply = true;
                    continue;
                case NGROUPSW:
-                   groupreply = 0;
+                   groupreply = false;
                    continue;
 
                case ANNOSW: 
-                   anot++;
+                   anot = true;
                    continue;
                case NANNOSW: 
-                   anot = 0;
+                   anot = false;
                    continue;
 
                case CCSW: 
                    if (!(cp = *argp++) || *cp == '-')
-                       adios (NULL, "missing argument to %s", argp[-2]);
+                       die("missing argument to %s", argp[-2]);
                    docc (cp, 1);
                    continue;
                case NCCSW: 
                    if (!(cp = *argp++) || *cp == '-')
-                       adios (NULL, "missing argument to %s", argp[-2]);
+                       die("missing argument to %s", argp[-2]);
                    docc (cp, 0);
                    continue;
 
                case EDITRSW: 
                    if (!(ed = *argp++) || *ed == '-')
-                       adios (NULL, "missing argument to %s", argp[-2]);
-                   nedit = 0;
+                       die("missing argument to %s", argp[-2]);
+                   nedit = false;
                    continue;
                case NEDITSW:
-                   nedit++;
+                   nedit = true;
                    continue;
                    
                case CONVERTARGSW: {
@@ -196,10 +217,10 @@ main (int argc, char **argv)
                     size_t i;
 
                    if (!(type = *argp++)) {
-                       adios (NULL, "missing type argument to %s", argp[-2]);
+                       die("missing type argument to %s", argp[-2]);
                     }
                    if (!(cp = *argp++)) {
-                       adios (NULL, "missing argstring argument to %s",
+                       die("missing argstring argument to %s",
                               argp[-3]);
                     }
 
@@ -221,67 +242,67 @@ main (int argc, char **argv)
 
                case WHATSW: 
                    if (!(whatnowproc = *argp++) || *whatnowproc == '-')
-                       adios (NULL, "missing argument to %s", argp[-2]);
-                   nwhat = 0;
+                       die("missing argument to %s", argp[-2]);
+                   nwhat = false;
                    continue;
                case BILDSW: 
-                   buildsw++;
+                   buildsw = true;
                    /* FALLTHRU */
                case NWHATSW: 
-                   nwhat++;
+                   nwhat = true;
                    continue;
 
                case FCCSW: 
                    if (!(cp = *argp++) || *cp == '-')
-                       adios (NULL, "missing argument to %s", argp[-2]);
+                       die("missing argument to %s", argp[-2]);
                    dp = NULL;
                    if (*cp == '@')
                        cp = dp = path (cp + 1, TSUBCWF);
                    if (fcc)
                        fcc = add (", ", fcc);
                    fcc = add (cp, fcc);
-                    mh_xfree(dp);
+                    free(dp);
                    continue;
 
                case FILESW: 
                    if (file)
-                       adios (NULL, "only one file at a time!");
+                       die("only one file at a time!");
                    if (!(cp = *argp++) || *cp == '-')
-                       adios (NULL, "missing argument to %s", argp[-2]);
+                       die("missing argument to %s", argp[-2]);
                    file = path (cp, TFILE);
                    continue;
                case FILTSW:
                    if (!(cp = *argp++) || *cp == '-')
-                       adios (NULL, "missing argument to %s", argp[-2]);
-                   filter = getcpy (etcpath (cp));
-                   mime = 0;
+                       die("missing argument to %s", argp[-2]);
+                   filter = mh_xstrdup(etcpath(cp));
+                   mime = false;
                    continue;
                case FORMSW: 
                    if (!(form = *argp++) || *form == '-')
-                       adios (NULL, "missing argument to %s", argp[-2]);
+                       die("missing argument to %s", argp[-2]);
                    continue;
 
                case FRMTSW: 
-                   filter = getcpy (etcpath (mhlreply));
-                   mime = 0;
+                   filter = mh_xstrdup(etcpath(mhlreply));
+                   mime = false;
                    continue;
                case NFRMTSW: 
                    filter = NULL;
                    continue;
 
                case INPLSW: 
-                   inplace++;
+                   inplace = true;
                    continue;
                case NINPLSW: 
-                   inplace = 0;
+                   inplace = false;
                    continue;
 
                case MIMESW:
-                   mime++;
+                   mime = true;
                    filter = NULL;
                    continue;
                case NMIMESW:
-                   mime = 0;
+                   mime = false;
                    continue;
 
                case QURYSW: 
@@ -293,24 +314,24 @@ main (int argc, char **argv)
 
                case WIDTHSW: 
                    if (!(cp = *argp++) || *cp == '-')
-                       adios (NULL, "missing argument to %s", argp[-2]);
+                       die("missing argument to %s", argp[-2]);
                    if ((outputlinelen = atoi (cp)) < 10)
-                       adios (NULL, "impossible width %d", outputlinelen);
+                       die("impossible width %d", outputlinelen);
                    continue;
 
                case DFOLDSW: 
                    if (dfolder)
-                       adios (NULL, "only one draft folder at a time!");
+                       die("only one draft folder at a time!");
                    if (!(cp = *argp++) || *cp == '-')
-                       adios (NULL, "missing argument to %s", argp[-2]);
+                       die("missing argument to %s", argp[-2]);
                    dfolder = path (*cp == '+' || *cp == '@' ? cp + 1 : cp,
                                    *cp != '@' ? TFOLDER : TSUBCWF);
                    continue;
                case DMSGSW:
                    if (dmsg)
-                       adios (NULL, "only one draft message at a time!");
+                       die("only one draft message at a time!");
                    if (!(dmsg = *argp++) || *dmsg == '-')
-                       adios (NULL, "missing argument to %s", argp[-2]);
+                       die("missing argument to %s", argp[-2]);
                    continue;
                case NDFLDSW: 
                    dfolder = NULL;
@@ -318,15 +339,15 @@ main (int argc, char **argv)
                    continue;
 
                case ATFILESW:
-                   atfile++;
+                   atfile = true;
                    continue;
                case NOATFILESW:
-                   atfile = 0;
+                   atfile = false;
                    continue;
 
                case FMTPROCSW:
                    if (!(formatproc = *argp++) || *formatproc == '-')
-                       adios (NULL, "missing argument to %s", argp[-2]);
+                       die("missing argument to %s", argp[-2]);
                    fmtproc = 1;
                    continue;
                case NFMTPROCSW:
@@ -336,14 +357,12 @@ main (int argc, char **argv)
        }
        if (*cp == '+' || *cp == '@') {
            if (folder)
-               adios (NULL, "only one folder at a time!");
-           else
-               folder = pluspath (cp);
+               die("only one folder at a time!");
+            folder = pluspath (cp);
        } else {
            if (msg)
-               adios (NULL, "only one message at a time!");
-           else
-               msg = cp;
+               die("only one message at a time!");
+            msg = cp;
        }
     }
 
@@ -359,7 +378,7 @@ main (int argc, char **argv)
     if (!context_find ("path"))
        free (path ("./", TFOLDER));
     if (file && (msg || folder))
-       adios (NULL, "can't mix files and folders/msgs");
+       die("can't mix files and folders/msgs");
 
 try_it_again:
 
@@ -399,7 +418,7 @@ try_it_again:
        /*
         * We are replying to a file.
         */
-       anot = 0;       /* we don't want to annotate a file */
+       anot = false;   /* we don't want to annotate a file */
     } else {
        /*
         * We are replying to a message.
@@ -415,11 +434,11 @@ try_it_again:
 
        /* read folder and create message structure */
        if (!(mp = folder_read (folder, 1)))
-           adios (NULL, "unable to read folder %s", folder);
+           die("unable to read folder %s", folder);
 
        /* check for empty folder */
        if (mp->nummsg == 0)
-           adios (NULL, "no messages in %s", folder);
+           die("no messages in %s", folder);
 
        /* parse the message range/sequence/name and set SELECTED */
        if (!m_convert (mp, msg))
@@ -427,7 +446,7 @@ try_it_again:
        seq_setprev (mp);       /* set the previous-sequence */
 
        if (mp->numsel > 1)
-           adios (NULL, "only one message at a time!");
+           die("only one message at a time!");
 
        context_replace (pfolder, folder);      /* update current folder   */
        seq_setcur (mp, mp->lowsel);    /* update current message  */
@@ -477,7 +496,7 @@ try_it_again:
     return 1;
 }
 
-void
+static void
 docc (char *cp, int ccflag)
 {
     switch (smatch (cp, ccswitches)) {
@@ -485,7 +504,7 @@ docc (char *cp, int ccflag)
            ambigsw (cp, ccswitches);
            done (1);
        case UNKWNSW: 
-           adios (NULL, "-%scc %s unknown", ccflag ? "" : "no", cp);
+           die("-%scc %s unknown", ccflag ? "" : "no", cp);
 
        case CTOSW: 
            ccto = ccflag;
@@ -513,9 +532,10 @@ docc (char *cp, int ccflag)
  * The ARGS pseudoheader is optional, but we always add it when
  * -convertargs is used.
  */
-void
+static void
 add_convert_header (const char *convert_type, char *convert_arg,
-                    char *filename, char *drft) {
+                    char *filename, char *drft)
+{
     char *field_name;
 
     field_name = concat (MHBUILD_FILE_PSEUDOHEADER, convert_type, NULL);