]> diplodocus.org Git - nmh/blobdiff - uip/whatnowsbr.c
One final fix to test-attach-detach.
[nmh] / uip / whatnowsbr.c
index 03f3e054ab1b05b244c46d567c675fca331d8d1c..7b20925a055d98707f87cfbdaa5f65d170f9cfc3 100644 (file)
  *                             pwd command and exists to allow the user
  *                             to verify the directory.
  *
  *                             pwd command and exists to allow the user
  *                             to verify the directory.
  *
- *     attach files            This option attaches the named files to
- *                             the draft.
+ *     attach [-v [-a 0|1|2]] files
+ *                             This option attaches the named files to
+ *                             the draft.  -v displays the mhbuild
+ *                             directive, using the optionally specified
+ *                             attachformat [-a] if that is also provided
+ *                             to send(1).
  *
  *     alist [-ln]             This option lists the attachments on the
  *                             draft.  -l gets long listings, -n gets
  *
  *     alist [-ln]             This option lists the attachments on the
  *                             draft.  -l gets long listings, -n gets
@@ -80,8 +84,8 @@ DEFINE_SWITCH_ARRAY(WHATNOW, whatnowswitches);
     X("cd [directory]", 0, CDCMDSW) \
     X("pwd", 0, PWDCMDSW) \
     X("ls", 2, LSCMDSW) \
     X("cd [directory]", 0, CDCMDSW) \
     X("pwd", 0, PWDCMDSW) \
     X("ls", 2, LSCMDSW) \
-    X("attach", 0, ATTACHCMDSW) \
-    X("detach [-n]", 2, DETACHCMDSW) \
+    X("attach [-v [-a 0|1|2]]", 0, ATTACHCMDSW) \
+    X("detach [-n]", 0, DETACHCMDSW) \
     X("alist [-ln] ", 2, ALISTCMDSW) \
 
 #define X(sw, minchars, id) id,
     X("alist [-ln] ", 2, ALISTCMDSW) \
 
 #define X(sw, minchars, id) id,
@@ -393,18 +397,47 @@ WhatNow (int argc, char **argv)
 
            break;
 
 
            break;
 
-       case ATTACHCMDSW:
+       case ATTACHCMDSW: {
            /*
             *  Attach files to current draft.
             */
 
            /*
             *  Attach files to current draft.
             */
 
+            int verbose = 0;
+            int attachformat = 1;
+            char **ap;
+
            if (attach == (char *)0) {
                advise((char *)0, "can't attach because no header field name was given.");
                break;
            }
 
            if (attach == (char *)0) {
                advise((char *)0, "can't attach because no header field name was given.");
                break;
            }
 
+           for (ap = argp+1; *ap; ++ap) {
+               if (strcmp(*ap, "-v") == 0) {
+                   ++argp;
+                   verbose = 1;
+               } else if (strcmp(*ap, "-a") == 0) {
+                   ++argp;
+                   if (*(ap+1) == NULL  ||
+                       ! isdigit ((unsigned char) *(ap+1)[0])) {
+                       advise(NULL,
+                              "ignoring attach -a without format argument.");
+                   } else {
+                       ++argp;
+                       ++ap;
+                       if ((attachformat = atoi(*ap)) > 2) {
+                           advise(NULL,
+                                  "ingoring invalid attachformat value of %d",
+                                  attachformat);
+                           attachformat = 1;
+                       }
+                   }
+               } else if (*ap[0] != '-') {
+                   break;
+               }
+           }
+
            if (*(argp+1) == (char *)0) {
            if (*(argp+1) == (char *)0) {
-               advise((char *)0, "attach command requires file argument(s).");
+               advise(NULL, "attach command requires file argument(s).");
                break;
            }
 
                break;
            }
 
@@ -424,13 +457,30 @@ WhatNow (int argc, char **argv)
 
            if ((f = popen_in_dir(cwd, buf, "r")) != (FILE *)0) {
                while (fgets(shell, sizeof (shell), f) != (char *)0) {
 
            if ((f = popen_in_dir(cwd, buf, "r")) != (FILE *)0) {
                while (fgets(shell, sizeof (shell), f) != (char *)0) {
+                   char *build_directive;
+
                    *(strchr(shell, '\n')) = '\0';
 
                    *(strchr(shell, '\n')) = '\0';
 
-                   if (*shell == '/')
+                   if (*shell == '/') {
                        (void)annotate(drft, attach, shell, 1, 0, -2, 1);
                        (void)annotate(drft, attach, shell, 1, 0, -2, 1);
-                   else {
+                       if (verbose) {
+                           build_directive =
+                               construct_build_directive (shell, NULL,
+                                                          attachformat);
+                       }
+                   } else {
                        (void)sprintf(file, "%s/%s", cwd, shell);
                        (void)annotate(drft, attach, file, 1, 0, -2, 1);
                        (void)sprintf(file, "%s/%s", cwd, shell);
                        (void)annotate(drft, attach, file, 1, 0, -2, 1);
+                       if (verbose) {
+                           build_directive =
+                               construct_build_directive (file, NULL,
+                                                          attachformat);
+                       }
+                   }
+
+                   if (verbose) {
+                       printf ("%s", build_directive);
+                       free (build_directive);
                    }
                }
 
                    }
                }
 
@@ -441,7 +491,7 @@ WhatNow (int argc, char **argv)
            }
 
            break;
            }
 
            break;
-
+       }
        case DETACHCMDSW:
            /*
             *  Detach files from current draft.
        case DETACHCMDSW:
            /*
             *  Detach files from current draft.
@@ -999,7 +1049,7 @@ check_draft (char *msgnam)
     X("saslmaxssf", SASLminc(-10), SASLMXSSFSW) \
     X("saslmech", SASLminc(-5), SASLMECHSW) \
     X("user", SASLminc(-4), USERSW) \
     X("saslmaxssf", SASLminc(-10), SASLMXSSFSW) \
     X("saslmech", SASLminc(-5), SASLMECHSW) \
     X("user", SASLminc(-4), USERSW) \
-    X("attach file", 6, SNDATTACHSW) \
+    X("attach fieldname", 6, SNDATTACHSW) \
     X("noattach", 0, SNDNOATTACHSW) \
     X("attachformat", 7, SNDATTACHFORMAT) \
     X("port server-port-name/number", 4, PORTSW) \
     X("noattach", 0, SNDNOATTACHSW) \
     X("attachformat", 7, SNDATTACHFORMAT) \
     X("port server-port-name/number", 4, PORTSW) \