X-Git-Url: https://diplodocus.org/git/nmh/blobdiff_plain/adc0a3232c43033729dbc036f0757bddfba463bd..ae9b723f054219598687babf6ae16b5177604460:/uip/sortm.c diff --git a/uip/sortm.c b/uip/sortm.c index b8df0d0b..68132989 100644 --- a/uip/sortm.c +++ b/uip/sortm.c @@ -11,37 +11,29 @@ #include #include -static struct swit switches[] = { -#define DATESW 0 - { "datefield field", 0 }, -#define TEXTSW 1 - { "textfield field", 0 }, -#define NSUBJSW 2 - { "notextfield", 0 }, -#define SUBJSW 3 - { "subject", -3 }, /* backward-compatibility */ -#define LIMSW 4 - { "limit days", 0 }, -#define NLIMSW 5 - { "nolimit", 0 }, -#define VERBSW 6 - { "verbose", 0 }, -#define NVERBSW 7 - { "noverbose", 0 }, -#define ALLMSGS 8 - { "all", 0 }, -#define NALLMSGS 9 - { "noall", 0 }, -#define CHECKSW 10 - { "check", 0 }, -#define NCHECKSW 11 - { "nocheck", 0 }, -#define VERSIONSW 12 - { "version", 0 }, -#define HELPSW 13 - { "help", 0 }, - { NULL, 0 } -}; +#define SORTM_SWITCHES \ + X("datefield field", 0, DATESW) \ + X("textfield field", 0, TEXTSW) \ + X("notextfield", 0, NSUBJSW) \ + X("subject", -3, SUBJSW) /* backward-compatibility */ \ + X("limit days", 0, LIMSW) \ + X("nolimit", 0, NLIMSW) \ + X("verbose", 0, VERBSW) \ + X("noverbose", 0, NVERBSW) \ + X("all", 0, ALLMSGS) \ + X("noall", 0, NALLMSGS) \ + X("check", 0, CHECKSW) \ + X("nocheck", 0, NCHECKSW) \ + X("version", 0, VERSIONSW) \ + X("help", 0, HELPSW) \ + +#define X(sw, minchars, id) id, +DEFINE_SWITCH_ENUM(SORTM); +#undef X + +#define X(sw, minchars, id) { sw, minchars, id }, +DEFINE_SWITCH_ARRAY(SORTM, switches); +#undef X struct smsg { int s_msg; @@ -365,16 +357,15 @@ get_fields (char *datesw, int msg, struct smsg *smsg) register struct tws *tw; register char *datecomp = NULL, *subjcomp = NULL; register FILE *in; - m_getfld_state_t gstate; + m_getfld_state_t gstate = 0; if ((in = fopen (msgnam = m_name (msg), "r")) == NULL) { admonish (msgnam, "unable to read message"); return (0); } - m_getfld_state_init (&gstate); for (compnum = 1;;) { int bufsz = sizeof buf; - switch (state = m_getfld (gstate, nam, buf, &bufsz, in)) { + switch (state = m_getfld (&gstate, nam, buf, &bufsz, in)) { case FLD: case FLDPLUS: compnum++; @@ -382,7 +373,7 @@ get_fields (char *datesw, int msg, struct smsg *smsg) datecomp = add (buf, datecomp); while (state == FLDPLUS) { bufsz = sizeof buf; - state = m_getfld (gstate, nam, buf, &bufsz, in); + state = m_getfld (&gstate, nam, buf, &bufsz, in); datecomp = add (buf, datecomp); } if (!subjsort || subjcomp) @@ -391,7 +382,7 @@ get_fields (char *datesw, int msg, struct smsg *smsg) subjcomp = add (buf, subjcomp); while (state == FLDPLUS) { bufsz = sizeof buf; - state = m_getfld (gstate, nam, buf, &bufsz, in); + state = m_getfld (&gstate, nam, buf, &bufsz, in); subjcomp = add (buf, subjcomp); } if (datecomp) @@ -400,7 +391,7 @@ get_fields (char *datesw, int msg, struct smsg *smsg) /* just flush this guy */ while (state == FLDPLUS) { bufsz = sizeof buf; - state = m_getfld (gstate, nam, buf, &bufsz, in); + state = m_getfld (&gstate, nam, buf, &bufsz, in); } } continue; @@ -437,7 +428,10 @@ get_fields (char *datesw, int msg, struct smsg *smsg) if (!datecomp || (tw = dparsetime (datecomp)) == NULL) { struct stat st; - admonish (NULL, "can't parse %s field in message %d", datesw, msg); + advise (NULL, + "can't parse %s field in message %d, " + "will use file modification time", + datesw, msg); fstat (fileno (in), &st); smsg->s_clock = st.st_mtime; check_failed = 1;