announce now looks for the first unread message if there
[unix-history] / usr / src / usr.bin / mail / lex.c
index 551cb24..a283590 100644 (file)
@@ -8,7 +8,7 @@
  * Lexical processing of commands.
  */
 
  * Lexical processing of commands.
  */
 
-static char *SccsId = "@(#)lex.c       1.4 %G%";
+static char *SccsId = "@(#)lex.c       1.7 %G%";
 
 /*
  * Set up editing on the given file name.
 
 /*
  * Set up editing on the given file name.
@@ -85,7 +85,7 @@ setfile(name, isedit)
        for (i = SIGINT; i <= SIGQUIT; i++)
                signal(i, sigs[i - SIGINT]);
        printf("%s: ", name);
        for (i = SIGINT; i <= SIGQUIT; i++)
                signal(i, sigs[i - SIGINT]);
        printf("%s: ", name);
-       announce(!edit);
+       shudann = 1;
        sawcom = 0;
        return(0);
 }
        sawcom = 0;
        return(0);
 }
@@ -126,13 +126,11 @@ commands()
                 * go off and print the headers!
                 */
 
                 * go off and print the headers!
                 */
 
-#ifdef CRAZYWOW
-               if (firstsw == 0 && !sourcing) {
-                       firstsw = -1;
+               if (shudann && !sourcing) {
+                       shudann = 0;
                        if (rcvmode)
                        if (rcvmode)
-                               announce(1);
+                               announce(edit);
                }
                }
-#endif
 
                /*
                 * Print the prompt, if needed.  Clear out
 
                /*
                 * Print the prompt, if needed.  Clear out
@@ -481,14 +479,22 @@ char      *greeting       = "Mail version 2.0 %s.  Type ? for help.\n";
 
 announce(pr)
 {
 
 announce(pr)
 {
-       int vec[2];
+       int vec[2], mdot;
        extern char *version;
        register struct message *mp;
 
        extern char *version;
        register struct message *mp;
 
-       if (value("hold") != NOSTR)
+       for (mp = &message[0]; mp < &message[msgCount]; mp++)
+               if (mp->m_flag & MNEW)
+                       break;
+       if (mp >= &message[msgCount])
                for (mp = &message[0]; mp < &message[msgCount]; mp++)
                for (mp = &message[0]; mp < &message[msgCount]; mp++)
-                       mp->m_flag |= MPRESERVE;
-       vec[0] = 1;
+                       if ((mp->m_flag & MREAD) == 0)
+                               break;
+       if (mp < &message[msgCount])
+               mdot = mp - &message[0] + 1;
+       else
+               mdot = 1;
+       vec[0] = mdot;
        vec[1] = 0;
        if (pr && value("quiet") == NOSTR)
                printf(greeting, version);
        vec[1] = 0;
        if (pr && value("quiet") == NOSTR)
                printf(greeting, version);
@@ -500,6 +506,7 @@ announce(pr)
                printf(" [Read only]");
        printf("\n");
        headers(vec);
                printf(" [Read only]");
        printf("\n");
        headers(vec);
+       dot = &message[mdot - 1];
 }
 
 strace() {}
 }
 
 strace() {}