static int attr(struct msgs *, char *);
+static void
+addtosel(struct msgs *mp, int msg)
+{
+ if (is_selected(mp, msg)) {
+ return; /* dont select twice */
+ }
+ set_selected(mp, msg);
+ mp->numsel++;
+ if (mp->lowsel == 0 || msg < mp->lowsel) {
+ mp->lowsel = msg;
+ }
+ if (msg > mp->hghsel) {
+ mp->hghsel = msg;
+ }
+}
+
int
m_convert(struct msgs *mp, char *name)
{
}
/*
** else err == 0, so continue
- ** (we know here: it is no user-defined seq)
+ ** here we know: it is no user-defined seq
*/
- found = 0;
-
/*
- ** Check for special beyond sequence, which
- ** is valid only if ALLOW_BEYOND is set.
- ** (It can appear only on its own.)
+ ** Handle the special beyond sequence, which is valid only if
+ ** ALLOW_BEYOND is set, and can appear only on its own.
+ ** Also, it is available in any folder.
*/
- if ((mp->msgflags & ALLOW_BEYOND) && !strcmp(cp, seq_beyond)) {
- if ((err = first = getbeyond(mp)) <= 0)
- goto badmsg;
- else
- goto single;
+ if ((mp->msgflags & ALLOW_BEYOND) && strcmp(cp, seq_beyond)==0) {
+ addtosel(mp, getbeyond(mp));
+ return 1;
}
- /* replace `a' with `f-l' */
- if (!strcmp(cp, seq_all))
+ /*
+ ** Handle the special all sequence: replace `a' with `f-l'
+ */
+ if (strcmp(cp, seq_all)==0) {
cp = concat(seq_first, "-", seq_last, NULL);
+ }
if ((err = first = m_conv(mp, cp, FIRST)) <= 0)
goto badmsg;
first = mp->hghmsg;
for (last = first; last >= mp->lowmsg && last <= mp->hghmsg;
- last += convdir)
+ last += convdir)
if (does_exist(mp, last) && (--range <= 0))
break;
if (last < mp->lowmsg)
case '\0':
/* single name */
-single:
/*
** AFAICS, the only cases to reach here are:
** f, l, p, n, c, b
/*
** Single Message
**
- ** If ALLOW_BEYOND is set, then allow selecting of an
- ** empty slot. If ALLOW_BEYOND is not set, then we
- ** check if message is in-range and exists.
+ ** Check if message is in-range and exists.
*/
- if (mp->msgflags & ALLOW_BEYOND) {
- set_select_empty(mp, first);
- } else if (first > mp->hghmsg || first < mp->lowmsg
- || !does_exist(mp, first)) {
- if (!strcmp(name, seq_cur))
+ if (first > mp->hghmsg || first < mp->lowmsg ||
+ !does_exist(mp, first)) {
+ if (strcmp(name, seq_cur)==0)
advise(NULL, "no current message");
else
+ /* this case seems to never be reached */
advise(NULL, "message %d doesn't exist",
first);
return 0;
break;
}
- /*
- ** Cycle through the range and select the messages
- ** that exist. If ALLOW_BEYOND is set, then we also check
- ** if we are selecting an empty slot.
- */
- for (; first <= last; first++) {
- if (does_exist(mp, first) || (
- (mp->msgflags & ALLOW_BEYOND) &&
- is_select_empty(mp, first))) {
- if (!is_selected(mp, first)) {
- set_selected(mp, first);
- mp->numsel++;
- if (mp->lowsel == 0 || first < mp->lowsel)
- mp->lowsel = first;
- if (first > mp->hghsel)
- mp->hghsel = first;
- }
+ /* Cycle through the range and select the messages that exist. */
+ for (found=0; first <= last; first++) {
+ if (does_exist(mp, first)) {
+ addtosel(mp, first);
found++;
}
}
-
if (!found)
goto rangerr;
{
register int i;
register unsigned char *cp, *bp;
- unsigned char buf[16];
+ unsigned char buf[16]; /* for reserved sequence name */
convdir = 1;
cp = bp = str;
+
+ /* Handle an integer */
if (isdigit(*cp)) {
while (isdigit(*bp))
bp++;
return BADNUM;
}
-#ifdef LOCALE
- /* doesn't enforce lower case */
- for (bp = buf; isalpha(*cp) && (bp - buf < sizeof(buf) - 1); )
-#else
- for (bp = buf; islower(*cp) && (bp - buf < sizeof(buf) - 1); )
-#endif /* LOCALE */
- {
+ for (bp = buf; isalpha(*cp) && (bp - buf < (int)sizeof(buf) - 1); ) {
*bp++ = *cp++;
}
*bp++ = '\0';
delimp = cp;
- if (!strcmp(buf, seq_first))
- return (mp->hghmsg || !(mp->msgflags & ALLOW_BEYOND)
- ? mp->lowmsg : BADMSG);
+ /* Which one of the reserved names is it? */
+ if (strcmp(buf, seq_first)==0) {
+ return (mp->hghmsg || !(mp->msgflags & ALLOW_BEYOND) ?
+ mp->lowmsg : BADMSG);
- if (!strcmp(buf, seq_last)) {
+ } else if (strcmp(buf, seq_last)==0) {
convdir = -1;
- return (mp->hghmsg || !(mp->msgflags & ALLOW_BEYOND) ? mp->hghmsg : BADMSG);
- }
+ return (mp->hghmsg || !(mp->msgflags & ALLOW_BEYOND) ?
+ mp->hghmsg : BADMSG);
- if (!strcmp(buf, seq_cur))
+ } else if (strcmp(buf, seq_cur)==0) {
return (mp->curmsg > 0 ? mp->curmsg : BADMSG);
- if (!strcmp(buf, seq_prev)) {
+ } else if (strcmp(buf, seq_prev)==0) {
convdir = -1;
- for (i = (mp->curmsg <= mp->hghmsg) ? mp->curmsg - 1 : mp->hghmsg;
- i >= mp->lowmsg; i--) {
+ for (i = (mp->curmsg <= mp->hghmsg) ?
+ mp->curmsg - 1 : mp->hghmsg;
+ i >= mp->lowmsg; i--) {
if (does_exist(mp, i))
return i;
}
return BADMSG;
- }
- if (!strcmp(buf, seq_next)) {
- for (i = (mp->curmsg >= mp->lowmsg) ? mp->curmsg + 1 : mp->lowmsg;
- i <= mp->hghmsg; i++) {
+ } else if (strcmp(buf, seq_next)==0) {
+ for (i = (mp->curmsg >= mp->lowmsg) ?
+ mp->curmsg + 1 : mp->lowmsg;
+ i <= mp->hghmsg; i++) {
if (does_exist(mp, i))
return i;
}
return BADMSG;
- }
- return BADLST;
+ } else {
+ return BADLST;
+ }
}
/*
int first = 0;
/* hack for "c-..." */
- if (!strcmp(cp, seq_cur))
+ if (strcmp(cp, seq_cur)==0)
return 0;
/* "c:..." -- this code need to be rewritten... */
if (strncmp(seq_cur, cp, strlen(seq_cur))==0 &&
if (!(dp = context_find(nsequence))) {
dp = seq_neg; /* use default */
}
- if (dp && *dp && isprefix(dp, cp)) {
+ if (*dp && strncmp(cp, dp, strlen(dp))==0) {
inverted = 1;
cp += strlen(dp);
}
** seq:l
*/
if (isalpha(*dp)) {
- if (!strcmp(dp, seq_prev)) {
+ if (strcmp(dp, seq_prev)==0) {
convdir = -1;
first = (mp->curmsg > 0) && (mp->curmsg <= mp->hghmsg)
? mp->curmsg - 1 : mp->hghmsg;
- } else if (!strcmp(dp, seq_next)) {
+ } else if (strcmp(dp, seq_next)==0) {
convdir = 1;
first = (mp->curmsg >= mp->lowmsg)
? mp->curmsg + 1 : mp->lowmsg;
- } else if (!strcmp(dp, seq_first)) {
+ } else if (strcmp(dp, seq_first)==0) {
convdir = 1;
- } else if (!strcmp(dp, seq_last)) {
+ } else if (strcmp(dp, seq_last)==0) {
convdir = -1;
} else
return BADLST;
found = 0; /* count the number we select for this argument */
for (j = first ? first : (convdir > 0) ? mp->lowmsg : mp->hghmsg;
- j >= mp->lowmsg && j <= mp->hghmsg; j += convdir) {
+ j >= mp->lowmsg && j <= mp->hghmsg; j += convdir) {
if (does_exist(mp, j)
- && inverted ? !in_sequence(mp, i, j) : in_sequence(mp, i, j)) {
- if (!is_selected(mp, j)) {
- set_selected(mp, j);
- mp->numsel++;
- if (mp->lowsel == 0 || j < mp->lowsel)
- mp->lowsel = j;
- if (j > mp->hghsel)
- mp->hghsel = j;
- }
+ && inverted ? !in_sequence(mp, i, j) :
+ in_sequence(mp, i, j)) {
+ addtosel(mp, j);
found++;
/*
}
}
- if (found > 0)
+ if (found)
return found;
if (first)