X-Git-Url: http://git.marmaro.de/?p=mmh;a=blobdiff_plain;f=uip%2Fscan.c;h=ef13e39c29fada81f4e8513f311ab6c6b1cdf212;hp=b42d8a2671f3454a0d82254a2ecb4d0fe5a52512;hb=51d0e643f8daeb2db8de0a3d31d7d7f038b48380;hpb=240013872c392fe644bd4f79382d9f5314b4ea60 diff --git a/uip/scan.c b/uip/scan.c index b42d8a2..ef13e39 100644 --- a/uip/scan.c +++ b/uip/scan.c @@ -10,61 +10,32 @@ #include #include #include -#include #include #include static struct swit switches[] = { -#define CLRSW 0 - { "clear", 0 }, -#define NCLRSW 1 - { "noclear", 0 }, -#define FORMSW 2 +#define FORMSW 0 { "form formatfile", 0 }, -#define FMTSW 3 - { "format string", 5 }, -#define HEADSW 4 - { "header", 0 }, -#define NHEADSW 5 - { "noheader", 0 }, -#define WIDTHSW 6 +#define WIDTHSW 1 { "width columns", 0 }, -#define REVSW 7 - { "reverse", 0 }, -#define NREVSW 8 - { "noreverse", 0 }, -#define FILESW 9 +#define FILESW 2 { "file file", 4 }, -#define VERSIONSW 10 +#define VERSIONSW 3 { "version", 0 }, -#define HELPSW 11 +#define HELPSW 4 { "help", 0 }, { NULL, 0 } }; -/* -** global for sbr/formatsbr.c - yech! -*/ -#ifdef LBL -extern struct msgs *fmt_current_folder; -#endif - -/* -** 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 = 0; int i, state, msgnum; int seqnum[NUMATTRS], unseen, num_unseen_seq = 0; char *cp, *maildir, *file = NULL, *folder = NULL; - char *form = NULL, *format = NULL, buf[BUFSIZ]; + char *form = NULL, buf[BUFSIZ]; char **argp, *nfs, **arguments; struct msgs_array msgs = { 0, 0, NULL }; struct msgs *mp; @@ -78,7 +49,6 @@ main(int argc, char **argv) /* read user profile/context */ context_read(); - mts_init(invo_name); arguments = getarguments(invo_name, argc, argv, 1); argp = arguments; @@ -88,82 +58,55 @@ main(int argc, char **argv) while ((cp = *argp++)) { if (*cp == '-') { switch (smatch(++cp, switches)) { - case AMBIGSW: - ambigsw(cp, switches); - done(1); - case UNKWNSW: - adios(NULL, "-%s unknown", cp); - - case HELPSW: - snprintf(buf, sizeof(buf), "%s [+folder] [msgs] [switches]", invo_name); - print_help(buf, switches, 1); - done(1); - case VERSIONSW: - print_version(invo_name); - done(1); - - case CLRSW: - clearflag++; - continue; - case NCLRSW: - clearflag = 0; - continue; - - case FORMSW: - if (!(form = *argp++) || *form == '-') - adios(NULL, "missing argument to %s", argp[-2]); - format = NULL; - continue; - case FMTSW: - if (!(format = *argp++) || - *format == '-') - adios(NULL, "missing argument to %s", argp[-2]); - form = NULL; - continue; - - case HEADSW: - hdrflag++; - continue; - case NHEADSW: - hdrflag = 0; - continue; - - case WIDTHSW: - if (!(cp = *argp++) || *cp == '-') - adios(NULL, "missing argument to %s", argp[-2]); - width = atoi(cp); - continue; - case REVSW: - revflag++; - continue; - case NREVSW: - revflag = 0; - continue; - - case FILESW: - if (!(cp = *argp++) || (cp[0] == '-' && cp[1])) - adios(NULL, "missing argument to %s", argp[-2]); - if (strcmp(file = cp, "-")) - file = path(cp, TFILE); - continue; + case AMBIGSW: + ambigsw(cp, switches); + done(1); + case UNKWNSW: + adios(NULL, "-%s unknown", cp); + + case HELPSW: + snprintf(buf, sizeof(buf), "%s [+folder] [msgs] [switches]", invo_name); + print_help(buf, switches, 1); + done(1); + case VERSIONSW: + print_version(invo_name); + done(1); + + case FORMSW: + if (!(form = *argp++) || *form == '-') + adios(NULL, "missing argument to %s", + argp[-2]); + continue; + + case WIDTHSW: + if (!(cp = *argp++) || *cp == '-') + adios(NULL, "missing argument to %s", + argp[-2]); + width = atoi(cp); + continue; + + case FILESW: + if (!(cp = *argp++) || (cp[0] == '-' && cp[1])) + adios(NULL, "missing argument to %s", + argp[-2]); + if (strcmp(file = cp, "-")!=0) + file = getcpy(expanddir(cp)); + continue; } } if (*cp == '+' || *cp == '@') { if (folder) adios(NULL, "only one folder at a time!"); else - folder = pluspath(cp); + folder = getcpy(expandfol(cp)); } else - app_msgarg(&msgs, cp); + app_msgarg(&msgs, cp); } - if (!context_find("path")) - free(path("./", TFOLDER)); - /* ** Get new format string. Must be before chdir(). */ - nfs = new_fs(form, format, FORMAT); + nfs = new_fs(form, FORMAT); /* ** We are scanning a maildrop file @@ -178,22 +121,14 @@ main(int argc, char **argv) if (strcmp(file, "-") == 0) { in = stdin; file = "stdin"; - } else { - if ((in = fopen(file, "r")) == NULL) - adios(file, "unable to open"); - } - -#ifndef JLR - if (hdrflag) { - printf("FOLDER %s\t%s\n", file, dtimenow(1)); + } else if (!(in = fopen(file, "r"))) { + adios(file, "unable to open"); } -#endif /* JLR */ m_unknown(in); for (msgnum = 1; ; ++msgnum) { - state = scan(in, msgnum, -1, nfs, width, 0, 0, - hdrflag ? file : NULL, 0L, 1); - if (state != SCNMSG && state != SCNENC) + state = scan(in, msgnum, -1, nfs, width, 0, 0, 1); + if (state != SCNMSG) break; } fclose(in); @@ -205,10 +140,10 @@ main(int argc, char **argv) */ if (!msgs.size) - app_msgarg(&msgs, "all"); + app_msgarg(&msgs, seq_all); if (!folder) - folder = getfolder(1); - maildir = m_maildir(folder); + folder = getcurfol(); + maildir = toabsdir(folder); if (chdir(maildir) == NOTOK) adios(maildir, "unable to change directory to"); @@ -227,57 +162,37 @@ main(int argc, char **argv) done(1); seq_setprev(mp); /* set the Previous-Sequence */ - context_replace(pfolder, folder); /* update current folder */ + context_replace(curfolder, folder); /* update current folder */ seq_save(mp); /* synchronize message sequences */ context_save(); /* save the context file */ /* - ** Get the sequence number for each sequence - ** specified by Unseen-Sequence + ** Get the sequence number for each `unseen' sequence */ - if ((cp = context_find(usequence)) && *cp) { + if (!(cp = context_find(usequence))) { + cp = seq_unseen; /* use default, if not set */ + } + if (*cp) { char **ap, *dp; dp = getcpy(cp); ap = brkstring(dp, " ", "\n"); - for (i = 0; ap && *ap; i++, ap++) + for (i = 0; ap && *ap; i++, ap++) { seqnum[i] = seq_getnum(mp, *ap); - + } num_unseen_seq = i; - if (dp) + if (dp) { free(dp); + } } - ontty = isatty(fileno(stdout)); - -#ifdef LBL - else - fmt_current_folder = mp; -#endif - - for (msgnum = revflag ? mp->hghsel : mp->lowsel; - (revflag ? msgnum >= mp->lowsel : msgnum <= mp->hghsel); - msgnum += (revflag ? -1 : 1)) { + for (msgnum = mp->lowsel; msgnum <= mp->hghsel; msgnum++) { if (is_selected(mp, msgnum)) { if ((in = fopen(cp = m_name(msgnum), "r")) == NULL) { -#if 0 - if (errno != EACCES) -#endif - admonish(cp, "unable to open message"); -#if 0 - else - printf("%*d unreadable\n", - DMAXFOLDER, msgnum); -#endif + admonish(cp, "unable to open message"); continue; } -#ifndef JLR - if (hdrflag) { - printf("FOLDER %s\t%s\n", folder, dtimenow(1)); - } -#endif /* JLR */ - /* ** Check if message is in any sequence given ** by Unseen-Sequence profile entry. @@ -292,39 +207,23 @@ main(int argc, char **argv) switch (state = scan(in, msgnum, 0, nfs, width, msgnum == mp->curmsg, unseen, - folder, 0L, 1)) { - case SCNMSG: - case SCNENC: - case SCNERR: - break; + 1)) { + case SCNMSG: + case SCNERR: + break; - default: - adios(NULL, "scan() botch(%d)", state); + default: + adios(NULL, "scan() botch(%d)", state); - case SCNEOF: -#if 0 - printf("%*d empty\n", DMAXFOLDER, - msgnum); -#else - advise(NULL, "message %d: empty", - msgnum); -#endif - break; + case SCNEOF: + advise(NULL, "message %d: empty", msgnum); + break; } - hdrflag = 0; fclose(in); - if (ontty) - fflush(stdout); } } -#ifdef LBL - seq_save(mp); /* because formatsbr might have made changes */ -#endif - folder_free(mp); /* free folder/message structure */ - if (clearflag) - clear_screen(); done(0); return 1;