X-Git-Url: http://git.marmaro.de/?a=blobdiff_plain;f=uip%2Fwhatnowsbr.c;h=3ed0ea4a172f52bca3bb8ddccaa03aba4bb04af4;hb=47a78dcb28c6a836574f73f40b05d4adc9c3ad81;hp=0699fcee70abf22881d2c11b6b0299bc3097fbc2;hpb=3cc8ed080f6e741b8df04a3ebe764c659e75cb38;p=mmh diff --git a/uip/whatnowsbr.c b/uip/whatnowsbr.c index 0699fce..3ed0ea4 100644 --- a/uip/whatnowsbr.c +++ b/uip/whatnowsbr.c @@ -5,9 +5,9 @@ ** COPYRIGHT file in the root directory of the nmh distribution for ** complete copyright information. ** -** Several options have been added to ease the inclusion of attachments -** using the header field name mechanism added to anno and send. The -** -attach option is used to specify the header field name for attachments. +** The inclusion of attachments is eased by +** using the header field name mechanism added to anno and send. +** The header field name for attachments is predefined. ** ** Several commands have been added at the whatnow prompt: ** @@ -54,8 +54,6 @@ static struct swit whatnowswitches[] = { { "version", 0 }, #define HELPSW 4 { "help", 0 }, -#define ATTACHSW 5 - { "attach header-field-name", 0 }, { NULL, 0 } }; @@ -67,31 +65,29 @@ static struct swit aleqs[] = { { "edit [ ]", 0 }, #define REFILEOPT 1 { "refile [] +folder", 0 }, -#define BUILDMIMESW 2 - { "mime []", 0 }, -#define DISPSW 3 +#define DISPSW 2 { "display []", 0 }, -#define LISTSW 4 +#define LISTSW 3 { "list []", 0 }, -#define SENDSW 5 +#define SENDSW 4 { "send []", 0 }, -#define PUSHSW 6 +#define PUSHSW 5 { "push []", 0 }, -#define QUITSW 7 +#define QUITSW 6 { "quit [-delete]", 0 }, -#define DELETESW 8 +#define DELETESW 7 { "delete", 0 }, -#define CDCMDSW 9 +#define CDCMDSW 8 { "cd [directory]", 0 }, -#define PWDCMDSW 10 +#define PWDCMDSW 9 { "pwd", 0 }, -#define LSCMDSW 11 +#define LSCMDSW 10 { "ls", 0 }, -#define ATTACHCMDSW 12 +#define ATTACHCMDSW 11 { "attach", 0 }, -#define DETACHCMDSW 13 +#define DETACHCMDSW 12 { "detach [-n]", 2 }, -#define ALISTCMDSW 14 +#define ALISTCMDSW 13 { "alist [-ln] ", 2 }, { NULL, 0 } }; @@ -105,8 +101,6 @@ static int editfile(char **, char **, char *, int, struct msgs *, char *, char *, int); static int sendfile(char **, char *, int); static void sendit(char *, char **, char *, int); -static int buildfile(char **, char *); -static int check_draft(char *); static int removefile(char *); static void writelscmd(char *, int, char **); static void writesomecmd(char *buf, int bufsz, char *cmd, char *trailcmd, char **argp); @@ -128,7 +122,6 @@ WhatNow(int argc, char **argv) char buf[BUFSIZ], prompt[BUFSIZ]; char **argp, **arguments; struct stat st; - char *attach = NULL; /* attachment header field name */ char cwd[MAXPATHLEN + 1]; /* current working directory */ char file[MAXPATHLEN + 1]; /* file name buffer */ char shell[MAXPATHLEN + 1]; /* shell response buffer */ @@ -187,13 +180,6 @@ WhatNow(int argc, char **argv) argp[-2]); continue; - case ATTACHSW: - if (attach != NULL) - adios(NULL, "only one attachment header field name at a time!"); - if (!(attach = *argp++) || *attach == '-') - adios(NULL, "missing argument to %s", - argp[-2]); - continue; } } if (drft) @@ -238,11 +224,6 @@ WhatNow(int argc, char **argv) advise(NULL, "no alternate message to display"); break; - case BUILDMIMESW: - /* Translate MIME composition file */ - buildfile(++argp, drft); - break; - case EDITSW: /* Call an editor on the draft file */ if (*++argp) @@ -344,11 +325,6 @@ WhatNow(int argc, char **argv) ** -n numbers listing */ - if (attach == NULL) { - advise(NULL, "can't list because no header field name was given."); - break; - } - l = NULL; n = 0; @@ -373,7 +349,7 @@ WhatNow(int argc, char **argv) advise(NULL, "usage is alist [-ln]."); else - annolist(drft, attach, l, n); + annolist(drft, attach_hdr, l, n); break; @@ -382,11 +358,6 @@ WhatNow(int argc, char **argv) ** Attach files to current draft. */ - if (attach == NULL) { - advise(NULL, "can't attach because no header field name was given."); - break; - } - if (*(argp+1) == NULL) { advise(NULL, "attach command requires file argument(s)."); break; @@ -409,20 +380,21 @@ WhatNow(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) { *(strchr(shell, '\n')) = '\0'; if (*shell == '/') - annotate(drft, attach, shell, - 1, 0, -2, 1); + annotate(drft, attach_hdr, + shell, 1, 0, + -2, 1); else { sprintf(file, "%s/%s", cwd, shell); - annotate(drft, attach, file, - 1, 0, -2, 1); + annotate(drft, attach_hdr, + file, 1, 0, + -2, 1); } } @@ -436,14 +408,7 @@ WhatNow(int argc, char **argv) case DETACHCMDSW: /* ** Detach files from current draft. - */ - - if (attach == NULL) { - advise(NULL, "can't detach because no header field name was given."); - break; - } - - /* + ** ** Scan the arguments for a -n. Mixed file ** names and numbers aren't allowed, so this ** catches a -n anywhere in the argument list. @@ -475,8 +440,9 @@ WhatNow(int argc, char **argv) if (**arguments != '\0') { n = atoi(*arguments); - annotate(drft, attach, NULL, - 1, 0, n, 1); + annotate(drft, attach_hdr, + NULL, 1, 0, + n, 1); for (argp = arguments + 1; *argp != NULL; argp++) { if (atoi(*argp) > n) { @@ -507,7 +473,7 @@ WhatNow(int argc, char **argv) while (fgets(shell, sizeof (shell), f) != NULL) { *(strchr(shell, '\n')) = '\0'; - annotate(drft, attach, shell, + annotate(drft, attach_hdr, shell, 1, 0, 0, 1); } pclose(f); @@ -642,9 +608,6 @@ editfile(char **ed, char **arg, char *file, int use, struct msgs *mp, #ifdef HAVE_LSTAT int slinked = 0; -#if 0 - int oumask; /* PJS: for setting permissions on symlinks. */ -#endif #endif /* HAVE_LSTAT */ /* Was there a previous edit session? */ @@ -682,15 +645,7 @@ editfile(char **ed, char **arg, char *file, int use, struct msgs *mp, unlink(linkpath); #ifdef HAVE_LSTAT if (link(altpath, linkpath) == NOTOK) { -#if 0 - /* I don't think permission on symlinks matters /JLR */ - /* PJS: else symlinks are world 'r' */ - oumask = umask(0044); -#endif symlink(altpath, linkpath); -#if 0 - umask(oumask); /* PJS: else symlinks are world 'r' */ -#endif slinked = 1; } else { slinked = 0; @@ -827,18 +782,6 @@ sendfile(char **arg, char *file, int pushsw) int i, vecp; char *cp, *sp, *vec[MAXARGS]; - /* Translate MIME composition file, if necessary */ - if ((cp = context_find("automimeproc")) && (!strcmp(cp, "1")) && - !getenv("NOMHNPROC") && check_draft(file) && - (buildfile(NULL, file) == NOTOK)) - return 0; - - /* For backwards compatibility */ - if ((cp = context_find("automhnproc")) && !getenv("NOMHNPROC") - && check_draft(file) && (i = editfile(&cp, NULL, - file, NOUSE, NULL, NULL, NULL, 0))) - return 0; - /* ** If the sendproc is the nmh command `send', then we call ** those routines directly rather than exec'ing the command. @@ -882,101 +825,6 @@ sendfile(char **arg, char *file, int pushsw) } -/* -** Translate MIME composition file (call buildmimeproc) -*/ - -static int -buildfile(char **argp, char *file) -{ - int i; - char **args, *ed; - - ed = buildmimeproc; - - /* allocate space for arguments */ - i = 0; - if (argp) { - while (argp[i]) - i++; - } - args = (char **) mh_xmalloc((i + 2) * sizeof(char *)); - - /* - ** For backward compatibility, we need to add -build - ** if we are using mhn as buildmimeproc - */ - i = 0; - if (strcmp(mhbasename(ed), "mhn") == 0) - args[i++] = "-build"; - - /* copy any other arguments */ - while (argp && *argp) - args[i++] = *argp++; - args[i] = NULL; - - i = editfile(&ed, args, file, NOUSE, NULL, NULL, NULL, 0); - free(args); - - return (i ? NOTOK : OK); -} - - -/* -** Check if draft is a mhbuild composition file -*/ - -static int -check_draft(char *msgnam) -{ - int state; - char buf[BUFSIZ], name[NAMESZ]; - FILE *fp; - - if ((fp = fopen(msgnam, "r")) == NULL) - return 0; - for (state = FLD;;) - switch (state = m_getfld(state, name, buf, sizeof(buf), fp)) { - case FLD: - case FLDPLUS: - case FLDEOF: - /* - ** If draft already contains any of the - ** Content-XXX fields, then assume it already - ** been converted. - */ - if (uprf(name, XXX_FIELD_PRF)) { - fclose(fp); - return 0; - } - while (state == FLDPLUS) - state = m_getfld(state, name, buf, - sizeof(buf), fp); - break; - - case BODY: - do { - char *bp; - - for (bp = buf; *bp; bp++) - if (*bp != ' ' && *bp != '\t' && - *bp != '\n') { - fclose(fp); - return 1; - } - - state = m_getfld(state, name, buf, - sizeof(buf), fp); - } while (state == BODY); - /* and fall... */ - - default: - fclose(fp); - return 0; - } -} - - static struct swit sendswitches[] = { #define ALIASW 0 { "alias aliasfile", 0 }, @@ -994,60 +842,24 @@ static struct swit sendswitches[] = { { "forward", 0 }, #define NFORWSW 7 { "noforward", 0 }, -#define MIMESW 8 - { "mime", 0 }, -#define NMIMESW 9 - { "nomime", 0 }, -#define MSGDSW 10 - { "msgid", 0 }, -#define NMSGDSW 11 - { "nomsgid", 0 }, -#define SPSHSW 12 +#define SPSHSW 8 { "push", 0 }, -#define NSPSHSW 13 +#define NSPSHSW 9 { "nopush", 0 }, -#define UNIQSW 14 - { "unique", -6 }, -#define NUNIQSW 15 - { "nounique", -8 }, -#define VERBSW 16 +#define VERBSW 10 { "verbose", 0 }, -#define NVERBSW 17 +#define NVERBSW 11 { "noverbose", 0 }, -#define WATCSW 18 +#define WATCSW 12 { "watch", 0 }, -#define NWATCSW 19 +#define NWATCSW 13 { "nowatch", 0 }, -#define WIDTHSW 20 +#define WIDTHSW 14 { "width columns", 0 }, -#define SVERSIONSW 21 +#define SVERSIONSW 15 { "version", 0 }, -#define SHELPSW 22 +#define SHELPSW 16 { "help", 0 }, -#define BITSTUFFSW 23 - { "dashstuffing", -12 }, -#define NBITSTUFFSW 24 - { "nodashstuffing", -14 }, -#define MAILSW 25 - { "mail", -4 }, -#define SAMLSW 26 - { "saml", -4 }, -#define SSNDSW 27 - { "send", -4 }, -#define SOMLSW 28 - { "soml", -4 }, -#define CLIESW 29 - { "client host", -6 }, -#define SERVSW 30 - { "server host", 6 }, -#define SNOOPSW 31 - { "snoop", -5 }, -#define SNDATTACHSW 32 - { "attach file", 6 }, -#define SNDATTACHFORMAT 33 - { "attachformat", 7 }, -#define PORTSW 34 - { "port server-port-name/number", 4 }, { NULL, 0 } }; @@ -1056,7 +868,6 @@ extern int debugsw; /* from sendsbr.c */ extern int forwsw; extern int inplace; extern int pushsw; -extern int unique; extern int verbsw; extern char *altmsg; /* .. */ @@ -1071,15 +882,10 @@ sendit(char *sp, char **arg, char *file, int pushed) char *cp, buf[BUFSIZ], **argp; char **arguments, *vec[MAXARGS]; struct stat st; - char *attach = NULL; /* attachment header field name */ - int attachformat = 0; /* mhbuild format specifier for attachments */ #ifndef lint int distsw = 0; #endif -#ifdef UCI - FILE *fp; -#endif /* ** Make sure these are defined. In particular, we need @@ -1117,7 +923,6 @@ sendit(char *sp, char **arg, char *file, int pushed) debugsw = 0; forwsw = 1; inplace = 1; - unique = 0; altmsg = NULL; annotext = NULL; @@ -1153,12 +958,6 @@ sendit(char *sp, char **arg, char *file, int pushed) pushed = 0; continue; - case UNIQSW: - unique++; - continue; - case NUNIQSW: - unique = 0; - continue; case FORWSW: forwsw++; continue; @@ -1180,28 +979,14 @@ sendit(char *sp, char **arg, char *file, int pushed) case NFILTSW: case FRMTSW: case NFRMTSW: - case BITSTUFFSW: - case NBITSTUFFSW: - case MIMESW: - case NMIMESW: - case MSGDSW: - case NMSGDSW: case WATCSW: case NWATCSW: - case MAILSW: - case SAMLSW: - case SSNDSW: - case SOMLSW: - case SNOOPSW: vec[vecp++] = --cp; continue; case ALIASW: case FILTSW: case WIDTHSW: - case CLIESW: - case SERVSW: - case PORTSW: vec[vecp++] = --cp; if (!(cp = *argp++) || *cp == '-') { advise(NULL, "missing argument to %s", @@ -1211,27 +996,6 @@ sendit(char *sp, char **arg, char *file, int pushed) vec[vecp++] = cp; continue; - case SNDATTACHSW: - if (!(attach = *argp++) || *attach == '-') { - advise(NULL, "missing argument to %s", - argp[-2]); - return; - } - continue; - - case SNDATTACHFORMAT: - if (! *argp || **argp == '-') - adios(NULL, "missing argument to %s", - argp[-1]); - else { - attachformat = atoi(*argp); - if (attachformat < 0 || attachformat > ATTACHFORMATS - 1) { - advise(NULL, "unsupported attachformat %d", attachformat); - continue; - } - } - ++argp; - continue; } } advise(NULL, "usage: %s [switches]", sp); @@ -1249,21 +1013,9 @@ sendit(char *sp, char **arg, char *file, int pushed) } } - if ((cp = getenv("SIGNATURE")) == NULL || *cp == 0) + if (!(cp = getenv("SIGNATURE")) || !*cp) if ((cp = context_find("signature")) && *cp) m_putenv("SIGNATURE", cp); -#ifdef UCI - else { - snprintf(buf, sizeof(buf), "%s/.signature", mypath); - if ((fp = fopen(buf, "r")) != NULL && - fgets(buf, sizeof(buf), fp) != NULL) { - fclose(fp); - if (cp = strchr(buf, '\n')) - *cp = 0; - m_putenv("SIGNATURE", buf); - } - } -#endif /* UCI */ if ((annotext = getenv("mhannotate")) == NULL || *annotext == 0) annotext = NULL; @@ -1296,7 +1048,7 @@ sendit(char *sp, char **arg, char *file, int pushed) vec[0] = mhbasename(postproc); closefds(3); - if (sendsbr(vec, vecp, file, &st, 1, attach, attachformat) == OK) + if (sendsbr(vec, vecp, file, &st, 1) == OK) done(0); }