whatnow: Some minor refactoring.
[mmh] / uip / anno.c
index e97afbf..fbabfd4 100644 (file)
@@ -85,6 +85,7 @@ main(int argc, char **argv)
        char *cp, *maildir;
        unsigned char *comp = NULL;
        char *text = NULL, *folder = NULL, buf[BUFSIZ];
+       char *file = NULL;
        char **argp, **arguments;
        struct msgs_array msgs = { 0, 0, NULL };
        struct msgs *mp;
@@ -92,6 +93,7 @@ main(int argc, char **argv)
        int delete = -2;  /* delete header element if set */
        int list = 0;  /* list header elements if set */
        int number = 0; /* delete specific number of like elements if set */
+       int havemsgs = 0;
 
 #ifdef LOCALE
        setlocale(LC_ALL, "");
@@ -162,27 +164,25 @@ main(int argc, char **argv)
                                        number = 1;
 
                                else {
-                                               if (strcmp(*argp, "all") == 0)
-                                                       number = -1;
-
-                                               else if (!(number = atoi(*argp)))
+                                       if (strcmp(*argp, "all") == 0)
+                                               number = -1;
+                                       else if (!(number = atoi(*argp)))
                                                adios(NULL, "missing argument to %s", argp[-2]);
-
                                        argp++;
                                }
 
                                delete = number;
                                continue;
 
-                       case APPENDSW:  /* append annotations instead of default prepend */
+                       case APPENDSW:
                                append = 1;
                                continue;
 
-                       case PRESERVESW:  /* preserve access and modification times on annotated message */
+                       case PRESERVESW:
                                preserve = 1;
                                continue;
 
-                       case NOPRESERVESW:  /* don't preserve access and modification times on annotated message (default) */
+                       case NOPRESERVESW:
                                preserve = 0;
                                continue;
                        }
@@ -192,8 +192,29 @@ main(int argc, char **argv)
                                adios(NULL, "only one folder at a time!");
                        else
                                folder = getcpy(expandfol(cp));
-               } else
+               } else if (*cp == '/' || *cp == '.') {
+                       if (file)
+                               adios(NULL, "only one file at a time!");
+                       file = cp;
+               } else {
                        app_msgarg(&msgs, cp);
+                       havemsgs = 1;
+               }
+       }
+
+       if (file && (folder || havemsgs)) {
+               adios(NULL, "Don't intermix files and messages.");
+       }
+
+       make_comp(&comp);
+
+       if (file) {
+               if (list)
+                       annolist(file, comp, text, number);
+               else
+                       annotate(file, comp, text,
+                                       datesw, delete, append, preserve);
+               done(0);
        }
 
        if (!msgs.size)
@@ -218,23 +239,22 @@ main(int argc, char **argv)
                if (!m_convert(mp, msgs.msgs[msgnum]))
                        done(1);
 
-       make_comp(&comp);
-
        /* annotate all the SELECTED messages */
        for (msgnum = mp->lowsel; msgnum <= mp->hghsel; msgnum++) {
                if (is_selected(mp, msgnum)) {
                        if (list)
                                annolist(m_name(msgnum), comp, text, number);
                        else
-                               annotate(m_name(msgnum), comp, text, datesw, delete, append, preserve);
+                               annotate(m_name(msgnum), comp, text, datesw,
+                                               delete, append, preserve);
                }
        }
 
-       context_replace(curfolder, folder);  /* update current folder  */
-       seq_setcur(mp, mp->lowsel);  /* update current message */
-       seq_save(mp);  /* synchronize message sequences */
-       folder_free(mp);  /* free folder/message structure */
-       context_save();  /* save the context file */
+       context_replace(curfolder, folder);
+       seq_setcur(mp, mp->lowsel);
+       seq_save(mp);
+       folder_free(mp);
+       context_save();
        done(0);
        return 1;
 }