-
-/*
- * 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) \
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) \
{ 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 */
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;
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;
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]",
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: {
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]);
}
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++; /* fall... */
+ 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:
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;
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:
}
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;
}
}
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:
i = YESW;
break;
default:
- advise (NULL, "say what?");
+ inform("say what?");
break;
}
}
/*
* 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.
/* 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))
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 */
return 1;
}
-void
+static void
docc (char *cp, int ccflag)
{
switch (smatch (cp, ccswitches)) {
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;
* 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);