static int is_nontext(char *);
/* prototype from mhlsbr.c */
-int mhl (int, char **);
+int mhl(int, char **);
#define SHOW 0
#define NEXT 1
int
-main (int argc, char **argv)
+main(int argc, char **argv)
{
int headersw = 1, msgp = 0;
int nshow = 0, checkmime = 1, mime;
#ifdef LOCALE
setlocale(LC_ALL, "");
#endif
- invo_name = r1bindex (argv[0], '/');
+ invo_name = mhbasename(argv[0]);
/* read user profile/context */
context_read();
- if (!mh_strcasecmp (invo_name, "next")) {
+ if (!mh_strcasecmp(invo_name, "next")) {
mode = NEXT;
- } else if (!mh_strcasecmp (invo_name, "prev")) {
+ } else if (!mh_strcasecmp(invo_name, "prev")) {
mode = PREV;
}
- arguments = getarguments (invo_name, argc, argv, 1);
+ arguments = getarguments(invo_name, argc, argv, 1);
argp = arguments;
while ((cp = *argp++)) {
if (*cp == '-') {
- switch (smatch (++cp, switches)) {
- case AMBIGSW:
- ambigsw (cp, switches);
- done (1);
- case UNKWNSW:
- case NPROGSW:
- vec[vecp++] = --cp;
- continue;
-
- case HELPSW:
- snprintf (buf, sizeof(buf), "%s [+folder] %s[switches] [switches for showproc]", invo_name, mode == SHOW ? "[msgs] ": "");
- print_help (buf, switches, 1);
- done (1);
- case VERSIONSW:
- print_version(invo_name);
- done (1);
-
- case FILESW:
- if (mode != SHOW)
+ switch (smatch(++cp, switches)) {
+ case AMBIGSW:
+ ambigsw(cp, switches);
+ done(1);
+ case UNKWNSW:
+ case NPROGSW:
+ vec[vecp++] = --cp;
+ continue;
+
+ case HELPSW:
+ snprintf(buf, sizeof(buf), "%s [+folder] %s[switches] [switches for showproc]", invo_name, mode == SHOW ? "[msgs] ": "");
+ print_help(buf, switches, 1);
+ done(1);
+ case VERSIONSW:
+ print_version(invo_name);
+ done(1);
+
+ case FILESW:
+ if (mode != SHOW)
usage:
- adios (NULL, "usage: %s [+folder] [switches] [switches for showproc]", invo_name);
-
- if (file)
- adios (NULL, "only one file at a time!");
- if (!(cp = *argp++) || *cp == '-')
- adios (NULL, "missing argument to %s", argp[-2]);
- file = path (cp, TFILE);
- continue;
-
- case HEADSW:
- headersw++;
- continue;
- case NHEADSW:
- headersw = 0;
- continue;
-
- case FORMSW:
- vec[vecp++] = --cp;
- if (!(cp = *argp++) || *cp == '-')
- adios (NULL, "missing argument to %s", argp[-2]);
- vec[vecp++] = getcpy (etcpath(cp));
- continue;
-
- case PROGSW:
- case LENSW:
- case WIDTHSW:
- vec[vecp++] = --cp;
- if (!(cp = *argp++) || *cp == '-')
- adios (NULL, "missing argument to %s", argp[-2]);
- vec[vecp++] = cp;
- continue;
-
- case SHOWSW:
- if (!(showproc = *argp++) || *showproc == '-')
- adios (NULL, "missing argument to %s", argp[-2]);
- nshow = 0;
- continue;
- case NSHOWSW:
- nshow++;
- continue;
-
- case SHOWMIMESW:
- if (!(showmimeproc = *argp++) || *showmimeproc == '-')
- adios (NULL, "missing argument to %s", argp[-2]);
- nshow = 0;
- continue;
- case CHECKMIMESW:
- checkmime++;
- continue;
- case NOCHECKMIMESW:
- checkmime = 0;
- continue;
+ adios(NULL, "usage: %s [+folder] [switches] [switches for showproc]", invo_name);
+
+ if (file)
+ adios(NULL, "only one file at a time!");
+ if (!(cp = *argp++) || *cp == '-')
+ adios(NULL, "missing argument to %s", argp[-2]);
+ file = getcpy(expanddir(cp));
+ continue;
+
+ case HEADSW:
+ headersw++;
+ continue;
+ case NHEADSW:
+ headersw = 0;
+ continue;
+
+ case FORMSW:
+ vec[vecp++] = --cp;
+ if (!(cp = *argp++) || *cp == '-')
+ adios(NULL, "missing argument to %s",
+ argp[-2]);
+ vec[vecp++] = getcpy(etcpath(cp));
+ continue;
+
+ case PROGSW:
+ case LENSW:
+ case WIDTHSW:
+ vec[vecp++] = --cp;
+ if (!(cp = *argp++) || *cp == '-')
+ adios(NULL, "missing argument to %s",
+ argp[-2]);
+ vec[vecp++] = cp;
+ continue;
+
+ case SHOWSW:
+ if (!(showproc = *argp++) || *showproc == '-')
+ adios(NULL, "missing argument to %s",
+ argp[-2]);
+ nshow = 0;
+ continue;
+ case NSHOWSW:
+ nshow++;
+ continue;
+
+ case SHOWMIMESW:
+ if (!(showmimeproc = *argp++) ||
+ *showmimeproc == '-')
+ adios(NULL, "missing argument to %s",
+ argp[-2]);
+ nshow = 0;
+ continue;
+ case CHECKMIMESW:
+ checkmime++;
+ continue;
+ case NOCHECKMIMESW:
+ checkmime = 0;
+ continue;
}
}
if (*cp == '+' || *cp == '@') {
if (folder)
- adios (NULL, "only one folder at a time!");
+ adios(NULL, "only one folder at a time!");
else
- folder = pluspath (cp);
+ folder = getcpy(expandfol(cp));
} else if (mode != SHOW) {
goto usage;
} else {
}
procp = vecp;
- if (!context_find ("path"))
- free (path ("./", TFOLDER));
-
if (file) {
if (msgp)
- adios (NULL, "only one file at a time!");
+ adios(NULL, "only one file at a time!");
vec[vecp++] = file;
goto go_to_it;
}
#ifdef WHATNOW
if (!msgp && !folder && mode == SHOW &&
- (cp = getenv ("mhdraft")) && *cp) {
+ (cp = getenv("mhdraft")) && *cp) {
vec[vecp++] = cp;
goto go_to_it;
}
if (!msgp) {
switch (mode) {
- case NEXT:
- msgs[msgp++] = "next";
- break;
- case PREV:
- msgs[msgp++] = "prev";
- break;
- default:
- msgs[msgp++] = "cur";
- break;
+ case NEXT:
+ msgs[msgp++] = seq_next;
+ break;
+ case PREV:
+ msgs[msgp++] = seq_prev;
+ break;
+ default:
+ msgs[msgp++] = seq_cur;
+ break;
}
}
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");
+ if (chdir(maildir) == NOTOK)
+ adios(maildir, "unable to change directory to");
/* read folder and create message structure */
- if (!(mp = folder_read (folder)))
- adios (NULL, "unable to read folder %s", folder);
+ if (!(mp = folder_read(folder)))
+ adios(NULL, "unable to read folder %s", folder);
/* check for empty folder */
if (mp->nummsg == 0)
- adios (NULL, "no messages in %s", folder);
+ adios(NULL, "no messages in %s", folder);
/* parse all the message ranges/sequences and set SELECTED */
for (msgnum = 0; msgnum < msgp; msgnum++)
- if (!m_convert (mp, msgs[msgnum]))
- done (1);
+ if (!m_convert(mp, msgs[msgnum]))
+ done(1);
/*
** Set the SELECT_UNSEEN bit for all the SELECTED messages,
*/
for (msgnum = mp->lowsel; msgnum <= mp->hghsel; msgnum++)
if (is_selected(mp, msgnum))
- set_unseen (mp, msgnum);
+ set_unseen(mp, msgnum);
- seq_setprev (mp); /* set the Previous-Sequence */
- seq_setunseen (mp, 1); /* unset the Unseen-Sequence */
+ seq_setprev(mp); /* set the Previous-Sequence */
+ seq_setunseen(mp, 0); /* unset unseen seqs for shown msgs */
if (mp->numsel > MAXARGS - 2)
- adios (NULL, "more than %d messages for show exec",
+ adios(NULL, "more than %d messages for show exec",
MAXARGS - 2);
for (msgnum = mp->lowsel; msgnum <= mp->hghsel; msgnum++)
if (is_selected(mp, msgnum))
- vec[vecp++] = getcpy (m_name (msgnum));
+ vec[vecp++] = getcpy(m_name(msgnum));
- seq_setcur (mp, mp->hghsel); /* update current message */
- seq_save (mp); /* synchronize sequences */
- context_replace (pfolder, folder); /* update current folder */
- context_save (); /* save the context file */
+ seq_setcur(mp, mp->hghsel); /* update current message */
+ seq_save(mp); /* synchronize sequences */
+ context_replace(curfolder, folder); /* update current folder */
+ context_save(); /* save the context file */
if (headersw && vecp == 2)
- printf ("(Message %s:%s)\n", folder, vec[1]);
+ printf("(Message %s:%s)\n", folder, vec[1]);
go_to_it: ;
- fflush (stdout);
+ fflush(stdout);
vec[vecp] = NULL;
proc = catproc;
} else {
/* check if any messages are non-text MIME messages */
- if (checkmime && !getenv ("NOMHNPROC")) {
+ if (checkmime && !getenv("NOMHNPROC")) {
if (!file) {
/*
** loop through selected messages
for (msgnum = mp->lowsel;
msgnum <= mp->hghsel;
msgnum++)
- if (is_selected (mp, msgnum) && is_nontext (m_name (msgnum))) {
+ if (is_selected(mp, msgnum) && is_nontext(m_name(msgnum))) {
mime = 1;
break;
}
} else {
/* check the file for MIME */
- if (is_nontext (vec[vecp - 1]))
+ if (is_nontext(vec[vecp - 1]))
mime = 1;
}
}
}
if (folder && !file)
- m_putenv ("mhfolder", folder);
+ m_putenv("mhfolder", folder);
/*
** For backward compatibility, if the "proc" is mhn,
** then add "-show" option. Add "-file" if showing
** file.
*/
- if (strcmp (r1bindex (proc, '/'), "mhn") == 0) {
+ if (strcmp(mhbasename(proc), "mhn") == 0) {
if (file) {
vec[vecp] = vec[vecp - 1];
vec[vecp - 1] = "-file";
}
/* If the "proc" is "mhshow", add "-file" if showing file. */
- if (strcmp (r1bindex (proc, '/'), "mhshow") == 0 && file ) {
+ if (strcmp(mhbasename(proc), "mhshow") == 0 && file ) {
vec[vecp] = vec[vecp - 1];
vec[vecp - 1] = "-file";
vec[++vecp] = NULL;
** If "proc" is mhl, then run it internally
** rather than exec'ing it.
*/
- if (strcmp (r1bindex (proc, '/'), "mhl") == 0) {
+ if (strcmp(mhbasename(proc), "mhl") == 0) {
vec[0] = "mhl";
- mhl (vecp, vec);
- done (0);
+ mhl(vecp, vec);
+ done(0);
}
/*
** add the path to the message names. Currently, we are just
** checking for mhn here, since we've already taken care of mhl.
*/
- if (!strcmp (r1bindex (proc, '/'), "mhl")
+ if (strcmp(mhbasename(proc), "mhl")==0
&& !file
- && chdir (maildir =
- concat (m_maildir (""), "/", NULL)) != NOTOK) {
- mp->foldpath = concat (mp->foldpath, "/", NULL);
- cp = ssequal (maildir, mp->foldpath)
- ? mp->foldpath + strlen (maildir)
- : mp->foldpath;
+ && chdir(maildir =
+ concat(toabsdir("+"), "/", NULL)) != NOTOK) {
+ mp->foldpath = concat(mp->foldpath, "/", NULL);
+ cp = (strncmp(mp->foldpath, maildir, strlen(maildir))==0) ?
+ mp->foldpath + strlen(maildir) :
+ mp->foldpath;
for (msgnum = procp; msgnum < vecp; msgnum++)
- vec[msgnum] = concat (cp, vec[msgnum], NULL);
+ vec[msgnum] = concat(cp, vec[msgnum], NULL);
}
- vec[0] = r1bindex (proc, '/');
- execvp (proc, vec);
- adios (proc, "unable to exec");
+ vec[0] = mhbasename(proc);
+ execvp(proc, vec);
+ adios(proc, "unable to exec");
return 0; /* dead code to satisfy the compiler */
}
** Check if a message or file contains any non-text parts
*/
static int
-is_nontext (char *msgnam)
+is_nontext(char *msgnam)
{
int result, state;
unsigned char *bp, *dp;
char buf[BUFSIZ], name[NAMESZ];
FILE *fp;
- if ((fp = fopen (msgnam, "r")) == NULL)
+ if ((fp = fopen(msgnam, "r")) == NULL)
return 0;
for (state = FLD;;) {
- switch (state = m_getfld (state, name, buf, sizeof(buf), fp)) {
+ switch (state = m_getfld(state, name, buf, sizeof(buf), fp)) {
case FLD:
case FLDPLUS:
case FLDEOF:
/*
** Check Content-Type field
*/
- if (!mh_strcasecmp (name, TYPE_FIELD)) {
+ if (!mh_strcasecmp(name, TYPE_FIELD)) {
int passno;
char c;
- cp = add (buf, NULL);
+ cp = getcpy(buf);
while (state == FLDPLUS) {
- state = m_getfld (state, name, buf,
+ state = m_getfld(state, name, buf,
sizeof(buf), fp);
- cp = add (buf, cp);
+ cp = add(buf, cp);
}
bp = cp;
passno = 1;
again:
- for (; isspace (*bp); bp++)
+ for (; isspace(*bp); bp++)
continue;
if (*bp == '(') {
int i;
passno = 3;
goto again;
}
- for (dp = bp; istoken (*dp); dp++)
+ for (dp = bp; istoken(*dp); dp++)
continue;
c = *dp;
*dp = '\0';
if (!*bp)
goto invalid;
if (passno > 1) {
- if ((result = (mh_strcasecmp (bp,
+ if ((result = (mh_strcasecmp(bp,
"plain") != 0)))
goto out;
*dp = c;
- for (dp++; isspace (*dp); dp++)
+ for (dp++; isspace(*dp); dp++)
continue;
if (*dp) {
- if ((result = !uprf (dp,
+ if ((result = !uprf(dp,
"charset")))
goto out;
dp += sizeof("charset") - 1;
- while (isspace (*dp))
+ while (isspace(*dp))
dp++;
if (*dp++ != '=')
goto invalid;
- while (isspace (*dp))
+ while (isspace(*dp))
dp++;
if (*dp == '"') {
if ((bp = strchr(++dp, '"')))
*bp = '\0';
} else {
for (bp = dp; *bp; bp++)
- if (!istoken (*bp)) {
+ if (!istoken(*bp)) {
*bp = '\0';
break;
}
dp = "US-ASCII";
}
/* Check the character set */
- result = !check_charset (dp, strlen (dp));
+ result = !check_charset(dp, strlen(dp));
} else {
- if (!(result = (mh_strcasecmp (bp, "text") != 0))) {
+ if (!(result = (mh_strcasecmp(bp, "text") != 0))) {
*dp = c;
bp = dp;
passno = 2;
}
}
out:
- free (cp);
+ free(cp);
if (result) {
- fclose (fp);
+ fclose(fp);
return result;
}
break;
/*
** Check Content-Transfer-Encoding field
*/
- if (!mh_strcasecmp (name, ENCODING_FIELD)) {
- cp = add (buf, NULL);
+ if (!mh_strcasecmp(name, ENCODING_FIELD)) {
+ cp = getcpy(buf);
while (state == FLDPLUS) {
- state = m_getfld (state, name, buf, sizeof(buf), fp);
- cp = add (buf, cp);
+ state = m_getfld(state, name, buf,
+ sizeof(buf), fp);
+ cp = add(buf, cp);
}
- for (bp = cp; isspace (*bp); bp++)
+ for (bp = cp; isspace(*bp); bp++)
continue;
- for (dp = bp; istoken (*dp); dp++)
+ for (dp = bp; istoken(*dp); dp++)
continue;
*dp = '\0';
- result = (mh_strcasecmp (bp, "7bit")
- && mh_strcasecmp (bp, "8bit")
- && mh_strcasecmp (bp, "binary"));
+ result = (mh_strcasecmp(bp, "7bit")
+ && mh_strcasecmp(bp, "8bit")
+ && mh_strcasecmp(bp, "binary"));
- free (cp);
+ free(cp);
if (result) {
- fclose (fp);
+ fclose(fp);
return result;
}
break;
** so message is just text.
*/
default:
- fclose (fp);
+ fclose(fp);
return 0;
}
}