X-Git-Url: https://diplodocus.org/git/nmh/blobdiff_plain/9a87f2bf9289ef232ec8c267fd7be76120c87ca2..ddf3a8574f657dcb8c53fc5908e7bebbde1994b5:/uip/mhlist.c diff --git a/uip/mhlist.c b/uip/mhlist.c index a9be19e1..a8e28cbd 100644 --- a/uip/mhlist.c +++ b/uip/mhlist.c @@ -5,23 +5,40 @@ * complete copyright information. */ -#include +#include "h/mh.h" +#include "sbr/m_name.h" +#include "sbr/m_gmprot.h" +#include "sbr/getarguments.h" +#include "sbr/seq_setprev.h" +#include "sbr/seq_setcur.h" +#include "sbr/seq_save.h" +#include "sbr/smatch.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 -#include -#include -#include -#include -#include -#include -#include -#include +#include "h/signals.h" +#include "h/mts.h" +#include "h/tws.h" +#include "h/mime.h" +#include "h/mhparse.h" +#include "h/done.h" +#include "h/utils.h" #include "mhmisc.h" -#include "../sbr/m_maildir.h" +#include "sbr/m_maildir.h" #include "mhfree.h" #define MHLIST_SWITCHES \ - X("check", 0, CHECKSW) \ - X("nocheck", 0, NCHECKSW) \ + X("check", -5, CHECKSW) \ + X("nocheck", -7, NCHECKSW) \ X("headers", 0, HEADSW) \ X("noheaders", 0, NHEADSW) \ X("realsize", 0, SIZESW) \ @@ -34,8 +51,7 @@ X("part number", 0, PARTSW) \ X("type content", 0, TYPESW) \ X("prefer content", 0, PREFERSW) \ - X("rcache policy", 0, RCACHESW) \ - X("wcache policy", 0, WCACHESW) \ + X("noprefer", 0, NPREFERSW) \ X("changecur", 0, CHGSW) \ X("nochangecur", 0, NCHGSW) \ X("version", 0, VERSIONSW) \ @@ -67,8 +83,12 @@ static void pipeser (int); int main (int argc, char **argv) { - int sizesw = 1, headsw = 1, chgflag = 1, verbosw = 0, dispo = 0; - int msgnum, *icachesw; + bool sizesw = true; + bool headsw = true; + bool chgflag = true; + bool verbosw = false; + bool dispo = false; + int msgnum; char *cp, *file = NULL, *folder = NULL; char *maildir, buf[100], **argp; char **arguments; @@ -76,9 +96,9 @@ main (int argc, char **argv) struct msgs *mp = NULL; CT ct, *ctp; - if (nmh_init(argv[0], 1)) { return 1; } + if (nmh_init(argv[0], true, true)) { return 1; } - done=freects_done; + set_done(freects_done); arguments = getarguments (invo_name, argc, argv, 1); argp = arguments; @@ -93,7 +113,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] [msgs] [switches]", @@ -104,100 +124,83 @@ main (int argc, char **argv) print_version(invo_name); done (0); - case RCACHESW: - icachesw = &rcachesw; - goto do_cache; - case WCACHESW: - icachesw = &wcachesw; -do_cache: - if (!(cp = *argp++) || *cp == '-') - adios (NULL, "missing argument to %s", argp[-2]); - switch (*icachesw = smatch (cp, cache_policy)) { - case AMBIGSW: - ambigsw (cp, cache_policy); - done (1); - case UNKWNSW: - adios (NULL, "%s unknown", cp); - default: - break; - } - continue; - case CHECKSW: - checksw++; - continue; case NCHECKSW: - checksw = 0; + /* Currently a NOP */ continue; case HEADSW: - headsw = 1; + headsw = true; continue; case NHEADSW: - headsw = 0; + headsw = false; continue; case SIZESW: - sizesw = 1; + sizesw = true; continue; case NSIZESW: - sizesw = 0; + sizesw = false; continue; case PARTSW: if (!(cp = *argp++) || *cp == '-') - adios (NULL, "missing argument to %s", argp[-2]); + die("missing argument to %s", argp[-2]); if (npart >= NPARTS) - adios (NULL, "too many parts (starting with %s), %d max", + die("too many parts (starting with %s), %d max", cp, NPARTS); parts[npart++] = cp; continue; case TYPESW: if (!(cp = *argp++) || *cp == '-') - adios (NULL, "missing argument to %s", argp[-2]); + die("missing argument to %s", argp[-2]); if (ntype >= NTYPES) - adios (NULL, "too many types (starting with %s), %d max", + die("too many types (starting with %s), %d max", cp, NTYPES); types[ntype++] = cp; continue; case PREFERSW: if (!(cp = *argp++) || *cp == '-') - adios (NULL, "missing argument to %s", argp[-2]); + die("missing argument to %s", argp[-2]); if (npreferred >= NPREFS) - adios (NULL, "too many preferred types (starting with %s), %d max", + die("too many preferred types (starting with %s), %d max", cp, NPREFS); - preferred_types[npreferred] = cp; + mime_preference[npreferred].type = cp; cp = strchr(cp, '/'); if (cp) *cp++ = '\0'; - preferred_subtypes[npreferred++] = cp; + mime_preference[npreferred++].subtype = cp; + continue; + + case NPREFERSW: + npreferred = 0; continue; case FILESW: if (!(cp = *argp++) || (*cp == '-' && cp[1])) - adios (NULL, "missing argument to %s", argp[-2]); + die("missing argument to %s", argp[-2]); file = *cp == '-' ? cp : path (cp, TFILE); continue; case CHGSW: - chgflag++; + chgflag = true; continue; case NCHGSW: - chgflag = 0; + chgflag = false; continue; case VERBSW: - verbosw = 1; + verbosw = true; continue; case NVERBSW: - verbosw = 0; + verbosw = false; continue; case DISPOSW: - dispo = 1; + dispo = true; continue; case NDISPOSW: - dispo = 0; + dispo = false; continue; case DEBUGSW: debugsw = 1; @@ -206,7 +209,7 @@ do_cache: } if (*cp == '+' || *cp == '@') { if (folder) - adios (NULL, "only one folder at a time!"); + die("only one folder at a time!"); folder = pluspath (cp); } else app_msgarg(&msgs, cp); @@ -216,20 +219,11 @@ do_cache: parts[npart] = NULL; types[ntype] = NULL; - /* Check for public cache location */ - if ((cache_public = context_find (nmhcache)) && *cache_public != '/') - cache_public = NULL; - - /* Check for private cache location */ - if (!(cache_private = context_find (nmhprivcache))) - cache_private = ".cache"; - cache_private = getcpy (m_maildir (cache_private)); - if (!context_find ("path")) free (path ("./", TFOLDER)); if (file && msgs.size) - adios (NULL, "cannot specify msg and file at same time!"); + die("cannot specify msg and file at same time!"); /* * check if message is coming from file @@ -255,11 +249,11 @@ do_cache: /* 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++) @@ -284,7 +278,7 @@ do_cache: if (!*cts) done (1); - userrs = 1; + userrs = true; SIGNAL (SIGQUIT, quitser); SIGNAL (SIGPIPE, pipeser);