X-Git-Url: http://git.marmaro.de/?a=blobdiff_plain;f=uip%2Fwhatnow.c;h=efdf02d4b7176195df17488f47f8398e70205fbd;hb=3410b680416c49a7617491af38bc1929855a331d;hp=bd1a3d5501500b92b7f9261bb8f853fbd24de470;hpb=f85f4b7ae62e3d05a945dcd46ead51f0a2a89a9b;p=mmh diff --git a/uip/whatnow.c b/uip/whatnow.c index bd1a3d5..efdf02d 100644 --- a/uip/whatnow.c +++ b/uip/whatnow.c @@ -28,9 +28,8 @@ ** attach files This option attaches the named files to ** the draft. ** -** alist [-ln] This option lists the attachments on the -** draft. -l gets long listings, -n gets -** numbered listings. +** 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 @@ -71,24 +70,22 @@ static struct swit aleqs[] = { { "list", 0 }, #define SENDSW 4 { "send []", 0 }, -#define PUSHSW 5 - { "push []", 0 }, -#define QUITSW 6 +#define QUITSW 5 { "quit", 0 }, -#define DELETESW 7 +#define DELETESW 6 { "delete", 0 }, -#define CDCMDSW 8 +#define CDCMDSW 7 { "cd [directory]", 0 }, -#define PWDCMDSW 9 +#define PWDCMDSW 8 { "pwd", 0 }, -#define LSCMDSW 10 +#define LSCMDSW 9 { "ls", 0 }, -#define ATTACHCMDSW 11 +#define ATTACHCMDSW 10 { "attach", 0 }, -#define DETACHCMDSW 12 - { "detach [-n]", 2 }, -#define ALISTCMDSW 13 - { "alist [-ln] ", 2 }, +#define DETACHCMDSW 11 + { "detach [-n]", 0 }, +#define ALISTCMDSW 12 + { "alist", 0 }, { NULL, 0 } }; @@ -99,7 +96,8 @@ static char *myprompt = "\nWhat now? "; */ static int editfile(char **, char **, char *, int, struct msgs *, char *, char *, int); -static int sendfile(char **, char *, int); +static int sendfile(char **, char *); +static int refile(char **, char *); static int removefile(char *); static void writelscmd(char *, int, char **); static void writesomecmd(char *buf, int bufsz, char *cmd, char *trailcmd, char **argp); @@ -125,8 +123,7 @@ 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 */ - char *l; /* set on -l to alist command */ - int n; /* set on -n to alist command */ + int n; /* set on -n to detach command */ #ifdef LOCALE setlocale(LC_ALL, ""); @@ -144,7 +141,7 @@ main(int argc, char **argv) ** Get the initial current working directory. */ - if (getcwd(cwd, sizeof (cwd)) == NULL) { + if (!getcwd(cwd, sizeof (cwd))) { adios("getcwd", "could not get working directory"); } @@ -191,7 +188,7 @@ main(int argc, char **argv) drft = cp; } - if ((drft == NULL && (drft = getenv("mhdraft")) == NULL) || *drft == 0) + if ((!drft && !(drft = getenv("mhdraft"))) || !*drft) drft = getcpy(m_draft(seq_cur)); msgnam = (cp = getenv("mhaltmsg")) && *cp ? getcpy(cp) : NULL; @@ -199,7 +196,7 @@ main(int argc, char **argv) if ((cp = getenv("mhuse")) && *cp) use = atoi(cp); - if (ed == NULL && ((ed = getenv("mheditor")) == NULL || *ed == 0)) { + if (!ed && (!(ed = getenv("mheditor")) || !*ed)) { ed = NULL; nedit++; } @@ -220,7 +217,7 @@ main(int argc, char **argv) /* display the msg being replied to or distributed */ if (msgnam) { snprintf(buf, sizeof buf, "%s '%s'", - lproc, msgnam); + listproc, msgnam); system(buf); } else { advise(NULL, "no alternate message to display"); @@ -238,7 +235,7 @@ main(int argc, char **argv) case LISTSW: /* display the draft file */ - snprintf(buf, sizeof buf, "%s '%s'", lproc, drft); + snprintf(buf, sizeof buf, "%s '%s'", listproc, drft); system(buf); break; @@ -254,21 +251,16 @@ main(int argc, char **argv) removefile(drft); done(1); - case PUSHSW: - /* Send draft in background */ - if (sendfile(++argp, drft, 1)) - done(1); - break; - case SENDSW: /* Send draft */ - sendfile(++argp, drft, 0); + sendfile(++argp, drft); break; case REFILEOPT: /* Refile the draft */ - if (refile(++argp, drft) == 0) + if (refile(++argp, drft) == 0) { done(0); + } break; case CDCMDSW: @@ -286,11 +278,11 @@ main(int argc, char **argv) } else { writesomecmd(buf, BUFSIZ, "cd", "pwd", argp); } - if ((f = popen_in_dir(cwd, buf, "r")) != (FILE *)0) { + if ((f = popen_in_dir(cwd, buf, "r"))) { fgets(cwd, sizeof (cwd), f); - if (strchr(cwd, '\n') != NULL) - *strchr(cwd, '\n') = '\0'; + if (strchr(cwd, '\n')) + *strchr(cwd, '\n') = '\0'; pclose(f); } else { @@ -319,38 +311,14 @@ main(int argc, char **argv) case ALISTCMDSW: /* - ** List attachments on current draft. Options are: - ** - ** -l long listing (full path names) - ** -n numbers listing + ** List attachments on current draft. */ - - l = NULL; - n = 0; - - while (*++argp != NULL) { - if (strcmp(*argp, "-l") == 0) - l = "/"; - - else if (strcmp(*argp, "-n") == 0) - n = 1; - - else if (strcmp(*argp, "-ln") == 0 || - strcmp(*argp, "-nl") == 0) { - l = "/"; - n = 1; - } else { - n = -1; - break; - } + snprintf(buf, sizeof buf, "anno -list -comp '%s' " + "-number all -text IGNORE '%s'", + attach_hdr, drft); + if (system(buf) != 0) { + advise(NULL, "Could not list attachment headers."); } - - if (n == -1) - advise(NULL, "usage is alist [-ln]."); - - else - annolist(drft, attach_hdr, l, n); - break; case ATTACHCMDSW: @@ -380,21 +348,26 @@ main(int argc, char **argv) ** working directory to relative path names. ** Add the attachment annotation to the draft. */ - if ((f = popen_in_dir(cwd, buf, "r")) != (FILE *)0) { - while (fgets(shell, sizeof (shell), f) - != NULL) { + if ((f = popen_in_dir(cwd, buf, "r"))) { + char buf[BUFSIZ]; + + while (fgets(shell, sizeof(shell), f)) { *(strchr(shell, '\n')) = '\0'; if (*shell == '/') - annotate(drft, attach_hdr, - shell, 0, - -2, 1, 0); + sprintf(file, "%s", shell); else { sprintf(file, "%s/%s", cwd, shell); - annotate(drft, attach_hdr, - file, 0, - -2, 1, 0); + } + snprintf(buf, sizeof buf, + "anno -nodate -append " + "-comp '%s' -text '%s'" + " '%s'", + attach_hdr, file, + drft); + if (system(buf) != 0) { + advise(NULL, "Could not add attachment header."); } } @@ -413,7 +386,6 @@ main(int argc, char **argv) ** 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++) { @@ -430,21 +402,23 @@ main(int argc, char **argv) ** just processed after processing each one so ** that the numbering stays correct. */ - if (n == 1) { - for (arguments = argp + 1; - *arguments != NULL; + for (arguments=argp+1; *arguments; arguments++) { if (strcmp(*arguments, "-n") == 0) continue; if (**arguments != '\0') { + char buf[BUFSIZ]; + n = atoi(*arguments); - annotate(drft, attach_hdr, - NULL, 0, - n, 1, 0); + 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 != NULL; argp++) { + for (argp=arguments+1; *argp; + argp++) { if (atoi(*argp) > n) { if (atoi(*argp) == 1) *argp = ""; @@ -454,7 +428,9 @@ main(int argc, char **argv) } } } + break; } + /* else */ /* ** The arguments are interpreted as file names. @@ -469,12 +445,17 @@ main(int argc, char **argv) ** with a space in it. */ writelscmd(buf, sizeof(buf), argp); - if ((f = popen_in_dir(cwd, buf, "r")) != (FILE *)0) { - while (fgets(shell, sizeof (shell), f) - != NULL) { + if ((f = popen_in_dir(cwd, buf, "r"))) { + while (fgets(shell, sizeof (shell), f)) { *(strchr(shell, '\n')) = '\0'; - annotate(drft, attach_hdr, shell, - 0, 0, 1, 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."); + } } pclose(f); } else { @@ -525,7 +506,7 @@ writesomecmd(char *buf, int bufsz, char *cmd, char *trailcmd, char **argp) cp = buf + ln; - while (*++argp != NULL) { + while (*++argp) { ln = strlen(*argp); /* +1 for leading space */ if (ln + trailln + 1 > bufsz - (cp-buf)) @@ -614,12 +595,12 @@ editfile(char **ed, char **arg, char *file, int use, struct msgs *mp, if (reedit) { if (!*ed) { /* no explicit editor */ *ed = edsave; /* so use the previous one */ - if ((cp = mhbasename(*ed)) == NULL) + if (!(cp = mhbasename(*ed))) cp = *ed; /* unless we've specified it via "editor-next" */ cp = concat(cp, "-next", NULL); - if ((cp = context_find(cp)) != NULL) + if ((cp = context_find(cp))) *ed = cp; } } else if (!*ed) { @@ -628,19 +609,16 @@ editfile(char **ed, char **arg, char *file, int use, struct msgs *mp, } if (altmsg) { - if (mp == NULL || *altmsg == '/' || cwd == NULL) + if (!mp || *altmsg == '/' || !cwd) strncpy(altpath, altmsg, sizeof(altpath)); else snprintf(altpath, sizeof(altpath), "%s/%s", mp->foldpath, altmsg); - if (cwd == NULL) + if (!cwd) strncpy(linkpath, altmsglink, sizeof(linkpath)); else snprintf(linkpath, sizeof(linkpath), "%s/%s", cwd, altmsglink); - } - - if (altmsg) { unlink(linkpath); #ifdef HAVE_LSTAT if (link(altpath, linkpath) == NOTOK) { @@ -687,9 +665,9 @@ editfile(char **ed, char **arg, char *file, int use, struct msgs *mp, default: if ((status = pidwait(pid, NOTOK))) { - if (((status & 0xff00) != 0xff00) - && (!reedit || (status & 0x00ff))) { - if (!use && (status & 0xff00) && (rename(file, cp = m_backup (file)) != NOTOK)) { + if (((status & 0xff00) != 0xff00) && + (!reedit || (status & 0x00ff))) { + if (!use && (status & 0xff00) && (rename(file, cp = m_backup(file)) != NOTOK)) { advise(NULL, "problems with edit--draft left in %s", cp); } else { advise(NULL, "problems with edit--%s preserved", file); @@ -766,7 +744,7 @@ copyf(char *ifile, char *ofile) */ static int -sendfile(char **arg, char *file, int pushsw) +sendfile(char **arg, char *file) { pid_t child_id; int vecp; @@ -782,17 +760,15 @@ sendfile(char **arg, char *file, int pushsw) case OK: vecp = 0; vec[vecp++] = invo_name; - if (pushsw) - vec[vecp++] = "-push"; if (arg) while (*arg) vec[vecp++] = *arg++; vec[vecp++] = file; vec[vecp] = NULL; - execvp(sendproc, vec); + execvp("send", vec); fprintf(stderr, "unable to exec "); - perror(sendproc); + perror("send"); _exit(-1); default: @@ -804,6 +780,47 @@ sendfile(char **arg, char *file, int pushsw) /* +** refile msg into another folder +*/ +static int +refile(char **arg, char *file) +{ + pid_t pid; + register int vecp; + char *vec[MAXARGS]; + + vecp = 0; + vec[vecp++] = "refile"; + vec[vecp++] = "-nolink"; /* override bad .mh_profile defaults */ + vec[vecp++] = "-file"; + vec[vecp++] = file; + + while (arg && *arg) { + vec[vecp++] = *arg++; + } + vec[vecp] = NULL; + + context_save(); /* save the context file */ + fflush(stdout); + + switch (pid = fork()) { + case -1: + advise("fork", "unable to"); + return -1; + + case 0: + execvp(*vec, vec); + fprintf(stderr, "unable to exec "); + perror(*vec); + _exit(-1); + + default: + return (pidwait(pid, -1)); + } +} + + +/* ** Remove the draft file */