* uip/mhlistsbr.c, uip/mhlsbr.c, uip/picksbr.c: cast
[mmh] / uip / send.c
index bf689f0..43f4c02 100644 (file)
@@ -3,6 +3,10 @@
  * send.c -- send a composed message
  *
  * $Id$
+ *
+ * This code is Copyright (c) 2002, by the authors of nmh.  See the
+ * COPYRIGHT file in the root directory of the nmh distribution for
+ * complete copyright information.
  */
 
 #include <h/mh.h>
@@ -89,15 +93,21 @@ static struct swit switches[] = {
 #define        CLIESW                34
     { "client host", -6 },
 #define        SERVSW                35
-    { "server host", -6 },
+    { "server host", 6 },
 #define        SNOOPSW               36
-    { "snoop", -5 },
+    { "snoop", 5 },
 #define SASLSW                37
-    { "sasl", SASLminc(-4) },
+    { "sasl", SASLminc(4) },
 #define SASLMECHSW            38
-    { "saslmech", SASLminc(-5) },
+    { "saslmech mechanism", SASLminc(-5) },
 #define USERSW                39
-    { "user", SASLminc(-4) },
+    { "user username", SASLminc(-4) },
+#define ATTACHSW              40
+    { "attach", 6 },
+#define ATTACHFORMATSW        41
+    { "attachformat", 7 },
+#define PORTSW               42
+    { "port server-port-name/number" , 4 },
     { NULL, 0 }
 };
 
@@ -123,7 +133,6 @@ extern char *altmsg;                /*  .. */
 extern char *annotext;
 extern char *distfile;
 
-extern int   errno;
 
 int
 main (int argc, char **argv)
@@ -136,6 +145,8 @@ main (int argc, char **argv)
     char *msgs[MAXARGS], *vec[MAXARGS];
     struct msgs *mp;
     struct stat st;
+    char       *attach = (char *)0;    /* header field name for attachments */
+    int attachformat = 0; /* mhbuild format specifier for attachments */
 #ifdef UCI
     FILE *fp;
 #endif /* UCI */
@@ -264,11 +275,32 @@ main (int argc, char **argv)
                case SERVSW: 
                case SASLMECHSW:
                case USERSW:
+               case PORTSW:
                    vec[vecp++] = --cp;
                    if (!(cp = *argp++) || *cp == '-')
                        adios (NULL, "missing argument to %s", argp[-2]);
                    vec[vecp++] = cp;
                    continue;
+               
+               case ATTACHSW:
+                   if (!(attach = *argp++) || *attach == '-')
+                       adios (NULL, "missing argument to %s", argp[-2]);
+                   continue;
+
+               case ATTACHFORMATSW:
+                   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;
            }
        } else {
            msgs[msgp++] = cp;
@@ -432,7 +464,8 @@ go_to_it:
     closefds (3);
 
     for (msgnum = 0; msgnum < msgp; msgnum++) {
-       switch (sendsbr (vec, vecp, msgs[msgnum], &st, 1)) {
+       switch (sendsbr (vec, vecp, msgs[msgnum], &st, 1, attach,
+                        attachformat)) {
            case DONE: 
                done (++status);
            case NOTOK: 
@@ -443,5 +476,6 @@ go_to_it:
     }
 
     context_save ();   /* save the context file */
-    return done (status);
+    done (status);
+    return 1;
 }