#include <h/fmt_scan.h>
#include <h/tws.h>
#include <h/utils.h>
-#include <h/m_setjmp.h>
+#include <setjmp.h>
#include <signal.h>
#include <errno.h>
#include <sys/wait.h>
static struct mcomp *fmttl = NULL;
static struct mcomp global = {
- NULL, NULL, NULL, NULL, NULL, NULL, 0, -1, 80, -1, 40, BELL, NULL
+ NULL, NULL, NULL, NULL, NULL, NULL, 0, -1, 80, -1, 40, BELL, NULL, NULL,
+ 0, NULL
};
static struct mcomp holder = {
- NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, 0, 0, 0, NOCOMPONENT, NULL
+ NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, 0, 0, 0, NOCOMPONENT, NULL, NULL,
+ 0, NULL
};
struct pair {
{ NULL, 0, 0 }
};
+static char *addrcomps[] = {
+ "from",
+ "sender",
+ "reply-to",
+ "to",
+ "cc",
+ "bcc",
+ "resent-from",
+ "resent-sender",
+ "resent-reply-to",
+ "resent-to",
+ "resent-cc",
+ "resent-bcc",
+ NULL
+};
+
static int bellflg = 0;
static int clearflg = 0;
static int exitstat = 0;
static int mhldebug = 0;
+static int filesize = 0;
+
#define PITTY (-1)
#define NOTTY 0
#define ISTTY 1
mhl (int argc, char **argv)
{
int length = 0, nomore = 0;
- int i, width = 0, vecp = 0;
+ unsigned int i, vecp = 0;
+ int width = 0;
char *cp, *folder = NULL, *form = NULL;
char buf[BUFSIZ], *files[MAXARGS];
char **argp, **arguments;
char *cp = NULL;
FILE *fp = NULL;
struct mcomp *c1;
+ struct stat st;
- switch (m_setjmp (env)) {
+ switch (setjmp (env)) {
case OK:
if (fname) {
fp = mhl_action ? (*mhl_action) (fname) : fopen (fname, "r");
fname = "(stdin)";
fp = stdin;
}
+ if (fstat(fileno(fp), &st) == 0) {
+ filesize = st.st_size;
+ } else {
+ filesize = 0;
+ }
cp = folder ? concat (folder, ":", fname, NULL) : getcpy (fname);
if (ontty != PITTY)
SIGNAL (SIGINT, intrser);
c2->c_text = NULL;
dat[0] = 0;
dat[1] = 0;
- dat[2] = 0;
+ dat[2] = filesize;
dat[3] = sizeof(buffer) - 1;
dat[4] = 0;
fmt_compile (c1->c_nfs, &c1->c_fmt);
p->pq_error = getcpy (error);
} else {
if ((c1->c_flags & FACEDFLT) && c2->c_face == NULL) {
- char *h, *o;
- if ((h = mp->m_host) == NULL)
- h = LocalName (0);
- if ((o = OfficialName (h)))
- h = o;
- c2->c_face = concat ("address ", h, " ", mp->m_mbox,
- NULL);
+ char *h = mp->m_host ? mp->m_host : LocalName (0);
+ c2->c_face = concat ("address ", h, " ", mp->m_mbox, NULL);
}
p->pq_text = getcpy (mp->m_text);
mnfree (mp);
if ((cp = getname (cp))) {
if ((mp = getm (cp, NULL, 0, AD_NAME, NULL))) {
- char *h, *o;
- if ((h = mp->m_host) == NULL)
- h = LocalName (0);
- if ((o = OfficialName (h)))
- h = o;
+ char *h = mp->m_host ? mp->m_host : LocalName (0);
c1->c_face = concat ("address ", h, " ", mp->m_mbox, NULL);
}
char *cp = NULL;
struct mcomp *c1;
- switch (m_setjmp (mhlenv)) {
+ switch (setjmp (mhlenv)) {
case OK:
cp = invo_name;
sleepsw = 0; /* XXX */
{
struct format *fmt;
struct arglist *args;
- int i;
+ char **ap;
+ struct comp *cptr;
+ unsigned int i;
i = fmt_compile(nfs, &fmt);
+ /*
+ * Search through and mark any components that are address components
+ */
+
+ for (ap = addrcomps; *ap; ap++) {
+ FINDCOMP (cptr, *ap);
+ if (cptr)
+ cptr->c_type |= CT_ADDR;
+ }
+
args = (struct arglist *) mh_xmalloc(sizeof(struct arglist));
if (! args)
if (mh_strcasecmp(name, c->c_name) == 0) {
found++;
if (! c->c_text) {
- i = strlen(c->c_text = strdup(buf)) - 1;
- if (c->c_text[i] == '\n')
- c->c_text[i] = '\0';
+ c->c_text = strdup(buf);
} else {
i = strlen(cp = c->c_text) - 1;
if (cp[i] == '\n') {
freecomps(void)
{
struct comp *c1, *c2;
- int i;
+ unsigned int i;
for (i = 0; i < sizeof(mhlcomp)/sizeof(mhlcomp[0]); i++) {
if ((c1 = mhlcomp[i]))
freecomptext(void)
{
struct comp *c1;
- int i;
+ unsigned int i;
for (i = 0; i < sizeof(mhlcomp)/sizeof(mhlcomp[0]); i++) {
if ((c1 = mhlcomp[i]))