X-Git-Url: https://diplodocus.org/git/nmh/blobdiff_plain/cfb5a32c4e47d9061ced49e74f34c275bd9e4b54..04ee0c3f6ad7e4177cc43a0c57f046013a4fbac9:/uip/pick.c diff --git a/uip/pick.c b/uip/pick.c index fb339d46..5939da17 100644 --- a/uip/pick.c +++ b/uip/pick.c @@ -1,16 +1,22 @@ - -/* - * pick.c -- search for messages by content +/* pick.c -- search for messages by content * * This code is Copyright (c) 2002, 2008, by the authors of nmh. See the * COPYRIGHT file in the root directory of the nmh distribution for * complete copyright information. */ -#include -#include -#include -#include +#include "h/mh.h" +#include "sbr/path.h" +#include "sbr/print_version.h" +#include "sbr/print_help.h" +#include "sbr/seq_nameok.h" +#include "sbr/seq_add.h" +#include "sbr/error.h" +#include "h/tws.h" +#include "h/picksbr.h" +#include "h/done.h" +#include "h/utils.h" +#include "sbr/m_maildir.h" #define PICK_SWITCHES \ X("reverse", 0, REVSW) \ @@ -56,7 +62,9 @@ static void putzero_done (int) NORETURN; int main (int argc, char **argv) { - int publicsw = -1, zerosw = 1, vecp = 0; + int publicsw = -1; + bool zerosw = true; + int vecp = 0; size_t seqp = 0; int msgnum; char *maildir, *folder = NULL, buf[100]; @@ -66,18 +74,14 @@ main (int argc, char **argv) struct msgs_array msgs = { 0, 0, NULL }; struct msgnum_array nums = { 0, 0, NULL }; struct msgs *mp, *mp2; - register FILE *fp; + FILE *fp; int debug = 0; - int reverse = 0; + bool reverse = false; int start, end, inc; - if (nmh_init(argv[0], 1)) { return 1; } - - done=putzero_done; + if (nmh_init(argv[0], true, true)) { return 1; } - /* Deprecated. Use -debug instead. */ - if ((cp = getenv ("MHPDEBUG")) && *cp) - ++debug; + set_done(putzero_done); arguments = getarguments (invo_name, argc, argv, 1); argp = arguments; @@ -94,7 +98,7 @@ main (int argc, char **argv) listsw = 0; /* HACK */ done (1); case UNKWNSW: - adios (NULL, "-%s unknown", cp); + die("-%s unknown", cp); case HELPSW: snprintf (buf, sizeof(buf), "%s [+folder] [msgs] [switches]", @@ -108,7 +112,7 @@ main (int argc, char **argv) done (0); case REVSW: - reverse = 1; + reverse = true; continue; case CCSW: @@ -123,11 +127,11 @@ main (int argc, char **argv) vec[vecp++] = --cp; pattern: if (!(cp = *argp++))/* allow -xyz arguments */ - adios (NULL, "missing argument to %s", argp[-2]); + die("missing argument to %s", argp[-2]); vec[vecp++] = cp; continue; case OTHRSW: - adios (NULL, "internal error!"); + die("internal error!"); case ANDSW: case ORSW: @@ -139,7 +143,7 @@ main (int argc, char **argv) case SEQSW: if (!(cp = *argp++) || *cp == '-') - adios (NULL, "missing argument to %s", argp[-2]); + die("missing argument to %s", argp[-2]); if (!seq_nameok (cp)) done (1); @@ -157,10 +161,10 @@ main (int argc, char **argv) publicsw = 0; continue; case ZEROSW: - zerosw++; + zerosw = true; continue; case NZEROSW: - zerosw = 0; + zerosw = false; continue; case LISTSW: @@ -177,9 +181,8 @@ 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 app_msgarg(&msgs, cp); } @@ -204,11 +207,11 @@ main (int argc, char **argv) /* read folder and create message structure */ if (!(mp = folder_read (folder, 0))) - 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 all the message ranges/sequences and set SELECTED */ for (msgnum = 0; msgnum < msgs.size; msgnum++) @@ -223,7 +226,7 @@ main (int argc, char **argv) listsw = !seqp; if (publicsw == 1 && is_readonly(mp)) - adios (NULL, "folder %s is read-only, so -public not allowed", folder); + die("folder %s is read-only, so -public not allowed", folder); if (!pcompile (vec, NULL)) done (1); @@ -253,7 +256,7 @@ main (int argc, char **argv) admonish (cp, "unable to read message"); if (fp && pmatches (fp, msgnum, 0L, 0L, debug)) { if (listsw) - printf ("%s\n", m_name (msgnum)); + puts(m_name (msgnum)); } else { app_msgnum(&nums, msgnum); } @@ -263,7 +266,7 @@ main (int argc, char **argv) } if (nums.size >= mp->numsel) - adios (NULL, "no messages match specification"); + die("no messages match specification"); /* * So, what's happening here? @@ -276,7 +279,7 @@ main (int argc, char **argv) */ if (!(mp2 = folder_read (folder, 1))) - adios (NULL, "unable to reread folder %s", folder); + die("unable to reread folder %s", folder); for (msgnum = 0; msgnum < msgs.size; msgnum++) if (!m_convert (mp2, msgs.msgs[msgnum])) @@ -306,7 +309,7 @@ main (int argc, char **argv) * Print total matched if not printing each matched message number. */ if (!listsw) { - printf ("%d hit%s\n", mp2->numsel, mp2->numsel == 1 ? "" : "s"); + printf ("%d hit%s\n", mp2->numsel, PLURALS(mp2->numsel)); } svector_free (seqs); @@ -320,10 +323,10 @@ main (int argc, char **argv) } -static void +static void NORETURN putzero_done (int status) { if (listsw && status && !isatty (fileno (stdout))) - printf ("0\n"); + puts("0"); exit (status); }