This stuff is the task of the pager, not the one of the formater mhl.
.HP 5
.B mhl
-.RB [ \-clear " | " \-noclear ]
.RB [ \-folder
.IR +folder ]
.RB [ \-form
.B scan
and
.B mhl
-how to clear your terminal, and how
-many columns wide your terminal is. They also tell
+how many columns wide your terminal is. They also tell
.B mhl
how many
lines long your terminal screen is.
.HP 5
.na
.B mhl
-.RB [ \-clear " | " \-noclear ]
.RB [ \-folder
.IR +folder ]
.RB [ \-form
(it is the default
.IR showproc ).
.PP
-As with
-.BR more ,
-each of the messages specified as arguments (or
-the standard input) will be output. If more than one message file is
-specified, the user will be prompted prior to each one, and a <RETURN>
-or <EOT> will begin the output, with <RETURN> clearing the screen (if
-appropriate), and <EOT> (usually CTRL\-D) suppressing the screen clear.
-An <INTERRUPT> (usually CTRL\-C) will abort the current message output,
-prompting for the next message (if there is one), and a <QUIT> (usually
-CTRL-\\) will terminate the program (without core dump).
-.PP
-The
-.B \-clear
-option tells
-.B mhl
-to clear the
-screen at the end of each page (or output a formfeed after each message).
-This switches (and its inverse counterpart) take effect only
-if the profile entry
-.I moreproc
-is defined but empty, and
-.B mhl
-is outputting to a terminal. If the
-.I moreproc
-entry is defined and
-non-empty, and
+If
.B mhl
is outputting to a terminal, then
.B mhl
cause the
.I moreproc
to be placed between the terminal and
-.B mhl
-and the switches are ignored. Furthermore, if the
-.B \-clear
-switch is
-used and \fImhl's\fR output is directed to a terminal, then
-.B mhl
-will consult the
-.B $TERM
-and
-.B $TERMCAP
-environment variables
-to determine the user's terminal type in order to find out how to clear
-the screen. If the
-.B \-clear
-switch is used and
-.BR mhl 's
-output is
-not directed to a terminal (e.g., a pipe or a file), then
-.B mhl
-will
-send a formfeed after each message.
+.BR mhl .
.PP
To override the default
.I moreproc
and the profile entry, use the
.B \-moreproc
.I program
-switch. Note that
-.B mhl
-will never start a
-.I moreproc
-if invoked on a hardcopy terminal.
+switch.
.PP
The
.B \-length
is walked for each message, outputting message information under the
format constraints from the format file.
.PP
-The format file can contain information controlling screen clearing,
+The format file can contain information controlling
screen size, wrap\-around control, transparent text, component ordering,
and component formatting. Also, a list of components to ignore may be
specified, and a couple of \*(lqspecial\*(rq components are defined
For example, the line:
.PP
.RS 5
-width=80,length=40,clearscreen,overflowtext="***",overflowoffset=5
+width=80,length=40,overflowtext="***",overflowoffset=5
.RE
.PP
defines the screen size to be 80 columns by 40 rows, specifies that the
-screen should be cleared prior to each page, that the overflow indentation
+overflow indentation
is 5, and that overflow text should be flagged with \*(lq***\*(rq.
.PP
Following are all of the current variables and their arguments. If they
affect is global. Since the whole format is parsed before any output
processing, the last global switch setting for a variable applies to
the whole message if that variable is used in a global context (i.e.,
-clearscreen, width, length).
+width, length).
.PP
.RS 5
.nf
-.ta \w'noclearscreen 'u +\w'integer/G 'u
+.ta \w'xxxxxxxxxxxxx 'u +\w'integer/G 'u
.I variable type semantics
width integer screen width or component width
length integer screen length or component length
uppercase flag output text of this component in all
upper case
nouppercase flag don't uppercase
-clearscreen flag/G clear the screen prior to each page
-noclearscreen flag/G don't clearscreen
component string/L name to use instead of \*(lqcomponent\*(rq for
this component
nocomponent flag don't output \*(lqcomponent: \*(rq for this
.SH DEFAULTS
.nf
-.RB ` \-noclear '
.RB ` \-length 40 '
.RB ` \-width 80 '
.fi
switch does only take file names, but no format strings with a prepended
equal sign `='.
.PP
-There should be some way to pass `clear' information to the
-front\-end.
-.PP
The \*(lqnonewline\*(rq option interacts badly with \*(lqcompress\*(rq
and \*(lqsplit\*(rq.
#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
+#define LENSW 3
{ "length lines", 0 },
-#define WIDTHSW 6
+#define WIDTHSW 4
{ "width columns", 0 },
-#define SLEEPSW 7
+#define SLEEPSW 5
{ "sleep seconds", 0 },
-#define VERSIONSW 8
+#define VERSIONSW 6
{ "version", 0 },
-#define HELPSW 9
+#define HELPSW 7
{ "help", 0 },
-#define FORW1SW 10
+#define FORW1SW 8
{ "forward", -7 },
-#define FORW2SW 11
+#define FORW2SW 9
{ "forwall", -7 },
-#define DGSTSW 12
+#define DGSTSW 10
{ "digest list", -6 },
-#define VOLUMSW 13
+#define VOLUMSW 11
{ "volume number", -6 },
-#define ISSUESW 14
+#define ISSUESW 12
{ "issue number", -5 },
-#define NBODYSW 15
+#define NBODYSW 13
{ "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 {
{ "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;
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 */
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",
forwall++; /* fall */
case FORW1SW:
forwflg++;
- clearflg = -1;/* XXX */
continue;
case NBODYSW:
adios("output", "error writing");
}
- if (clearflg > 0 && ontty == NOTTY)
- clear_screen();
-
if (ontty == PITTY)
m_pclose();
}
out:
- if (clearflg == 1) {
- global.c_flags |= CLEARSCR;
- } else {
- if (clearflg == -1)
- global.c_flags &= ~CLEARSCR;
- }
-
if (length)
global.c_length = length;
if (width)
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;;) {
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');
dup2(fileno(out), fileno(stdout));
closefds(3);
- execlp(mhlproc, mhl, "-form", filter, "-noclear", NULL);
+ execlp(mhlproc, mhl, "-form", filter, NULL);
errstr = strerror(errno);
write(2, "unable to exec ", 15);
write(2, mhlproc, strlen(mhlproc));
static int LI = 40; /* number of lines */
static int CO = 80; /* number of colums */
-static char *CL = NULL; /* termcap string to clear screen */
static char *SE = NULL; /* termcap string to end standout mode */
static char *SO = NULL; /* termcap string to begin standout mode */
LI = 24;
cp = termcap;
- CL = tgetstr("cl", &cp);
if ((bp = tgetstr("pc", &cp)))
PC = *bp;
if (tgetnum("sg") <= 0) {
}
-void
-clear_screen(void)
-{
- read_termcap();
-
- if (CL && speedcode)
- tputs(CL, LI, putchar);
- else {
- printf("\f");
- if (speedcode)
- printf("\200");
- }
-
- fflush(stdout);
-}
-
-
/*
** print in standout mode
*/