X-Git-Url: https://diplodocus.org/git/nmh/blobdiff_plain/6c42153ad9362cc676ea66563bf400d7511b3b68..394a751fd883d2bbfc769fed7e254e008a2ef45e:/sbr/seq_del.c diff --git a/sbr/seq_del.c b/sbr/seq_del.c index 67a93bb5..4abd745d 100644 --- a/sbr/seq_del.c +++ b/sbr/seq_del.c @@ -1,15 +1,13 @@ - -/* - * seq_del.c -- delete message(s) from a sequence - * - * $Id$ +/* seq_del.c -- delete message(s) from a sequence * * 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 +#include "h/mh.h" +#include "seq_nameok.h" +#include "error.h" /* @@ -27,7 +25,8 @@ int seq_delsel (struct msgs *mp, char *cp, int public, int zero) { - int i, msgnum, new_seq = 1; + unsigned int i; + int msgnum; if (!seq_nameok (cp)) return 0; @@ -35,9 +34,10 @@ 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)) { - new_seq = 0; + bool new_seq = true; + for (i = 0; i < svector_size (mp->msgattrs); i++) { + if (!strcmp (svector_at (mp->msgattrs, i), cp)) { + new_seq = false; break; } } @@ -51,15 +51,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); + if (!(svector_push_back (mp->msgattrs, strdup (cp)))) { + inform("strdup failed"); return 0; } - if (!(mp->msgattrs[i] = strdup (cp))) { - advise (NULL, "strdup failed"); - return 0; - } - mp->msgattrs[i + 1] = NULL; } /* * now add sequence bit to all existing messages @@ -72,7 +67,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; } } @@ -84,6 +79,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. */ @@ -116,19 +117,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; }