#define FIRST 1
#define LAST 2
-#define getnew(mp) (mp->hghmsg + 1)
+#define getbeyond(mp) ((mp)->hghmsg + 1)
-static int convdir; /* convert direction */
-static char *delimp;
+static int convdir; /* convert direction */
+static char *delimp; /* delimiter pointer */
/*
** static prototypes
found = 0;
/*
- ** Check for special "new" sequence, which
- ** is valid only if ALLOW_NEW is set.
+ ** Check for special beyond sequence, which
+ ** is valid only if ALLOW_BEYOND is set.
*/
- if ((mp->msgflags & ALLOW_NEW) && !strcmp(cp, "new")) {
- if ((err = first = getnew(mp)) <= 0)
+ if ((mp->msgflags & ALLOW_BEYOND) && !strcmp(cp, seq_beyond)) {
+ if ((err = first = getbeyond(mp)) <= 0)
goto badmsg;
else
goto single;
}
- if (!strcmp(cp, "all"))
- cp = "first-last";
+ if (!strcmp(cp, seq_all))
+ cp = concat(seq_first, "-", seq_last, NULL);
if ((err = first = m_conv(mp, cp, FIRST)) <= 0)
goto badmsg;
/*
** Single Message
**
- ** If ALLOW_NEW is set, then allow selecting of an
- ** empty slot. If ALLOW_NEW is not set, then we
+ ** 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.
*/
- if (mp->msgflags & ALLOW_NEW) {
+ 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, "cur"))
- advise(NULL, "no %s message", name);
- else
- advise(NULL, "message %d doesn't exist", first);
- return 0;
- }
+ } else if (first > mp->hghmsg || first < mp->lowmsg
+ || !does_exist(mp, first)) {
+ if (!strcmp(name, seq_cur))
+ advise(NULL, "no %s message", name);
+ else
+ advise(NULL, "message %d doesn't exist",
+ first);
+ return 0;
}
last = first; /* range of 1 */
}
/*
** Cycle through the range and select the messages
- ** that exist. If ALLOW_NEW is set, then we also check
+ ** 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_NEW) && is_select_empty(mp, first))) {
+ ((mp->msgflags & ALLOW_BEYOND) && is_select_empty(mp, first))) {
if (!is_selected(mp, first)) {
set_selected(mp, first);
mp->numsel++;
/*
** Convert the various message names to
** their numeric values.
+** (`42' being an arbitrary number)
**
-** n (integer)
+** 42
** prev
** next
** first
return i;
else if (*delimp || call == LAST)
return mp->hghmsg + 1;
- else if (mp->msgflags & ALLOW_NEW)
+ else if (mp->msgflags & ALLOW_BEYOND)
return BADRNG;
else
return BADNUM;
*bp++ = '\0';
delimp = cp;
- if (!strcmp(buf, "first"))
- return (mp->hghmsg || !(mp->msgflags & ALLOW_NEW)
+ if (!strcmp(buf, seq_first))
+ return (mp->hghmsg || !(mp->msgflags & ALLOW_BEYOND)
? mp->lowmsg : BADMSG);
- if (!strcmp(buf, "last")) {
+ if (!strcmp(buf, seq_last)) {
convdir = -1;
- return (mp->hghmsg || !(mp->msgflags & ALLOW_NEW) ? mp->hghmsg : BADMSG);
+ return (mp->hghmsg || !(mp->msgflags & ALLOW_BEYOND) ? mp->hghmsg : BADMSG);
}
- if (!strcmp(buf, "cur"))
+ if (!strcmp(buf, seq_cur))
return (mp->curmsg > 0 ? mp->curmsg : BADMSG);
- if (!strcmp(buf, "prev")) {
+ if (!strcmp(buf, seq_prev)) {
convdir = -1;
for (i = (mp->curmsg <= mp->hghmsg) ? mp->curmsg - 1 : mp->hghmsg;
i >= mp->lowmsg; i--) {
return BADMSG;
}
- if (!strcmp(buf, "next")) {
+ if (!strcmp(buf, seq_next)) {
for (i = (mp->curmsg >= mp->lowmsg) ? mp->curmsg + 1 : mp->lowmsg;
i <= mp->hghmsg; i++) {
if (does_exist(mp, i))
/*
** Handle user defined sequences.
** They can take the following forms:
+** (`42' being an arbitrary number)
**
** seq
** seq:prev
** seq:next
** seq:first
** seq:last
-** seq:+n
-** seq:-n
-** seq:n
+** seq:+42
+** seq:-42
+** seq:42
*/
-
static int
attr(struct msgs *mp, char *cp)
{
int range = 0; /* no range */
int first = 0;
- /* hack for "cur-name", "cur-n", etc. */
- if (!strcmp(cp, "cur"))
+ /* hack for "c-name", "c-42", etc. */
+ if (!strcmp(cp, seq_cur))
return 0;
- if (isprefix("cur:", cp)) /* this code need to be rewritten... */
+ /* "c:..." -- this code need to be rewritten... */
+ if (strncmp(seq_cur, cp, strlen(seq_cur))==0 &&
+ cp[strlen(seq_cur)] == ':') {
return 0;
+ }
/* Check for sequence negation */
if (!(dp = context_find(nsequence))) {
** seq:last
*/
if (isalpha(*dp)) {
- if (!strcmp(dp, "prev")) {
+ if (!strcmp(dp, seq_prev)) {
convdir = -1;
first = (mp->curmsg > 0) && (mp->curmsg <= mp->hghmsg)
? mp->curmsg - 1 : mp->hghmsg;
- } else if (!strcmp(dp, "next")) {
+ } else if (!strcmp(dp, seq_next)) {
convdir = 1;
first = (mp->curmsg >= mp->lowmsg)
? mp->curmsg + 1 : mp->lowmsg;
- } else if (!strcmp(dp, "first")) {
+ } else if (!strcmp(dp, seq_first)) {
convdir = 1;
- } else if (!strcmp(dp, "last")) {
+ } else if (!strcmp(dp, seq_last)) {
convdir = -1;
} else
return BADLST;
} else {
/*
- ** seq:n (or)
- ** seq:+n (or)
- ** seq:-n
+ ** seq:42 (or)
+ ** seq:+42 (or)
+ ** seq:-42
*/
if (*dp == '+')
dp++;