** 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>
#include <h/mime.h>
#include <h/utils.h>
-static struct swit whatnowswitches[] = {
+static struct swit switches[] = {
#define EDITRSW 0
{ "editor editor", 0 },
#define PRMPTSW 1
*/
static struct swit aleqs[] = {
#define EDITSW 0
- { "edit [<editor> <switches>]", 0 },
-#define REFILEOPT 1
- { "refile [<switches>] +folder", 0 },
+ { "edit [editor [switches]]", 0 },
+#define LISTSW 1
+ { "list", 0 },
#define DISPSW 2
{ "display", 0 },
-#define LISTSW 3
- { "list", 0 },
-#define SENDSW 4
- { "send [<switches>]", 0 },
-#define QUITSW 5
- { "quit", 0 },
-#define DELETESW 6
+#define SENDSW 3
+ { "send", 0 },
+#define REFILEOPT 4
+ { "refile +folder", 0 },
+#define DELETESW 5
{ "delete", 0 },
+#define QUITSW 6
+ { "quit", 0 },
#define CDCMDSW 7
{ "cd [directory]", 0 },
#define PWDCMDSW 8
{ "pwd", 0 },
#define LSCMDSW 9
{ "ls", 0 },
-#define ATTACHCMDSW 10
- { "attach", 0 },
-#define DETACHCMDSW 11
- { "detach [-n]", 0 },
-#define ALISTCMDSW 12
+#define ALISTCMDSW 10
{ "alist", 0 },
+#define ATTACHCMDSW 11
+ { "attach files", 0 },
+#define DETACHCMDSW 12
+ { "detach numbers", 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]);
while ((cp = *argp++)) {
if (*cp == '-') {
- switch (smatch(++cp, whatnowswitches)) {
+ switch (smatch(++cp, switches)) {
case AMBIGSW:
- ambigsw(cp, whatnowswitches);
+ ambigsw(cp, switches);
done(1);
case UNKWNSW:
adios(NULL, "-%s unknown", cp);
snprintf(buf, sizeof(buf),
"%s [switches] [file]",
invo_name);
- print_help(buf, whatnowswitches, 1);
+ print_help(buf, switches, 1);
done(1);
case VERSIONSW:
print_version(invo_name);
/*
** 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:
/* fall */
case OK:
vecp = 0;
- vec[vecp++] = invo_name;
+ vec[vecp++] = "send";
if (arg)
while (*arg)
vec[vecp++] = *arg++;