X-Git-Url: https://diplodocus.org/git/nmh/blobdiff_plain/6b4bc4a25eaac2eddd1bef51e3f00c21f98ed32d..63621a81d16ab743de6b57d47578a9a2c670ad22:/uip/scan.c diff --git a/uip/scan.c b/uip/scan.c index 2996a2b5..b0c64f1c 100644 --- a/uip/scan.c +++ b/uip/scan.c @@ -1,6 +1,4 @@ - -/* - * scan.c -- display a one-line "scan" listing of folder or messages +/* scan.c -- display a one-line "scan" listing of folder or messages * * This code is Copyright (c) 2002, by the authors of nmh. See the * COPYRIGHT file in the root directory of the nmh distribution for @@ -13,7 +11,8 @@ #include #include #include -#include +#include "sbr/m_maildir.h" +#include "sbr/terminal.h" #define SCAN_SWITCHES \ X("clear", 0, CLRSW) \ @@ -38,19 +37,14 @@ DEFINE_SWITCH_ARRAY(SCAN, switches); #undef X -/* - * prototypes - */ -void clear_screen(void); /* from termsbr.c */ - - 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; @@ -58,15 +52,9 @@ main (int argc, char **argv) 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; @@ -139,10 +127,9 @@ main (int argc, char **argv) if (*cp == '+' || *cp == '@') { if (folder) adios (NULL, "only one folder at a time!"); - else - folder = pluspath (cp); + folder = pluspath (cp); } else - app_msgarg(&msgs, cp); + app_msgarg(&msgs, cp); } if (!context_find ("path")) @@ -177,8 +164,11 @@ main (int argc, char **argv) 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; } @@ -225,14 +215,13 @@ main (int argc, char **argv) if ((cp = context_find (usequence)) && *cp) { char **ap, *dp; - dp = getcpy(cp); + dp = mh_xstrdup(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) - free(dp); + free(dp); } ontty = isatty (fileno (stdout)); @@ -241,6 +230,8 @@ main (int argc, char **argv) (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; @@ -256,7 +247,7 @@ main (int argc, char **argv) */ 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; } @@ -264,7 +255,7 @@ main (int argc, char **argv) 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: @@ -274,9 +265,10 @@ main (int argc, char **argv) adios (NULL, "scan() botch (%d)", state); case SCNEOF: - advise (NULL, "message %d: empty", msgnum); + inform("message %d: empty", msgnum); break; } + charstring_free (scanl); scan_finished (); hdrflag = 0; fclose (in); @@ -285,9 +277,10 @@ main (int argc, char **argv) } } + ivector_free (seqnum); folder_free (mp); /* free folder/message structure */ if (clearflag) - clear_screen (); + nmh_clear_screen (); done (0); return 1;