#include <h/tws.h>
#include <h/mts.h>
#include <h/utils.h>
-#include <errno.h>
-
-static struct swit switches[] = {
-#define CLRSW 0
- { "clear", 0 },
-#define NCLRSW 1
- { "noclear", 0 },
-#define FORMSW 2
- { "form formatfile", 0 },
-#define FMTSW 3
- { "format string", 5 },
-#define HEADSW 4
- { "header", 0 },
-#define NHEADSW 5
- { "noheader", 0 },
-#define WIDTHSW 6
- { "width columns", 0 },
-#define REVSW 7
- { "reverse", 0 },
-#define NREVSW 8
- { "noreverse", 0 },
-#define FILESW 9
- { "file file", 4 },
-#define VERSIONSW 10
- { "version", 0 },
-#define HELPSW 11
- { "help", 0 },
- { NULL, 0 }
-};
-
-/*
- * prototypes
- */
-void clear_screen(void); /* from termsbr.c */
+#define SCAN_SWITCHES \
+ X("clear", 0, CLRSW) \
+ X("noclear", 0, NCLRSW) \
+ X("form formatfile", 0, FORMSW) \
+ X("format string", 5, FMTSW) \
+ X("header", 0, HEADSW) \
+ X("noheader", 0, NHEADSW) \
+ X("width columns", 0, WIDTHSW) \
+ X("reverse", 0, REVSW) \
+ X("noreverse", 0, NREVSW) \
+ X("file file", 4, FILESW) \
+ X("version", 0, VERSIONSW) \
+ X("help", 0, HELPSW) \
+
+#define X(sw, minchars, id) id,
+DEFINE_SWITCH_ENUM(SCAN);
+#undef X
+
+#define X(sw, minchars, id) { sw, minchars, id },
+DEFINE_SWITCH_ARRAY(SCAN, switches);
+#undef X
int
main (int argc, char **argv)
{
int clearflag = 0, hdrflag = 0, ontty;
- int width = 0, revflag = 0;
+ int width = -1, revflag = 0;
int i, state, msgnum;
- int seqnum[NUMATTRS], unseen, num_unseen_seq = 0;
+ ivector_t seqnum = ivector_create (0);
+ int unseen, num_unseen_seq = 0;
char *cp, *maildir, *file = NULL, *folder = NULL;
char *form = NULL, *format = NULL, buf[BUFSIZ];
char **argp, *nfs, **arguments;
struct msgs *mp;
FILE *in;
-#ifdef LOCALE
- setlocale(LC_ALL, "");
-#endif
- invo_name = r1bindex (argv[0], '/');
+ if (nmh_init(argv[0], 1)) { return 1; }
- /* read user profile/context */
- context_read();
-
- mts_init (invo_name);
+ mts_init ();
arguments = getarguments (invo_name, argc, argv, 1);
argp = arguments;
printf ("FOLDER %s\t%s\n", file, dtimenow (1));
}
- m_unknown (in);
+ scan_detect_mbox_style (in);
for (msgnum = 1; ; ++msgnum) {
+ charstring_t scanl = NULL;
+
state = scan (in, msgnum, -1, nfs, width, 0, 0,
- hdrflag ? file : NULL, 0L, 1);
+ hdrflag ? file : NULL, 0L, 1, &scanl);
+ charstring_free (scanl);
if (state != SCNMSG && state != SCNENC)
break;
}
+ scan_finished ();
fclose (in);
done (0);
}
adios (maildir, "unable to change directory to");
/* read folder and create message structure */
- if (!(mp = folder_read (folder)))
+ if (!(mp = folder_read (folder, 1)))
adios (NULL, "unable to read folder %s", folder);
/* check for empty folder */
dp = getcpy(cp);
ap = brkstring (dp, " ", "\n");
for (i = 0; ap && *ap; i++, ap++)
- seqnum[i] = seq_getnum (mp, *ap);
+ ivector_push_back (seqnum, seq_getnum (mp, *ap));
num_unseen_seq = i;
if (dp)
(revflag ? msgnum >= mp->lowsel : msgnum <= mp->hghsel);
msgnum += (revflag ? -1 : 1)) {
if (is_selected(mp, msgnum)) {
+ charstring_t scanl = NULL;
+
if ((in = fopen (cp = m_name (msgnum), "r")) == NULL) {
admonish (cp, "unable to open message");
continue;
*/
unseen = 0;
for (i = 0; i < num_unseen_seq; i++) {
- if (in_sequence(mp, seqnum[i], msgnum)) {
+ if (in_sequence(mp, ivector_at (seqnum, i), msgnum)) {
unseen = 1;
break;
}
switch (state = scan (in, msgnum, 0, nfs, width,
msgnum == mp->curmsg, unseen,
- folder, 0L, 1)) {
+ folder, 0L, 1, &scanl)) {
case SCNMSG:
case SCNENC:
case SCNERR:
advise (NULL, "message %d: empty", msgnum);
break;
}
+ charstring_free (scanl);
+ scan_finished ();
hdrflag = 0;
fclose (in);
if (ontty)
}
}
+ ivector_free (seqnum);
folder_free (mp); /* free folder/message structure */
if (clearflag)
- clear_screen ();
+ nmh_clear_screen ();
done (0);
return 1;