date and time created 83/02/11 15:45:08 by rrh
[unix-history] / usr / src / usr.bin / mail / cmd3.c
index 674dfdb..269cd4a 100644 (file)
@@ -9,7 +9,7 @@
  * Still more user commands.
  */
 
  * Still more user commands.
  */
 
-static char *SccsId = "@(#)cmd3.c      2.3 %G%";
+static char *SccsId = "@(#)cmd3.c      2.11 %G%";
 
 /*
  * Process a shell escape by saving signals, ignoring signals,
 
 /*
  * Process a shell escape by saving signals, ignoring signals,
@@ -33,6 +33,7 @@ shell(str)
                sig[t-2] = sigset(t, SIG_IGN);
        t = vfork();
        if (t == 0) {
                sig[t-2] = sigset(t, SIG_IGN);
        t = vfork();
        if (t == 0) {
+               sigchild();
                for (t = 2; t < 4; t++)
                        if (sig[t-2] != SIG_IGN)
                                sigsys(t, SIG_DFL);
                for (t = 2; t < 4; t++)
                        if (sig[t-2] != SIG_IGN)
                                sigsys(t, SIG_DFL);
@@ -66,6 +67,7 @@ dosh(str)
                sig[t-2] = sigset(t, SIG_IGN);
        t = vfork();
        if (t == 0) {
                sig[t-2] = sigset(t, SIG_IGN);
        t = vfork();
        if (t == 0) {
+               sigchild();
                for (t = 2; t < 4; t++)
                        if (sig[t-2] != SIG_IGN)
                                sigsys(t, SIG_DFL);
                for (t = 2; t < 4; t++)
                        if (sig[t-2] != SIG_IGN)
                                sigsys(t, SIG_DFL);
@@ -147,7 +149,7 @@ help()
        register FILE *f;
 
        if ((f = fopen(HELPFILE, "r")) == NULL) {
        register FILE *f;
 
        if ((f = fopen(HELPFILE, "r")) == NULL) {
-               printf("No help just now.\n");
+               perror(HELPFILE);
                return(1);
        }
        while ((c = getc(f)) != EOF)
                return(1);
        }
        while ((c = getc(f)) != EOF)
@@ -188,10 +190,10 @@ respond(msgvec)
        int *msgvec;
 {
        struct message *mp;
        int *msgvec;
 {
        struct message *mp;
-       char *cp, buf[2 * LINESIZE], *rcv, *replyto, **ap;
+       char *cp, *cp2, *cp3, *rcv, *replyto;
+       char buf[2 * LINESIZE], **ap;
        struct name *np;
        struct header head;
        struct name *np;
        struct header head;
-       char *netmap();
 
        if (msgvec[1] != 0) {
                printf("Sorry, can't reply to multiple messages at once\n");
 
        if (msgvec[1] != 0) {
                printf("Sorry, can't reply to multiple messages at once\n");
@@ -216,10 +218,10 @@ respond(msgvec)
         * Delete my name from the reply list,
         * and with it, all my alternate names.
         */
         * Delete my name from the reply list,
         * and with it, all my alternate names.
         */
-       np = delname(np, myname);
-       if (altnames != 0)
+       np = delname(np, myname, icequal);
+       if (altnames)
                for (ap = altnames; *ap; ap++)
                for (ap = altnames; *ap; ap++)
-                       np = delname(np, *ap);
+                       np = delname(np, *ap, icequal);
        head.h_seq = 1;
        cp = detract(np, 0);
        if (cp != NOSTR && replyto == NOSTR) {
        head.h_seq = 1;
        cp = detract(np, 0);
        if (cp != NOSTR && replyto == NOSTR) {
@@ -246,10 +248,10 @@ respond(msgvec)
                if (cp != NOSTR) {
                        np = elide(extract(cp, GCC));
                        mapf(np, rcv);
                if (cp != NOSTR) {
                        np = elide(extract(cp, GCC));
                        mapf(np, rcv);
-                       np = delname(np, myname);
+                       np = delname(np, myname, icequal);
                        if (altnames != 0)
                                for (ap = altnames; *ap; ap++)
                        if (altnames != 0)
                                for (ap = altnames; *ap; ap++)
-                                       np = delname(np, *ap);
+                                       np = delname(np, *ap, icequal);
                        head.h_cc = detract(np, 0);
                }
        }
                        head.h_cc = detract(np, 0);
                }
        }
@@ -319,7 +321,7 @@ messize(msgvec)
        for (ip = msgvec; *ip != NULL; ip++) {
                mesg = *ip;
                mp = &message[mesg-1];
        for (ip = msgvec; *ip != NULL; ip++) {
                mesg = *ip;
                mp = &message[mesg-1];
-               printf("%d: %d\n", mesg, msize(mp));
+               printf("%d: %ld\n", mesg, mp->m_size);
        }
        return(0);
 }
        }
        return(0);
 }
@@ -333,6 +335,8 @@ rexit(e)
 {
        if (sourcing)
                return(1);
 {
        if (sourcing)
                return(1);
+       if (Tflag != NOSTR)
+               close(creat(Tflag, 0600));
        exit(e);
 }
 
        exit(e);
 }
 
@@ -528,6 +532,7 @@ file(argv)
 {
        register char *cp;
        char fname[BUFSIZ];
 {
        register char *cp;
        char fname[BUFSIZ];
+       int edit;
 
        if (argv[0] == NOSTR) {
                newfileinfo();
 
        if (argv[0] == NOSTR) {
                newfileinfo();
@@ -544,10 +549,14 @@ file(argv)
         *      string -- reads the given file
         */
 
         *      string -- reads the given file
         */
 
-       cp = getfilename(argv[0]);
+       cp = getfilename(argv[0], &edit);
        if (cp == NOSTR)
                return(-1);
        if (cp == NOSTR)
                return(-1);
-       return(setfile(cp, 1));
+       if (setfile(cp, edit)) {
+               perror(cp);
+               return(-1);
+       }
+       newfileinfo();
 }
 
 /*
 }
 
 /*
@@ -564,15 +573,22 @@ file(argv)
 char   prevfile[PATHSIZE];
 
 char *
 char   prevfile[PATHSIZE];
 
 char *
-getfilename(name)
+getfilename(name, aedit)
        char *name;
        char *name;
+       int *aedit;
 {
        register char *cp;
        char savename[BUFSIZ];
        char oldmailname[BUFSIZ];
 
 {
        register char *cp;
        char savename[BUFSIZ];
        char oldmailname[BUFSIZ];
 
+       /*
+        * Assume we will be in "edit file" mode, until
+        * proven wrong.
+        */
+       *aedit = 1;
        switch (*name) {
        case '%':
        switch (*name) {
        case '%':
+               *aedit = 0;
                strcpy(prevfile, mailname);
                if (name[1] != 0) {
                        strcpy(savename, myname);
                strcpy(prevfile, mailname);
                if (name[1] != 0) {
                        strcpy(savename, myname);