#define QUOTE '\\'
static struct swit mhlswitches[] = {
-#define CLRSW 0
- { "clear", 0 },
-#define NCLRSW 1
- { "noclear", 0 },
-#define FOLDSW 2
+#define FOLDSW 0
{ "folder +folder", 0 },
-#define FORMSW 3
+#define FORMSW 1
{ "form formfile", 0 },
-#define PROGSW 4
+#define PROGSW 2
{ "moreproc program", 0 },
-#define LENSW 5
- { "length lines", 0 },
-#define WIDTHSW 6
+#define WIDTHSW 3
{ "width columns", 0 },
-#define SLEEPSW 7
+#define SLEEPSW 4
{ "sleep seconds", 0 },
-#define VERSIONSW 8
+#define VERSIONSW 5
{ "version", 0 },
-#define HELPSW 9
+#define HELPSW 6
{ "help", 0 },
-#define FORW1SW 10
+#define FORW1SW 7
{ "forward", -7 },
-#define FORW2SW 11
+#define FORW2SW 8
{ "forwall", -7 },
-#define DGSTSW 12
+#define DGSTSW 9
{ "digest list", -6 },
-#define VOLUMSW 13
+#define VOLUMSW 10
{ "volume number", -6 },
-#define ISSUESW 14
+#define ISSUESW 11
{ "issue number", -5 },
-#define NBODYSW 15
+#define NBODYSW 12
{ "nobody", -6 },
{ NULL, 0 }
};
#define CLEARTEXT 0x000008 /* cleartext */
#define EXTRA 0x000010 /* an "extra" component */
#define HDROUTPUT 0x000020 /* already output */
-#define CLEARSCR 0x000040 /* clear screen */
-#define LEFTADJUST 0x000080 /* left justify multiple lines */
-#define COMPRESS 0x000100 /* compress text */
-#define ADDRFMT 0x000200 /* contains addresses */
-#define DATEFMT 0x000400 /* contains dates */
-#define FORMAT 0x000800 /* parse address/date/RFC-2047 field */
-#define INIT 0x001000 /* initialize component */
-#define SPLIT 0x002000 /* split headers (don't concatenate) */
-#define NONEWLINE 0x004000 /* don't write trailing newline */
-#define LBITS "\020\01NOCOMPONENT\02UPPERCASE\03CENTER\04CLEARTEXT\05EXTRA\06HDROUTPUT\07CLEARSCR\010LEFTADJUST\011COMPRESS\012ADDRFMT\013DATEFMT\014FORMAT\015INIT\016SPLIT\017NONEWLINE"
+#define LEFTADJUST 0x000040 /* left justify multiple lines */
+#define COMPRESS 0x000080 /* compress text */
+#define ADDRFMT 0x000100 /* contains addresses */
+#define DATEFMT 0x000200 /* contains dates */
+#define FORMAT 0x000400 /* parse address/date/RFC-2047 field */
+#define INIT 0x000800 /* initialize component */
+#define SPLIT 0x001000 /* split headers (don't concatenate) */
+#define NONEWLINE 0x002000 /* don't write trailing newline */
+#define LBITS "\020\01NOCOMPONENT\02UPPERCASE\03CENTER\04CLEARTEXT\05EXTRA\06HDROUTPUT\07LEFTADJUST\010COMPRESS\011ADDRFMT\012DATEFMT\013FORMAT\014INIT\015SPLIT\016NONEWLINE"
#define GFLAGS (NOCOMPONENT | UPPERCASE | CENTER | LEFTADJUST | COMPRESS | SPLIT)
struct mcomp {
int c_ovoff; /* overflow indentation */
int c_width; /* width of field */
int c_cwidth; /* width of component */
- int c_length; /* length in lines */
long c_flags;
struct mcomp *c_next;
};
static struct mcomp *fmttl = NULL;
static struct mcomp global = {
- NULL, NULL, "", NULL, NULL, 0, -1, 80, -1, 40, 0, 0
+ NULL, NULL, "", NULL, NULL, 0, -1, 80, -1, 0, 0
};
static struct mcomp holder = {
- NULL, NULL, NULL, NULL, NULL, 0, 0, 0, 0, 0, NOCOMPONENT, 0
+ NULL, NULL, NULL, NULL, NULL, 0, 0, 0, 0, NOCOMPONENT, 0
};
struct pair {
{ "nouppercase", 0, UPPERCASE },
{ "center", CENTER, 0 },
{ "nocenter", 0, CENTER },
- { "clearscreen", CLEARSCR, 0 },
- { "noclearscreen", 0, CLEARSCR },
- { "noclear", 0, CLEARSCR },
{ "leftadjust", LEFTADJUST, 0 },
{ "noleftadjust", 0, LEFTADJUST },
{ "compress", COMPRESS, 0 },
};
-static int clearflg = 0;
static int dobody = 1;
static int forwflg = 0;
static int forwall = 0;
#define NOTTY 0
static int ontty = NOTTY;
-static int row;
static int column;
static int lm;
-static int llim;
static int ovoff;
static int term;
static int wid;
/*
** prototypes
*/
-static void mhl_format(char *, int, int);
+static void mhl_format(char *, int);
static int evalvar(struct mcomp *);
static int ptoi(char *, int *);
static int ptos(char *, char **);
void m_pclose(void);
-void clear_screen(void); /* from termsbr.c */
-int SOprintf(char *, ...); /* from termsbr.c */
int sc_width(void); /* from termsbr.c */
-int sc_length(void); /* from termsbr.c */
int
main(int argc, char **argv)
{
- int length = 0;
int i, width = 0, vecp = 0;
char *cp, *folder = NULL, *form = NULL;
char buf[BUFSIZ], *files[MAXARGS];
print_version(invo_name);
done(1);
- case CLRSW:
- clearflg = 1;
- continue;
- case NCLRSW:
- clearflg = -1;
- continue;
-
case FOLDSW:
if (!(folder = *argp++) || *folder == '-')
adios(NULL, "missing argument to %s",
argp[-2]);
continue;
- case LENSW:
- if (!(cp = *argp++) || *cp == '-')
- adios(NULL, "missing argument to %s",
- argp[-2]);
- if ((length = atoi(cp)) < 1)
- adios(NULL, "bad argument %s %s",
- argp[-2], cp);
- continue;
case WIDTHSW:
if (!(cp = *argp++) || *cp == '-')
adios(NULL, "missing argument to %s",
forwall++; /* fall */
case FORW1SW:
forwflg++;
- clearflg = -1;/* XXX */
continue;
case NBODYSW:
ontty = NOTTY;
}
- mhl_format(form ? form : mhlformat, length, width);
+ mhl_format(form ? form : mhlformat, width);
if (vecp == 0) {
process(folder, NULL, 1, vecp = 1);
adios("output", "error writing");
}
- if (clearflg > 0 && ontty == NOTTY)
- clear_screen();
-
if (ontty == PITTY)
m_pclose();
static void
-mhl_format(char *file, int length, int width)
+mhl_format(char *file, int width)
{
int i;
char *bp, *cp, **ip;
if ((i = sc_width()) > 5)
global.c_width = i;
global.c_cwidth = -1;
- if ((i = sc_length()) > 5)
- global.c_length = i - 1;
global.c_flags = 0;
*(ip = ignores) = NULL;
for (c1 = fmthd; c1; c1 = c1->c_next) {
fprintf(stderr, "c1: name=\"%s\" text=\"%s\" ovtxt=\"%s\"\n", c1->c_name, c1->c_text, c1->c_ovtxt);
fprintf(stderr, "\tnfs=0x%x fmt=0x%x\n", (unsigned int)(unsigned long) c1->c_nfs, (unsigned int)(unsigned long) c1->c_fmt);
- fprintf(stderr, "\toffset=%d ovoff=%d width=%d cwidth=%d length=%d\n", c1->c_offset, c1->c_ovoff, c1->c_width, c1->c_cwidth, c1->c_length);
+ fprintf(stderr, "\toffset=%d ovoff=%d width=%d cwidth=%d\n", c1->c_offset, c1->c_ovoff, c1->c_width, c1->c_cwidth);
fprintf (stderr, "\tflags=%s\n", snprintb(buffer, sizeof(buffer), (unsigned) c1->c_flags, LBITS));
}
}
out:
- if (clearflg == 1) {
- global.c_flags |= CLEARSCR;
- } else {
- if (clearflg == -1)
- global.c_flags &= ~CLEARSCR;
- }
-
- if (length)
- global.c_length = length;
if (width)
global.c_width = width;
- if (global.c_length < 5)
- global.c_length = 10000;
if (global.c_width < 5)
global.c_width = 10000;
}
return ptoi(name, &c1->c_width);
if (!mh_strcasecmp(name, "compwidth"))
return ptoi(name, &c1->c_cwidth);
- if (!mh_strcasecmp(name, "length"))
- return ptoi(name, &c1->c_length);
for (ap = triples; ap->t_name; ap++)
if (!mh_strcasecmp(ap->t_name, name)) {
printf(" Message %d", ofilen);
printf("\n\n");
}
- } else {
- switch (ontty) {
- case PITTY:
- if (ofilec > 1) {
- if (ofilen > 1) {
- if ((global.c_flags & CLEARSCR))
- clear_screen();
- else
- printf("\n\n\n");
- }
- printf(">>> %s\n\n", mname);
- }
- break;
-
- default:
- if (ofilec > 1) {
- if (ofilen > 1) {
- printf("\n\n\n");
- if (clearflg > 0)
- clear_screen();
- }
- printf(">>> %s\n\n", mname);
- }
- break;
+ } else if (ofilec > 1) {
+ if (ofilen > 1) {
+ printf("\n\n\n");
}
+ printf(">>> %s\n\n", mname);
}
for (state = FLD;;) {
case BODY:
case FILEEOF:
- row = column = 0;
+ column = 0;
for (c1 = fmthd; c1; c1 = c1->c_next) {
if (c1->c_flags & CLEARTEXT) {
putcomp(c1, c1, ONECOMP);
c1->c_ovtxt = getcpy(global.c_ovtxt);
c1->c_offset = global.c_offset;
c1->c_ovoff = global. c_ovoff;
- c1->c_width = c1->c_length = 0;
+ c1->c_width = 0;
c1->c_cwidth = global.c_cwidth;
c1->c_flags |= global.c_flags & GFLAGS;
}
cchdr = 0;
lm = 0;
- llim = c1->c_length ? c1->c_length : -1;
wid = c1->c_width ? c1->c_width : global.c_width;
ovoff = (c1->c_ovoff >= 0 ? c1->c_ovoff : global.c_ovoff)
+ c1->c_offset;
static void
putch(char ch)
{
- char buf[BUFSIZ];
-
- if (llim == 0)
- return;
-
switch (ch) {
- case '\n':
- if (llim > 0)
- llim--;
- column = 0;
- row++;
- if (row != global.c_length)
- break;
- fflush(stdout);
- buf[0] = 0;
- read(fileno(stdout), buf, sizeof(buf));
- if (strchr(buf, '\n')) {
- if (global.c_flags & CLEARSCR)
- clear_screen();
- row = 0;
- } else {
- putchar('\n');
- row = global.c_length / 3;
- }
- return;
-
case '\t':
column |= 07;
column++;
column--;
break;
+ case '\n':
case '\r':
column = 0;
break;