** alist This option lists the attachments on the
** draft.
**
-** detach files This option removes attachments from the
-** detach -n numbers draft. This can be done by file name or
-** by attachment number.
+** detach numbers This option removes attachments by
+** attachment number from the draft.
*/
#include <h/mh.h>
#define ATTACHCMDSW 10
{ "attach", 0 },
#define DETACHCMDSW 11
- { "detach [-n]", 0 },
+ { "detach", 0 },
#define ALISTCMDSW 12
{ "alist", 0 },
{ NULL, 0 }
char file[MAXPATHLEN + 1]; /* file name buffer */
char shell[MAXPATHLEN + 1]; /* shell response buffer */
FILE *f; /* read pointer for bgnd proc */
- int n; /* set on -n to detach command */
setlocale(LC_ALL, "");
invo_name = mhbasename(argv[0]);
/*
** Detach files from current draft.
**
- ** Scan the arguments for a -n. Mixed file
- ** names and numbers aren't allowed, so this
- ** catches a -n anywhere in the argument list.
- */
- for (n = 0, arguments = argp + 1;
- *arguments != NULL;
- arguments++) {
- if (strcmp(*arguments, "-n") == 0) {
- n = 1;
- break;
- }
- }
-
- /*
- ** A -n was found so interpret the arguments as
+ ** Interpret the arguments as
** attachment numbers. Decrement any remaining
** argument number that is greater than the one
** just processed after processing each one so
** that the numbering stays correct.
*/
- if (n == 1) {
- for (arguments=argp+1; *arguments;
- arguments++) {
- if (strcmp(*arguments, "-n") == 0)
- continue;
-
- if (**arguments != '\0') {
- char buf[BUFSIZ];
-
- n = atoi(*arguments);
- snprintf(buf, sizeof buf, "anno -delete -comp '%s' -number '%d' '%s'", attach_hdr, n, drft);
- if (system(buf) != 0) {
- advise(NULL, "Could not delete attachment header.");
- }
+ for (arguments=argp+1; *arguments; arguments++) {
+ char buf[BUFSIZ];
+ int n;
- for (argp=arguments+1; *argp;
- argp++) {
- if (atoi(*argp) > n) {
- if (atoi(*argp) == 1)
- *argp = "";
- else
- sprintf(*argp, "%d", atoi(*argp) - 1);
- }
- }
- }
+ if (**arguments == '\0') {
+ continue;
}
- break;
- }
- /* else */
- /*
- ** The arguments are interpreted as file names.
- ** Run them through the user's shell for wildcard
- ** expansion and other goodies. Do this from
- ** the current working directory if the argument
- ** is not an absolute path name (does not begin
- ** with a /).
- **
- ** We feed all the file names to the shell at
- ** once, otherwise you can't provide a file name
- ** with a space in it.
- */
- writelscmd(buf, sizeof(buf), argp);
- if ((f = popen_in_dir(cwd, buf, "r"))) {
- while (fgets(shell, sizeof (shell), f)) {
- *(strchr(shell, '\n')) = '\0';
- snprintf(buf, sizeof buf,
- "anno -delete -comp "
- "'%s' -text '%s' '%s'",
- attach_hdr, shell,
- drft);
- if (system(buf) != 0) {
- advise(NULL, "Could not delete attachment header.");
+ n = atoi(*arguments);
+ snprintf(buf, sizeof buf, "anno -delete "
+ "-comp '%s' -number '%d' "
+ "'%s'",
+ attach_hdr, n, drft);
+ if (system(buf) != 0) {
+ advise(NULL, "Could not delete attachment header.");
+ }
+
+ for (argp=arguments+1; *argp; argp++) {
+ if (atoi(*argp) > n) {
+ if (atoi(*argp) == 1) {
+ *argp = "";
+ } else {
+ sprintf(*argp, "%d", atoi(*argp) - 1);
+ }
}
}
- pclose(f);
- } else {
- advise("popen", "could not get file from shell");
}
-
break;
default: