-.TH FMTTEST %manext1% "February 19, 2013" "%nmhversion%"
-.\"
+.TH FMTTEST %manext1% 2014-08-31 "%nmhversion%"
+.
.\" %nmhwarning%
-.\"
-.SH FMTTEST
-fmttest \- test tool for the
-.IR mh-format (5)
-language
+.
+.SH NAME
+fmttest \- test tool for the nmh \fImh-format\fP\^(5) language
.SH SYNOPSIS
.HP 5
.na
.B fmttest
+.RB [ \-help ]
+.RB [ \-version ]
.RB [ \-form
.IR formatfile ]
.RB [ \-format
.IR formatstring ]
.RB [ \-address " | " \-raw " | " \-date " | " \-message ]
+.RB [ \-file " | " \-nofile ]
.RB [ \-\|\-component
.IR component-text ]
.RB [ \-dupaddrs " | " \-nodupaddrs ]
.RB [ \-ccme " | " \-noccme ]
-.RB [ \-normalize " | " \-nonormalize ]
.RB [ \-outsize
.IR size-in-characters ]
-.RB [ \-bufsize
-.IR size-in-bytes ]
.RB [ \-width
.IR column-width ]
.RB [ \-msgnum
.RI [ msgs " | " strings ]
.ad
.SH DESCRIPTION
-.B Fmttest
+.B fmttest
is used to test programs written for the
.B nmh
format language as specified by
and
.B fmtdump
programs.
-.PP
-.SS FORMAT PROGRAM SELECTION
+.SS Format Program Selection
The
.B \-format
.I string
and
.B \-form
.I formatfile
-switches may be used to specify a format string or a format file to read.
-If given a format string, it must be specified as a single argument to
-the
+specify a format string or file to read.
+A format string, if given, must be a single argument to the
.B \-format
-switch. If given a format file name with
+switch. If a format file name is passed to the
.BR \-form ,
-the file is searched for using the normal
+switch, the file is searched for using the normal
.B nmh
rules: absolute pathnames are accessed directly, tilde expansion is
done on usernames, and files are searched for in the user's
.I Mail
directory as specified in their profile. If not found there, the directory
-.RI \*(lq %etcdir% \*(rq
+.RI \*(lq %nmhetcdir% \*(rq
is checked.
-.SS MODE SELECTION AND COMPONENT SPECIFICATION
-.B Fmttest
-has four operating modes: address mode, raw mode, date mode, and message
-mode. These modes are selected by the
+.SS Mode Selection and Component Specification
+.B fmttest
+has four operating modes - address, raw, date, and message -
+which are selected by the
.BR \-address ,
.BR \-raw ,
.BR \-date ,
and
.B \-message
-switches respectively.
+switches, respectively.
.PP
-Address mode treats every argument as an email address and processes it
-with nmh's email parser. Each argument is processed with the specified
-format program with the parsed email address available as a special
+Address mode treats every argument as an email address to be processed
+by nmh's email parser using the specified format program.
+The parsed address is made available as a special
.RI %{ text }
component escape, and the output from the program is printed on standard output.
If there was an error parsing the email address the error message is
.fi
.RE
.PP
-In this mode
-.B fmttest
-is equivalent to
-.BR ap (8).
+Address mode is equivalent to
+.IR ap (8).
.PP
In raw mode, no processing of the specified arguments is done. Each argument
is run against the specified format program with the argument text available
.RE
.PP
Date mode is equivalent to
-.BR dp (8).
+.IR dp (8).
.PP
In message mode the arguments to
.B fmttest
are interpreted as an optional folder and messages.
-.B Fmttest
+.B fmttest
will read each specified message and make all of the components in the
message available to the format program. Also, the appropriate information
for the
.RI %( unseen ),
and
.RI %( size )
-function escapes will be made available for each message.
+function escapes will be made available for each message. If the
+.B \-file
+switch is given, the arguments are interpreted as filenames instead of
+message numbers, but otherwise the behavior is the same (except that the
+.RI %( msg ),
+.RI %( cur ),
+and
+.RI %( unseen )
+function escapes will not provide any useful information).
.PP
The default format used in address mode is the default format used by
.BR scan .
Regardless of the mode, other components can be provided to the format
program by the use of the
.B \-\|\-component
-switch. For example, the following program will test out the use of
-the
+switch. For example, the following program will test the use of the
.RB \*(lq encrypted \*(rq
component:
.PP
.fi
.RE
.PP
-In message mode components supplied on the command line will override
+In message mode, components supplied on the command line will override
components from messages.
-.SS ADDITIONAL SWITCHES
+.SS Additional Switches
The
.B \-dupaddrs
and
is in effect.
.PP
The
-.B \-normalize
-and
-.B \-nonormalize
-switches control whether or not email addresses are normalized by the
-address parsing routines. This is only functional when in address
-mode and is designed to replicate the switch of the same name to
-.BR ap (8).
-.PP
-The
.B \-outsize
switch controls the maximum number of printable characters that the format
engine will produce. Characters marked as non-printing by the format
characters with zero width, and extra bytes that are
part of a multibyte character are not counted against this total.
Two special values are supported:
-.RB \*(lq max \*(rq,
-which will set the value
-to the size of the output buffer, and
-.RB \*(lq width \*(rq,
+.RI \*(lq max \*(rq,
+which means as many characters as the format engine can produce
+(limited by internal buffers), and
+.RI \*(lq width \*(rq,
which will set the
-value to the width of the terminal. In message mode it defaults to the
-terminal width, otherwise the default is the output buffer size.
-.PP
-The
-.B \-bufsize
-switch controls the size of the output buffer. By default it is set
-to the size of the
-.B BUFSIZ
-C preprocessor symbol, which is system-dependent.
+value to the width of the terminal. In message mode it defaults to
+.RI \*(lq width \*(rq,
+otherwise the default is
+.RI \*(lq max \*(rq.
.PP
The
.B \-width
switch controls the column width which is used by the
.RI `%( width )'
-function escape. By default is set to the terminal width.
+function escape. It defaults to the terminal width.
.PP
The
.BR \-msgnum ,
.RI `%( size )',
and
.RI `%( unseen )'.
-If none are supplied these values are taken from the message in message mode;
-in all other modes the default values are 0.
-.SS COMPILING AND TRACING FORMAT PROGRAMS
+If none are supplied, these values are taken from the message in
+message mode; in all other modes the default values are 0.
+.SS Compiling and Tracing Format Programs
The
.B \-dump
switch outputs the complete set of format instructions for the specified
format program. The
-.B \-trace switch will output each format instruction as it is being
+.B \-trace
+switch will output each format instruction as it is being
executed, and show the values of the
.I num
and
registers if they have changed from the previous instruction.
The output buffer is also printed if it has changed from the previous
instruction.
-.SS FORMAT INSTRUCTIONS
+.SS Format Instructions
It should be noted that there is not a one-to-one correspondence between
format escapes and format instructions; many instructions have side
effects. Instructions prefixed with
LS_COMP Write component to \fIstr\fR register
LS_LIT Write literal to \fIstr\fR register
LS_GETENV Write environment var to \fIstr\fR register
-LS_DECODECOMP Decode RFC-2047 encoded component to \fIstr\fR register
-LS_DECODE Decode RFC-2047 encoded string to \fIstr\fR register
+LS_DECODECOMP Decode RFC 2047 encoded component to \fIstr\fR register
+LS_DECODE Decode RFC 2047 encoded string to \fIstr\fR register
LS_TRIM Trim trailing whitespace from \fIstr\fR register
LV_COMP Convert component to integer, store in \fInum\fR register
LV_COMPFLAG Set \fInum\fR to 1 if \fBTRUE\fR set in component
LV_DAT Load value from \fIdat\fR array into \fInum\fR register (see note)
LV_STRLEN Set \fInum\fR to the length of \fIstr\fR
LV_PLUS_L Add value to \fInum\fR register
-LV_MINUS_L Substract value from \fInum\fR register
+LV_MINUS_L Subtract value from \fInum\fR register
LV_DIVIDE_L Divide \fInum\fR register by value
LV_MODULO_L \fInum\fR modulo value
LV_CHAR_LEFT Store remaining number of printable chars in \fInum\fR
LS_ZONE Write time zone offset to \fIstr\fR from date component
LS_DAY Write short name of day of week to \fIstr\fR from date component
LS_WEEKDAY Write long name of day of week to \fIstr\fR from date component
-LS_822DATE Write RFC-822 compatible date to \fIstr\fR from date component
+LS_822DATE Write RFC 822 compatible date to \fIstr\fR from date component
LS_PRETTY Write date with \*(lqpretty\*(rq timezone to \fIstr\fR
LV_SEC Write date component seconds to \fInum\fR
LV_MIN Write date component minutes to \fInum\fR
LS_PATH Write host route of addr component to \fIstr\fR
LS_GNAME Write group name of addr component to \fIstr\fR
LS_NOTE Write note portion of addr component to \fIstr\fR
-LS_822ADDR Write \*(lqproper\*(rq RFC-822 version of addr component to \fIstr\fR
+LS_822ADDR Write \*(lqproper\*(rq RFC 822 version of addr component to \fIstr\fR
LS_FRIENDLY Write friendly (name or note) of address component to \fIstr\fR
-LS_UNQUOTE Remove RFC-2822 quotes from string
+LS_UNQUOTE Remove RFC 2822 quotes from string
LV_HOSTTYPE Set \fInum\fR to type of host (0=local, 1=network)
LV_INGRPF Set \fInum\fR to 1 if address was inside of group
LV_NOHOSTF Set \fInum\fR to 1 of no host was present in address component
V_NE Set \fInum\fR to 1 if \fInum\fR does not equal value
V_GT Set \fInum\fR to 1 if \fInum\fR is greater than value
V_MATCH Set \fInum\fR to 1 if \fIstr\fR contains string
-V_AMATCH Set \fInum\fR to 1 if \fIstr\fR starts with string
+V_AMATCH Set \fInum\fR to 1 if \fIstr\fR starts with string
.fi
.PP
The
.IR repl (1),
.IR ap (8),
.IR dp (8),
+.IR fmtdump (8)
.SH DEFAULTS
.nf
.RB ` \-message '
+.RB ` \-nofile '
.RB ` \-dupaddrs '
.fi
.SH BUGS