X-Git-Url: http://git.marmaro.de/?a=blobdiff_plain;f=uip%2Fwhatnow.c;h=63a60f3049c4e63e6337c39d930ea1be2f5893d5;hb=3e017a7abbdf69bf0dff7a4073275961eda1ded8;hp=798d0e2462372a524b182ae7e7df53c7f35da3a0;hpb=6d6b17fd2311daa48928e36bb131cda8fd1c91eb;p=mmh diff --git a/uip/whatnow.c b/uip/whatnow.c index 798d0e2..63a60f3 100644 --- a/uip/whatnow.c +++ b/uip/whatnow.c @@ -31,9 +31,8 @@ ** 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 @@ -42,7 +41,7 @@ #include #include -static struct swit whatnowswitches[] = { +static struct swit switches[] = { #define EDITRSW 0 { "editor editor", 0 }, #define PRMPTSW 1 @@ -59,31 +58,31 @@ static struct swit whatnowswitches[] = { */ static struct swit aleqs[] = { #define EDITSW 0 - { "edit [ ]", 0 }, -#define REFILEOPT 1 - { "refile [] +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 []", 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 } }; @@ -115,7 +114,6 @@ main(int argc, char **argv) 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]); @@ -136,9 +134,9 @@ main(int argc, char **argv) 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); @@ -147,7 +145,7 @@ main(int argc, char **argv) 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); @@ -366,86 +364,39 @@ main(int argc, char **argv) /* ** 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: @@ -658,7 +609,7 @@ sendfile(char **arg, char *file) /* fall */ case OK: vecp = 0; - vec[vecp++] = invo_name; + vec[vecp++] = "send"; if (arg) while (*arg) vec[vecp++] = *arg++;