]> diplodocus.org Git - nmh/blobdiff - sbr/seq_del.c
sbr/mts.c: Make MMDF's delimeters fixed at compile time.
[nmh] / sbr / seq_del.c
index ed70c5d9db74efc7edf4a96b7f2ff53252d25588..59e4050d3f9a5b20e909d30244734da41e7e0f56 100644 (file)
@@ -1,8 +1,8 @@
-
-/*
- * seq_del.c -- delete message(s) from a sequence
+/* seq_del.c -- delete message(s) from a sequence
  *
- * $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>
@@ -23,7 +23,8 @@
 int
 seq_delsel (struct msgs *mp, char *cp, int public, int zero)
 {
-    int i, msgnum, new_seq = 1;
+    unsigned int i;
+    int msgnum, new_seq = 1;
 
     if (!seq_nameok (cp))
        return 0;
@@ -31,8 +32,8 @@ seq_delsel (struct msgs *mp, char *cp, int public, int zero)
     /*
      * Get the number for this sequence
      */
-    for (i = 0; mp->msgattrs[i]; i++) {
-       if (!strcmp (mp->msgattrs[i], cp)) {
+    for (i = 0; i < svector_size (mp->msgattrs); i++) {
+       if (!strcmp (svector_at (mp->msgattrs, i), cp)) {
            new_seq = 0;
            break;
        }
@@ -47,15 +48,10 @@ seq_delsel (struct msgs *mp, char *cp, int public, int zero)
         * create the sequence, if necessary
         */
        if (new_seq) {
-           if (i >= NUMATTRS) {
-               advise (NULL, "only %d sequences allowed (no room for %s)!", NUMATTRS, cp);
-               return 0;
-           }
-           if (!(mp->msgattrs[i] = strdup (cp))) {
-               advise (NULL, "strdup failed");
+           if (!(svector_push_back (mp->msgattrs, strdup (cp)))) {
+               inform("strdup failed");
                return 0;
            }
-           mp->msgattrs[i + 1] = NULL;
        }
        /*
         * now add sequence bit to all existing messages
@@ -68,7 +64,7 @@ seq_delsel (struct msgs *mp, char *cp, int public, int zero)
        }
     } else {
        if (new_seq) {
-           advise (NULL, "no such sequence as %s", cp);
+           inform("no such sequence as %s", cp);
            return 0;
        }
     }
@@ -80,6 +76,12 @@ seq_delsel (struct msgs *mp, char *cp, int public, int zero)
        if (is_selected (mp, msgnum))
            clear_sequence (mp, i, msgnum);
 
+    if (! strcmp (cp, current)  &&
+        mp->lowsel <= mp->curmsg  &&  mp->curmsg <= mp->hghsel) {
+        /* Removed current message indication, so reset curmsg. */
+        mp->curmsg = 0;
+    }
+
     /*
      * Set the public/private bit for this sequence.
      */
@@ -112,19 +114,19 @@ seq_delsel (struct msgs *mp, char *cp, int public, int zero)
 int
 seq_delmsg (struct msgs *mp, char *cp, int msgnum)
 {
-    int i;
+    size_t i;
 
     if (!seq_nameok (cp))
        return 0;
 
-    for (i = 0; mp->msgattrs[i]; i++) {
-       if (!strcmp (mp->msgattrs[i], cp)) {
+    for (i = 0; i < svector_size (mp->msgattrs); i++) {
+       if (!strcmp (svector_at (mp->msgattrs, i), cp)) {
            clear_sequence (mp, i, msgnum);
            mp->msgflags |= SEQMOD;
            return 1;
        }
     }
 
-    advise (NULL, "no such sequence as %s", cp);
+    inform("no such sequence as %s", cp);
     return 0;
 }