Removed the undocumented -unique switches. Seems they were JLR-only stuff.
[mmh] / uip / whatnowsbr.c
index 8687815..3ed0ea4 100644 (file)
@@ -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 [<editor> <switches>]", 0 },
 #define REFILEOPT  1
        { "refile [<switches>] +folder", 0 },
-#define BUILDMIMESW  2
-       { "mime [<switches>]", 0 },
-#define DISPSW  3
+#define DISPSW  2
        { "display [<switches>]", 0 },
-#define LISTSW  4
+#define LISTSW  3
        { "list [<switches>]", 0 },
-#define SENDSW  5
+#define SENDSW  4
        { "send [<switches>]", 0 },
-#define PUSHSW  6
+#define PUSHSW  5
        { "push [<switches>]", 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 = (char *)0;  /* 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 */
@@ -148,7 +141,7 @@ WhatNow(int argc, char **argv)
        ** Get the initial current working directory.
        */
 
-       if (getcwd(cwd, sizeof (cwd)) == (char *)0) {
+       if (getcwd(cwd, sizeof (cwd)) == NULL) {
                adios("getcwd", "could not get working directory");
        }
 
@@ -187,13 +180,6 @@ WhatNow(int argc, char **argv)
                                                        argp[-2]);
                                continue;
 
-                       case ATTACHSW:
-                               if (attach != (char *)0)
-                                       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)
@@ -203,7 +189,7 @@ WhatNow(int argc, char **argv)
        }
 
        if ((drft == NULL && (drft = getenv("mhdraft")) == NULL) || *drft == 0)
-               drft = getcpy(m_draft("cur"));
+               drft = getcpy(m_draft(seq_cur));
 
        msgnam = (cp = getenv("mhaltmsg")) && *cp ? getcpy(cp) : NULL;
 
@@ -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)
@@ -300,15 +281,15 @@ WhatNow(int argc, char **argv)
                        ** the absolute path.
                        */
 
-                       if (*(argp+1) == (char *)0) {
-                               (void)sprintf(buf, "$SHELL -c \"cd;pwd\"");
+                       if (*(argp+1) == NULL) {
+                               sprintf(buf, "$SHELL -c \"cd;pwd\"");
                        } else {
                                writesomecmd(buf, BUFSIZ, "cd", "pwd", argp);
                        }
                        if ((f = popen_in_dir(cwd, buf, "r")) != (FILE *)0) {
                                fgets(cwd, sizeof (cwd), f);
 
-                               if (strchr(cwd, '\n') != (char *)0)
+                               if (strchr(cwd, '\n') != NULL)
                                                *strchr(cwd, '\n') = '\0';
 
                                pclose(f);
@@ -333,7 +314,7 @@ WhatNow(int argc, char **argv)
                        ** accustomed to.
                        */
                        writelscmd(buf, sizeof(buf), argp);
-                       (void)system_in_dir(cwd, buf);
+                       system_in_dir(cwd, buf);
                        break;
 
                case ALISTCMDSW:
@@ -344,15 +325,10 @@ WhatNow(int argc, char **argv)
                        ** -n    numbers listing
                        */
 
-                       if (attach == (char *)0) {
-                               advise((char *)0, "can't list because no header field name was given.");
-                               break;
-                       }
-
-                       l = (char *)0;
+                       l = NULL;
                        n = 0;
 
-                       while (*++argp != (char *)0) {
+                       while (*++argp != NULL) {
                                if (strcmp(*argp, "-l") == 0)
                                        l = "/";
 
@@ -370,10 +346,10 @@ WhatNow(int argc, char **argv)
                        }
 
                        if (n == -1)
-                               advise((char *)0, "usage is alist [-ln].");
+                               advise(NULL, "usage is alist [-ln].");
 
                        else
-                               annolist(drft, attach, l, n);
+                               annolist(drft, attach_hdr, l, n);
 
                        break;
 
@@ -382,13 +358,8 @@ WhatNow(int argc, char **argv)
                        ** Attach files to current draft.
                        */
 
-                       if (attach == (char *)0) {
-                               advise((char *)0, "can't attach because no header field name was given.");
-                               break;
-                       }
-
-                       if (*(argp+1) == (char *)0) {
-                               advise((char *)0, "attach command requires file argument(s).");
+                       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)
-                                               != (char *)0) {
+                                               != 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,21 +408,14 @@ WhatNow(int argc, char **argv)
                case DETACHCMDSW:
                        /*
                        ** Detach files from current draft.
-                       */
-
-                       if (attach == (char *)0) {
-                               advise((char *)0, "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.
                        */
 
                        for (n = 0, arguments = argp + 1;
-                                       *arguments != (char *)0;
+                                       *arguments != NULL;
                                        arguments++) {
                                if (strcmp(*arguments, "-n") == 0) {
                                                n = 1;
@@ -468,22 +433,23 @@ WhatNow(int argc, char **argv)
 
                        if (n == 1) {
                                for (arguments = argp + 1;
-                                               *arguments != (char *)0;
+                                               *arguments != NULL;
                                                arguments++) {
                                        if (strcmp(*arguments, "-n") == 0)
                                                continue;
 
                                        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 != (char *)0; argp++) {
+                                               for (argp = arguments + 1; *argp != NULL; argp++) {
                                                        if (atoi(*argp) > n) {
                                                                if (atoi(*argp) == 1)
                                                                        *argp = "";
                                                                else
-                                                                       (void)sprintf(*argp, "%d", atoi(*argp) - 1);
+                                                                       sprintf(*argp, "%d", atoi(*argp) - 1);
                                                        }
                                                }
                                        }
@@ -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);
@@ -555,15 +521,15 @@ writesomecmd(char *buf, int bufsz, char *cmd, char *trailcmd, char **argp)
        */
        int trailln = strlen(trailcmd) + 3;
        if (ln < 0 || ln + trailln > bufsz)
-               adios((char *)0, "arguments too long");
+               adios(NULL, "arguments too long");
 
        cp = buf + ln;
 
-       while (*++argp != (char *)0) {
+       while (*++argp != NULL) {
                ln = strlen(*argp);
                /* +1 for leading space */
                if (ln + trailln + 1 > bufsz - (cp-buf))
-                       adios((char *)0, "arguments too long");
+                       adios(NULL, "arguments too long");
                *cp++ = ' ';
                memcpy(cp, *argp, ln+1);
                cp += ln;
@@ -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;
@@ -703,77 +658,75 @@ editfile(char **ed, char **arg, char *file, int use, struct msgs *mp,
        context_save();  /* save the context file */
        fflush(stdout);
 
-       switch (pid = vfork()) {
-               case NOTOK:
-                       advise("fork", "unable to");
-                       status = NOTOK;
-                       break;
-
-               case OK:
-                       if (cwd)
-                               chdir(cwd);
-                       if (altmsg) {
-                               if (mp)
-                                       m_putenv("mhfolder", mp->foldpath);
-                               m_putenv("editalt", altpath);
-                       }
-
-                       vecp = 0;
-                       vec[vecp++] = mhbasename(*ed);
-                       if (arg)
-                               while (*arg)
-                                       vec[vecp++] = *arg++;
-                       vec[vecp++] = file;
-                       vec[vecp] = NULL;
-
-                       execvp(*ed, vec);
-                       fprintf(stderr, "unable to exec ");
-                       perror(*ed);
-                       _exit(-1);
+       switch (pid = fork()) {
+       case NOTOK:
+               advise("fork", "unable to");
+               status = NOTOK;
+               break;
+
+       case OK:
+               if (cwd)
+                       chdir(cwd);
+               if (altmsg) {
+                       if (mp)
+                               m_putenv("mhfolder", mp->foldpath);
+                       m_putenv("editalt", altpath);
+               }
 
-               default:
-                       if ((status = pidwait(pid, NOTOK))) {
+               vecp = 0;
+               vec[vecp++] = mhbasename(*ed);
+               if (arg)
+                       while (*arg)
+                               vec[vecp++] = *arg++;
+               vec[vecp++] = file;
+               vec[vecp] = NULL;
+
+               execvp(*ed, vec);
+               fprintf(stderr, "unable to exec ");
+               perror(*ed);
+               _exit(-1);
+
+       default:
+               if ((status = pidwait(pid, NOTOK))) {
 #ifdef ATTVIBUG
-                               if ((cp = mhbasename(*ed)) &&
-                                               strcmp(cp, "vi") == 0 &&
-                                               (status & 0x00ff) == 0)
-                                       status = 0;
-                               else {
+                       if ((cp = mhbasename(*ed)) && strcmp(cp, "vi") == 0 &&
+                                       (status & 0x00ff) == 0)
+                               status = 0;
+                       else {
 #endif
-                               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);
-                                       }
+                       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);
                                }
-                               status = -2;  /* maybe "reedit ? -2 : -1"? */
-                               break;
+                       }
+                       status = -2;  /* maybe "reedit ? -2 : -1"? */
+                       break;
 #ifdef ATTVIBUG
-                               }
-#endif
                        }
+#endif
+               }
 
-                       reedit++;
+               reedit++;
 #ifdef HAVE_LSTAT
-                       if (altmsg && mp && !is_readonly(mp) && (slinked ?
-                                       lstat (linkpath, &st) != NOTOK &&
-                                       S_ISREG(st.st_mode) &&
-                                       copyf(linkpath, altpath) == NOTOK :
-                                       stat(linkpath, &st) != NOTOK &&
-                                       st.st_nlink == 1 &&
-                                       (unlink(altpath) == NOTOK ||
-                                       link(linkpath, altpath) == NOTOK)))
-                               advise(linkpath, "unable to update %s from", altmsg);
+               if (altmsg && mp && !is_readonly(mp) && (slinked ?
+                               lstat (linkpath, &st) != NOTOK &&
+                               S_ISREG(st.st_mode) &&
+                               copyf(linkpath, altpath) == NOTOK :
+                               stat(linkpath, &st) != NOTOK &&
+                               st.st_nlink == 1 &&
+                               (unlink(altpath) == NOTOK ||
+                               link(linkpath, altpath) == NOTOK)))
+                       advise(linkpath, "unable to update %s from", altmsg);
 #else /* HAVE_LSTAT */
-                       if (altmsg && mp && !is_readonly(mp) &&
-                                       stat(linkpath, &st) != NOTOK &&
-                                       st.st_nlink == 1 &&
-                                       (unlink(altpath) == NOTOK ||
-                                       link(linkpath, altpath) == NOTOK))
-                               advise(linkpath, "unable to update %s from",
-                                               altmsg);
+               if (altmsg && mp && !is_readonly(mp) &&
+                               stat(linkpath, &st) != NOTOK &&
+                               st.st_nlink == 1 &&
+                               (unlink(altpath) == NOTOK ||
+                               link(linkpath, altpath) == NOTOK))
+                       advise(linkpath, "unable to update %s from", altmsg);
 #endif /* HAVE_LSTAT */
        }
 
@@ -829,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.
@@ -855,126 +796,32 @@ sendfile(char **arg, char *file, int pushsw)
        context_save();  /* save the context file */
        fflush(stdout);
 
-       for (i = 0; (child_id = vfork()) == NOTOK && i < 5; i++)
+       for (i = 0; (child_id = fork()) == NOTOK && i < 5; i++)
                sleep(5);
        switch (child_id) {
-               case NOTOK:
-                       advise(NULL, "unable to fork, so sending directly...");
-               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);
-                       fprintf(stderr, "unable to exec ");
-                       perror(sendproc);
-                       _exit(-1);
-
-               default:
-                       if (pidwait(child_id, OK) == 0)
-                               done(0);
-                       return 1;
-       }
-}
-
-
-/*
-** 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++;
+       case NOTOK:
+               advise(NULL, "unable to fork, so sending directly...");
+       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);
+               fprintf(stderr, "unable to exec ");
+               perror(sendproc);
+               _exit(-1);
+
+       default:
+               if (pidwait(child_id, OK) == 0)
+                       done(0);
+               return 1;
        }
-       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;
-               }
 }
 
 
@@ -995,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 }
 };
 
@@ -1057,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;  /*  .. */
@@ -1072,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 = (char *)0;  /* 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
@@ -1118,7 +923,6 @@ sendit(char *sp, char **arg, char *file, int pushed)
        debugsw = 0;
        forwsw = 1;
        inplace = 1;
-       unique = 0;
 
        altmsg = NULL;
        annotext = NULL;
@@ -1131,106 +935,67 @@ sendit(char *sp, char **arg, char *file, int pushed)
        while ((cp = *argp++)) {
                if (*cp == '-') {
                        switch (smatch(++cp, sendswitches)) {
-                               case AMBIGSW:
-                                       ambigsw(cp, sendswitches);
-                                       return;
-                               case UNKWNSW:
-                                       advise(NULL, "-%s unknown\n", cp);
-                                       return;
+                       case AMBIGSW:
+                               ambigsw(cp, sendswitches);
+                               return;
+                       case UNKWNSW:
+                               advise(NULL, "-%s unknown\n", cp);
+                               return;
 
-                               case SHELPSW:
-                                       snprintf(buf, sizeof(buf),
-                                                       "%s [switches]", sp);
-                                       print_help(buf, sendswitches, 1);
-                                       return;
-                               case SVERSIONSW:
-                                       print_version(invo_name);
-                                       return;
+                       case SHELPSW:
+                               snprintf(buf, sizeof(buf),
+                                               "%s [switches]", sp);
+                               print_help(buf, sendswitches, 1);
+                               return;
+                       case SVERSIONSW:
+                               print_version(invo_name);
+                               return;
 
-                               case SPSHSW:
-                                       pushed++;
-                                       continue;
-                               case NSPSHSW:
-                                       pushed = 0;
-                                       continue;
-
-                               case UNIQSW:
-                                       unique++;
-                                       continue;
-                               case NUNIQSW:
-                                       unique = 0;
-                                       continue;
-                               case FORWSW:
-                                       forwsw++;
-                                       continue;
-                               case NFORWSW:
-                                       forwsw = 0;
-                                       continue;
-
-                               case VERBSW:
-                                       verbsw++;
-                                       vec[vecp++] = --cp;
-                                       continue;
-                               case NVERBSW:
-                                       verbsw = 0;
-                                       vec[vecp++] = --cp;
-                                       continue;
-
-                               case DEBUGSW:
-                                       debugsw++;  /* fall */
-                               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", argp[-2]);
-                                               return;
-                                       }
-                                       vec[vecp++] = cp;
-                                       continue;
-
-                               case SNDATTACHSW:
-                                       if (!(attach = *argp++) ||
-                                                       *attach == '-') {
-                                               advise(NULL, "missing argument to %s", argp[-2]);
-                                               return;
-                                       }
-                                       continue;
+                       case SPSHSW:
+                               pushed++;
+                               continue;
+                       case NSPSHSW:
+                               pushed = 0;
+                               continue;
+
+                       case FORWSW:
+                               forwsw++;
+                               continue;
+                       case NFORWSW:
+                               forwsw = 0;
+                               continue;
+
+                       case VERBSW:
+                               verbsw++;
+                               vec[vecp++] = --cp;
+                               continue;
+                       case NVERBSW:
+                               verbsw = 0;
+                               vec[vecp++] = --cp;
+                               continue;
+
+                       case DEBUGSW:
+                               debugsw++;  /* fall */
+                       case NFILTSW:
+                       case FRMTSW:
+                       case NFRMTSW:
+                       case WATCSW:
+                       case NWATCSW:
+                               vec[vecp++] = --cp;
+                               continue;
+
+                       case ALIASW:
+                       case FILTSW:
+                       case WIDTHSW:
+                               vec[vecp++] = --cp;
+                               if (!(cp = *argp++) || *cp == '-') {
+                                       advise(NULL, "missing argument to %s",
+                                                       argp[-2]);
+                                       return;
+                               }
+                               vec[vecp++] = cp;
+                               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);
@@ -1248,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;
@@ -1295,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);
 }