Renamed -version switch to -Version to remove the conflict with -verbose.
[mmh] / uip / new.c
index fc87b3a..de3c0be 100644 (file)
--- a/uip/new.c
+++ b/uip/new.c
@@ -26,7 +26,7 @@ static struct swit switches[] = {
 #define FOLDERSSW 1
        { "folders", 1 },
 #define VERSIONSW 2
-       { "version", 1 },
+       { "Version", 1 },
 #define HELPSW 3
        { "help", 1 },
        { NULL, 0 }
@@ -110,66 +110,65 @@ get_msgnums(char *folder, char *sequences[])
        for (state = FLD;;) {
                switch (state = m_getfld(state, name, field, sizeof(field),
                                fp)) {
-                       case FLD:
-                       case FLDPLUS:
-                       case FLDEOF:
-                               if (state == FLDPLUS) {
-                                       cp = getcpy(field);
-                                       while (state == FLDPLUS) {
-                                               state = m_getfld(state, name,
-                                                               field,
-                                                               sizeof(field),
-                                                               fp);
-                                               cp = add(field, cp);
-                                       }
+               case FLD:
+               case FLDPLUS:
+               case FLDEOF:
+                       if (state == FLDPLUS) {
+                               cp = getcpy(field);
+                               while (state == FLDPLUS) {
+                                       state = m_getfld(state, name, field,
+                                                       sizeof(field), fp);
+                                       cp = add(field, cp);
+                               }
 
-                                       /*
-                                       ** Here's where we differ from
-                                       ** seq_public: if it's in a
-                                       ** sequence we want, save the list
-                                       ** of messages.
-                                       */
-                                       if (seq_in_list(name, sequences)) {
-                                               this_msgnums = trimcpy(cp);
-                                               if (msgnums == NULL) {
-                                                       msgnums = this_msgnums;
-                                               } else {
-                                                       old_msgnums = msgnums;
-                                                       msgnums = concat(old_msgnums, " ", this_msgnums, (void *)NULL);
-                                                       free(old_msgnums);
-                                                       free(this_msgnums);
-                                               }
+                               /*
+                               ** Here's where we differ from
+                               ** seq_public: if it's in a
+                               ** sequence we want, save the list
+                               ** of messages.
+                               */
+                               if (seq_in_list(name, sequences)) {
+                                       this_msgnums = trimcpy(cp);
+                                       if (msgnums == NULL) {
+                                               msgnums = this_msgnums;
+                                       } else {
+                                               old_msgnums = msgnums;
+                                               msgnums = concat(old_msgnums, " ", this_msgnums, (void *)NULL);
+                                               free(old_msgnums);
+                                               free(this_msgnums);
                                        }
-                                       free(cp);
-                               } else {
-                                       /* and here */
-                                       if (seq_in_list(name, sequences)) {
-                                               this_msgnums = trimcpy(field);
-                                               if (msgnums == NULL) {
-                                                       msgnums = this_msgnums;
-                                               } else {
-                                                       old_msgnums = msgnums;
-                                                       msgnums = concat(old_msgnums, " ", this_msgnums, (void *)NULL);
-                                                       free(old_msgnums);
-                                                       free(this_msgnums);
-                                               }
+                               }
+                               free(cp);
+                       } else {
+                               /* and here */
+                               if (seq_in_list(name, sequences)) {
+                                       this_msgnums = trimcpy(field);
+                                       if (msgnums == NULL) {
+                                               msgnums = this_msgnums;
+                                       } else {
+                                               old_msgnums = msgnums;
+                                               msgnums = concat(old_msgnums, " ", this_msgnums, (void *)NULL);
+                                               free(old_msgnums);
+                                               free(this_msgnums);
                                        }
                                }
+                       }
 
-                               if (state == FLDEOF)
-                                       break;
-                               continue;
+                       if (state == FLDEOF)
+                               break;
+                       continue;
 
-                       case BODY:
-                       case BODYEOF:
-                               adios(NULL, "no blank lines are permitted in %s", seqfile);
-                               /* fall */
+               case BODY:
+               case BODYEOF:
+                       adios(NULL, "no blank lines are permitted in %s",
+                                       seqfile);
+                       /* fall */
 
-                       case FILEEOF:
-                               break;
+               case FILEEOF:
+                       break;
 
-                       default:
-                               adios(NULL, "%s is poorly formatted", seqfile);
+               default:
+                       adios(NULL, "%s is poorly formatted", seqfile);
                }
                break;  /* break from for loop */
        }
@@ -309,7 +308,7 @@ join_sequences(char *sequences[])
 static struct node *
 doit(char *cur, char *folders, char *sequences[])
 {
-       struct node *first, *cur_node, *node, *last, *prev;
+       struct node *first, *cur_node, *node, *last = NULL, *prev;
        size_t folder_len;
        int count, total = 0;
        char *command = NULL, *sequences_s = NULL;
@@ -433,6 +432,9 @@ main(int argc, char **argv)
        char *unseen;
        struct node *folder;
 
+       sequences[0] = NULL;
+       sequences[1] = NULL;
+
 #ifdef LOCALE
        setlocale(LC_ALL, "");
 #endif
@@ -482,6 +484,7 @@ main(int argc, char **argv)
                /* have a sequence argument */
                if (!seq_in_list(cp, sequences)) {
                        sequences[i++] = cp;
+                       sequences[i] = NULL;
                }
        }
 
@@ -502,18 +505,23 @@ main(int argc, char **argv)
        }
 
        if (i == 0) {
+               char *dp;
                /* no sequence arguments; use unseen */
-               unseen = context_find(usequence);
-               if (unseen == NULL || unseen[0] == '\0') {
-                       adios(NULL, "must specify sequences or set %s", usequence);
+               if ((unseen = context_find(usequence))) {
+                       if (!*unseen) {
+                               adios(NULL, "profile entry %s set, but empty, and no sequences given", usequence);
+                       }
+               } else {
+                       unseen = seq_unseen;  /* use default */
                }
-               for (ap = brkstring(unseen, " ", "\n"); *ap; ap++) {
+               dp = getcpy(unseen);
+               for (ap = brkstring(dp, " ", "\n"); *ap; ap++) {
                        sequences[i++] = *ap;
                }
        }
        sequences[i] = NULL;
 
-       folder = doit(context_find(pfolder), folders, sequences);
+       folder = doit(context_find(curfolder), folders, sequences);
        if (folder == NULL) {
                done(0);
                return 1;
@@ -527,11 +535,11 @@ main(int argc, char **argv)
                ** has in memory.  So, we'll be lame, too.  I'm not sure if i
                ** should just change context_replace...
                */
-               context_replace(pfolder, "defeat_context_replace_optimization");
+               context_replace(curfolder, "defeat_context_replace_optimization");
        }
 
        /* update current folder */
-       context_replace(pfolder, folder->n_name);
+       context_replace(curfolder, folder->n_name);
 
        if (run_mode == FNEXT || run_mode == FPREV) {
                printf("%s  %s\n", folder->n_name, folder->n_field);