#include <h/utils.h>
#define PICK_SWITCHES \
+ X("reverse", 0, REVSW) \
X("and", 0, ANDSW) \
X("or", 0, ORSW) \
X("not", 0, NOTSW) \
X("nozero", 0, NZEROSW) \
X("list", 0, LISTSW) \
X("nolist", 0, NLISTSW) \
+ X("debug", 0, DEBUGSW) \
X("version", 0, VERSIONSW) \
X("help", 0, HELPSW) \
struct msgnum_array nums = { 0, 0, NULL };
struct msgs *mp, *mp2;
register FILE *fp;
+ int debug = 0;
+ int reverse = 0;
if (nmh_init(argv[0], 1)) { return 1; }
done=putzero_done;
+ /* Deprecated. Use -debug instead. */
+ if ((cp = getenv ("MHPDEBUG")) && *cp)
+ ++debug;
+
arguments = getarguments (invo_name, argc, argv, 1);
argp = arguments;
listsw = 0; /* HACK */
done (0);
+ case REVSW:
+ reverse = 1;
+ continue;
+
case CCSW:
case DATESW:
case FROMSW:
case NLISTSW:
listsw = 0;
continue;
+
+ case DEBUGSW:
+ ++debug;
+ continue;
}
}
if (*cp == '+' || *cp == '@') {
* match. If there is NOT a match, then add it to a list to
* remove from the final sequence (it will make sense later)
*/
- for (msgnum = mp->lowsel; msgnum <= mp->hghsel; msgnum++) {
+ for (msgnum = reverse ? mp->hghsel : mp->lowsel;
+ reverse ? msgnum >= mp->lowsel : msgnum <= mp->hghsel;
+ msgnum += reverse ? -1 : 1) {
if (is_selected (mp, msgnum)) {
if ((fp = fopen (cp = m_name (msgnum), "r")) == NULL)
admonish (cp, "unable to read message");
- if (fp && pmatches (fp, msgnum, 0L, 0L)) {
+ if (fp && pmatches (fp, msgnum, 0L, 0L, debug)) {
if (listsw)
printf ("%s\n", m_name (msgnum));
} else {