* 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
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,
break;
- case ATTACHCMDSW:
+ case ATTACHCMDSW: {
/*
* 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;
}
+ 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) {
- advise((char *)0, "attach command requires file argument(s).");
+ advise(NULL, "attach command requires file argument(s).");
break;
}
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';
- if (*shell == '/')
+ if (*shell == '/') {
(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);
+ if (verbose) {
+ build_directive =
+ construct_build_directive (file, NULL,
+ attachformat);
+ }
+ }
+
+ if (verbose) {
+ printf ("%s", build_directive);
+ free (build_directive);
}
}
}
break;
-
+ }
case DETACHCMDSW:
/*
* Detach files from current draft.
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) \