Move #include from h/mh.h to source files
[mmh] / uip / new.c
index a4da635..e95ee6a 100644 (file)
--- a/uip/new.c
+++ b/uip/new.c
 ** Inspired by Luke Mewburn's new: http://www.mewburn.net/luke/src/new
 */
 
+#include <h/mh.h>
+#include <h/crawl_folders.h>
+#include <h/utils.h>
 #include <sys/types.h>
-
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
-
-#include <h/mh.h>
-#include <h/crawl_folders.h>
-#include <h/utils.h>
+#include <unistd.h>
+#include <locale.h>
 
 static struct swit switches[] = {
 #define MODESW 0
-       { "mode", 1 },
+       { "mode", 0 },
 #define FOLDERSSW 1
-       { "folders", 1 },
+       { "folders", 0 },
 #define VERSIONSW 2
-       { "version", 1 },
+       { "Version", 0 },
 #define HELPSW 3
-       { "help", 1 },
+       { "help", 0 },
        { NULL, 0 }
 };
 
@@ -311,7 +311,11 @@ doit(char *cur, char *folders, char *sequences[])
        struct node *first, *cur_node, *node, *last = NULL, *prev;
        size_t folder_len;
        int count, total = 0;
-       char *command = NULL, *sequences_s = NULL;
+       char *sequences_s = NULL;
+       int argc = 0;
+       char *argv[MAXARGS];
+       char **seqp;
+       char buf[BUFSIZ];
 
        if (cur == NULL || cur[0] == '\0') {
                cur = "inbox";
@@ -383,14 +387,15 @@ doit(char *cur, char *folders, char *sequences[])
                        }
                        fflush(stdout);
 
-                       /*
-                       ** TODO: Split enough of scan.c out so that we can
-                       ** call it here.
-                       */
-                       command = concat("scan +", node->n_name, " ",
-                                       sequences_s, (void *)NULL);
-                       system(command);
-                       free(command);
+                       argc = 0;
+                       argv[argc++] = "scan";
+                       snprintf(buf, sizeof buf, "+%s", node->n_name);
+                       argv[argc++] = buf;
+                       for (seqp=sequences; *seqp; seqp++) {
+                               argv[argc++] = *seqp;
+                       }
+                       argv[argc] = (char *)NULL;
+                       execprog(*argv, argv);
                } else {
                        if (node->n_field == NULL) {
                                continue;
@@ -432,9 +437,10 @@ main(int argc, char **argv)
        char *unseen;
        struct node *folder;
 
-#ifdef LOCALE
+       sequences[0] = NULL;
+       sequences[1] = NULL;
+
        setlocale(LC_ALL, "");
-#endif
        invo_name = mhbasename(argv[0]);
 
        /* read user profile/context */
@@ -451,7 +457,7 @@ main(int argc, char **argv)
                        switch (smatch(++cp, switches)) {
                        case AMBIGSW:
                                ambigsw(cp, switches);
-                               done(1);
+                               exit(1);
                        case UNKWNSW:
                                adios(NULL, "-%s unknown", cp);
 
@@ -460,10 +466,10 @@ main(int argc, char **argv)
                                                "%s [switches] [sequences]",
                                                invo_name);
                                print_help(help, switches, 1);
-                               done(1);
+                               exit(0);
                        case VERSIONSW:
                                print_version(invo_name);
-                               done(1);
+                               exit(0);
 
                        case FOLDERSSW:
                                if (!(folders = *argp++) || *folders == '-')
@@ -481,6 +487,7 @@ main(int argc, char **argv)
                /* have a sequence argument */
                if (!seq_in_list(cp, sequences)) {
                        sequences[i++] = cp;
+                       sequences[i] = NULL;
                }
        }
 
@@ -519,7 +526,7 @@ main(int argc, char **argv)
 
        folder = doit(context_find(curfolder), folders, sequences);
        if (folder == NULL) {
-               done(0);
+               exit(0);
                return 1;
        }
 
@@ -543,6 +550,5 @@ main(int argc, char **argv)
 
        context_save();
 
-       done(0);
-       return 1;
+       return 0;
 }