* mhlsbr.c -- main routines for nmh message lister
*
* $Id$
+ *
+ * This code is Copyright (c) 2002, by the authors of nmh. See the
+ * COPYRIGHT file in the root directory of the nmh distribution for
+ * complete copyright information.
*/
#include <h/mh.h>
#include <h/signals.h>
#include <h/addrsbr.h>
#include <h/fmt_scan.h>
-#include <zotnet/tws/tws.h>
+#include <h/tws.h>
+#include <h/utils.h>
#include <setjmp.h>
#include <signal.h>
#define VERSIONSW 15
{ "version", 0 },
#define HELPSW 16
- { "help", 4 },
+ { "help", 0 },
#define FORW1SW 17
{ "forward", -7 }, /* interface from forw */
#define FORW2SW 18
static char *ovtxt;
-static char *onelp;
+static unsigned char *onelp;
static char *parptr;
vecp > 1 ? "s" : "");
}
+ fflush(stdout);
+ if(ferror(stdout)){
+ adios("output", "error writing");
+ }
+
if (clearflg > 0 && ontty == NOTTY)
clear_screen ();
static ino_t ino = 0;
static time_t mtime = 0;
- if (fmthd != NULL)
+ if (fmthd != NULL) {
if (stat (etcpath (file), &st) != NOTOK
&& mtime == st.st_mtime
&& dev == st.st_dev
goto out;
else
free_queue (&fmthd, &fmttl);
+ }
if ((fp = fopen (etcpath (file), "r")) == NULL)
adios (file, "unable to open format file");
* Split this list of fields to ignore, and copy
* it to the end of the current "ignores" list.
*/
- if (!strcasecmp (name, "ignores")) {
+ if (!mh_strcasecmp (name, "ignores")) {
char **tmparray, **p;
int n = 0;
if (evalvar (c1))
adios (NULL, "format file syntax error: %s", bp);
}
- if (!c1->c_nfs && global.c_nfs)
+ if (!c1->c_nfs && global.c_nfs) {
if (c1->c_flags & DATEFMT) {
if (global.c_flags & DATEFMT)
c1->c_nfs = getcpy (global.c_nfs);
if (global.c_flags & ADDRFMT)
c1->c_nfs = getcpy (global.c_nfs);
}
+ }
continue;
default:
return 0;
strncpy (name, parse(), sizeof(name));
- if (!strcasecmp (name, "component")) {
+ if (!mh_strcasecmp (name, "component")) {
if (ptos (name, &c1->c_text))
return 1;
c1->c_flags &= ~NOCOMPONENT;
return 0;
}
- if (!strcasecmp (name, "overflowtext"))
+ if (!mh_strcasecmp (name, "overflowtext"))
return ptos (name, &c1->c_ovtxt);
- if (!strcasecmp (name, "formatfield")) {
+ if (!mh_strcasecmp (name, "formatfield")) {
char *nfs;
if (ptos (name, &cp))
return 0;
}
- if (!strcasecmp (name, "decode")) {
+ if (!mh_strcasecmp (name, "decode")) {
char *nfs;
nfs = new_fs (NULL, NULL, "%(decode{text})");
return 0;
}
- if (!strcasecmp (name, "offset"))
+ if (!mh_strcasecmp (name, "offset"))
return ptoi (name, &c1->c_offset);
- if (!strcasecmp (name, "overflowoffset"))
+ if (!mh_strcasecmp (name, "overflowoffset"))
return ptoi (name, &c1->c_ovoff);
- if (!strcasecmp (name, "width"))
+ if (!mh_strcasecmp (name, "width"))
return ptoi (name, &c1->c_width);
- if (!strcasecmp (name, "compwidth"))
+ if (!mh_strcasecmp (name, "compwidth"))
return ptoi (name, &c1->c_cwidth);
- if (!strcasecmp (name, "length"))
+ if (!mh_strcasecmp (name, "length"))
return ptoi (name, &c1->c_length);
- if (!strcasecmp (name, "nodashstuffing"))
+ if (!mh_strcasecmp (name, "nodashstuffing"))
return (dashstuff = -1);
for (ap = triples; ap->t_name; ap++)
- if (!strcasecmp (ap->t_name, name)) {
+ if (!mh_strcasecmp (ap->t_name, name)) {
c1->c_flags |= ap->t_on;
c1->c_flags &= ~ap->t_off;
return 0;
case FLD:
case FLDPLUS:
for (ip = ignores; *ip; ip++)
- if (!strcasecmp (name, *ip)) {
+ if (!mh_strcasecmp (name, *ip)) {
while (state == FLDPLUS)
state = m_getfld (state, name, buf, sizeof(buf), fp);
break;
continue;
for (c2 = fmthd; c2; c2 = c2->c_next)
- if (!strcasecmp (c2->c_name, name))
+ if (!mh_strcasecmp (c2->c_name, name))
break;
c1 = NULL;
if (!((c3 = c2 ? c2 : &global)->c_flags & SPLIT))
for (c1 = msghd; c1; c1 = c1->c_next)
- if (!strcasecmp (c1->c_name, c3->c_name)) {
+ if (!mh_strcasecmp (c1->c_name, c3->c_name)) {
c1->c_text =
mcomp_add (c1->c_flags, buf, c1->c_text);
break;
putcomp (c1, c1, ONECOMP);
continue;
}
- if (!strcasecmp (c1->c_name, "messagename")) {
+ if (!mh_strcasecmp (c1->c_name, "messagename")) {
holder.c_text = concat ("(Message ", mname, ")\n",
NULL);
putcomp (c1, &holder, ONECOMP);
holder.c_text = NULL;
continue;
}
- if (!strcasecmp (c1->c_name, "extras")) {
+ if (!mh_strcasecmp (c1->c_name, "extras")) {
for (c2 = msghd; c2; c2 = c2->c_next)
if (c2->c_flags & EXTRA)
putcomp (c1, c2, TWOCOMP);
continue;
}
- if (dobody && !strcasecmp (c1->c_name, "body")) {
- if ((holder.c_text = malloc (sizeof(buf))) == NULL)
- adios (NULL, "unable to allocate buffer memory");
+ if (dobody && !mh_strcasecmp (c1->c_name, "body")) {
+ holder.c_text = mh_xmalloc (sizeof(buf));
strncpy (holder.c_text, buf, sizeof(buf));
while (state == BODY) {
putcomp (c1, &holder, BODYCOMP);
continue;
}
for (c2 = msghd; c2; c2 = c2->c_next)
- if (!strcasecmp (c2->c_name, c1->c_name)) {
+ if (!mh_strcasecmp (c2->c_name, c1->c_name)) {
putcomp (c1, c2, ONECOMP);
if (!(c1->c_flags & SPLIT))
break;
struct pair *ap;
for (ap = pairs; ap->p_name; ap++)
- if (!strcasecmp (ap->p_name, name))
+ if (!mh_strcasecmp (ap->p_name, name))
return (ap->p_flags);
return 0;
putcomp (struct mcomp *c1, struct mcomp *c2, int flag)
{
int count, cchdr;
- char *cp;
+ unsigned char *cp;
cchdr = 0;
lm = 0;
*cp = toupper (*cp);
count = 0;
- if (cchdr)
+ if (cchdr) {
if (flag == TWOCOMP)
count = (c1->c_cwidth >= 0) ? c1->c_cwidth
: strlen (c2->c_name) + 2;
else
count = (c1->c_cwidth >= 0) ? c1->c_cwidth
: strlen (c1->c_text ? c1->c_text : c1->c_name) + 2;
+ }
count += c1->c_offset;
if ((cp = oneline (c2->c_text, c1->c_flags)))
if (term == '\n')
putstr ("\n");
}
+ if (flag == BODYCOMP && term == '\n')
+ c1->c_flags &= ~HDROUTPUT; /* Buffer ended on a newline */
}
static void
putstr (char *string)
{
- if (!column && lm > 0)
+ if (!column && lm > 0) {
while (lm > 0)
if (lm >= 8) {
putch ('\t');
putch (' ');
lm--;
}
+ }
lm = 0;
while (*string)
putch (*string++);
if (cp) {
int j;
char *dp;
- if ((dp = realloc (cp, (unsigned) (j = len + i))) == NULL)
- adios (NULL, "unable to allocate face storage");
+ dp = mh_xrealloc (cp, (unsigned) (j = len + i));
memcpy(dp + len, buffer, i);
cp = dp, len = j;
}
else {
- if ((cp = malloc ((unsigned) i)) == NULL)
- adios (NULL, "unable to allocate face storage");
+ cp = mh_xmalloc ((unsigned) i);
memcpy(cp, buffer, i);
len = i;
}