X("nofmtproc", 0, NFMTPROCSW) \
X("version", 0, VERSIONSW) \
X("help", 0, HELPSW) \
+ /* \
+ * switches for mhlproc \
+ */ \
+ X("concat", -6, CONCATSW) \
+ X("noconcat", -8, NCONCATSW) \
#define X(sw, minchars, id) id,
DEFINE_SWITCH_ENUM(SHOW);
main (int argc, char **argv)
{
int draftsw = 0, headersw = 1;
- int nshow = 0, checkmime = 1, mime;
+ int nshow = 0, checkmime = 1, mime = 0;
int isdf = 0, mode = SHOW, msgnum;
char *cp, *maildir, *file = NULL, *folder = NULL, *proc, *program;
char buf[BUFSIZ], **argp, **arguments;
struct msgs *mp = NULL;
struct msgs_array msgs = { 0, 0, NULL };
- struct msgs_array vec = { 0, 0, NULL };
+ struct msgs_array vec = { 0, 0, NULL }, non_mhl_vec = { 0, 0, NULL };
-#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();
-
- if (!mh_strcasecmp (invo_name, "next")) {
+ if (!strcasecmp (invo_name, "next")) {
mode = NEXT;
- } else if (!mh_strcasecmp (invo_name, "prev")) {
+ } else if (!strcasecmp (invo_name, "prev")) {
mode = PREV;
}
arguments = getarguments (invo_name, argc, argv, 1);
case AMBIGSW:
ambigsw (cp, switches);
done (1);
+
+ case CONCATSW:
+ case NCONCATSW:
+ /* mhl can't handle these, so keep them separate. */
+ app_msgarg(&non_mhl_vec, --cp);
+ continue;
+
case UNKWNSW:
case NPROGSW:
case NFMTPROCSW:
goto go_to_it;
}
-#ifdef WHATNOW
- if (!msgs.size && !folder && mode == SHOW && (cp = getenv ("mhdraft")) && *cp) {
- draftsw++;
- app_msgarg(&vec, cp);
- goto go_to_it;
- }
-#endif /* WHATNOW */
-
if (!msgs.size) {
switch (mode) {
case NEXT:
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 */
/*
* Decide which "proc" to use
*/
- mime = 0;
if (nshow) {
proc = catproc;
} else {
/* check if any messages are non-text MIME messages */
- if (checkmime) {
+ if (! mime && checkmime) {
if (!draftsw && !file) {
/* loop through selected messages and check for MIME */
for (msgnum = mp->lowsel; msgnum <= mp->hghsel; msgnum++)
if (folder && !draftsw && !file)
m_putenv ("mhfolder", folder);
- if (strcmp (r1bindex (proc, '/'), "mhn") == 0) {
- /* Add "-file" if showing file or draft, */
- if (draftsw || file) {
- app_msgarg(&vec, vec.msgs[vec.size - 1]);
- vec.msgs[vec.size - 2] = "-file";
- }
- /* and add -show for backward compatibility */
- app_msgarg(&vec, "-show");
- } else if (strcmp (r1bindex (proc, '/'), "mhshow") == 0) {
- /* If "mhshow", add "-file" if showing file or draft. */
- if (draftsw || file) {
- app_msgarg(&vec, vec.msgs[vec.size - 1]);
- vec.msgs[vec.size - 2] = "-file";
- }
- } else if (strcmp (r1bindex (proc, '/'), "mhl") == 0) {
+ if (strcmp (r1bindex (proc, '/'), "mhl") == 0) {
/* If "mhl", then run it internally */
argsplit_insert(&vec, "mhl", &program);
app_msgarg(&vec, NULL);
mhl (vec.size, vec.msgs);
done (0);
+ } else {
+ int i;
+ char **mp;
+
+ for (i = 0, mp = non_mhl_vec.msgs; i < non_mhl_vec.size; ++i, ++mp) {
+ if (draftsw || file) {
+ /* Insert the switch before the filename. */
+ app_msgarg(&vec, vec.msgs[vec.size - 1]);
+ vec.msgs[vec.size - 2] = *mp;
+ } else {
+ app_msgarg(&vec, *mp);
+ }
+ }
+
+ if (strcmp (r1bindex (proc, '/'), "mhn") == 0) {
+ /* Add "-file" if showing file or draft, */
+ if (draftsw || file) {
+ app_msgarg(&vec, vec.msgs[vec.size - 1]);
+ vec.msgs[vec.size - 2] = "-file";
+ }
+ /* and add -show for backward compatibility */
+ app_msgarg(&vec, "-show");
+ } else if (strcmp (r1bindex (proc, '/'), "mhshow") == 0) {
+ /* If "mhshow", add "-file" if showing file or draft. */
+ if (draftsw || file) {
+ app_msgarg(&vec, vec.msgs[vec.size - 1]);
+ vec.msgs[vec.size - 2] = "-file";
+ }
+ }
}
argsplit_insert(&vec, proc, &program);
/*
* Check Content-Type field
*/
- if (!mh_strcasecmp (name, TYPE_FIELD)) {
+ if (!strcasecmp (name, TYPE_FIELD)) {
int passno;
char c;
if (!*bp)
goto invalid;
if (passno > 1) {
- if ((result = (mh_strcasecmp (bp, "plain") != 0)))
+ if ((result = (strcasecmp (bp, "plain") != 0)))
goto out;
*dp = c;
for (dp++; isspace ((unsigned char) *dp); dp++)
/* Check the character set */
result = !check_charset (dp, strlen (dp));
} else {
- if (!(result = (mh_strcasecmp (bp, "text") != 0))) {
+ if (!(result = (strcasecmp (bp, "text") != 0))) {
*dp = c;
bp = dp;
passno = 2;
/*
* Check Content-Transfer-Encoding field
*/
- if (!mh_strcasecmp (name, ENCODING_FIELD)) {
+ if (!strcasecmp (name, ENCODING_FIELD)) {
cp = add (buf, NULL);
while (state == FLDPLUS) {
bufsz = sizeof buf;
for (dp = bp; istoken ((unsigned char) *dp); dp++)
continue;
*dp = '\0';
- result = (mh_strcasecmp (bp, "7bit")
- && mh_strcasecmp (bp, "8bit")
- && mh_strcasecmp (bp, "binary"));
+ result = (strcasecmp (bp, "7bit")
+ && strcasecmp (bp, "8bit")
+ && strcasecmp (bp, "binary"));
free (cp);
if (result) {