% \iffalse meta-comment
% 
% Copyright (C) 1999-2004 Paul Thompson
% This program is free software; you can redistribute it and/or
% modify it under the terms of the GNU General Public License
% as published by the Free Software Foundation; either version 2
% of the License, or (at your option) any later version.
%
% This is file `newlfm.dtx'.  It provides newlfm.cls, after processing 
% latex newlfm.ins
% It provides the documentation after processing 
% latex newlfm.dtx
% At this time, the documentation is divided into three sections:
% a) manual          - pp.  1-12
% b) command summary - pp. 13
% c) code            - pp. 14-35
%
% This is modified from 
%              fax.sty    -- John Conover
%              letter.cls -- LaTeX 2e team
%              lettre.sty -- D. Megevand
%              ltrfax.cls -- Paul A. Thompson
%              lfmp.cls   -- Ross Boylan
% 
% Copyright 1998-2005 Paul A. Thompson
%
% IMPORTANT NOTICE: 
% 
% You are not allowed to change this file. 
%
% If you do change the file, you must change the name.
% \fi
%
%% \CharacterTable
%% {Upper-case    \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
%%  Lower-case    \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
%%  Digits        \0\1\2\3\4\5\6\7\8\9
%%  Exclamation   \!     Double quote  \"     Hash (number) \#
%%  Dollar        \$     Percent       \%     Ampersand     \&
%%  Acute accent  \'     Left paren    \(     Right paren   \)
%%  Asterisk      \*     Plus          \+     Comma         \,
%%  Minus         \-     Point         \.     Solidus       \/
%%  Colon         \:     Semicolon     \;     Less than     \<
%%  Equals        \=     Greater than  \>     Question mark \?
%%  Commercial at \@     Left bracket  \[     Backslash     \\
%%  Right bracket \]     Circumflex    \^     Underscore    \_
%%  Grave accent  \`     Left brace    \{     Vertical bar  \|
%%  Right brace   \}     Tilde         \~}
%
% \iffalse
% \MakeShortVerb{\|}
%
% \section{Identification}
%
%    \askforoverwritefalse
%
%    This document class can only be used with \LaTeXe, so we make
%    sure that an appropriate message is displayed when another \TeX{}
%    format is used.
%    \begin{macrocode}
%<+package>\NeedsTeXFormat{LaTeX2e}[1996/06/01]
%<+addrset>\NeedsTeXFormat{LaTeX2e}[1996/06/01]
%<+setdim>\NeedsTeXFormat{LaTeX2e}[1996/06/01]
%    \end{macrocode}
% 
%    Announce the Class name and its version.
%    \begin{macrocode}
%<+package>\ProvidesClass{newlfm}
%<+addrset>\ProvidesPackage{addrset}
%<+setdim>\ProvidesPackage{setdim}
%<*driver>
       \ProvidesFile{newlfm.drv}
%</driver>
%<+package>              [2004/11/02 v8.3
%<+package>               Letter-Fax-Memo LaTeX Document Class]
%<+addrset>              [2004/11/02 v8.3
%<+addrset>               Address macros]%
%<+setdim>               [2004/11/02 v8.3
%<+setdim>                Address macros]
%   \end{macrocode}
%
% \section{The documentation driver file}
%
%    We have our own document class to format the \LaTeXe{}
%    documentation.
% \fi
% \changes{v1.0}{1998/11/11}{Final cls file version of newlfm set up.  Class
%   file set as a docstrip file, so that proper documentation could be
%   maintained with the file.  Class file set up to inherit all definitions
%   from letter.cls, the standard \LaTeX\ letter class.  Class file posted to
%   CTAN 1998/12/01.} 
% \changes{v1.3}{1999/03/25}{Removed the streamlist and here packages from
%   the list of required packages.  These were not actually used.}
% \changes{v1.4}{1999/03/25}{Fixed the timestamp macro, using a fix from 
%   Michael Dritschel, Purdue University.  Posted 5/5/99.  Viva Las
%   Revolution!!  Viva Mexico!!! Viva Las Cinco de Mayo!!!} 
% \changes{v1.5}{1999/07/25}{Fixed the Blank macros, enabling the header and
%   footer information to be properly blanked.  Added two macros to print form
%   letters.} 
% \changes{v1.6}{1999/07/27}{Fixed the specification of @f@f, which was set
%   to blank, rather than to 0in.  Added specifications for different orders
%   of the printing of dates, from-block and to-block.}
% \changes{v1.7}{1999/09/16}{Added ability to specify different point sizes,
%   which was not present before. In addition, different paper types are now
%   able to be specified as well.  Bug noted by William Slough, cfwas@eiu.edu,
%   Department of Mathematics, Eastern Illinois University, Charleston, IL
%   61920.  Thanks, William!!!}
% \changes{v1.8}{1999/09/16}{Many of the options, macros and terms have been
%   rewritten to a more ``user-friendly'' approach, thanks to a Friendly user,
%   who is Michael Friendly.  Thanks for your suggestion, Mike!!!  NOTE TO
%   PREVIOUS NEWLFM USERS: Some of these changes (space and skip commands) are
%   not upward compatible.}
% \changes{v3.0}{2000/10/30}{Package substantially revised.  Items in 
%   wrapper macros are now neutral, rather than ``from'' or ``to'' items.  In
%   that way, the address items are used for storage, not letter preparation. 
%   Two new service macros, {\tt setadrfr} and {\tt setadrto}, convert the 
%   items in the wrapper into either ``from'' or ``to'' items.  The 
%   {\tt memosec} command has been revised and simplified.  Commands set up 
%   to change terms for the words used in letters.  Manual entirely 
%   rewritten.}
% \changes{v3.1}{2001/3/01}{Several errors in handling margin items are 
%   fixed.  Documentation revised.}
% \changes{v3.2}{2001/11/15}{Incorporated all functionality of envlab package 
%   into newlfm.  Documentation margins and text width adjusted to something 
%   approximating a nice document.  Documentation extensively edited to 
%   incorporate all new commands.  Example files edited to display new 
%   functions.} 
% \changes{v3.4}{2002/3/15}{Allow printing of addresses side-by-side.  Fixed up 
%   several small errors.  Essentially a minor features upgrade.}
% \changes{v5.0}{2001/8/16}{The page structure of the letterhead page, the 
%   fax header page and all other pages are allowed to vary in important ways.   
%   Package geometry removed from newlfm, as newlfm code duplicates functionality 
%   of geometry.  Keyval functionality set into newlfm, to allow all parameters 
%   to be input either through the documentstyle option line or through a keyval item.  
%   The keyval item can be placed into the letter itself or into the letrinfo file.}
% \changes{v6.0}{2003/1/09}{The options, formerly placed in the options
%   section of the \LaTeX\ opening command 
%   can now be placed in several calls within the letter itself.  These can
%   be stored in the letter database.}
% \changes{v7.0}{2004/5/02}{Single key-value option set up.}
% \changes{v8.0}{2004/7/04}{Envelope option fixed.  4 different
%   Avery label options added.  Manual rewritten.  Output routine hacked to
%   ensure that letterhead and subsequent pages have the appropriate
%   margins. Extensive checks in place to ensure that almost everything
%   works, finally!!}
% \changes{v8.1}{2004/7/07}{Fixed header margin position problem.  Fixed
%   unprintable area problem.  Additionally, fixed some problems with the
%   letrinfo.tex file for the examples.}
% \changes{v8.2}{2004/10/15}{Fixed incorrect use of iffixt macro.  Fixed
%   incorrect use of sigcenter, sigleft, sigright.  Fixed error in useenvlab
%   Added press-release features, following development contributed by Ross
%   Boylan.  Thanks, Ross.}
% \changes{v8.3}{2004/11/02}{Election special.  Cello-window option added.}
% \changes{v8.4}{2004/11/06}{Fixed a number of other errors, including
%   multiple repeated envelope labels.  Specials added to printing.  Address
%   printing converted to the use of the table notation.  Specials and
%   address components work together to print a variety of components in the
%   ``address-area'' of the letter.}
% \changes{v9.0}{2004/06/16}{Revised address space method, going to a
% tabular approach.  This greatly simplifies the method for setting up the 
%   multiple repeated envelope labels.  Specials added to printing.  Address
%   printing converted to the use of the table notation.  Specials and
%   address components work together to print a variety of components in the
%   ``address-area'' of the letter.}
% \changes{v9.1}{2004/09/16}{Fixed a number of very small bugs - including
% errors in memonofrom and friends, Blankheader and friends, and several
% other small problems.}
%
% \iffalse
%    \begin{macrocode}
%<*driver>
\documentclass{ltxdoc}
\usepackage{geometry,mdwlist,layout}
\geometry{right=1in,left=1in,top=1in,bottom=1in}
%    \end{macrocode}

%\DocInput{multicol,fancyvrb,mdwlist}
%
%    We don't want everything to appear in the index.
%    \begin{macrocode}
\DoNotIndex{\@Alph,\@alph,\@arabic,\@badmath}
\DoNotIndex{\@centercr}
\DoNotIndex{\@empty,\@ignoretrue}
\DoNotIndex{\@ixpt}
\DoNotIndex{\@M,\@minus,\@ne,\@plus}
\DoNotIndex{\\,\addtolength}
\DoNotIndex{\advance}
\DoNotIndex{\ast,\begin,\begingroup,\bfseries,\bgroup,\box}
\DoNotIndex{\bullet}
\DoNotIndex{\cdot,\cr,\day,\DeclareOption}
\DoNotIndex{\def,\DocInput,\documentclass}
\DoNotIndex{\DoNotIndex,\egroup,\ifx,\else,\fi,\endtrivlist}
\DoNotIndex{\EnableCrossrefs,\end,\end@dblfloat,\end@float,\endgroup}
\DoNotIndex{\endlist,\everycr,\ExecuteOptions}
\DoNotIndex{\filedate,\filename,\fileversion}
\DoNotIndex{\global,\halign,\hangindent,\hbox,\hfil,\hfill,\hrule}
\DoNotIndex{\hsize,\hskip,\hspace,\hss,\ifcase,\or,\fi}
\DoNotIndex{\ifvmode,\fi,\ifnum,\fi,\input}
\DoNotIndex{\kern,\leavevmode,\let,\leftmark}
\DoNotIndex{\list,\llap,\long,\m@ne,\m@th,\mark}
\DoNotIndex{\month,\newcommand,\newcounter,\newenvironment}
\DoNotIndex{\NeedsTeXFormat,\newdimen}
\DoNotIndex{\newpage,\nobreak,\noindent,\number}
\DoNotIndex{\p@}
\DoNotIndex{\pagestyle,\par}
\DoNotIndex{\penalty,\PrintChanges,\PrintIndex,\ProcessOptions}
\DoNotIndex{\protect,\ProvidesClass,\raggedbottom,\raggedright}
\DoNotIndex{\refstepcounter,\relax,\renewcommand,\reset@font}
\DoNotIndex{\rightmargin,\rlap,\rmfamily}
\DoNotIndex{\setbox,\setcounter,\setlength}
\DoNotIndex{\skip,\slshape,\space}
\DoNotIndex{\trivlist,\typeout,\tw@}
\DoNotIndex{\vskip,\vspace,\year,\z@}
\CodelineNumbered
\CodelineIndex
\EnableCrossrefs
\RecordChanges
%    \end{macrocode}
%    Set the \texttt{StandardModuleDepth} counter to 1.
%    \begin{macrocode}
\setcounter{StandardModuleDepth}{1}
%    \end{macrocode}
%    Some commonly used abbreviations
%    \begin{macrocode}
\def\Lopt#1{\textsf{#1}}
\def\file#1{\texttt{#1}}
\def\Lcount#1{\textsl{\small#1}}
\def\pstyle#1{\textsl{#1}}
%    \end{macrocode}
%    We also want the full details.
%    \begin{macrocode}
\begin{document}
\DocInput{newlfm.dtx}
\end{document}
%</driver>
%    \end{macrocode}
% \fi
%
% \iffalse
% Copyright (C) 1998 Paul A. Thompson, Ph.D., all rights reserved.
% \fi
%
% \author{Paul A. Thompson, Ph.D. \\ Division of Biostatistics \\ Washington
% University of St. Louis, MO, USA \\ \texttt{paul@wubios.wustl.edu}}
%
% \title{|newlfm.cls| \\ A New Letter, Fax, Memo Document Class for \LaTeX2e{}}
%
%    \newcommand{\rec}{recipient}
%    \newcommand{\tabr}[1]{Table \ref{tab:#1}}
%    \newcommand{\tabrb}[2]{Tables \ref{tab:#1} and \ref{tab:#2}}
%    \newcommand{\info}{information}
%    \newcommand{\Info}{Information}
%    \newcommand{\tabref}[1]{Table \ref{tab:#1}}
%    \newcommand{\tabpage}[1]{Table \ref{page:#1}}
%    \newcommand{\mx}[1]{{\ensuremath{#1}}}
%    \newcounter{mytabs}\setcounter{mytabs}{0}
%    \newcommand{\tabset}[2]{\addtocounter{mytabs}{1}
%      \centerline{Table \arabic{mytabs}: #2}
%      \vspace*{-.25in}}
%    \newcommand{\tabpagr}[1]{Table \ref{tab:#1}, on Page \pageref{tab:#1}}
%    \newcommand{\pages}[1]{Page \pageref{tab:#1}}
%    \newcommand{\pagex}[1]{Page \pageref{page:#1}}
%    \newcommand{\tabsetx}[3]{\vspace*{.09375in}
%      \refstepcounter{mytabs} \label{tab:#3}
%      \centerline{Table \arabic{mytabs}: #2}
%      \vspace*{-.0325in}
%    }
%    \hyphenation{Lan-guage lan-guage choi-ces prin-ted de-fi-ni-tion} 
%
% \maketitle
% \begin{multicols}{2}
%
% \makeatletter
% \renewcommand{\l@section}{\@dottedtocline{1}{.05em}{1.65em}}
% \renewcommand{\l@subsection}{\@dottedtocline{2}{1.65em}{3em}}
% \makeatother
%
% \tableofcontents
% \end{multicols}
%
% \newpage
%
%    \newcommand{\hdr}[1]{\multicolumn{1}{c}{\textbf{ #1}}}
%
% \section{The \texttt{newlfm.cls} class}
%    \newcommand{\reffit}[1]{(Section \ref{#1}, Page \pageref{#1})}
%    |newlfm|~  is a {\tt new} {\tt l}etter, {\tt f}ax and {\tt m}emo class.
%    It gives the user control over many elements of letter construction.
%    It enables the user to construct a simple database of letter
%    information for letter information storage.  It includes commands to
%    print labels, and issue form letters to multiple recipients.
%    Additionally, the class includes tools to produce standard press
%    releases. 
%
% \subsection{Writing a simple letter}
%    Here is an example of a very simple letter:
%    \begin{verbatim}
%    \documentclass[stdletter]{newlfm}
%    \nameto{George Bush} \addrto{\parbox{2in}{The White House \\ Washington, DC}}
%    \namefrom{Paul Thompson} \addrfrom{\parbox{2in}{The Pink House \\ Belleville, IL}}
%    \begin{document}
%    \closeline{Sincerely yours,} \greetto{Dear Mr. Bush,}
%    \begin{newlfm}
%    How are the azaleas?
%    \end{newlfm}
%    \end{document}
%    \end{verbatim}
%    This produces a simple letter with very standard features.  The letter
%    produced in this way has odd-looking spacing.  Additionally, the
%    information in the ``from'' specification is very likely to be repeated
%    in letter after letter.  Although the user can copy this information,
%    it is much more convenient to put this information in an address
%    database.  
%
% \subsection{Option specification}
%    \label{sec:opt}
%    The |newlfm| package features a wide variety of options to specify
%    options for  letters, faxes and memos. 
%    Options may be specified in one of two ways:
%    \begin{enumerate}
%    \item They may be placed in the options section of the |\documentclass|
%      statement.  Thus, the options would be specified as follows, with
%      several other statements to provide context:
%    \begin{verbatim}
%    \documentclass[dvips,faxheaderpage,letterpaper,%
%    stdmemo,dateno,memoaddrto]{newlfm}
%    \lthOfficeA\setadrto{\adrMainCust}
%    \leftmarginsize{.75in}\rightmarginsize{1.385in}
%    \begin{document}\begin{newlfm}
%    Now is the time for all good men to come to the aid of the party.
%    \end{newlfm}\end{document}
%    \end{verbatim}
%    This is called the ``document-header'' approach. 
%    Options may be specified in the preamble area (after the
%    |documentclass| specification and before the \verb|\begin{document}|
%    specification).  
%    The terms |\lthOfficeA| and |\adrMainCust| refer to specifications in the
%    letter information database, which is described in Section
%    \ref{sect:wrapper}.  Note the use of the ``\verb|%|'' to set all spaces
%    after the comma on the first line to comments; this functions to create
%    a single unified line.
%    \item Options may also be placed in a statement in
%      the letter itself, or stored in the letter database file
%      |letrinfo.tex|.  Using this approach, options are specified as follows:
%    \begin{verbatim}
%    \documentclass[dvips]{newlfm}
%    \newlfmP{letterpaper,stdmemo,dateno,letrh=OfficeA,addrt=MainCust,memoaddrto,faxheaderpage}
%    \begin{document}\begin{newlfm}
%    Now is the time for all good men to come to the aid of the party.
%    \end{newlfm}\end{document}
%    \end{verbatim}
%    This is called the ``keyed-value'' approach.  In previous versions,
%    several distinct ``keyed-value'' specifications were used, but
%    currently all options are placed in the |newlfmP| key specification.
%    The terms |OfficeA| and |MainCust| refer to specifications in the
%    letter information database, which is described in Section \ref{sect:wrapper}.
%    \end{enumerate}
%    The approaches may be intermingled without effect.  Options are applied
%    in order of encounter, so the last option encountered over-rides
%    earlier ones.
%
% \subsection{Basic ideas of newlfm}
%    A letter has a number of components.  These include the to-address,
%    the from-address, the salutation or greeting, the body or main part
%    of the letter, the closing and the signature.  In addition, there are
%    components of the header section, the left-margin, the right-margin and
%    the footer section.  In |newlfm|, the header and footer sections are
%    managed using the basic tools provided by |fancyhdr|.  The left- and
%    right-margins are managed using the margin specification tools of
%    \LaTeX.  For the remaining components, |newlfm| structures the
%    placement using the |tabular| methodology of \LaTeX.  Using this
%    approach, items are placed into cells of a |tabular| structure, and
%    spacing is adjusted accordingly.  The further implications of this
%    structure is discussed below in Section \ref{sec:struct}.
%
% \section{Available styles}
% \subsection{Letter styles} 
%    \label{sec:let}%
%    |newlfm| defines several letter styles.  These styles are chosen using
%    options (in either selection method).  Letters include some or all of the following components: 
%    1) date, 2) from-address, 3) to-address, 4) opening salutation, 5) 
%    closing phrase, 6) signature, and 7) name and title of signer.
%    Justification of the components is shown in \tabr{addrloc} below.
%
% \subsection{Memo styles} 
%    \label{sec:mem}
%    Memos are headed as:
%    \begin{center}
%    \begin{tabular}{lll}
%    To: & J Smith & \today  \\
%    From: & P A Thom & \\
%    Re: & Gnu info & \\
%    \end{tabular}
%    \end{center}
%    A number of options control whether more \info{} is printed for the
%    memo, including printing the address, phone number and FAX number of 
%    both the ``from'' and ``to'' persons  (after the 
%    name). There are two forms of the memo style, as shown in
%    \tabr{addrloc} below.  The user may use their
%    own version of the memo block. 
%
% \subsection{A list of styles in \texttt{newlfm}} 
%    \tabr{addrloc} shows the components of a letter, and indicates when
%    they will be used in letters:
%
%    \tabsetx{3}{Letter and memo structures}{addrloc}
%    \begin{center}
%    \begin{tabular}{lllllllllll} 
%    \hdr{Class} & \hdr{Style}  & \hdr{D} & \hdr{F} & \hdr{T} & \hdr{G} & 
%    \hdr{C} & \hdr{S} & \hdr{N} & \hdr{Option name}\\ \hline
%    Letter & Business   & L & L & L & L & L & L & L & |busletter| \\
%           & B, No from & L & O & L & L & L & L & L & |busletternofrom| \\
%           & Standard   & R & R & L & L & R & R & R & |stdletter| \\
%           & S, No from & R & O & L & L & R & R & R & |stdletternofrom| \\ \hline 
%    Memo   & Standard   & R & L & L & O & O & O & O & |stdmemo| \\
%           & Full       & F & F & F & O & O & O & O & |fullmemo| \\ \hline
%    Press Release & Standard & L & L & O & O & O & O & L & |pressrelease|  \\  \hline
%    \multicolumn{11}{l}{\parbox[t]{4.4in}{Headers --- |D|: Date;  |F|:
%    From-address; |T|: To-address; |G|:
%    Greeting; |C|: Closing; |S|: Signature;
%    |N|: Name.  Body entries --- |R|: Right-justified; |L|: Left-justified; |O|:
%    Omitted; |F|: Full}}
%    \end{tabular}
%    \end{center}
% 
% \subsection{FAX cover pages} 
%    A FAX cover page can be used for either the letter or the memo style.  This 
%    page shows the page count, time and date of composition, and the addresses 
%    of sender and recipient.  In addition, the letter can include a FAX message 
%    in a message line.
%
% \section{Letter and memo options}
%    \subsection{Use of options}
%    \label{sec:leto}
%    In |newlfm|, the various components of the letter can be modified.
%    This is done using options (placed in the ``document-header'' or
%    ``keyed-value'' approaches).
%
%    The following example illustrates option placement in the document
%    header line:
%    \begin{verbatim}
%    \documentclass[busletter,nofromaddress,dateright,dateyes]{newlfm}%
%    \lthMyLtr
%    \begin{document}
%    \begin{newlfm}
%    \end{verbatim}
%    This prints a business letter, with no ``from''-address, and date printed
%    right-justified.  Since some options can over-ride actions of others, 
%    the options are executed in the order encountered.  Long specifications which
%    cannot nicely fit on a single line should be terminated with the command
%    character \verb|%|, which omits spaces in the specification list.  The
%    list may continue as long as is necessary.
%
%    The \info{} may also be specified using the ``keyed-value'' approach:
%    \begin{verbatim}
%    \documentclass{newlfm}%
%    \newlfmP{letrh=MyLtr,busletter,nofromaddress,dateright,dateyes}
%    \begin{document}
%    \begin{newlfm}
%    \end{verbatim}
%    The ``keyed-value'' method is very flexible.  Values may be
%    specified either as above (before the |\begin{document}| specification)
%    or within the letter database.  Thus, the approach gives the user the
%    flexibility of storing letter characteristics within the address
%    system, so that the selection of a certain recipient defines a letter
%    of a certain type.
%
% \subsection{Letter options}
%    Letter options involve the inclusion of elements into ``from-address''
%    and ``to-address'' blocks (including email and telephone numbers) and
%    the placement of blocks on the page.  Blocks may also be omitted.  Options
%    may be defined using either options specification method:
%
%    \tabsetx{3}{Letter options}{letteropt}
%    \begin{center}
%    \begin{tabular}{lllll}
%    \hdr{Component} & \hdr{Option} & \hdr{Description} & 
%    \hdr{Option} & \hdr{Description} \\   \hline
%    ``From'' address & |noaddrfrom| & Omit  address   
%    &|printallfrom| & Print all  components  \\
%    &|addrfromleft| & Left-justified  block   
%    &|addrfromright| & Right-justified \\
%    &|addrfromemail| & Include e-mail  
%    &|addrfromphone| & Include phone   \\
%    &|addrfromfax| & Include fax     \\  \hline 
%    ``To'' address &
%    |printallto| & Print all  components 
%    &|addrtoleft| & Left-justified  block \\
%    &|addrtoright| & Right-justified 
%    &|addrtoemail| & Include e-mail  \\
%    &|addrtophone| & Include phone   
%    &|addrtofax| & Include fax     \\  \hline 
%    Date &
%    |dateright| & Right-justified 
%    &|dateleft| & Left-justified \\
%    &|datecenter| & Centered 
%    &|dateno| & Omit  \\
%    &|dateyes| & Force date to print  \\ \hline 
%    Order &
%     |orderdatefromto| & Date, From, To 
%    &|orderfromdateto| & From, Date, To \\ 
%    &|orderfromtodate| & From, To, Date \\ \hline
%     Signature & 
%    |sigright| & Right-justified 
%    &|sigleft| & Left-justified \\
%    &|sigcenter| & Centered \\
%    \hline 
%    \end{tabular}
%    \end{center}
%
% \subsection{Letter components}
%    \label{sec:struct}
%    Items are placed in the address block section using a |tabular|
%    structure.  The first item(s) is(are) placed in Row 2, the second
%    sequentially occurring is placed in Row 4 and the last in Row 6.  The
%    |tabular| block has three columns, and the choice of columns for
%    printing is determined by justification of the items.  Other items may
%    optionally be placed in other locations of the |tabular| block using
%    a special item:
%    \begin{verbatim}
%    \speciala{text}{row}{col}
%    \spacespa{space-before-a}{space-after-a}
%    \end{verbatim}
%    Using this approach, optional text may be placed into an optional
%    location in the header section.  If special spacing is desired, it is
%    defined using the |\spacespa| construction.  In |newlfm|, special text
%    may be added using |speciala|, |specialb|, |specialc|, |speciald|,
%    |speciale|,  |specialf|, |specialg|, and |specialh|.  Each of these
%    special text tools is paired with a |spacespx| construction, where |x|
%    is the same letter as the |special| tool.  The |tabular| structure has
%    a total of 7 addressable rows, allowing optional items to be placed
%    before the first letter element (in Row 1), after the last letter
%    element (in Row 7), or between letter elements (in Rows 3 and 5).
%    Optional items may also be placed on the same rows as standard letter
%    elements.  Note, however, that the placement of items in the same
%    position as standard letter elements will be ignored.
%
% \subsection{Memo options}
%    \label{sec:memo}
%    Memo options involve the inclusion of elements into from-address
%    and to-address blocks (including email and telephone numbers) and
%    the placement of blocks on the page.  Blocks may also be omitted.  These
%    may be placed either in the ``document-header'' option  section, or in
%    the command |\newlfmP|.
%    \tabsetx{3}{Memo options}{memoopt}
%    \label{page:memoo}
%    \begin{center}
%    \begin{tabular}{lllll}
%    \hline 
%    \hdr{Block} & \hdr{Option} & \hdr{Function}& \hdr{Option} & \hdr{Function} \\
%    ``From'' block & 
%    |memonofrom| & Omit block 
%    &|memoaddrfrom| & Address  \\
%    &|memoemailfrom| & E-mail  
%    &|memopagerfrom| & Pager \#  \\
%    &|memophonefrom| & Telephone \# 
%    &|memofaxfrom| & FAX \# \\ \hline 
%    ``To'' block &
%    |memonoto| & Omit block 
%    &|memoaddrto| & Address \\
%    &|memoemailto| & E-mail  
%    &|memophoneto| & Telephone \# \\
%    &|memopagerto| & Pager \# 
%    &|memofaxto| &  FAX \# \\ \hline 
%    Other &
%    |memodate| & Set date on memo 
%    &|memonore| & Omit ``Re:'' line \\
%    &|fullmemo| & Use all optional items \\ \hline
%    \end{tabular}
%    \end{center}
%
% \subsection{Memo block structure}
%    The default memo block code was shown previously.  The memo style is
%    stored internally, but as |\newlfm| is processed, it looks for a file
%    |memosec.tex|, and reads the memo header block definition in that file 
%    if it is found.    If an alternative to the default memo header block
%    structure is desired, the user may feel free to hack the code found in
%    |smemosec.tex| and save it in |memosec.tex|.    Thus, you may alter
%    that file to make changes in the memo block.  To simplify the process,
%    you may wish to 1) set up the main 
%    parameters for |\newlfm| successfully, and 2) alter the code in 
%    |memosec.tex| to look as you wish.  Using this approach, you may 
%    find that the alteration process works in a more dependable fashion.  No
%    support for modification of code is able to be offered, unfortunately.
%    The code for |\memosec| is presented and commented on Page
%    \pageref{page:memosec}.
%
% \subsection{Fax options}
%    \label{sec:faxo}
%    Fax options involve the selection of one of several fax block styles.
%    |test1.tex| shows an example of the use of |faxheaderpage| (separate
%    fax page), while |faxhba| shows an example of the use of |faxhba| (fax
%    information in header block).
%    The code for |\faxpage| is presented and commented on Page
%    \pageref{page:faxsec}.
%
%    \tabsetx{3}{FAX options}{faxopt}
%    \label{page:faxo}
%    \begin{center}
%    \begin{tabular}{llll}
%    \hline 
%    \hdr{Option} & \hdr{FAX item} & \hdr{Option} & \hdr{FAX item} \\
%    \hline 
%    |faxheaderpage| & Print FAX page &
%    |faxhba| & In Rheader \\
%    |faxblocka| & Block A style &
%    |faxblockb| & Block B style \\
%    \hline 
%    \end{tabular}
%    \end{center}
%
% \subsection{Press Release style}
%    \label{sec:pr}
%    There is only one press release style.  A press release includes
%    the following elements, in this order:
%    \begin{enumerate}
%    \item The information about the contact, address, etc. of the contact
%    person is taken from the current ``from-address'' information.  So, to
%    insert a person into the ``Contact'' line specified below, use the
%    |addrf| specification or the other methods of indicating the
%    ``from-information.'' 
%    \item On the upper left, below the letterhead, information about
%    when the release may be used.  Usually this is {\bf FOR IMMEDIATE
%    RELEASE}.  This phrase is modified using the command |\release|.
%    \item Contact information, drawn from the from information used in
%      the other styles.  The option |PhrContact| allows the user to
%      substitute another term for ``Contact:''.
%    \item Headline, usually in boldface with the first letters of
%      words capitalized.  This is specified with the  |\headline| command.
%      The press release style automatically inserts a header into the
%      center block of the head section for all subsequent pages.  This is
%      the same as the |headline| information, unless a different value is
%      defined with the |\shorthead| command.
%    \item Dateline, usually a city.  The date is appended automatically.
%    \item The main body of the press release.
%    \item The end marker, usually \# \# \#.
%    \end{enumerate}
%
%    Because recipients like to scribble notes on press releases, they
%    have 1 inch margins (that is the default anyway) and double
%    spacing; the command |dspace| will also set double spacing, while
%    |sspace| retains single spacing.  
%    \footnote{Do not put a |onehalfspace| environment
%    directly inside the default |doublespace|.  The former multiplies
%    whatever spacing is in effect.}
%
%    A press release should also try not to break paragraphs across
%    pages (not yet implemented), and, if there are multiple pages, put
%    ``--- more ---'' at the bottom and the headline (or a short form of
%    it) at the top of subsequent pages.
%
%    If faxing a press release, remember to pick a good fax font.  As
%    this matter is not specific to press releases, and is system
%    dependent, this press release environment does nothing special to
%    your fonts.  Usually, sans serif fonts work better when faxing, so
%    you might want to specify |\sffamily| right after
%    |\begin{document}|.
%
%    A press release does not have a signature or closing phrase at
%    the end.
%
% \subsection{Press Release options}
%    Press releases are inherently subjective in construction.  What works
%    for one person will not work for another.  The style defined in
%    |newlfm| is servicable, but not particularily elegant.  For that
%    reason, a very easy method of customization is set up.  The file
%    |sprsrls.tex| includes the default press release style.  To change the
%    style:
%    \begin{enumerate}
%      \item Copy the file to |prsrls.tex|;
%      \item Modify the style as needed;
%      \item Test using a press release of your choosing.
%    \end{enumerate}
%
% \section{Spacing commands}
%    \label{sec:spac}
%    |newlfm| has a number of commands which allow the user to define the
%    position of items within the letter.  Some of these commands control
%    the space for structural elements of the document, and some control
%    spacing within these structural elements.  
%
% \subsection{Structure of a \LaTeX\ document}
%    A \LaTeX\ document has a number of structural elements, summarized in
%    Figure \ref{fig:lay}.  
%    \begin{figure}[htbp]
%    \begin{center}
%    \leavevmode
%    \layout
%    \vspace{3cm}
%    \caption{Page elements. The values shown are those in effect in the
%    current document, not the defaults.} 
%    \label{fig:lay}
%    \end{center}
%    \end{figure}
%    Examining this figure, there are three sections vertically (header,
%    text body, footer) and three sections horizontally (left margin, text
%    body, right margin).  Each of these sections is placed in reference to the
%    paper boundaries.  Vertically, the header is offset from the top of the
%    page, there is a separation to the text body, there is a separation
%    from the text body to the footer, and the footer is offset from the
%    bottom of the page.  
%
% \subsection{Vertical spacing}  
%    Vertical spacing commands are shown in \tabr{spacever}.  This table
%    shows the various components of the \LaTeX\ page, along with the
%    commands which are used to define or modify these elements in |newlfm|.
%    Naturally, since the physical page has a physical
%    dimension, the size of one component can be defined by the other
%    dimensions save one.  In |newlfm|, commands which give the structure of
%    the overall document are amplified and extended by commands which give
%    the structure of the document within the text body itself.  These
%    additional items are shown in \tabr{spvextitem}.
%
%    For many of these terms, they may be used alone or within the
%    |newlfmP| specification.  If used alone, they are specified as \LaTeX\
%    commands, while if used within the |newlfmP| specification, they are
%    used without the backslash:
%    \begin{verbatim}
%    \topmarginskip{1in}
%    \newlfmP{topmarginskip=1in}
%    \end{verbatim}
%
%    \tabsetx{8}{Vertical spacing commands}{spacever}
%    \begin{center}
%    \setlength{\tabcolsep}{3pt}
%    \begin{tabular}{lllllp{120pt}l} \hline 
%    \hdr{Page}          & \hdr{\LaTeX} & \hdr{\texttt{newlfm}} & \hdr{Default} & \hdr{Included} & \hdr{Function}  \\ 
%    \hdr{Section}       & \hdr{Name}   & \hdr{Name}            &         & \hdr{Items}    & \hdr{Description} \\ \hline
%    Top Margin    & |\topmargin|  & |unprtop|          &         &            & Top unprintable area \\
%                  &               & |topmarginskip|    &         &            & Top of page to header block \\ 
%    Header        & |\headheight| & |MinHead|          &         & Group 1    & Header section \\
%                  &               & |headermarginsize| & 72pt    &            & Header section \\
%    Header Skip   & |\headsep|    & |headermarginskip| & 20pt    &            & Skip from header to text block top \\
%    Text Height   & |\textheight| & |textheightsize|   &         & Group 2    &    \\           
%    Footer skip   & |\footskip|   & |bottommarginskip| & 20pt    &            & Skip from bottom of text to footer \\
%    Footer        & |\footskip|   & |MinFoot|          & 72pt    & Group 3    & Footer section \\
%                  &               & |footermarginsize| &         &            &             \\
%                  &               & |unprbottom|       &         &     & Bottom unprintable area \\ \hline
%    \multicolumn{7}{l}{\parbox[t]{6in}{Group 1: \texttt{Cheader}, \texttt{Rheader},
%    \texttt{Lheader}, \texttt{cheader}, \texttt{rheader}, \texttt{lheader}.  Group 2: \texttt{date},
%    to-address, from-address, \texttt{greetto}, \texttt{signature}. Group 3:
%    \texttt{Cfooter}, \texttt{Rfooter}, 
%    \texttt{Lfooter}, \texttt{cfooter}, \texttt{rfooter}, \texttt{lfooter}}}
%    \end{tabular}
%    \end{center}
%
%    \tabsetx{8}{Vertical spacing commands}{spvextitem}
%    \begin{center}
%    \setlength{\tabcolsep}{3pt}
%    \begin{tabular}{lllll} \hline 
%    \hdr{Function} & \hdr{\texttt{newlfm}}&\hdr{Section}& \hdr{Space}          & \hdr{Space} \\
%    \hdr{Name}     & \hdr{Structure}     & \hdr{Size}   & \hdr{Before}         & \hdr{After} \\ \hline
%    Date              & |\dateset|       &              & |dateskipbefore|     & |dateskipafter| \\
%    ``From'' address  & |\adrsetfr{XXX}| &              & |addrfromskipbefore| & |addrfromskipafter| \\ 
%    ``To'' address    & |\adrsetto{XXX}| &              & |addrtoskipbefore|   & |addrtoskipafter| \\
%    Greeting          & |\greetto|       &              & |greettoskipbefore|  & |greettoskipafter| \\ 
%    Text Block        &                  & |textheight| &                      & \\
%    Left Margin Block & |\Lmargin|       &              & |leftmargintopdist|  & \\
%    Right Margin Block& |\Rmargin|       &              & |rightmargintopdist| & \\
%    Signature         & |\signature|     & |sigsize|    & |sigskipbefore|      & |sigskipafter| \\
%                      & |\siglist|       &              &                      &          \\              
%    |Ps|, |PPs|, etc  & Various          &              & |postsigskipbefore|  & |postsigskipafter| \\
%    Memo block        & Various          &              & |memoskipbefore|     & |memoskipafter| \\ \hline
%    \end{tabular}
%    \end{center}
%
%    Here are several rules which are used to define the sizes of items:
%    \begin{itemize*} 
%    \item If header margin specifications (|\Cheader|, etc.) are not used,
%      |headermarginskip| and |topmarginskip| are ignored.  In this
%      case, |topmargin| alone is sufficient to specify the size of the top margin.
%      If |unprtop| is specified, and $|unprtop| > |\topmargin|$, 
%      |unprtop| is used in place of |topmargin|.
%      If |\unprtop| is specified, and $|\unprtop| > |\topmarginskip|$, 
%      |\unprtop| is used in place of |\topmarginskip|.
%    \item If any of the footer margin specifications (|\Cfooter|,
%      |\Rfooter|, or |\Lfooter|) are used to specify a footer margin block, 
%      |\bottommarginskipbelow| and |\bottommarginskip| are both used to position
%      the bottom- or footer-margin block relative to the text.   Additionally,
%      the overall height (including depth) of the largest of the three
%      footer-margin placement blocks
%      is used to specify the value of |\footermarginsize|.
%      If |\unprbottom| is specified, and $|\unprbottom| > |\bottommargin|$, 
%      |\unprbottom| is used in place of |\bottommarginsize|.
%    \item |\topmarginsize| and |\bottommarginsize| are sufficient to specify the
%      positions of blocks vertically.  If |\textheight| is also specified, it
%      is used last, and over-rides the specification of text height by subtraction.
%    \item If a left margin text block is specified using |\Lmargin|,
%      |\leftmargintopdist| sets the space that the left margin block is placed
%      from the top of the page. By default, the left margin is placed flush
%      with the bottom of the header section.  Any choice here sets the top
%      of the header block a certain distance from the top of the page. 
%    \item The use of space-after commands is not recommended in the general
%      case, as they can complicate item placement.
%    \end{itemize*} 
%
%    \subsection{Horizontal spacing}  Horizontal spacing commands are shown in
%    \tabr{spacehor}.  
%
%    \label{page:skipc}
%    \tabsetx{8}{Horizontal spacing commands}{spacehor}
%    \begin{center}
%    \setlength{\tabcolsep}{3pt}
%    \begin{tabular}{lllllp{100pt}l} \hline 
%    \hdr{Page}    & \hdr{\LaTeX}     & \hdr{\texttt{newlfm}}& \hdr{Default} & \hdr{Included} & \hdr{Function}  \\ 
%    \hdr{Section} & \hdr{Name}       & \hdr{Name}          &         &  \hdr{Items}   & \hdr{Description} \\ \hline
%    Left Margin   & |\oddsidemargin| & |unprleft|          &         &          & Left unprintable area \\
%                  &                  & |leftmarginskipleft|&         &
%                  & Page left side to margin block \\ 
%    Left Print Area&                 & |MinLeft|           &         & Group 4  & Left print section \\
%                  &                  & |leftmarginsize|    & 72pt    &          & Header section \\
%    Left Margin Gap&                 & |leftmarginskipright|& 10pt   &          & Dist from margin block to text \\
%    Text Width    & |\textwidth|     & |textwidthsize|     &         &          & \\   
%    Right margin  & |\evensidemargin|& |rightmarginsize|   &         & Group 5  & \\ \hline     
%    \multicolumn{7}{l}{\parbox[t]{6.4in}{Group 4: \texttt{Lmargin}, \texttt{lmargin}
%    Group 5: \texttt{Rmargin}, \texttt{rmargin}}}
%    \end{tabular}
%    \end{center}
%
%    Usage of these spacing commands:
%    \begin{itemize*} 
%    \item The size of the left margin text block is set by the width of the
%      minimum of the |\Lmargin| block or by the |MinLeft| value.
%    \item When |\Lmargin| is used for a left margin block, both 
%      |leftmarginskipleft| and |leftmarginskipright| are used to position
%      the left-margin block relative to the text.   Additionally, the width of
%      |\Lmargin| is used to specify the value of |\leftmarginsize|.
%      If |\unprleft| is specified, and $|\unprleft| > |\leftmarginskipleft|$, 
%      |\unprleft| is used in place of |\leftmarginskipleft|.
%    \item If |\Lmargin| is not  used,
%      |leftmarginskipleft| and |leftmarginskipright| are ignored.  In this
%      case, |\leftmarginsize| alone is sufficient to specify the size of the left margin.
%      If |\unprleft| is specified, and $|\unprleft| > |\leftmarginsize|$, 
%      |\unprleft| is used in place of |\leftmarginsize|.
%    \item If |\Rmargin| is not used, and $|\unprright| > |\rightmarginsize|$, 
%      |\unprright| is substituted for |\rightmarginsize|.
%    \item |\rightmarginsize| and |\leftmarginsize| are sufficient to specify the
%      positions of blocks horizontally.  If |\textwidth| is also specified, it
%      is used last, and over-rides the specification of text width by subtraction.
%    \end{itemize*} 
%
%    \subsection{Ordering of elements:} 
%    Date, from-address and to-address are generally printed
%    in that order.  Other orders are set up using options. 
%    \begin{itemize*}
%    \item |orderdatefromto|: date, from-address, to-address
%    \item |orderfromdateto|: from-address, date, to-address
%    \item |orderfromtodate|: from-address, to-address, date
%    \end{itemize*}
%
%    \section{Address components}
%      \label{sec:adrz}
%    Information about the names, addresses, telephone numbers and the 
%    other types of data is specified using these commands.
%
%    \subsection{Address commands}
%    Address \info{} is specified using the commands in \tabr{adrtoc}.
%    These commands are used for both ``from-address'' and ``to-address.''
%    However, the information stored using these commands must be converted
%    to specific ``from-address'' or ``to-address'' information, as
%    discussed below in Section \ref{sect:wrapper} below.
%
%    \tabsetx{5}{Address item commands}{adrtoc}
%    \begin{center}
%    \begin{tabular}{llllll} \hline
%    \hdr{Command} & \hdr{Stores \ldots} & 
%    \hdr{Command} & \hdr{Stores \ldots} &
%    \hdr{Command} & \hdr{Stores \ldots}  \\ \hline
%    |\addr| &  Address                   &
%    |\byline| & Byline                   &
%    |\city| & City                       \\
%    |\dept| & Department                 &
%    |\email| & E-mail address            &
%    |\emailb| & E-mail address b         \\
%    |\emailc| & E-mail address c         &
%    |\fax| & FAX \#                      &
%    |\fname| & First name                \\
%    |\greet| & Greeting                  &
%    |\institute| & Institution           & 
%    |\lname| & Last name                 \\ 
%    |\mname| & Middle name               &
%    |\name| & Name                       & 
%    |\pager| & Pager \#                  \\
%    |\phone| & Telephone \#              & 
%    |\phonea| & Telephone \# a           & 
%    |\phoneb| & Telephone \# b           \\
%    |\phonec| & Telephone \# c           &
%    |\phoned| & Telephone \# d           &
%    |\phoneo| & Office  \#               \\ 
%    |\phoneh| & Home  \#                 &  
%    |\position| & Position               &
%    |\regarding| & ``Regarding'' line    \\
%    |\release| & ``Immediate Release''   &
%    |\role| & Role                       &
%    |\socsec| & Social Security \#       \\
%    |\staddr| & Street address           &
%    |\state| & State                     &
%    |\subdept| & Sub-department          \\
%    |\title| & Title                     & 
%    |\zip| & zip-code                    \\
%    \hline 
%    \end{tabular}
%    \end{center}
%
%    \subsection{Phrase commands}
%      \label{sec:phras}
%    Letters and memos have certain phrases which identify sections.  These
%    include the terms for ``To'' and ``From'' in the memo, and the phrases
%    identifying the other sections of letters.  These phrases may be modified 
%    using the commands listed here.  They are used as:
%    \begin{verbatim}
%    \begin{newlfm}
%    ....
%    \PhrPhone{Telephone Number}
%    ....
%    \end{verbatim}
%    This term will be used whenever the phrase for ``Telephone Number''
%    should be printed.
%
%    \tabsetx{4}{Phrase commands}{phraseopt}
%    \begin{center}
%    \begin{tabular}{llllll}
%    \hline 
%    \hdr{Command} & \hdr{Use} & \hdr{Command} & \hdr{Use} & \hdr{Command} & \hdr{Use} \\
%    \hline 
%    |\PhrFAXcovp| & FAX Cover page &
%    |\PhrFAXpgcnt| & FAX Page Count &
%    |\PhrPager|        & Pager \\
%    |\PhrEmail|        & E-mail &
%    |\PhrDocument|     & Document &
%    |\PhrPhone|        & Telephone \\
%    |\PhrRe|           & re &
%    |\PhrSubre|        & re &
%    |\PhrCc|           & cc  \\
%    |\PhrPs|           & ps &
%    |\PhrMessage|      & Message &
%    |\PhrPps|          & pps \\
%    |\PhrPpps|         & ppps &
%    |\PhrEncl|         & Encl &
%    |\PhrPage|         & page \\
%    |\PhrTo|           & To &
%    |\PhrFrom|         & From &
%    |\PhrRegard|       & Regarding \\
%    |\PhrContact|      & Contact &
%    |\PhrRelease|      & For Immediate Release &
%    |\PhrMore|         & --- more -- \\
%    |\PhrPREnd|        & \# \# \# &
%    & \\
%    \hline 
%    \end{tabular}
%    \end{center}
%
%    \section{Letterhead tools}
%    \label{sect:lhead}
%    \subsection{Inclusion of logos}
%    Logos and other \info{}, stored as encapsulated PostScript objects (for
%    standard \LaTeX\ production using |latex file| and |dvips file|) or
%    .pdf files (for \LaTeX\ production using |pdflatex file|),
%    can be placed in the header and footer of letters.  However, sizing the
%    resulting letter can be challenging.  |newlfm| automatically adjusts
%    letter dimensions to accomodate the inclusion of such objects, if these
%    objects are included as boxed text (|\sbox|, |\fbox|, |\parbox|,
%    |minipage|, etc.).  In the discussion that follows, the first page of
%    the letter is called the ``letterhead'' page, while subsequent pages
%    are the ``non-letterhead'' pages.
%
%    Using |fancyhdr.sty| of Piet van Oostrom, |newlfm| handles letterhead
%    \info{} in a simple and straightforward manner.  In |newlfm|,
%    \info{} for the letterhead page is entered using the 
%    commands shown in \tabr{letterhopt}.
%
%    \tabsetx{4}{Marginal material commands}{letterhopt}
%    \begin{center}
%    \begin{tabular}{lllllll}  
%    \hline 
%    \hdr{Page} & \hdr{Location} & \hdr{Left} & \hdr{Center} & \hdr{Right} \\ \hline 
%    Letterhead & Footer & |\Lfooter| & |\Cfooter| & |\Rfooter|  \\
%               & Header & |\Lheader| & |\Cheader| & |\Rheader|  \\
%               & Under Header & |\LUheader| & |\CUheader| & |\RUheader|  \\
%               & Margin & |\Lmargin| &            & |\Rmargin| \\
%    \hline \hline
%    Page & Location & Left & Center & Right \\ \hline 
%    Non-letterhead & Footer & |\lfooter| & |\cfooter| & |\rfooter| \\
%                   & Header & |\lheader| & |\cheader| & |\rheader| \\
%                   & Margin & |\lmargin| &            & |\rmargin| \\
%    \hline 
%    \end{tabular}
%    \end{center}
%
%    In order to simply use letterhead logos and other PostScript pictorial
%    \info{} (logos, etc.), the program automatically calculates the
%    heights of the header and footer and optimally places them on the page.
%    In order for this to work, {\bfseries \itshape all \info{} for the
%    header and footer must be included in boxed formats}.  That is, to use a
%    letterhead, logos, pictures, addresses, whatever must be placed in a 
%    \LaTeX\ box structure.  The boxed formatted items may be included in a
%    wrapper program.   
%
%    Under-header items are placed into boxes and placed just under the
%    header section.  This allows items to be effectively divided into two
%    sections, those placed in the actual header, and those placed in
%    another header-like section just under the true header section.  This
%    enables a more flexible and general letter to be written.
%
%    For example, if a logo is to be included from an external file, this
%    should be inserted into an |\sbox| and used as follows:
%    \begin{verbatim}
%    \newsavebox{\Lpalmb}
%    \sbox{\Lpalmb}{\parbox[t]{1.75in}{\includegraphics[scale=.4,ext=.pdf,%
%    angle=101,trim=-50 245 125 125]{palm}}}%
%    \makelth{Homea}{\Lheader{\usebox{\Lpalms}}}%
%    \end{verbatim}
%
%    \subsection{Marginal material}
%    The left and right margins may also contain a box of text.  This is placed in
%    |\Lmargin| or |\Rmargin|.   The size of the  margin is automatically calculated from
%    the box size.  The box is placed a very small distance from the  edge
%    of the paper (10pt), and the margin gap from the box to the text box of
%    the letter is set to be 10pt as well.  
%
%    In some cases, the header and footer margins may be too small when
%    fitted to the boxed-up header and footer items.  For this reason,
%    four commands allow the headers and footers to have a given minimum
%    size.  These commands are |minhead=xxpt| (minimum size for header of
%    non-letterhead page; xxpt is a dimensional value such as |5in| or
%    |12pt|), |MinHead=xxpt| (minimum size for header of
%    letterhead page), |minfoot=xxpt| (minimum size for footer of
%    non-letterhead page) and |MinFoot=xxpt| (minimum size for footer of
%    letterhead page).  These ensure that the headers and footers have given
%    minimum sizes.  
%
%    \subsection{Graphical objects}
%    Here is a step-by-step description of the process of incorporating a
%    graphical object:
%    \begin{itemize*}
%    \item \textbf{Insert the object:}
%      Insert the graphical object into the document (|\includegraphics|).
%    \item \textbf{Check object:}
%      Ensure that the graphical object is included correctly.  Prior to
%      attempting to use |newlfm| to print the object, ensure that
%      |\includegraphics| has inserted the \info{} correctly.  Using the
%      |\fbox| specification to allow the box edges to be examined carefully,
%      print the boxed \info{} to ensure that the object is correctly
%      specified, and that the size is correct.  If the appearance is
%      appropriate, use the wide range of options in the |\includegraphics| 
%      command (|clip|, |view|, |bb|, |trim|, |size|, etc.) to make the
%      object appear as you wish it.
%    \item \textbf{Use object:} 
%      Use the resulting trimmed, clipped and selected object in one of the
%      commands for inclusion in a |newlfm| letter or memo.
%    \item \textbf{Usage tip:} 
%      Run \LaTeX{} twice to ensure that dimensions are correctly interpreted. 
%    \end{itemize*}
%
%    \subsection{Example use of external object:}
%    Here is an example of the inclusion of an external object and its use
%    in constructing a letterhead page.  A |\newsavebox| is constructed and
%    used to store the object.  |\includegraphics| is used to insert the
%    object.  If commands to produce a .ps file are used (|latex file|,
%    |dvips file|), \LaTeX\ will search for a file with the .ps or .eps
%    suffix.  If commands to produce a .pdf file are used (|pdflatex file|),
%    \LaTeX\ will search for a file with the .pdf suffix.  For
%    flexibility, omit the suffix.
%    \begin{verbatim}
%    \newsavebox{\Logob}%
%    \sbox{\Logob}{\parbox[t]{\vdim}{\includegraphics[scale=.8]{wulogo3}}}%
%    \makeaddress{PAT}{%
%    \name{Paul A. Thompson, Ph.D.}%
%    \addr{\parbox[b]{2.65in}{Washington University School of Medicine \\%
%    at Washington University Medical Center \\ Box 8067, 660 S. Euclid \\%
%    St. Louis, MO    63110-1093}}%
%    \phone{(314) 747-3793}\fax{(314) 362-2693}\email{paul@wubios.wustl.edu}%
%    }
%    \makeaddress{GRQ}{%
%    \name{Roger Q. Grollier}%
%    \addr{\parbox[b]{2.65in}{25 N. Eastwind Rd.\\Westend, OH 43431}}%
%    \phone{(412) 555-2324}\fax{(412) 555-6923}\email{roger@starlik.com}%
%    }
%    \makeletterhead{WULHb}{%
%    \setadrfr{\adrPAT}\Lheader{\usebox{\Logob}}%
%    \Rheader{{\large\bf Division of Biostatistics}}\rheader{\@name@fr}%
%    \lheader{Page \thepage}\Lfooter{\smallform}\closeline{Sincerely yours,}%
%    }%
%    \end{verbatim}
%
%    The two |makeaddress| specificiations set up wrapper commands (see
%    Section \ref{sect:wrapper} below) which  encapsulate the relevant
%    information.  The |\setadrfr| specification in the example converts the
%    address information in |\adrPAT| from neutral to ``from-address''
%    formats.  This can also be done using the wrapper ID specification, where it
%    would be stated as |\setadrto{\fixadr{GRQ}}|, where the |\fixadr|
%    specification converts the wrapper ID to the wrapper internally.    
%
%    In a letter, this is used as:
%    \begin{verbatim}
%    \documentclass[dvips]{newlfm} 
%    \lthWULHb\setadrto{\adrGRQ}
%    \begin{document}
%    \begin{newlfm}
%    ....
%    \end{verbatim}
%    For this example, the object found in |wulogo3| was boxed up using
%    the |\sbox| specification.  It will be placed in the
%    left section of the header block for the letterhead page.  The logo was
%    examined earlier to ensure that it
%    is printed exactly as required.
%
%    \paragraph*{Usage tip:}
%    Examine the example of the inclusion of the graphical object above
%    carefully.  Note that all lines are terminated with the comment
%    character ``\verb|%|''.  All wrapper macros should be constructed in
%    this manner, to ensure that no blank spaces are inadvertently placed in the
%    wrapper macro \textbf{between commands}, other than those placed within
%    a command (for instance, the |\addr| command has blanks).  The wrapper
%    macros should not have blanks around commands, either before the start
%    of a command or after the end of one. The wrappers are ``unpacked'' 
%    during active text construction, and the presence of blanks can
%    result in odd, difficult-to-trace minor justification anomalies.  In
%    many cases, the author has found it helpful to ensure that all lines in
%    the wrapper addresses and terms are terminated with the ``\verb|%|''
%    comment character, to ensure that end-of-line characters are not
%    translated into hard-to-detect space characters.
%
%    \subsection{Blank block printing commands}
%    In some cases, the user wishes to use the included graphical objects to
%    size the header and footer areas (covered in Section \ref{sect:lhead}
%    below), and then not actually print the  objects
%    {\itshape per se}.  For instance, the letter may be printed on letterhead
%    stock, using the letterhead objects included to size the letter.  In that
%    case, the options shown in \tabr{blankopt} are available to blank out the various
%    parts of the letterhead \info{} after it is used to set margin sizes. 
%
%    \tabsetx{4}{Options for blanking}{blankopt}
%    \begin{center}
%    \begin{tabular}{llllll}
%    \hline 
%    \hdr{Option} & \hdr{Blanks \ldots} & \hdr{Option} & \hdr{Blanks \ldots} &
%    \hdr{Option} & \hdr{Blanks \ldots}  \\ \hline 
%    |blankheader| & |r,l,cheader| &
%    |blankfooter| & |r,l,cfooter| &
%    |blanklmargin| & |lmargin| \\
%    |blankrmargin| & |rmargin| &
%    |Blankheader| & |R,L,Cheader| &
%    |Blankfooter| & |R,L,Cfooter| \\
%    |Blanklmargin| & |Lmargin| &
%    |Blankrmargin| & |Rmargin| &
%    |Blankall| & All upper-case  \\
%    |blankall| & All lower-case &
%    |Blank|    & All \\
%    \hline
%    \end{tabular}
%    \end{center}
%        
%    \section{The letter database}
%    \label{sect:wrapper}
%    \subsection{Letter database {\tt letrinfo.tex}}
%    \Info{} for letters may be stored in a file.  The default name of the 
%    file is |letrinfo.tex|.   This file
%    stores \info{} in two ways: unconditionally and conditionally.  The
%    conditional \info{}, such as lists of addresses associated with
%    names, is stored in ``wrappers'', which carry the \info{} from
%    the file |letrinfo.tex| to each letter.  The
%    information stored in the letter database file |letrinfo.tex| is letter
%    information (i.e., |\name{Paul Thompson}|, |\PhrPhone{Telephone #}|). 
%  
%    Several types of \info{} are stored in the file |letrinfo.tex|.  These
%    different types of \info{} may be stored in several ways.  It may be
%    stored unconditionally, by placing it into the file |letrinfo.tex|.
%    All \info{}, used in the order listed, will be available for all letters.  
%    
%    Most \info{} is not unconditional, however.  For this reason, the \info{}
%    will almost always be stored in address ``wrappers''.  This
%    includes \info{} about the ``from'' person, as this \info{} may
%    change based on the style of letter, etc.  The \info{} may be divided into
%    three different types, and is thus placed into three types of
%    wrapper commands. 
%
%    \subsection{Address \info{}}
%    \label{page:wrapc}
%    Address \info{} is stored in an address wrapper.  The address wrapper
%    has an wrapper ID and a body. The wrapper is set up using the command:
%    \begin{verbatim}
%    \makeaddress{IDENT}{stuff}. 
%    \end{verbatim} 
%    The wrapper ID is |IDENT|.
%    This makes a wrapper for 
%    addresses, |\adrIDENT|.  Commands placed in the wrapper are then carried into 
%    the document when the wrapper command is placed in the letter as:
%    \begin{verbatim}
%    \begin{document}
%    \setadrto{\adrIDENT}
%    \setadrfr{\adrOTHID}
%    \begin{newlfm}
%    ......
%    \end{verbatim}
%    Note that the wrapper command is placed after |\begin{document}| and
%    before |\begin{newlfm}|.
%    All items entered into the |IDENT| wrapper are then activated in that
%    particular document.  This enables \info{} to be centrally stored in the
%    |letrinfo.tex| file, and used in each actual letter. 
%
%    The wrappers may also be indicated using the  |newlfmP|
%    key-value specification:
%    \begin{verbatim}
%    \begin{document}
%    \newlfmP{addrt=IDENT,addrf=OTHID}
%    \begin{newlfm}
%    ......
%    \end{verbatim}
%    This also sets up |IDENT| as the ``to'' address and |OTHID| as the
%    ``from'' address.  
%
%    Wrapper commands have two parameters.  
%    \begin{itemize*}
%    \item The wrapper ID is the first parameter in the |\makeaddress|
%    specification.  The wrapper ID is used to set up
%    a new command |\adrIDENT|, and is used in many other places by itself.
%    In general, a simple identifier is best (i.e., addressee's initials).  
%    \item The actual items are placed in the second set of braces.  The
%    wrapper ID is case-sensitive.
%    Whatever is placed there is used in the command, and carried along
%    whenever it is used.  The user may choose to place a wide variety of
%    information in the wrapper.  Commands usually used in address wrapper commands
%    are shown in \tabr{adrtoc}.  
%    \end{itemize*}
%
%    The address \info{} for a certain individual usually does not change
%    from letter to letter, although different persons are used in different
%    letters.  By using address info{} wrappers, the \info{} can 
%    be handled and used easily with the single wrapper command.  This
%    information  may be used for either the sender or the addressee for the
%    letter.   
%
%    \paragraph{Designating a sender:} To use the address information for 
%    the sender or ``from-person,'' use the |\setadrfr| command or the
%    |addrf| term in the |newlfmP| command:
%    \begin{verbatim}
%    \setadrfr{\adrPAT} 
%    \setadrfr{\fixadr{PAT}}
%    \newlfmP{addrf=PAT}
%    \end{verbatim}
%    This sets up the information in the |PAT| wrapper to be 
%    placed in the ``from'' blanks of the letter. 
%    If the wrapper ID is used in the |\setadrfr| command, the |\fixadr| command
%    converts the wrapper ID to the correct form.
%    \paragraph{Designating a recipient:} To use the address 
%    information for the recipient, use the |\setadrto| command or the 
%    |addrt| term in the |newlfmP| command:
%    \begin{verbatim}
%    \setadrto{\adrPAT} 
%    \newlfmP{addrt=PAT}
%    \setadrto{\fixadr{PAT}}
%    \end{verbatim}
%    This would set up the information in the |PAT| wrapper to be 
%    placed in the ``to'' blanks of the letter.
%
%    \subsection{Letterhead \info{}}
%    Letterhead \info{} is stored in a letterhead wrapper.  The wrapper is 
%    prepared using the command:
%    \begin{verbatim}
%    \makeletterhead{LIDENT}{stuff}
%    \end{verbatim}
%    The wrapper usually contains \info about the header, footer and margin
%    objects, which are used to set up the letterhead.  This wrapper is
%    used like the |\makeaddress| command.
%    In many cases, the return address of the letter author is set up in the 
%    letterhead wrapper, because this does not change:
%    \begin{verbatim}
%    \makeletterhead{HomeA}{%
%    \rheader{this}%
%    \setadrfr{\adrPAT}%
%    }%
%    \end{verbatim}
%
%    \subsection{Signature \info{}} 
%    Signature \info{} is stored in an signature wrapper.  The wrapper is 
%    prepared using the command
%    \begin{verbatim}
%    \makesignature{SIDENT}{stuff}  
%    \end{verbatim}
%    This wrapper is used like  the |\makeaddress| command.
%    The \info{} shown in \tabr{sigsc} is usually included in the 
%    |\makesignature| wrapper.
%
%    \tabsetx{6}{Signature Commands}{sigsc}
%    \begin{center}
%    \begin{tabular}{llll} \hline
%    \hdr{Command} & \hdr{Use}& \hdr{Command} & \hdr{Use} \\ \hline
%    |\signature| & Boxed-up signature & |\signame| & Printed name \\ 
%    |\closeline| & Letter closing line \\ \hline
%    \end{tabular}
%    \end{center}
%
%    In some cases, multiple signatures are required.  These are listed in a
%    command |\siglist|:
%    \begin{verbatim}
%    \siglist{AAA,BBB,CCC}
%    \end{verbatim}
%    In this case, three signatures are printed.  By default, they are
%    printed in a left-justified column.  To print them in a row, use
%    |\sigacross{2}| to indicate the number of signature blocks printed in
%    each row (the maximum number is 4).  Each signature is printed in a
%    block of the height and width of the largest signature block.  For this
%    approach, the letter will look odd and unbalanced if signatures are of
%    different sizes. The user must ensure that all signatures are of the same
%    size, as the program cannot ensure this.  Additionally, each signature
%    wrapper is unpacked to determine closing line and printed name. 
%    Spacing between signature block columns is set by |\sigskipcolumn|, and
%    spacing between signature block rows is set by |\sigskiprow|.
%
%    \subsection{Closing \info{}} 
%    Other closing items may be included in the letter itself, in the
%    file |letrinfo.tex|.  These include the following:
%
%    \tabsetx{6}{Closing commands}{eolc}
%    \begin{center}
%    \begin{tabular}{llllll} \hline
%    \hdr{Command} & \hdr{Usage} & \hdr{Command} & \hdr{Usage} & 
%    \hdr{Command} & \hdr{Usage} \\ \hline
%    |\cclist| & Routing list &
%    |\encllist| & Enclosures list &
%    |\initials| & Sender initials \\
%    |\faxmssg| & FAX cover message &
%    |\psitem| & Ps line &
%    |\ppsitem| & Pps line \\
%    |\pppsitem| & ppps line &
%    |\re| & re line &
%    |\subre| & Second re line \\ \hline
%    \end{tabular}
%    \end{center}
%
%    \subsection{Setting up wrapper macros}
%    \paragraph{File {\tt letrinfo.tex}:}
%    \begin{verbatim}
%    \makesignature{PT}{\newsavebox{\Signature}
%    \sbox{\Sigx}{\includegraphics[bb=16 9 597 784,viewport=180 350 400
%    425,scale=6,%
%    height=.6in,width=1.375in,clip]{sigfile}%
%    }%
%    \signature{\usebox{\Sigx}}%
%    \signame{\raisebox{.5in}{\parbox[t]{5in}{Paul A. Thompson \\%
%    Associate Professor \\ Div.  Biostatistics \\%
%    Washington University School of Mecicine}}}%
%    }%
%    \makeaddress{JS}{\name{Joe Smith}%
%    \address{12 Center Street \\ Greenville, OH 55555}%
%    \phone{(312) 333-4444}\greet{Dear Joe,}%
%    }%
%    \makeaddress{PAT}{\name{Paul A. Thompson, Ph.D.}%
%    \addr{\parbox[b]{2.75in}{Washington University School of Medicine \\%
%    Box 8067, 660 S. Euclid \\ St. Louis, MO    63110-1093}}%
%    \phone{(314) 747-3793}\fax{(314) 362-2693}%
%    }%
%    \newsavebox{\Logob}%
%    \sbox{\Logob}{\parbox[t]{\vdim}{\includegraphics[scale=.8]{wulogo3}}}%
%    %
%    \makeletterhead{WULHa}{%
%    \sigPT%
%    \Lheader{\usebox{\Logob}}\setadrfr{\adrPAT}%
%    }%
%    \end{verbatim}
%
%    \paragraph{Use in a letter:}
%    \begin{verbatim}
%    \documentclass[american]{newlfm}
%    \newlfmP{letrh=WULHa,addrt=JS}
%    \begin{document} 
%    \begin{newlfm}
%    ...
%    \end{newlfm}
%    \end{document}
%    \end{verbatim}
%
%    This letter will be addressed to Joe  Smith, using the letterhead stored
%    in |WULHa|.  The signature is taken from signature wrapper |PT|, which is carried
%    along with the letterhead wrapper |WULHa|.
%    In this way, the letters can be addressed to Joe Smith very easily, by
%    merely including the file |letrinfo.tex| on the \LaTeX{} path, and
%    including the wrapper as shown above in the file.  Although initials for
%    the recipient need not be used as the wrapper identifier tag, this is
%    convenient and makes the wrapper designation easy to do.
%
%    The wrapper commands may be used in a nested fashion.  Consider this
%    sequence: 
%    \begin{verbatim}
%    \makeaddress{Main}{\name{Paul A. Thompson}%
%    \addr{WU School of Medicine}}%
%    \makeaddress{YouA}{\adrMain \name{Love A}
%    \addr{Whereever you are}}%
%    \makeaddress{YouB}{\adrMain \name{Love B}%
%    \addr{The White House}}%
%    \end{verbatim}
%
%    In this case, the \info{} in |adrmain| is carried into the wrappers
%    |adrYouA| and |adrYouB| and is available there.  This is similar to  the
%    concept of inheritence in object-oriented programming.
%
%    \subsection{Multiple information datasets}
%    By default, |newlfm| looks for a file |letrinfo.tex| on the \TeX\
%    path.  If this file is found, it is read in during the initialization
%    process of the  |newlfm| environment.  If an alternative file is
%    needed, it may be indicated using the command
%    |\InfoFileName{check.tex}|.  This file will then be used in place of
%    |letrinfo.tex|. 
%
%    \subsection{Rules for use of wrapper IDs}
%    The wrapper IDs used to construct the letterhead database can be used in two
%    different ways.  First, the address or letterhead wrappers may be used
%    by themselves as |\adrSETA| or |\ltrSETB|.  Second, the wrapper IDs may
%    be used in many situations without the |\adr|.  Here are the general
%    rules for usage:
%    \begin{enumerate}
%    \item The wrapper macro |\adrXXX| may be used at any point in a letter.
%    To properly set up margins, it should be used  as |\setadrto{\adrXXX}|
%    and |\setadrfr{\adrXXX}| (used to convert neutral address
%    information into to-address and from-address information) prior to the
%    |\begin{newlfm}| command.  This 
%    will  ensure that proper spacing decisions are made.  The
%    |\doletter| construction also uses this form of wrapper (note: this
%    command is now obsolete - please use |\oneletter| as described below).
%    \item Wrapper IDs can be used as |\setadrto{\fixadr{XXX}}| to
%    convert neutral addresses to to-addresses and from-addresses (again,
%    prior to |\begin{newlfm}|.
%    Additionally, |\oneletter{XXX}| is used to send a form letter to
%    address |XXX|, |\multletter{XXX,YYY,ZZZ}| to multiple addresses, and
%    |\newlfmP{addrt=AAA,addrf=BBB}| are used to convert addresses using the
%    |\newlfmP| mechanism.
%    \end{enumerate}
%
%    \section{Form letters}
%    \label{sec:form}
%    The use of the address wrapper commands makes it very easy to set up form
%    letters.  \verb|newlfm| has a simple approach to form letters, using two
%    commands:
%    \begin{itemize*}
%    \item \verb|\letterbody|: This command is used to set up the body of the
%    letter.  The body is the text of the letter.  When you set up the body,
%    it is very easy to further customize the letters by setting up commands
%    within the letter.
%    \item \verb|\oneletter|: This is the  command to print the different 
%    letters.  The command has a mandatory argument of the label of the
%    ``to'' address. 
%    \item \verb|\multletter|: This command allows the use of a list of
%    address wrapper labels that will all be used to print a form letter.  The
%    address wrapper labels must all be separated by the comma (``,'').  When
%    printing form letters in this manner, specific tailoring can only be
%    done if the tailoring information is included in the  address wrapper.
%    Thus, this can be used to print any number of identical letters, or
%    letters which have been tailored or modified using information in the
%    address wrappers.
%    \end{itemize*}
%
%    \subsection{Example form letter}
%    Here is an example of the use of the form-letter commands.  In this
%    example, the two wrapper commands \verb|\adrAA| and \verb|\adrBB| can be
%    used to address letters which are both the same to the persons listed
%    in these wrappers:
%    \begin{verbatim}
%    \letterbody{This is an example of a form letter. \tailor End of the letter.}%
%    \newcommand{\tailor}{First special version.}
%    \oneletter{AA}
%    \letterbody{This is a second example of a form letter, but this approach does not allow for 
%    individualization.  It is being sent to \printnameto.}
%    \multletter{AA,BB}
%    \renewcommand{\tailor}

%     {Second special version.}
%    \oneletter{BB}
%    \end{verbatim}
%
%    \section{Printing envelopes and labels}
%    \label{sec:env}
%    |newlfm| includes a set of commands which print labels.  Some invoke the functionality of the
%    |envlab| package.  To use this functionality, follow these steps:
%    \begin{enumerate*}
%    \item Ensure that |envlab| is properly installed in your \TeX
%      installation, and that the installation database has been properly
%      refreshed.  This will ensure that \LaTeX{} can find the files.
%    \item Use the option |useenvlab| on the command line:
%    \begin{verbatim}
%    \documentclass[useenvlab]{newlfm}
%    \end{verbatim}
%    This will issue the |\makelabels| command at the start of the run, issue
%    the |\startlabels| command at the end of the run, insert the
%    ``from-address'' and ``to-address'' into appropriate structures for
%    |envlab| and otherwise complete the printing of the envelope using
%    internal information.
%    \item Options which are needed for |envlab| may also be entered into the
%    \LaTeX\ command line, just as with any normal use of |envlab| during any
%    \LaTeX.
%    \item Several types of Avery labels may be used.  The specifications
%    for Avery labels 5160, 5161, 5162, 5163 and 5164 are pre-set in
%    |newlfm|.  These are summarized in the table below.
%
%    \tabsetx{6}{Label definitions}{labels}
%    \label{tab:d}
%    \begin{center}
%    \begin{tabular}{lrrlrrrr} \hline
%    Option & Ht & Wt & t & l & Btw & Col & Row \\ \hline
%    Avery5160 & 1 & 2.75 & .5 & .19 & .16 &3 & 10 \\
%    Avery5161 & 1 & 4.19 & .5 & .16 &.19 &2 & 10 \\
%    Avery5162 & 1 & 4.19 & .83 & .16 &.19 &2 &  7 \\
%    Avery5163 & 1 & 4.19 & .5 & .16 &.19 &2 & 5  \\
%    Avery5164 & 1 & 4.19 & .5 & .16 &.19 &2 &  3 \\ \hline
%    \end{tabular}
%    \end{center}
%
%    \item Several options exist for address selection during label printing.  The default
%    is |labto|,  in which the ``to-address'' only is printed.  If
%    |labrowfrto| is selected, both ``from-address'' and ``to-address'' are
%    printed in a row:
%    \begin{verbatim}
%    From: Paul A. Thompson     To: George W. Bush
%          25 Signal Hill Blvd      1400 W. Turkey Rd.
%          Belleville, IL 62223     Crawford, TX 49281
%    \end{verbatim}  If
%    |labcolfrto| is selected, both ``from-address'' and ``to-address'' are
%    printed in a column:
%    \begin{verbatim}
%    From: Paul A. Thompson     
%          25 Signal Hill Blvd  
%          Belleville, IL 62223
%    To:   George W. Bush
%          1400 W. Turkey Rd.
%          Crawford, TX 49281
%    \end{verbatim}
%    The user is responsible for ensuring that the label printing options
%    can fit on the label selected; Avery5160 is generally suitable only for
%    |labto|, but other choices can fit on other labels. 
%    \item Other printing sizes may be selected during label printing using
%    |labsize=\size|: 
%    \begin{verbatim}
%    labsize=\small
%    \end{verbatim}
%    \end{enumerate*}
%
%    \section{Miscellaneous topics}
%    \subsection{Paper sizes}
%    Paper sizes are the generally available ones.  The following may be
%    specified: letterpaper (8.5in $\times$ 11in), legalpaper (8.5in
%    $\times$ 14in), executivepaper (7.25in $\times$ 10.5in), bigpaper (11in
%    $\times$ 17in), ebook(6in $\times$ 9in), a3paper (297mm $\times$
%    420mm), a4paper (210mm $\times$ 297mm), a5paper (148mm $\times$ 210mm),
%    a6paper (105mm $\times$ 148mm), b3paper (353mm $\times$ 500mm), b4paper
%    (250mm $\times$ 353mm), b5paper (176mm $\times$ 250mm), and b6paper
%    (125mm $\times$ 176mm).  
%
%    \subsection{Lines}
%    By default, |newlfm| demarcates the header and footer sections with
%    lines.  These may be eliminated using the commands |noheadline|,
%    |nofootline|, or |nolines|.  These commands eliminate lines in both
%    letterhead page and non-letterhead page.  Line widths may be set as
%    well, using the commands |Headlinewd| (sets head linewidth for
%    letterhead page), |headlinewd| (sets head linewidth for
%    non-letterhead page), |Footlinewd| (sets foot linewidth for
%    letterhead page), and |footlinewd| (sets foot linewidth for
%    non-letterhead page).  These final four commands issued either in the
%    command line or in the |newlfmP| commands as:
%    \begin{verbatim}
%    \newlfmP{Headlinewd=.5pt,footlinewd=.75pt}
%    \end{verbatim}
%    If a line width is set to 0pt, the line is not printed.
%    \subsection{Setting the date}
%    The date for the letter is set to be the date upon which the letter is
%    typeset.  To change the date, use |\dateset{May 20, 1974}| (feel free
%    to use other dates as needed).  
%    |\dateset{\today}| prints today's date.
%
%    \subsection{Language option definitions:}  
%    \label{sec:othlang}
%    These options define the language for the letter.  These macros are not 
%    frequently manipulated.  Basically, the strings defined here
%    set up the printing of structural elements of a memo or letter, such as
%    the ``From'' or ``To'' strings.  
% 
%    These terms are used at various points in printing letters and memos.
%    They are American terms; your mileage may vary.  Inclusion of other
%    terms is encouraged, especially when another language group is served.
%    This may be done as follows:
%    \begin{enumerate}
%    \item Change the letters ``am'' to either ``fr'' for French, ``gr'' for
%    German, ``en'' for English, ``ot'' for other or ``pl'' for pig-Latin.  If
%    you feel that I have unfairly cast disrespect on your language, feel free 
%    to add appropriate code in the section above for your language.  Change 
%    phrases in the following terms to the appropriate terms for the language
%    in question:
%    \begin{verbatim}
%    \newcommand{\@am@phr}{%
%      \renewcommand*{\@fax@cover@line}
%          {FAX Cover Page}% 
%      \renewcommand*{\@fax@page@count}
%          {FAX Page Count}%
%      \renewcommand*{\@fax@phr}{FAX}%
%      \renewcommand*{\@pager@phr}{Pager}%
%      \renewcommand*{\@doc@phr}{Document}%
%      \renewcommand*{\@phn@phr}{Phone}%
%      \renewcommand*{\@email@phr}{E-mail}%
%      \renewcommand*{\@re@phr}{Re}%
%      \renewcommand*{\@subre@phr}
%          {\ensuremath{\mathrm{Re}_2}}%
%      \renewcommand*{\@cc@phr}{cc}%
%      \renewcommand*{\@ps@phr}{Ps}%
%      \renewcommand*{\@m@phr}{Message}%
%      \renewcommand*{\@pps@phr}{Pps}%
%      \renewcommand*{\@ppps@phr}{Ppps}%
%      \renewcommand*{\@encl@phr}{Encl}%
%      \renewcommand*{\@pager@phr}{Page}%
%      \renewcommand*{\@hnto@phr}{To}%
%      \renewcommand*{\@hnfr@phr}{From}%
%    }
%    \end{verbatim}
%    \item Use file |extracd.tex| to store the new commands.  This file
%      should be placed in the same subdirectory as |newlfm.cls|.  When the
%      program executes, it includes the file if it is found.  
%    \item Use the appropriate option to include the correct code.
%    \end{enumerate}
%    \subsection{Printing the address information}
%    The |newlfm| package prints a variety of address \info{} in
%    specific ways which are appropriate and standard for letters.  In some
%    cases, you may wish to print other \info{} from the addresses in more
%    flexible ways.  For this purpose, certain printing macros are defined.
%    These are shown in \tabr{printcom}.
%
%    \tabsetx{4}{Printing address information}{printcom}
%    \begin{center}
%    \begin{tabular}{lllll}
%    \hline 
%    Select & Command & Item & Command & Item  \\ \hline 
%    ``To'' & |\printnameto| & Name &
%    |\printaddrto| &  address \\
%    & |\printphoneto| & phone &
%    |\printphoneato| &  phone A \\
%    & |\printphonebto| &   phone B &
%    |\printphonecto| &   phone C \\
%    & |\printphonedto| &   phone D &
%    |\printphoneoto| &   phone O \\
%    & |\printphonehto| &   phone H &
%    |\printpagerto| &  pager \\
%    & |\printfaxto| &  FAX &
%    |\printgreetto| &  greeting \\
%    & |\printemailto| &  email &
%    |\printemailbto| &  email \\
%    & |\printemailcto| &  email C  &
%    |\printlnameto| &  last name \\
%    |\printfnameto| &  first name \\
%    ``From'' & |\printnamefrom| & name &
%    |\printaddrfrom| &   address \\
%    & |\printphonefrom| &   phone  &
%    |\printphoneafrom| &   phone A \\
%    & |\printphonebfrom| &    phone B &
%    |\printphonecfrom| &    phone C\ \\
%    & |\printphonedfrom| &    phone D &
%    |\printphoneofrom| &    phone O \\
%    & |\printphonehfrom| &    phone H &
%    |\printpagerfrom| &   pager \\
%    & |\printfaxfrom| &   FAX &
%    |\printgreetfrom| &   greet \\ing 
%    & |\printemailfrom| &   email &
%    |\printemailbfrom| &   email \\
%    & |\printemailcfrom| &   email C &
%    |\printlnamefrom| &   last name \\
%    & |\printfnamefrom| &   first name \\
%    \hline
%    \end{tabular}
%    \end{center}
%    
%    These commands can be issued in any letter to print the \info{} for the
%    particular address component.
%
%    \subsection{Cellophane-window envelopes}
%    Letters are sometimes set up to be printed for a cellophane-window
%    envelope.  Using this approach, the ``to-address'' must be placed into
%    a specific orientation.  In |newlfm|, this is particularily
%    challenging, as the class attempts to grant users great flexibility.
%
%    In |newlfm|, users can specify the use of a cellophane-window
%    envelope.  The |cellowindow| option specifies this choice.  The
%    ``to-address'' block is positioned down from the top (using |cellodown|
%    to specify the length down; default =  2.5 inches) and left from the side (using |celloleft|
%    to specify the length from the left; default = 1 inch).  If the user specifies the
%    printing of a ``from-address'' and a date, it may not be possible to
%    print the ``to-address'' in the correct location; in this case, the
%    user should carefully examine the log and the output screen to
%    determine if the specified locations can be used in the context of
%    other options.  
%    The user can also specify the height and width of the ``to-address''
%    block as |cellowidth| (default = 4 inches) and |celloheight| (default =
%    1 inch). 
%
%    \subsection{Examples}
%    |newlfm| includes a large number of examples specified as |test1.tex|
%    through |test12.tex|.  These examples all specify their options using
%    the |newlfmP| mechanism.  Each file is also set up using the
%    |\documentclass| specification, on |test1alt.tex| through
%    |test8alt.tex|.  When preparing examples, both |pdflatex| and |latex| are
%    both used to prepare examples.
%
%    \newcommand{\pdfLaTeX}{\texttt{pdf}\LaTeX}
%    \subsection{\LaTeX\ vs. \pdfLaTeX}
%    \pdfLaTeX\ is becoming more and more common in document production in
%    the \TeX\ family.  It is not the standard yet, and there remain tools
%    which work only in the \LaTeX\ system (i.e., |pstricks|).  
%
%    The author uses |.eps| files, constructed to ensure that the bounding
%    box accurately encapsulates the active text area of the |.eps| figure.
%    Each of the figures was then converted to |.pdf| encoding using
%    |GSview|.  However, the bounding box in the |.pdf| files does not seem
%    to act to crop the image in the same manner.  Using the same code for
%    both \pdfLaTeX\ and \LaTeX\ processing does not result in the same
%    appearance of the output page.  
%
%    For this reason, functionality of H. Oberdiek's |ifpdf.sty| file is
%    included in |newlfm|.  This tool allows one option to be performed
%    when \pdfLaTeX is used for processing, and another option to be
%    executed in the \LaTeX\ environment.  Use of this tool is illustrated in the
%    |letrinfo.tex| file included in the |newlfm| package.
%    
%    Here is an example:
%    \begin{verbatim}
%    \newsavebox{\Lpalme}%
%    \ifpdf
%    \savebox{\Lpalme}{\parbox[t][1in][t]{2in}%
%    {\includegraphics[scale=.1,viewport=135 624 360 700]{palm}\vspace{.5in} \\ 
%    \rule{2in}{2pt} \\ 
%    25 Signal Hill Blvd}
%    }
%    \else
%    \savebox{\Lpalme}{\parbox[t]{2in}%
%    {\includegraphics[scale=.1]{palm} \\ 
%    \rule{2in}{2pt} \\ 
%    25 Signal Hill Blvd}
%    }
%    \fi
%    \end{verbatim}
%    Note that the |\ifpdf| construction includes the entire |\savebox|
%    specification.  Although this is not the only manner in which this
%    system will work, it is a reliable method.  Problems can be found,
%    which are very hard to diagnose, when the |\ifpdf-\fi| construction is
%    used to control processing of portions of a specification.
%
%    \subsection{Usage tips}
%    As with any complex program, there are certain tips which can enhance 
%    the use of the program.  Here are several.  If you come up with new
%    ones, please forward them to {\tt paul@wubios.wustl.edu}; complete 
%    files demonstrating useful ideas are the most helpful.
%
%    \begin{itemize}
%    \item |geometry| is no longer used for dimension setting.  Rather, all
%      dimensions are set internally.  This is done using a combination of 
%      default values, header and footer sizes and values input from the user.
%      These include primarily the page size commands |leftmarginsize|, 
%      |textwidthsize| and |rightmarginsize|. 
%    \item When size commands are used, they will be overridden by structures.  
%      Additionally, dimensional commands are applied in order.  Inconsistencies 
%      are resolved by attending to the most recent commands, and ignoring 
%      earlier inconsistent ones.
%    \end{itemize}
%
%    \newpage
%
%    \section{Command Summary}
%    \label{sec:summ}
%    \begin{verbatim}
%    \documentstyle[options]{newlfm}
%
%    \topmarginsize{.25in} \addrfrom{Paul A. Thompson} 
%    \adr{PAT}
%    \NewlfmP{leftmarginsize=1.25in} 
%
%    \begin{document}
%    \begin{newlfm}
%       text text text
%    \end{newlfm}
%    \end{document}
%    \end{verbatim}
%
%    \vspace*{-.125in}
%
%    \begin{raggedright}
%    \begin{description}
%    \item \textbf{Letter styles:} |stdletter|, |stdletternofrom|, |busletter|,
%      |busletternofrom| 
%      (\tabpagr{letteropt})
%    \item \textbf{Letter options:} |noaddrfrom|, |printallfrom|, |printallto|,
%      |dateright|, |dateleft|, |datecenter|, |sigright|,
%      |sigleft|, |sigcenter|, |addrtoemail|, |addrtophone|, |addrtofax|,
%      |addrfromemail|, |addrfromphone|, |addrfromfax| 
%      (\tabpagr{letteropt} --- can be specified
%      either in the document-header option block or in the
%      |\newlfmP| command)
%    \item \textbf{Letter date information:} |\dateset|
%    \item \textbf{Memo styles:} |stdmemo|, |fullmemo| (\tabpagr{memoopt})
%    \item \textbf{Memo options:} |memoaddrto|, |memoemailto|, |memophoneto|,
%      |memofaxto|, |memoaddrfrom|, |memoemailfrom|, |memophonefrom|,
%      |memofaxfrom|, |memopagerto|, |memopagerfrom| (\tabpagr{memoopt} --- can be specified
%      either in the letter |\documentclass| option block or in the
%      |\newlfmP| command)
%    \item {\bf{FAX styles:}} |faxheaderpage|, |faxhba|, |faxhbb| (\tabpagr{faxopt})
%    \item {\bf{FAX options:}} |faxblocka|, |faxblockb| (\tabpagr{faxopt} --- can be specified
%      either in the letter |\documentclass| option block or in the
%      |\newlfmP| command)
%    \item {{\bf Press Release Styles:}} |stdpressrelease|%
%    \item {{\bf Press Release Options:}} |dspace|,|sspace|%
%    \item {{\bf Cellophane-window envelopes:}} |cellowindow|%
%    \item {{\bf Cellophane-window options:}} |cellodown|,|celloleft|,|cellowidth|,|celloheight|
%    \item {\bf{Address item order options:}} |orderdatefromto|,
%      |orderfromdateto|, |orderfromtodate| (can be specified
%      either in the document-header option block or in the
%      |\newlfmP| command)
%    \item {\textbf{\texttt{envlab}  options:}} |useenvlab|
%    \item {\bf{To-Address commands:}} |\nameto|, |\addressto|, |\phoneto|,
%      |\phonebto|, |\phonecto|, |\phonedto|, |\faxto|, |\emailto|, |\greetto|,
%      |\setadrto{\adrXXX}|, |\setadrto{\fixadr{XXX}}| |\regarding|,
%      |\fnameto|, |\lnameto|, |\addrt|, 
%    \item {\bf{From-Address commands:}} |\namefrom|, |\name|, |\address|,
%      |\addrfrom|, |\phone|, |\phonefrom|, |\phonebfrom|, |\phonecfrom|,
%      |\phonedfrom|, |\fax|, |\faxfrom|, |\emailfrom|,
%      |\setadrfr{\adrXXX}|, |\setadrfr{\fixadr{XXX}}|, |\fnamefrom|, |\lnamefrom|, |\addrf|
%    \item {{\bf Press Release commands:}} |\byline|, |\headline|,
%      |\release|, |\shorthead|
%    \item {\bf{End of letter commands:}} |\cclist|, |\encllist|, |\initials|,
%      |\faxmssg|, |\psitem|, |\ppsitem|, |\pppsitem|, |\re|, |\subre|
%      (\tabpagr{eolc})
%    \item {\bf{Signature commands:}} |\signature|, |\signame|, |\siglist|, |\sigacross|,
%      |\closeline|, |\sigtr|
%      (\tabpagr{sigsc})
%    \item {\bf{Horizontal spacing and sizing commands:}} 
%      |\unprleft|, |\leftmarginskipleft|, |\leftmarginsize|,
%      |\leftmarginskipright|, |\textwidth|, |\rightmarginsize|,
%      |\unprright|, |MinLeft|, |MinRight|, |minleft|, |minright|
%      (\tabpagr{spacehor} --- can be specified
%      either in the letter itself or in the
%      |\newlfmP| command; when specified in the NewlfmP statement, they are
%      specified without the ``|\|'')
%    \item {\bf{Vertical spacing and sizing commands:}} 
%      |\unprtop|, |\topmarginskip|, |\headermarginsize|, |\headermarginskip|,
%      |\leftmargintopdist|, |\rightmargintopdist|, |\memoskipbefore|, |\memoskipafter|,
%      |\dateskipbefore|, |\dateskipafter|, |\addrfromskipbefore|,
%      |\addrfromskipafter|, |\addrtoskipbefore|, |\addrtoskipafter|,
%      |\greettoskipbefore|, |\greettoskipafter|, |\textheight|,
%      |\sigskipbefore|, |\sigsize|, |\sigskipafter|,|\sigskipcolumn|,
%      |\sigskiprow|, |\postsigskipbefore|,
%      |\postsigskipafter|, |\bottommarginskip|, |\footermarginsize|,
%      |\unprbottom|, |MinHead|, |MinFoot|, |minhead|, |minfoot|
%      (\tabpagr{spacever} --- can be specified
%      either in the letter itself or in the
%      |\newlfmP| command; when specified in the NewlfmP statement, they are
%      specified without the ``|\|'')
%    \item {\bf{Wrapper commands:}} |\makeaddress{XXX}{xxx info}| creates a
%      command |\adrXXX| containing the ``xxx info'', 
%      |\makeletterhead{XXX}{stuff}| creates a command |\lthXXX| containing
%      ``stuff'' and |\makesignature{XXX}{sigstuff}| 
%      creates a command |\sigXXX| with ``sigstuff'' (\pagex{wrapc}).
%    \item {\bf{Form letters:}}
%      |\letterbody| sets the body of a form letter, while |\doletter{zz}|
%      prints the letter, |zz| is any command to be issued before the
%      letter, which will usually be a wrapper command name.
%    \item {\bf{Letterhead commands:}}  |\Lfooter|, |\Cfooter|, |\Rfooter|,
%      |\Lheader|, |\Cheader|, |\Rheader|, |\Lmargin|, |\Rmargin|,
%      |\lfooter|, |\cfooter|, |\rfooter|, |\lheader|, |\cheader|,
%      |\rheader|, |\lmargin|, |\rmargin|, |\letrh| (\tabpagr{letterhopt})
%    \item {\bf{Blanking options:}} |blankheader|, |blankfooter|,
%      |blankrmargin|, |blanklmargin|, |Blankheader|, |Blankfooter|,
%      |Blankrmargin|, |Blanklmargin|, |blankall|, |Blankall|,
%      |Blank|                    (\tabpagr{blankopt})
%    \item {\textbf{Printing commands:}} |\printnameto|, |\printaddrto|,
%      |\printphoneto|, |\printphoneato|, |\printphonebto|, |\printphonecto|,
%      |\printphonedto|, |\printphoneoto|, |\printphonehto|, |\printpagerto|,
%      |\printfaxto|, |\printgreetto|, |\printemailto|, |\printemailbto|,
%      |\printemailcto|, |\printlnameto|, |\printfnameto|, |\printnamefrom|,
%      |\printaddrfrom|, |\printphonefrom|, |\printphoneafrom|,
%      |\printphonebfrom|, |\printphonecfrom|, |\printphonedfrom|,
%      |\printphoneofrom|, |\printphonehfrom|, |\printpagerfrom|,
%      |\printfaxfrom|, |\printgreetfrom|, |\printemailfrom|,
%      |\printemailbfrom|, |\printemailcfrom|, |\printlnamefrom|,
%      |\printfnamefrom| (\tabpagr{printcom})
%    \end{description}
%    \end{raggedright} 
%
%    \newpage
%
% \StopEventually
%
%    \section{Code (excluded from manual)}
%    \begin{macrocode}
%<*package>
%    \end{macrocode}
%    \subsection{Preliminaries}
%    In this part we define a few commands that are used later on.
%
%    These commands are used for printing control during debugging.
%    \begin{macrocode}
\def\ifta{0}\def\iftb{0}%
\def\txa#1{\ifthenelse{\equal{\ifta}{1}}{\typeout{#1}}{}}%
\def\txb#1{}%\ifthenelse{\iftb=1}{\typeout{#1}}{}}%
%    \end{macrocode}
%
%    A number of packages are needed by this approach to letter construction.
%    These are entered here.  These packages include the following:
%    \begin{itemize*}
%    \item |keyval|: Read in key values from a single or multiple lines 
%    \item |ifthen|: Good control over conditional logic --- this actually
%                   was included above so that the boolean constructions
%                   can be used during the class file 
%    \item |setdim|:  Sets page dimensions -- similar to |chngpage|
%    \item |fancyhdr|: Control over header and footer, and several structures
%                   at one time  
%    \item |envlab|: Prints envelopes and labels in flexible ways 
%    \item |calc|:  Better arithmatic in the program
%    \item |graphicx|: External handling of graphical \info
%    \end{itemize*}
%
%    \begin{macrocode}
\RequirePackage{keyval}%
\RequirePackage{ifthen}[1997/11/02]%
\RequirePackage{ifpdf}%
\RequirePackage{setdim}%
\RequirePackage{fancyhdr}%
\RequirePackage{eso-pic}%
\RequirePackage{setspace}%
\RequirePackage{lastpage}%
\@ifundefined{ps@@empty}{%
  \ClassError{newlfm}{Version of fancyhdr.sty is not current. \MessageBreak
    Please obtain a recent copy of fancyhdr.sty (Version 1.99d or later)
    from CTAN.}  {Go to CTAN and download the current version of
    fancyhdr.sty}}{}
\RequirePackage{calc}[1997/11/11]%
\RequirePackage{graphicx}[1997/06/09]%
\RequirePackage{rotating}[1997/06/09]%
%    \end{macrocode}
%    \paragraph{\texttt{newlength} definitions:}  
%    Begin by defining all newlength commands here:
%    \begin{macrocode}
\newlength{\@addr@fr@sk@b}  \newlength{\@addr@fr@sk@a}      \newlength{\@addr@to@sk@b}% 
\newlength{\@addr@to@sk@a}  \newlength{\@blka@b}            \newlength{\@blka@a}%
\newlength{\@blkb@b}        \newlength{\@blkb@a}            \newlength{\@blkc@b}%
\newlength{\@blkc@a}        \newlength{\@caption@skip@above}\newlength{\@caption@skip@below}%
\newlength{\@cello@h}       \newlength{\@cello@w}           \newlength{\@cello@d}%
\newlength{\@cello@l}       \newlength{\@dt@sk@b}           \newlength{\@dt@sk@a}%
\newlength{\@Dth@H@L}       \newlength{\@Dth@H@C}           \newlength{\@Dth@H@R}%
\newlength{\@Dth@F@L}       \newlength{\@Dth@F@C}           \newlength{\@Dth@F@R}%
\newlength{\@Dth@h@l}       \newlength{\@Dth@h@c}           \newlength{\@Dth@h@r}%
\newlength{\@Dth@f@l}       \newlength{\@Dth@f@c}           \newlength{\@Dth@f@r}%
\newlength{\@greet@to@sk@b} \newlength{\@greet@to@sk@a}     \newlength{\@Hgt@Head}%
\newlength{\@Hrw}           \newlength{\@hrw}               \newlength{\@extr@hor}%
\newlength{\@Frw}           \newlength{\@frw}%
\newlength{\@Hgt@Foot}      \newlength{\@Hgt@head}          \newlength{\@Hgt@foot}%
\newlength{\@Hgt@H@L}       \newlength{\@Hgt@H@C}           \newlength{\@Hgt@H@R}%
\newlength{\@Hgt@F@L}       \newlength{\@Hgt@F@C}           \newlength{\@Hgt@F@R}%
\newlength{\@Hgt@h@l}       \newlength{\@Hgt@h@c}           \newlength{\@Hgt@h@r}%
\newlength{\@Hgt@f@l}       \newlength{\@Hgt@f@c}           \newlength{\@Hgt@f@r}%
\newlength{\@lab@bl}        \newlength{\@lab@pl}            \newlength{\@lab@pw}%
\newlength{\@lab@bh}        \newlength{\@lab@bw}            \newlength{\@lab@th}%
\newlength{\@lab@lm}        \newlength{\@marg@lt}           \newlength{\@marg@rt}%
\newlength{\@marg@tp}       \newlength{\@marg@bt}           \newlength{\@marg@tp@a}%
\newlength{\@marg@bt@a}     \newlength{\@marg@tp@b}         \newlength{\@marg@tp@s}%
\newlength{\@marg@bt@b}     \newlength{\@marg@lt@r}         \newlength{\@marg@lt@l}%
\newlength{\@marg@rt@r}     \newlength{\@marg@rt@l}         \newlength{\@marg@lt@tp@d}%
\newlength{\@marg@rt@tp@d}  \newlength{\@Min@Hgt@Head}      \newlength{\@Min@Hgt@head}%
\newlength{\@Min@Hgt@Foot}  \newlength{\@Min@Hgt@foot}      \newlength{\@Min@Hgt@Right}%
\newlength{\@Min@Hgt@right} \newlength{\@Min@Hgt@Left}      \newlength{\@Min@Hgt@left}%
\newlength{\@Plg}           \newlength{\@Pwd}               \newlength{\@plg}%
\newlength{\@pwd}           \newlength{\@post@sig@sp@a}     \newlength{\@post@sig@sp@b}%
\newlength{\@pre@memo@sp}   \newlength{\@post@memo@sp}      \newlength{\@sig@sk@b}%
\newlength{\@sig@sk@a}      \newlength{\@sig@sp}            \newlength{\@text@width}%
\newlength{\@sig@sk@c}      \newlength{\@sig@sk@r}%
\newlength{\@stock@height}  \newlength{\@stock@width}%
\newlength{\@fax@height}    \newlength{\@fax@width}%
\newlength{\@text@height}   \newlength{\@unpr@tp}           \newlength{\@unpr@bm}%
\newlength{\@unpr@rt}       \newlength{\@unpr@lt}           \newlength{\@util}%
\newlength{\@utila}         \newlength{\@utilb}             \newlength{\@utilc}%
\newlength{\@utild}         \newlength{\@utile}% 
\newlength{\@xda}           \newlength{\@xdb}               \newlength{\@xdc}%
\newlength{\@xdd}           \newlength{\@xde}               \newlength{\@xdf}%
\newlength{\@xdg}           \newlength{\@xdh}               \newlength{\@xdi}%
\newlength{\extrarulesep}%
%    \end{macrocode}%
%    \paragraph{\texttt{newlength} default values:}%
%    Begin by defining all newlength commands here:%
%    \begin{macrocode}%
\setlength{\@cello@h}{1in}   \setlength{\@cello@w}{3in}%
\setlength{\@cello@d}{2.5in} \setlength{\@cello@l}{1in}%
\setlength{\@marg@tp@s}{0in} \setlength{\@marg@bt@b}{0in}%
\setlength{\@unpr@tp}{0in}   \setlength{\@unpr@bm}{0in}%
\setlength{\@unpr@rt}{0in}   \setlength{\@unpr@lt}{0in}%
\setlength{\@marg@lt@r}{0in} \setlength{\@marg@lt@l}{0in}%
\setlength{\@marg@rt@r}{0in} \setlength{\@marg@lt}{1in}%
\setlength{\@marg@rt}{1in}   \setlength{\@marg@tp}{1in}%
\setlength{\@marg@bt}{1in}   \setlength{\@marg@tp@a}{0in}%
\setlength{\@marg@bt@a}{0in} \setlength{\@marg@tp@b}{0in}%
\setlength{\@marg@rt@l}{0in} \setlength{\@marg@lt@tp@d}{0pt}%
\setlength{\@marg@rt@tp@d}{0pt}%
\setlength{\@Hrw}{1pt}       \setlength{\@hrw}{1pt}%
\setlength{\@Frw}{1pt}       \setlength{\@frw}{1pt}%
\setlength{\@sig@sk@a}{5pt}  \setlength{\@sig@sk@b}{5pt}
\setlength{\@sig@sk@c}{5pt}  \setlength{\@sig@sk@r}{5pt}%
\setlength{\@fax@height}{720pt}\setlength{\@fax@width}{432pt}%
\setlength{\@extr@hor}{0pt}%
%    \end{macrocode}%
%    \paragraph{\texttt{newsavebox} definitions:}%
%    Define all newsavebox commands here:%
%    \begin{macrocode}%
\newsavebox{\@sig@box@a}\newsavebox{\b@addr@fr}\newsavebox{\b@addr@to}%
\newsavebox{\@x@c} \newsavebox{\@x@l}  \newsavebox{\@x@r} \newsavebox{\@xdateb}%
\newsavebox{\fba}  \newsavebox{\adrfr} \newsavebox{\adrto} \newsavebox{\@sp@box}%
\newsavebox{\@sig@box@b}\newsavebox{\@sig@box@c}\newsavebox{\@sig@box@d}%
\newsavebox{\@sig@box@e}\newsavebox{\@sig@box@f}\newsavebox{\@sig@box@g}%
\newsavebox{\@sig@box@h}\newsavebox{\@sig@box@i}\newsavebox{\@sig@box@j}%
\newsavebox{\@hblk@aa}\newsavebox{\@hblk@ab}\newsavebox{\@hblk@ac}%
\newsavebox{\@hblk@ba}\newsavebox{\@hblk@bb}\newsavebox{\@hblk@bc}%
\newsavebox{\@hblk@ca}\newsavebox{\@hblk@cb}\newsavebox{\@hblk@cc}%
\newsavebox{\@hblk@da}\newsavebox{\@hblk@db}\newsavebox{\@hblk@dc}%
\newsavebox{\@hblk@ea}\newsavebox{\@hblk@eb}\newsavebox{\@hblk@ec}%
\newsavebox{\@hblk@fa}\newsavebox{\@hblk@fb}\newsavebox{\@hblk@fc}%
\newsavebox{\@hblk@ga}\newsavebox{\@hblk@gb}\newsavebox{\@hblk@gc}%
\newsavebox{\@hblk@ha}\newsavebox{\@hblk@hb}\newsavebox{\@hblk@hc}%
\newsavebox{\@hblk@ia}\newsavebox{\@hblk@ib}\newsavebox{\@hblk@ic}%
\newlength{\@hblk@a@bef} \newlength{\@hblk@a@aft}%
\newlength{\@hblk@b@bef} \newlength{\@hblk@b@aft}% 
\newlength{\@hblk@c@bef} \newlength{\@hblk@c@aft}% 
\newlength{\@hblk@d@bef} \newlength{\@hblk@d@aft}% 
\newlength{\@hblk@e@bef} \newlength{\@hblk@e@aft}% 
\newlength{\@hblk@f@bef} \newlength{\@hblk@f@aft}% 
\newlength{\@hblk@g@bef} \newlength{\@hblk@g@aft}% 
\newlength{\@hblk@h@bef} \newlength{\@hblk@h@aft}% 
\newlength{\@hblk@i@bef} \newlength{\@hblk@i@aft}% 
\setlength{\@hblk@a@bef}{0pt} \setlength{\@hblk@a@aft}{0pt}%
\setlength{\@hblk@b@bef}{0pt} \setlength{\@hblk@b@aft}{0pt}%
\setlength{\@hblk@c@bef}{0pt} \setlength{\@hblk@c@aft}{0pt}%
\setlength{\@hblk@d@bef}{0pt} \setlength{\@hblk@d@aft}{0pt}%
\setlength{\@hblk@e@bef}{0pt} \setlength{\@hblk@e@aft}{0pt}%
\setlength{\@hblk@f@bef}{0pt} \setlength{\@hblk@f@aft}{0pt}%
\setlength{\@hblk@g@bef}{0pt} \setlength{\@hblk@g@aft}{0pt}%
\setlength{\@hblk@h@bef}{0pt} \setlength{\@hblk@h@aft}{0pt}%
\setlength{\@hblk@i@bef}{0pt} \setlength{\@hblk@i@aft}{0pt}%
%    \end{macrocode}%
%    \paragraph{\texttt{newcounter} definitions:}%
%    Define all newcounter commands here:%
%    \begin{macrocode}%
\newcounter{@c@pos}    \newcounter{figure} \newcounter{table}%
\newcounter{@sig@tot}  \newcounter{@lab@tot@row}%
\newcounter{@lab@tot@col} \newcounter{@lab@cnt@row} \newcounter{@lab@cnt@col}%
\newcount\@nlfm@addr%
\newcount\@nlfm@util%
\newcount\@nlfm@uta%
\newcount\@nlfm@utb%
%    \end{macrocode}%
%    \paragraph{\texttt{newboolean} definitions:}%
%    Boolean variables are defined here.  Package |ifthen| defines%
%    |\newboolean|.  Booleans are a good approach for simple decision-making support.  In%
%    many cases, a default value is set after the boolean is declared.%
%    \begin{macrocode}%
\newboolean{@af@c}%
\newboolean{@af@l}%
\newboolean{@af@p}%
\newboolean{@addr@fr@e}    \setboolean{@addr@fr@e}{false}%
\newboolean{@addr@fr@f}    \setboolean{@addr@fr@f}{false}%
\newboolean{@addr@fr@t}    \setboolean{@addr@fr@t}{false}%
\newboolean{@addr@swtch}   \setboolean{@addr@swtch}{true}%
\newboolean{@at@c}%
\newboolean{@at@l}%
\newboolean{@at@p}%
\newboolean{@addr@to@f}    \setboolean{@addr@to@f}{false}%
\newboolean{@addr@to@e}    \setboolean{@addr@to@e}{false}%
\newboolean{@addr@to@t}    \setboolean{@addr@to@t}{false}%
\newboolean{@b@h}          \setboolean{@b@h}{false}%
\newboolean{@b@f}          \setboolean{@b@f}{false}%
\newboolean{@b@r}          \setboolean{@b@r}{false}%
\newboolean{@b@l}          \setboolean{@b@l}{false}%
\newboolean{@B@h}          \setboolean{@B@h}{false}%
\newboolean{@B@f}          \setboolean{@B@f}{false}%
\newboolean{@B@r}          \setboolean{@B@r}{false}%
\newboolean{@B@l}          \setboolean{@B@l}{false}%
\newboolean{@bg@use}       \setboolean{@bg@use}{false}%
\newboolean{@Bg@use}       \setboolean{@Bg@use}{false}%
\newboolean{@cello@win}    \setboolean{@cello@win}{false}%
\newboolean{@cf@use}       \setboolean{@cf@use}{false}%
\newboolean{@Ch@use}       \setboolean{@Ch@use}{false}%
\newboolean{@Cf@use}       \setboolean{@Cf@use}{false}%
\newboolean{@COf@use}      \setboolean{@COf@use}{false}%
\newboolean{@CUh@use}      \setboolean{@CUh@use}{false}%
\newboolean{@ch@use}       \setboolean{@ch@use}{false}%
\newboolean{@do@any}%
\newboolean{@dt@l}         \setboolean{@dt@l}{true}%
\newboolean{@dt@c}         \setboolean{@dt@c}{false}%
\newboolean{@dt@p}%
\newboolean{@env@open}     \setboolean{@env@open}{false}%
\newboolean{@env@close}    \setboolean{@env@close}{false}%
\newboolean{@fax@m@run}    \setboolean{@fax@m@run}{false}%
\newboolean{@fax@hdr@pg}%
\newboolean{@fax@RA}%
\newboolean{@fax@RU}%
\newboolean{@fax@bla}      \setboolean{@fax@bla}{true}%
\newboolean{@fax@blb}      \setboolean{@fax@blb}{false}%
\newboolean{@fl}           \setboolean{@fl}{true}%
\newboolean{@greet@p}%
\newboolean{@greet@l}%
\newboolean{@hblk@a}       \setboolean{@hblk@a}{false}%
\newboolean{@hblk@b}       \setboolean{@hblk@b}{false}%
\newboolean{@hblk@c}       \setboolean{@hblk@c}{false}%
\newboolean{@hblk@d}       \setboolean{@hblk@d}{false}%
\newboolean{@hblk@e}       \setboolean{@hblk@e}{false}%
\newboolean{@hblk@f}       \setboolean{@hblk@f}{false}%
\newboolean{@hblk@g}       \setboolean{@hblk@g}{false}%
\newboolean{@hblk@h}       \setboolean{@hblk@h}{false}%
\newboolean{@hblk@i}       \setboolean{@hblk@i}{false}%
\newboolean{@hl}           \setboolean{@hl}{true}%
\newboolean{@in@tab}%
\newboolean{@in@makeenv}   \setboolean{@in@makeenv}{false}%
\newboolean{@l@am}         \setboolean{@l@am}{true}%
\newboolean{@l@en}         \setboolean{@l@en}{false}%
\newboolean{@l@ge}         \setboolean{@l@ge}{false}%
\newboolean{@l@fr}         \setboolean{@l@fr}{false}%
\newboolean{@l@ot}         \setboolean{@l@ot}{false}%
\newboolean{@l@pi}         \setboolean{@l@pi}{false}%
\newboolean{@lab@t}        \setboolean{@lab@t}{true}%
\newboolean{@lab@cft}      \setboolean{@lab@cft}{false}%
\newboolean{@lab@rft}      \setboolean{@lab@rft}{false}%
\newboolean{@Lf@use}       \setboolean{@Lf@use}{false}%
\newboolean{@lf@use}       \setboolean{@lf@use}{false}%
\newboolean{@Lh@use}       \setboolean{@Lh@use}{false}%
\newboolean{@lh@use}       \setboolean{@lh@use}{false}%
\newboolean{@LOf@use}      \setboolean{@LOf@use}{false}%
\newboolean{@LUh@use}      \setboolean{@LUh@use}{false}%
\newboolean{@marg@lt@fl@tp}\setboolean{@marg@lt@fl@tp}{false}%
\newboolean{@marg@rt@fl@tp}\setboolean{@marg@rt@fl@tp}{false}%
\newboolean{@marg@luse}    \setboolean{@marg@luse}{false}%
\newboolean{@marg@ruse}    \setboolean{@marg@ruse}{false}%
\newboolean{@marg@Luse}    \setboolean{@marg@Luse}{false}%
\newboolean{@marg@Ruse}    \setboolean{@marg@Ruse}{false}%
\newboolean{@memo@bl}%
\newboolean{@memo@a}%
\newboolean{@memo@b}       \setboolean{@memo@b}{false}%
\newboolean{@memo@c}       \setboolean{@memo@c}{false}%
\newboolean{@memo@d}       \setboolean{@memo@d}{false}%
\newboolean{@memo@e}       \setboolean{@memo@e}{true}%
\newboolean{@memo@f}       \setboolean{@memo@f}{true}%
\newboolean{@memo@g}       \setboolean{@memo@g}{true}%
\newboolean{@memo@h}       \setboolean{@memo@h}{false}%
\newboolean{@memo@i}       \setboolean{@memo@i}{false}%
\newboolean{@memo@j}       \setboolean{@memo@j}{false}%
\newboolean{@memo@k}       \setboolean{@memo@k}{false}%
\newboolean{@memo@l}       \setboolean{@memo@l}{false}%
\newboolean{@memo@m}       \setboolean{@memo@m}{false}%
\newboolean{@memo@n}       \setboolean{@memo@n}{false}%
\newboolean{@no@cen}       \setboolean{@no@cen}{false}%
\newboolean{@no@spc}       \setboolean{@no@spc}{false}%
\newboolean{@prnt@frm}     \setboolean{@prnt@frm}{false}%
\newboolean{@ROf@use}      \setboolean{@ROf@use}{false}%
\newboolean{@Rf@use}       \setboolean{@Rf@use}{false}%
\newboolean{@rf@use}       \setboolean{@rf@use}{false}%
\newboolean{@Rh@use}       \setboolean{@Rh@use}{false}%
\newboolean{@RUh@use}      \setboolean{@RUh@use}{false}%
\newboolean{@rh@use}       \setboolean{@rh@use}{false}%
\newboolean{@over@all}     \setboolean{@over@all}{true}%
\newboolean{@over@setto}   \setboolean{@over@setto}{false}%
\newboolean{@over@setfr}   \setboolean{@over@setfr}{false}%
\newboolean{@over@sigbl}   \setboolean{@over@sigbl}{false}%
\newboolean{@pt@regard}    \setboolean{@pt@regard}{false}%
\newboolean{@s@b@s}        \setboolean{@s@b@s}{false}%
\newboolean{@set@env}      \setboolean{@set@env}{false}%
\newboolean{@sig@p}%
\newboolean{@sig@mp}%
\newboolean{@sig@l}        \setboolean{@sig@l}{true}%
\newboolean{@sig@c}        \setboolean{@sig@l}{false}%
\newboolean{@space@d}      \setboolean{@space@d}{true}
\newboolean{@space@s}      \setboolean{@space@s}{false}
\newboolean{@mult@sig}     \setboolean{@mult@sig}{false}%
\newboolean{@use@sig}%
\newboolean{@use@close}%
\newboolean{@use@sig@nm}%
\newboolean{@use@all@fr}%
\newboolean{@use@all@to}%
\newboolean{@use@envlab}   \setboolean{@use@envlab}{false}%
\newboolean{@ztila}        \newboolean{@ztilb}%
\newboolean{@pr@p}         \setboolean{@pr@p}{false}%
\newboolean{@pr@by}
%    \end{macrocode}%
%
%    \subsection{newlfm commands}%
%    Now begin defining new commands.%
%    \paragraph{Ordering of date, from-address and to-address:}%
%    These commands allow the ordering of date, to-block and from-block:%
%    \begin{macrocode}%
\def\@d@pos#1{\def\@intd@pos{#1}}%
\def\@t@pos#1{\def\@intt@pos{#1}}%
\def\@f@pos#1{\def\@intf@pos{#1}}%
%    \end{macrocode}%
%
%    \paragraph{\texttt{keyval} processing:}  When using the |keyval|%
%    approach to option specification, something similar to the next code%
%    must be used.  At this point, this is not 100 \% correct, and so it%
%    will be altered as soon as I can figger it out.%
%    \begin{macrocode}%
\def\newlfmParam{\@ifnextchar[%]
\newlx@i{\newlx@i[]}}%
\def\newlx@i[#1]{{\setkeys{ov}{#1}}}%
\def\Dimens{\@ifnextchar[%]%
\Dimens@i{\Dimens@i[]}}%
\def\Dimens@i[#1]{{\setkeys{ov}{#1}}}%
\def\Language{\@ifnextchar[%]%
\Lang@i{\Lang@i[]}}%
\def\Lang@i[#1]{{\setkeys{ov}{#1}}}%
\def\MemoParam{\@ifnextchar[%]%
\MemoP@i{\MemoP@i[]}}%
\def\MemoP@i[#1]{{\setkeys{ov}{#1}}}%
\def\LetterParam{\@ifnextchar[%]%
\LetrP@i{\LetrP@i[]}}%
\def\LetrP@i[#1]{{\setkeys{ov}{#1}}}%
\def\FAZParam{\@ifnextchar[%]%
\FAXP@i{\FAXP@i[]}}%
\def\FAXP@i[#1]{{\setkeys{ov}{#1}}}%
\def\LetterP#1{\setkeys{ov}{#1}}%
\def\newlfmP#1{\setkeys{ov}{#1}}%
\def\LanguageP#1{\setkeys{ov}{#1}}%
\def\FAXP#1{\setkeys{ov}{#1}}%
\def\DimensP#1{\setkeys{ov}{#1}}%
\def\MemoP#1{\setkeys{ov}{#1}}%
\def\iffixt#1#2{\ifthenelse{\equal{#1}{true}}{\setboolean{#2}{true}}{}}%
\def\iffixf#1#2{\ifthenelse{\equal{#1}{true}}{\setboolean{#2}{false}}{}}%
\def\iffixq#1#2{\ifthenelse{\equal{#1}{true}}{#2}{}}%
%    \end{macrocode}%
%
%    \paragraph{Language option definitions:}%
%    These options define the language for the letter.  These macros are not%
%    frequently manipulated.  Basically, the strings defined here%
%    set up the printing of structural elements of a memo or letter, such as%
%    the ``From'' or ``To'' strings.%
%    These terms are used at various points in printing letters and memos.%
%    They are American terms; your mileage may vary.  Inclusion of other%
%    terms is encouraged, especially when another language group is served.%
%    \begin{macrocode}%
\def\DatePhrase#1{\def\@date@phr{#1}}%
\def\PhrFAXcovp#1{\def\@fax@cover@line{#1}}%
\def\PhrFAXpgcnt#1{\def\@fax@page@count{#1}}%
\def\PhrEmail#1{\def\@email@phr{#1}}%
\def\PhrFax#1{\def\@fax@phr{#1}}%
\def\PhrPager#1{\def\@pager@phr{#1}}%
\def\PhrDocument#1{\def\@doc@phr{#1}}%
\def\PhrPhone#1{\def\@phn@phr{#1}}%
\def\PhrRe#1{\def\@re@phr{#1}}%
\def\PhrSubre#1{\def\@subre@phr{#1}}%
\def\PhrCc#1{\def\@cc@phr{#1}}%
\def\PhrPs#1{\def\@ps@phr{#1}}%
\def\PhrMessage#1{\def\@m@phr{#1}}%
\def\PhrPps#1{\def\@pps@phr{#1}}%
\def\PhrPpps#1{\def\@ppps@phr{#1}}%
\def\PhrEncl#1{\def\@encl@phr{#1}}%
\def\PhrTo#1{\def\@hnto@phr{#1}}%
\def\PhrFrom#1{\def\@hnfr@phr{#1}}%
\def\PhrRegard#1{\def\@regard@phr{#1}}%
\def\PhrContact#1{\def\@contact@phr{#1}}%
\def\PhrRelease#1{\def\@release@phr{#1}}%
\def\PhrMore#1{\def\@more@phr{#1}}%
\def\PhrPRend#1{\def\@PRend@phr{#1}}%
\def\lth{}\def\sig{}\def\adr{}%
\def\letrh#1{\def\@ltr@head{#1}}%
\define@key{ov}{letrh}{\def\@ltr@head{#1}}%
\def\@adr@to{}\def\@adr@fr{}\def\@ltr@head{}\def\@sig@blok{}%
\def\addrt#1{\def\@adr@to{#1}\setboolean{@over@setto}{true}}%
\define@key{ov}{addrt}{\def\@adr@to{#1}\setboolean{@over@setto}{true}}%
\def\addrf#1{\def\@adr@fr{#1}\setboolean{@over@setfr}{true}}%
\define@key{ov}{addrf}{\def\@adr@fr{#1}\setboolean{@over@setfr}{true}}%
\def\sigtr#1{\def\@sig@blok{#1}\setboolean{@over@sigbl}{true}}%
\define@key{ov}{sigtr}{\def\@sig@blok{#1}\setboolean{@over@sigbl}{true}}%
\def\MinHead#1{\setlength{\@Min@Hgt@Head}{#1}}%
\define@key{ov}{MinHead}{\setlength{\@Min@Hgt@Head}{#1}}%
\def\minhead#1{\setlength{\@Min@Hgt@head}{#1}}%
\define@key{ov}{minhead}{\setlength{\@Min@Hgt@head}{#1}}%
\def\MinLeft#1{\setlength{\@Min@Hgt@Left}{#1}}%
\define@key{ov}{MinLeft}{\setlength{\@Min@Hgt@Left}{#1}}%
\def\minleft#1{\setlength{\@Min@Hgt@left}{#1}}%
\define@key{ov}{minleft}{\setlength{\@Min@Hgt@left}{#1}}%
\def\MinFoot#1{\setlength{\@Min@Hgt@Foot}{#1}}%
\define@key{ov}{MinFoot}{\setlength{\@Min@Hgt@Foot}{#1}}%       
\def\minfoot#1{\setlength{\@Min@Hgt@foot}{#1}}%
\define@key{ov}{minfoot}{\setlength{\@Min@Hgt@foot}{#1}}%       
\def\MinRight#1{\setlength{\@Min@Hgt@Right}{#1}}%
\define@key{ov}{MinRight}{\setlength{\@Min@Hgt@Right}{#1}}%       
\def\minright#1{\setlength{\@Min@Hgt@right}{#1}}%
\define@key{ov}{minright}{\setlength{\@Min@Hgt@right}{#1}}%       
\def\@def@l{american}%
\def\@am@phr{%
  \DatePhrase{Date} \PhrFAXcovp{FAX Cover Page} \PhrFAXpgcnt{FAX Page Count}%
  \PhrFax{FAX}      \PhrPager{Pager}            \PhrEmail{E-mail}%
  \PhrDocument{Document}  \PhrPhone{Telephone}  \PhrRe{Re}%
  \PhrSubre{\ensuremath{\mathrm{Re}_2}}         \PhrCc{cc}%
  \PhrPs{Ps}        \PhrMessage{Message}        \PhrPps{Pps}%
  \PhrPpps{Ppps}    \PhrEncl{Encl}              \PhrPager{Page}%
  \PhrTo{To}        \PhrFrom{From}              \PhrRegard{Regarding}%
  \PhrContact{Contact} \PhrRelease{For Immediate Release}%
  \PhrMore{--- more ---}  \PhrPRend{\# \# \#}%
}
\InputIfFileExists{extracd.tex}%
  {\typeout{Reading alternative macro definitions from extracd.tex}}%
  {\typeout{All language information must be in newlfm.cls}}%
\DeclareOption{french}%
{\def\@def@l{french}\setboolean{@l@fr}{true} \@fr@phr}%
\define@key{ov}{french}[true]%
{\iffixq{#1}{\def\@def@l{french}\setboolean{@l@fr}{true} \@fr@phr}}%
\DeclareOption{german}{\def\@def@l{german}\setboolean{@l@ge}{true} \@gr@phr}%
\define@key{ov}{german}[true]%
{\iffixq{#1}{\def\@def@l{german}\setboolean{@l@ge}{true} \@gr@phr}}%
\DeclareOption{american}%
{\def\@def@l{american}\setboolean{@l@am}{true} \@am@phr}%
\define@key{ov}{american}[true]%
{\iffixq{#1}{\def\@def@l{american}\setboolean{@l@am}{true} \@am@phr}}%
\DeclareOption{english}%
{\def\@def@l{english}\setboolean{@l@en}{true} \@en@phr}%
\define@key{ov}{english}[true]%
{\iffixq{#1}{\def\@def@l{english}\setboolean{@l@en}{true} \@en@phr}}%
\DeclareOption{othlang}%
{\renewco@lgnd{\@def@l}{othlang}\setboolean{@l@ot}{true} \@ot@phr}%
\define@key{ov}{othlang}[true]%
{\iffixq{#1}{\def\@def@l{othlang}\setboolean{@l@ot}{true} \@ot@phr}}%
\DeclareOption{piglatin}%
{\def\@def@l{piglatin}\setboolean{@l@pi}{true} \@pl@phr}%
\define@key{ov}{piglatin}[true]%
{\iffixq{#1}{\def\@def@l{piglatin}\setboolean{@l@pi}{true} \@pl@phr}}%
%    \end{macrocode}%
%
% \begin{macro}{Lengths}%
%    Length definitions are set up here.  This is done by setting options mostly.%
%    These commands are either internal (begin with |@|) or user-optional (do%
%    not begin with |@|).  User-optional commands are defined in the text%
%    above. %
%    \begin{macrocode}%
\define@key{ov}{textwidthsize}{\setlength{\@text@width}{#1}}%
\def\textwidthsize#1{\setlength{\@text@width}{#1}}%
\define@key{ov}{textheightsize}{\setlength{\@text@height}{#1}}%
\def\textheightsize#1{\setlength{\@text@height}{#1}}%
\define@key{ov}{bottommarginskip}{\setlength{\@marg@bt@a}{#1}}%
\def\bottommarginskip#1{\setlength{\@marg@bt@a}{#1}}%
\define@key{ov}{bottommarginskipbelow}{\setlength{\@marg@bt@b}{#1}}%
\def\bottommarginskipbelow#1{\setlength{\@marg@bt@b}{#1}}%
\def\topmarginskip#1{\setlength{\@marg@tp@a}{#1}}%
\define@key{ov}{topmarginskip}{\setlength{\@marg@tp@a}{#1}}%
\def\topmarginsize#1{\setlength{\@marg@tp@s}{#1}}%
\define@key{ov}{topmarginsize}{\setlength{\@marg@tp@s}{#1}}%
\def\headermarginskip#1{\setlength{\@marg@tp@b}{#1}}%
\define@key{ov}{headermarginskip}{\setlength{\@marg@tp@b}{#1}}%
\def\rightmarginsize#1{\setlength{\@marg@rt}{#1}}%
\define@key{ov}{rightmarginsize}{\setlength{\@marg@rt}{#1}}%
\def\leftmarginsize#1{\setlength{\@marg@lt}{#1}}%
\define@key{ov}{leftmarginsize}{\setlength{\@marg@lt}{#1}}%
\def\headermarginsize#1{\setlength{\@marg@tp}{#1}}%
\define@key{ov}{headermarginsize}{\setlength{\@marg@tp}{#1}}%
\def\footermarginsize#1{\setlength{\@marg@bt}{#1}}%
\define@key{ov}{footermarginsize}{\setlength{\@marg@bt}{#1}}%
\def\leftmargintopdist#1%
{\setlength{\@marg@lt@tp@d}{#1}\setboolean{@marg@lt@fl@tp}{true}}%
\define@key{ov}{leftmargintopdist}%
{\setlength{\@marg@lt@tp@d}{#1}\setboolean{@marg@lt@fl@tp}{true}}%
\def\rightmargintopdist#1%
{\setlength{\@marg@rt@tp@d}{#1}\setboolean{@marg@rt@fl@tp}{true}}%
\define@key{ov}{rightmargintopdist}%
{\setlength{\@marg@rt@tp@d}{#1}\setboolean{@marg@rt@fl@tp}{true}}%
\define@key{ov}{leftmarginskipleft}%
{\setlength{\@marg@lt@l}{#1}\setboolean{@marg@lt@fl@tp}{false}}%
\def\leftmarginskipleft#1{\setlength{\@marg@lt@l}{#1}}%
\define@key{ov}{rightmarginskipleft}%
{\setlength{\@marg@rt@l}{#1}\setboolean{@marg@lt@fl@tp}{false}}%
\def\rightmarginskipleft#1{\setlength{\@marg@rt@l}{#1}}%
\def\leftmarginskipright#1{\setlength{\@marg@lt@r}{#1}}%
\define@key{ov}{leftmarginskipright}{\setlength{\@marg@lt@r}{#1}}%
\def\rightmarginskipright#1{\setlength{\@marg@rt@r}{#1}}%
\define@key{ov}{rightmarginskipright}{\setlength{\@marg@rt@r}{#1}}%
\def\dateskipbefore#1{\setlength{\@dt@sk@b}{#1}}%
\define@key{ov}{dateskipbefore}{\setlength{\@dt@sk@b}{#1}}%
\def\dateskipafter#1{\setlength{\@dt@sk@a}{#1}}%
\define@key{ov}{dateskipafter}{\setlength{\@dt@sk@a}{#1}}%
\def\addrfromskipafter#1{\setlength{\@addr@fr@sk@a}{#1}}%
\define@key{ov}{addrfromskipafter}{\setlength{\@addr@fr@sk@a}{#1}}%
\def\addrfromskipbefore#1{\setlength{\@addr@fr@sk@b}{#1}}%
\define@key{ov}{addrfromskipbefore}{\setlength{\@addr@fr@sk@b}{#1}}%
\def\addrtoskipafter#1{\setlength{\@addr@to@sk@a}{#1}}%
\define@key{ov}{addrtoskipafter}{\setlength{\@addr@to@sk@a}{#1}}%
\def\addrtoskipbefore#1{\setlength{\@addr@to@sk@b}{#1}}%
\define@key{ov}{addrtoskipbefore}{\setlength{\@addr@to@sk@b}{#1}}%
\def\greettoskipafter#1{\setlength{\@greet@to@sk@a}{#1}}% 
\define@key{ov}{greettoskipafter}{\setlength{\@greet@to@sk@a}{#1}}% 
\def\greettoskipbefore#1{\setlength{\@greet@to@sk@b}{#1}}% 
\define@key{ov}{greettoskipbefore}{\setlength{\@greet@to@sk@b}{#1}}% 
\def\sigskipbefore#1{\setlength{\@sig@sk@b}{#1}}%
\define@key{ov}{sigskipbefore}{\setlength{\@sig@sk@b}{#1}}%
\def\sigskipafter#1{\setlength{\@sig@sk@a}{#1}}%
\define@key{ov}{sigskipafter}{\setlength{\@sig@sk@a}{#1}}%
\def\sigskipcolumn#1{\setlength{\@sig@sk@c}{#1}}%
\define@key{ov}{sigskipcolumn}{\setlength{\@sig@sk@c}{#1}}%
\def\sigskiprow#1{\setlength{\@sig@sk@r}{#1}}%
\define@key{ov}{sigskiprow}{\setlength{\@sig@sk@r}{#1}}%
\def\sigsize#1{\setlength{\@sig@sp}{#1}}%
\define@key{ov}{sigsize}{\setlength{\@sig@sp}{#1}}%
\def\postsigskipafter#1{\setlength{\@post@sig@sp@a}{#1}}% 
\define@key{ov}{postsigskipafter}{\setlength{\@post@sig@sp@a}{#1}}% %
\def\postsigskipbefore#1{\setlength{\@post@sig@sp@b}{#1}}% 
\define@key{ov}{postsigskipbefore}{\setlength{\@post@sig@sp@b}{#1}}% %
\def\memoskipafter#1{\setlength{\@post@memo@sp}{#1}}%
\define@key{ov}{memoskipafter}{\setlength{\@post@memo@sp}{#1}}%
\def\memoskipbefore#1{\setlength{\@pre@memo@sp}{#1}}%
\define@key{ov}{memoskipbefore}{\setlength{\@pre@memo@sp}{#1}}%
\def\unprtop#1{\setlength{\@unpr@tp}{#1}}
\define@key{ov}{unprtop}{\setlength{\@unpr@tp}{#1}}%
\def\unprbottom#1{\setlength{\@unpr@bm}{#1}}
\define@key{ov}{unprbottom}{\setlength{\@unpr@bm}{#1}}%
\def\unprright#1{\setlength{\@unpr@rt}{#1}}%
\define@key{ov}{unprright}{\setlength{\@unpr@rt}{#1}}%
\def\unprleft#1{\setlength{\@unpr@lt}{#1}}
\define@key{ov}{unprleft}{\setlength{\@unpr@lt}{#1}}%
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{Memos}
%    Memo definitions are set up here.  This is done by setting options
%    (for the options block in the |\documentclass| statement) or by
%    entering them into the |MemoParam| statement.
%    In the current approach to |newlfm|, both keyval and class option
%    approaches are maintained for all commands. This requires that all
%    options be processed both using |DeclareOption| and |define@key|
%    approaches.  This, at this point, does require simply duplication of
%    the code required to be processed.
%
%    \begin{macrocode}
\def\@opt@stm{
\setboolean{@af@p}{false}%
\setboolean{@at@p}{false}%
\setboolean{@memo@bl}{true}%
\setboolean{@greet@p}{false}%
\setboolean{@dt@l}{false}%
\setboolean{@dt@c}{false}%
\setboolean{@dt@p}{false}%
\setboolean{@sig@p}{false}%
\setboolean{@sig@mp}{true}%
}%
\def\@opt@stpr{
\setboolean{@af@p}{false}%
\setboolean{@at@p}{false}%
\setboolean{@memo@bl}{true}%
\setboolean{@greet@p}{false}%
\setboolean{@dt@l}{false}%
\setboolean{@dt@c}{false}%
\setboolean{@dt@p}{false}%
\setboolean{@sig@p}{false}%
\setboolean{@sig@mp}{true}%
}%
\def\@opt@flm{
\setboolean{@af@p}{false}%
\setboolean{@at@p}{false}%
\setboolean{@memo@bl}{true}%
\setboolean{@greet@p}{false}%
\setboolean{@dt@l}{false}%
\setboolean{@dt@c}{false}%
\setboolean{@dt@p}{false}%
\setboolean{@sig@p}{false}%
\setboolean{@sig@mp}{false}%
\setboolean{@memo@b}{true}%
\setboolean{@memo@c}{true}%
\setboolean{@memo@d}{true}%
\setboolean{@memo@h}{true}%
\setboolean{@memo@i}{true}%
\setboolean{@memo@j}{true}%
\setboolean{@memo@k}{true}%
\setboolean{@memo@l}{true}%
\setboolean{@memo@m}{true}%
\setboolean{@memo@n}{true}%
}%
\DeclareOption{memoaddrto}{\setboolean{@memo@b}{true}}%   
\define@key{ov}{memoaddrto}[true]{\iffixt{#1}{@memo@b}}%
\DeclareOption{memoemailto}{\setboolean{@memo@k}{true}}%  
\define@key{ov}{memoemailto}[true]{\iffixt{#1}{@memo@k}}%
\DeclareOption{memophoneto}{\setboolean{@memo@c}{true}}%  
\define@key{ov}{memophoneto}[true]{\iffixt{#1}{@memo@c}}%
\DeclareOption{memopagerto}{\setboolean{@memo@n}{true}}%  
\define@key{ov}{memopagerto}[true]{\iffixt{#1}{@memo@n}}%
\DeclareOption{memofaxto}{\setboolean{@memo@d}{true}}%    
\define@key{ov}{memofaxto}[true]{\iffixt{#1}{@memo@d}}%
\DeclareOption{memoaddrfrom}{\setboolean{@memo@h}{true}}% 
\define@key{ov}{memoaddrfrom}[true]{\iffixt{#1}{@memo@h}}%
\DeclareOption{memoemailfrom}{\setboolean{@memo@l}{true}}%
\define@key{ov}{memoemailfrom}[true]{\iffixt{#1}{@memo@l}}%
\DeclareOption{memopagerfrom}{\setboolean{@memo@m}{true}}%
\define@key{ov}{memopagerfrom}[true]{\iffixt{#1}{@memo@m}}%
\DeclareOption{memophonefrom}{\setboolean{@memo@i}{true}}%
\define@key{ov}{memophonefrom}[true]{\iffixt{#1}{@memo@i}}%
\DeclareOption{memofaxfrom}{\setboolean{@memo@j}{true}}%  
\define@key{ov}{memofaxfrom}[true]{\iffixt{#1}{@memo@j}}%
\DeclareOption{memodate}{\setboolean{@dt@p}{true}}%       
\define@key{ov}{memodate}[true]{\iffixt{#1}{@dt@p}}%
\DeclareOption{memonofrom}{\setboolean{@memo@e}{false}}%
\define@key{ov}{memonofrom}[false]{\iffixt{#1}{@memo@e}}%
\DeclareOption{memonoto}{\setboolean{@memo@g}{false}}%
\define@key{ov}{memonoto}[false]{\iffixt{#1}{@memo@g}}%
\DeclareOption{memonore}{\setboolean{@memo@f}{false}}%
\define@key{ov}{memonore}[false]{\iffixt{#1}{@memo@f}}%%
\DeclareOption{fullmemo}{\@opt@flm}%
\define@key{ov}{fullmemo}[true]{\iffixq{#1}{\@opt@flm}}%
\DeclareOption{stdmemo}{\@opt@stm}%
\define@key{ov}{stdmemo}[true]{\iffixq{#1}{\@opt@stm}}%
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{Press Releases}
%    Press release definitions are set up here.
%    Currently, there are no options.
%
%    \begin{macrocode}
\def\@opt@pr{
\setboolean{@af@p}{true}%
\setboolean{@at@p}{false}%
\setboolean{@pr@p}{true}%
\setboolean{@greet@p}{false}%
\setboolean{@dt@l}{false}%
\setboolean{@dt@c}{false}%
\setboolean{@dt@p}{false}%
\setboolean{@sig@p}{false}%
\setboolean{@sig@mp}{false}%
}%
\DeclareOption{pressrelease}{\@opt@pr}%                         
\define@key{ov}{pressrelease}[true]{\iffixq{#1}{\@opt@pr}}%
\DeclareOption{stdpressrelease}{\@opt@pr}%                          
\define@key{ov}{stdpressrelease}[true]{\iffixq{#1}{\@opt@pr}}%
\DeclareOption{dspace}{\setboolean{@space@d}{true}\setboolean{@space@s}{false}}%
\DeclareOption{sspace}{\setboolean{@space@s}{true}\setboolean{@space@d}{false}}%
\define@key{ov}{dspace}[true]{%
\iffixq{#1}{\setboolean{@space@d}{true}\setboolean{@space@s}{false}}}%
\define@key{ov}{sspace}[true]{%
\iffixq{#1}{\setboolean{@space@s}{true}\setboolean{@space@d}{false}}}%
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{Faxes}
%    These commands define the overall structures for
%    fax pages, fax blocks and fax choices.
%    \begin{macrocode}
\DeclareOption{faxhp}{\setboolean{@fax@hdr@pg}{true}\setboolean{@fax@RA}{false}}%
\DeclareOption{faxheaderpage}{\setboolean{@fax@hdr@pg}{true}\setboolean{@fax@RA}{false}}%
\define@key{ov}{faxheaderpage}[true]%
{\iffixq{#1}{\setboolean{@fax@hdr@pg}{true}\setboolean{@fax@RA}{false}}}%
\DeclareOption{faxhba}%   Print fax header block on leader in right top-margin.
  {\setboolean{@fax@RA}{true}\setboolean{@fax@hdr@pg}{false}}%
\define@key{ov}{faxhba}[true]%   Print fax header block on leader in right top-margin.
  {\iffixq{#1}{\setboolean{@fax@RA}{true}\setboolean{@fax@hdr@pg}{false}}}%
\DeclareOption{faxhbb}%   Print fax header block - leader - upper right quad letter 
  {\setboolean{@fax@RU}{true}\setboolean{@fax@hdr@pg}{false}}%   
\DeclareOption{faxbla}%   Print FAX block in \Rheader
  {\setboolean{@fax@bla}{true}\setboolean{@fax@blb}{false}}%
\DeclareOption{faxblb}%
  {\setboolean{@fax@blb}{true}\setboolean{@fax@bla}{false}}%
\DeclareOption{faxblocka}%Print FAX block in \Rheader
  {\setboolean{@fax@bla}{true}\setboolean{@fax@blb}{false}}%
\define@key{ov}{faxblocka}[true]%
{\iffixq{#1}{\setboolean{@fax@bla}{true}\setboolean{@fax@blb}{false}}}%
\DeclareOption{faxblockb}%
  {\setboolean{@fax@blb}{true}\setboolean{@fax@bla}{false}}%
\define@key{ov}{faxblockb}[true]%
{\iffixq{#1}{\setboolean{@fax@blb}{true}\setboolean{@fax@bla}{false}}}%
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{Specials}
%    Special definitions.  These commands define the tools for including
%    specials into a letter.  A special is a piece of text not covered by
%    the usual definitions.  Specials can be included by the command
%    |\speciala{textx}{row}{col}|.  The special is printed in the
%    ``address-area'' of the letter.  The ``address-area'' is divided into a
%    grid that is 6 rows by 3 columns.  
%    \begin{macrocode}
\providecommand{\speciala}[3]
  {\def\@spec@a{#1}\def\@row@a{#2}\def\@col@a{#3}\setboolean{@use@spec@a}{true}}%
\def\@col@a{}\def\@row@a{}\def\@spec@a{}
\newboolean{@use@spec@a}\setboolean{@use@spec@a}{false}%
\providecommand{\specialb}[3]
  {\def\@spec@b{#1}\def\@row@b{#2}\def\@col@b{#3}\setboolean{@use@spec@b}{true}}%
\def\@col@b{}\def\@row@b{}\def\@spec@b{}
\newboolean{@use@spec@b}\setboolean{@use@spec@b}{false}%
\providecommand{\specialc}[3]
  {\def\@spec@c{#1}\def\@row@c{#2}\def\@col@c{#3}\setboolean{@use@spec@c}{true}}%
\def\@col@c{}\def\@row@c{}\def\@spec@c{}
\newboolean{@use@spec@c}\setboolean{@use@spec@c}{false}%
\providecommand{\speciald}[3]
  {\def\@spec@d{#1}\def\@row@d{#2}\def\@col@d{#3}\setboolean{@use@spec@d}{true}}%
\def\@col@d{}\def\@row@d{}\def\@spec@d{}
\newboolean{@use@spec@d}\setboolean{@use@spec@d}{false}%
\providecommand{\speciale}[3]
  {\def\@spec@e{#1}\def\@row@e{#2}\def\@col@e{#3}\setboolean{@use@spec@e}{true}}%
\def\@col@e{}\def\@row@e{}\def\@spec@e{}
\newboolean{@use@spec@e}\setboolean{@use@spec@e}{false}%
\providecommand{\specialf}[3]
  {\def\@spec@f{#1}\def\@row@f{#2}\def\@col@f{#3}\setboolean{@use@spec@f}{true}}%
\def\@col@f{}\def\@row@f{}\def\@spec@f{}
\newboolean{@use@spec@f}\setboolean{@use@spec@f}{false}%
\providecommand{\specialg}[3]
  {\def\@spec@g{#1}\def\@row@g{#2}\def\@col@g{#3}\setboolean{@use@spec@g}{true}}%
\def\@col@g{}\def\@row@g{}\def\@spec@g{}
\newboolean{@use@spec@g}\setboolean{@use@spec@g}{false}%
\providecommand{\specialh}[3]
  {\def\@spec@h{#1}\def\@row@h{#2}\def\@col@h{#3}\setboolean{@use@spec@h}{true}}%
\def\@col@h{}\def\@row@h{}\def\@spec@h{}
\newboolean{@use@spec@h}\setboolean{@use@spec@h}{false}%
\providecommand{\spacespa}[2]{\def\@sp@bef@a{#1}\def\@sp@aft@a{#2}} \spacespa{0pt}{0pt}%
\providecommand{\spacespb}[2]{\def\@sp@bef@b{#1}\def\@sp@aft@b{#2}} \spacespb{0pt}{0pt}%
\providecommand{\spacespc}[2]{\def\@sp@bef@c{#1}\def\@sp@aft@c{#2}} \spacespc{0pt}{0pt}%
\providecommand{\spacespd}[2]{\def\@sp@bef@d{#1}\def\@sp@aft@d{#2}} \spacespd{0pt}{0pt}%
\providecommand{\spacespe}[2]{\def\@sp@bef@e{#1}\def\@sp@aft@e{#2}} \spacespe{0pt}{0pt}%
\providecommand{\spacespf}[2]{\def\@sp@bef@f{#1}\def\@sp@aft@f{#2}} \spacespf{0pt}{0pt}%
\providecommand{\spacespg}[2]{\def\@sp@bef@g{#1}\def\@sp@aft@g{#2}} \spacespg{0pt}{0pt}%
\providecommand{\spacesph}[2]{\def\@sp@bef@h{#1}\def\@sp@aft@h{#2}} \spacesph{0pt}{0pt}%
%    \end{macrocode}%
% \end{macro}
%
% \begin{macro}{Letters}
%    Letter definitions.  These commands define the overall structures for
%    standard letters (with and without from-addresses).  There are commands
%    for blanking of sections (blankrightmargin, etc.).  There are commands
%    for ordering of sections.  There are commands for inclusion of various
%    types of information.
%    \begin{macrocode}
\def\@opt@slr{
\setboolean{@af@l}{false}% 
\setboolean{@af@p}{true}% 
\setboolean{@at@p}{true}% 
\setboolean{@dt@p}{true}%
\setboolean{@dt@l}{false}%
\setboolean{@dt@c}{false}%
\setboolean{@greet@p}{true}%
\setboolean{@sig@p}{true}%
\setboolean{@sig@mp}{false}%
\setboolean{@at@l}{true}% 
\setboolean{@memo@bl}{false}%
\setboolean{@dt@l}{false}%
\setboolean{@sig@l}{false}%
\setboolean{@sig@c}{false}%
\@d@pos{1}\@t@pos{3}\@f@pos{2}\setboolean{@s@b@s}{false}}
\DeclareOption{stdletter}{\@opt@slr}%
\define@key{ov}{stdletter}[true]{\iffixq{#1}{\@opt@slr}}%
\def\@opt@sln{\setboolean{@af@l}{false} %
\setboolean{@af@p}{false} %
\setboolean{@at@p}{true} %
\setboolean{@dt@p}{true}%
\setboolean{@dt@l}{false}%
\setboolean{@dt@c}{false}%
\setboolean{@greet@p}{true}%
\setboolean{@sig@p}{true}%
\setboolean{@sig@mp}{false}%
\setboolean{@at@l}{true} %
\setboolean{@memo@bl}{false}%
\setboolean{@dt@l}{false}%
\setboolean{@sig@l}{false}%
\setboolean{@sig@c}{false}%
\@d@pos{1}\@t@pos{3}\@f@pos{2}\setboolean{@s@b@s}{false}}
\DeclareOption{stdletternofrom} {\@opt@sln}%
\define@key{ov}{stdletternofrom}[true]{\iffixq{#1}{\@opt@sln}}%
\def\@opt@blr{\setboolean{@af@l}{true}%
\setboolean{@af@p}{true}%
\setboolean{@memo@bl}{false}%
\setboolean{@at@l}{true}%
\setboolean{@dt@l}{true}%
\setboolean{@dt@c}{false}%
\setboolean{@sig@l}{true}%
\setboolean{@sig@c}{false}%
\setboolean{@sig@p}{true}%
\setboolean{@sig@mp}{false}%
\@d@pos{1}\@t@pos{3}\@f@pos{2}\setboolean{@s@b@s}{false}}
\DeclareOption{busletter} {\@opt@blr}%
\define@key{ov}{busletter}[true]{\iffixq{#1}{\@opt@blr}}%
\def\@opt@bln{\setboolean{@af@l}{true}%
\setboolean{@af@p}{false}%
\setboolean{@memo@bl}{false}%
\setboolean{@at@l}{true}%
\setboolean{@dt@l}{true}%
\setboolean{@dt@c}{false}%
\setboolean{@sig@l}{true}%
\setboolean{@sig@p}{true}%
\setboolean{@sig@mp}{false}%
\setboolean{@sig@c}{false}%
\@d@pos{1}\@t@pos{3}\@f@pos{2}\setboolean{@s@b@s}{false}}
\DeclareOption{busletternofrom} {\@opt@bln}%
\newboolean{@test@opt}\setboolean{@test@opt}{false}
\define@key{ov}{busletternofrom}[true]{\iffixq{#1}{\@opt@bln}}%
\DeclareOption{addrfromleft} {\setboolean{@af@l}{true}}%
\define@key{ov}{addrfromleft}[true]{\iffixt{#1}{@af@l}}%
\DeclareOption{addrfromright}{\setboolean{@af@l}{false}}%
\define@key{ov}{addrfromright}[true]{\iffixf{#1}{@af@l}}%
\DeclareOption{addrtoleft}   {\setboolean{@at@l}{true}}%
\define@key{ov}{addrtoleft}[true]{\iffixt{#1}{@at@l}}%
\DeclareOption{addrtoright}  {\setboolean{@at@l}{false}}%
\define@key{ov}{addrtoright}[true]{\iffixf{#1}{@at@l}}%
\DeclareOption{addrtoemail}  {\setboolean{@addr@to@e}{true}}%
\define@key{ov}{addrtoemail}[true]{\iffixt{#1}{@addr@to@e}}%
\DeclareOption{addrtophone}  {\setboolean{@addr@to@t}{true}}%
\define@key{ov}{addrtophone}[true]{\iffixt{#1}{@addr@to@t}}%
\DeclareOption{addrtofax}    {\setboolean{@addr@to@f}{true}}%
\DeclareOption{addrfromemail}{\setboolean{@addr@fr@e}{true}}%
\define@key{ov}{addrfromemail}[true]{\iffixt{#1}{@addr@fr@e}}%
\DeclareOption{addrfromphone}{\setboolean{@addr@fr@t}{true}}%
\define@key{ov}{addrfromphone}[true]{\iffixt{#1}{@addr@fr@t}}%
\DeclareOption{addrfromfax}  {\setboolean{@addr@fr@f}{true}}%
\define@key{ov}{addrfromfax}[true]{\iffixt{#1}{@addr@fr@f}}%
\providecommand{\boxht}{}  \providecommand{\boxwd}{} \providecommand{\btwlb}{}%
\providecommand{\topht}{}  \providecommand{\lftwd}{}%
\def\labpl#1{\setlength{\@lab@pl}{#1}}
\def\boxht#1{\setlength{\@lab@bh}{#1}}
\def\boxwd#1{\setlength{\@lab@bw}{#1}}
\def\topht#1{\setlength{\@lab@th}{#1}}
\def\lftwd#1{\setlength{\@lab@lm}{#1}}
\def\btwlb#1{\setlength{\@lab@bl}{#1}}
\def\@labname{nolines,dateno}%
\def\Alaba{\def\@labname{Avery5160,nolines,dateno}%
  \setboolean{@set@env}{true}\setboolean{@use@envlab}{false} \def\@tab@just{rrr}\labpl{10.125in}%
  \setcounter{@lab@tot@row}{10} \setcounter{@lab@tot@col}{3} \btwlb{5pt}%
  \boxht{73pt} \boxwd{164pt} \topht{90pt} \lftwd{-88pt} \setlength{\@Hgt@Foot}{0pt}}%
\def\Alabb{\def\@labname{Avery5161,nolines,dateno}%
  \setboolean{@set@env}{true}\setboolean{@use@envlab}{false} \def\@tab@just{rr}\labpl{10.125in}%
  \setcounter{@lab@tot@row}{10} \setcounter{@lab@tot@col}{2} \btwlb{8pt}%
  \boxht{67pt} \boxwd{274pt} \topht{37pt} \lftwd{-80pt} \setlength{\@Hgt@Foot}{0pt}}%
\def\Alabc{\def\@labname{Avery5162,nolines,dateno}%
  \setboolean{@set@env}{true}\setboolean{@use@envlab}{false} \def\@tab@just{rr}\labpl{9.5in}%
  \setcounter{@lab@tot@row}{7} \setcounter{@lab@tot@col}{2} \btwlb{8pt}%
  \boxht{93pt} \boxwd{274pt} \topht{62pt} \lftwd{-80pt} \setlength{\@Hgt@Foot}{0pt}}%
\def\Alabd{\def\@labname{Avery5163,nolines,dateno}%
  \setboolean{@set@env}{true}\setboolean{@use@envlab}{false} \def\@tab@just{rr}\labpl{10.125in}%
  \setcounter{@lab@tot@row}{5} \setcounter{@lab@tot@col}{2} \btwlb{8pt}%
  \boxht{139pt} \boxwd{274pt} \topht{38pt} \lftwd{-80pt} \setlength{\@Hgt@Foot}{0pt}}%
\def\Alabe{\def\@labname{Avery5164,nolines,dateno}%
  \setboolean{@set@env}{true}\setboolean{@use@envlab}{false} \def\@tab@just{rr}\labpl{10.125in}%
  \setcounter{@lab@tot@row}{3} \setcounter{@lab@tot@col}{2} \btwlb{8pt}%
  \boxht{232pt} \boxwd{274pt} \topht{38pt} \lftwd{-80pt} \setlength{\@Hgt@Foot}{0pt}}%
\DeclareOption{Avery5160}{\Alaba}%
\DeclareOption{Avery5161}{\Alabb}%
\DeclareOption{Avery5261}{\Alabb}%
\DeclareOption{Avery5162}{\Alabc}%
\DeclareOption{Avery5163}{\Alabd}%
\DeclareOption{Avery5164}{\Alabe}%
\DeclareOption{Avery5264}{\Alabe}%
\DeclareOption{labto}{\setboolean{@lab@t}{true}}%
\DeclareOption{labrowfrto}{\setboolean{@lab@rft}{true}\setboolean{@lab@t}{false}}%
\DeclareOption{labcolfrto}{\setboolean{@lab@cft}{true}\setboolean{@lab@t}{false}}%
\def\labsize#1{\def\@lab@size{#1}}
\define@key{ov}{Avery5160}[true]{\iffixq{#1}{\Alaba}}%
\define@key{ov}{Avery5161}[true]{\iffixq{#1}{\Alabb}}%
\define@key{ov}{Avery5261}[true]{\iffixq{#1}{\Alabb}}%
\define@key{ov}{Avery5162}[true]{\iffixq{#1}{\Alabc}}%
\define@key{ov}{Avery5163}[true]{\iffixq{#1}{\Alabd}}%
\define@key{ov}{Avery5164}[true]{\iffixq{#1}{\Alabe}}%
\define@key{ov}{Avery5264}[true]{\iffixq{#1}{\Alabe}}%
\define@key{ov}{labto}[true]{\iffixq{#1}{\setboolean{@lab@t}{true}}}%
\define@key{ov}{labrowfrto}[true]{\iffixq{#1}%
{\setboolean{@lab@rft}{true}\setboolean{@lab@t}{false}}}%
\define@key{ov}{labsize}{\def\@lab@size{#1}}
\define@key{ov}{labcolfrto}[true]{\iffixq{#1}%
{\setboolean{@lab@cft}{true}\setboolean{@lab@t}{false}}}%
\DeclareOption{setuplabel}{\setboolean{@set@env}{true}\setboolean{@use@envlab}{false}}%
\define@key{ov}{setuplabel}[true]{
\iffixq{#1}{\setboolean{@set@env}{true}\setboolean{@use@envlab}{false}}}%
\def\@dodtf{\@d@pos{1}\@t@pos{3}\@f@pos{2}\setboolean{@s@b@s}{false}}%
\def\@dofdt{\@d@pos{2}\@t@pos{3}\@f@pos{1}\setboolean{@s@b@s}{false}}%
\def\@doftd{\@d@pos{3}\@t@pos{2}\@f@pos{1}\setboolean{@s@b@s}{false}}%
\def\@dosbs{\@d@pos{1}\@t@pos{0}\@f@pos{0}\setboolean{@s@b@s}{true}}%
\DeclareOption{orderdatefromto}{\@dodtf}%
\define@key{ov}{orderdatefromto}[true]{\iffixq{#1}{\@dodtf}}%
\DeclareOption{orderfromdateto}{\@dofdt}%
\define@key{ov}{orderfromdateto}[true]{\iffixq{#1}{\@dofdt}}%
\DeclareOption{orderfromtodate}{\@doftd}%
\define@key{ov}{orderfromtodate}[true]{\iffixq{#1}{\@doftd}}%
\DeclareOption{sidebyside}{\@dosbs}%
\define@key{ov}{sidebyside}[true]{\iffixq{#1}{\@dosbs}}%
% Set right block flush top page
\DeclareOption{margflush}{\setboolean{@marg@lt@fl@tp}{true}}%
\define@key{ov}{margflush}[true]{\iffixt{#1}{@marg@lt@fl@tp}}%
% Set the marginal gap 20p
\DeclareOption{biggap}{\setboolean{@gap@small}{false}}%
% Do not print from-address.
\DeclareOption{addrfromno}{\setboolean{@af@p}{false}}%
\DeclareOption{noaddrfr}{\setboolean{@af@p}{false}}%
\DeclareOption{noaddrfrom}{\setboolean{@af@p}{false}}%
\define@key{ov}{noaddrfrom}[true]{\iffixf{#1}{@af@p}}%
% Do not print to-address.
\DeclareOption{addrtono}{\setboolean{@at@p}{false}}%
\DeclareOption{noaddrto}{\setboolean{@at@p}{false}}%
\define@key{ov}{noaddrto}[true]{\iffixf{#1}{@at@p}}%
% Do not print greeting
\DeclareOption{greetno}{\setboolean{@greet@p}{false}}%
\define@key{ov}{nogreet}[true]{\iffixf{#1}{@greet@p}}%
% Use cello envelope
\DeclareOption{cellowindow}{\setboolean{@cello@win}{true}}%
\define@key{ov}{cellowindow}[true]{\iffixt{#1}{@cello@win}}%
% Cello dimensions
\def\celloheight#1{\setlength{\@cello@h}{#1}}%
\def\cellowidth#1{\setlength{\@cello@w}{#1}}%
\define@key{ov}{celloheight}{\celloheight{#1}}%
\define@key{ov}{cellowidth}{\cellowidth{#1}}%
% Cello placement
\def\cellodown#1{\setlength{\@cello@d}{#1}}%
\def\celloleft#1{\setlength{\@cello@l}{#1}}%
\define@key{ov}{cellodown}{\cellodown{#1}}%
\define@key{ov}{celloleft}{\celloleft{#1}}%
% Print date right-justified
\DeclareOption{dateright}{\setboolean{@dt@l}{false}\setboolean{@dt@c}{false}}%
\define@key{ov}{dateright}[true]%
{\iffixq{#1}{\setboolean{@dt@l}{false}\setboolean{@dt@c}{false}}}%
% Print date left-justified
\DeclareOption{dateleft}{\setboolean{@dt@l}{true}\setboolean{@dt@c}{false}}%
\define@key{ov}{dateleft}[true]%
{\iffixq{#1}{\setboolean{@dt@l}{true}\setboolean{@dt@c}{false}}}%
% Print date centered
\DeclareOption{datecenter}{\setboolean{@dt@l}{false}\setboolean{@dt@c}{true}}%
\define@key{ov}{datecenter}[true]%
{\iffixq{#1}{\setboolean{@dt@l}{false}\setboolean{@dt@c}{true}}}%
% Do not print date
\DeclareOption{dateno}{\setboolean{@dt@p}{false}}%
\define@key{ov}{dateno}[true]{\iffixf{#1}{@dt@p}}%
% Print date
\DeclareOption{dateyes}{\setboolean{@dt@p}{true}}%
% Print signature left-justified
\DeclareOption{signatureleft}{\setboolean{@sig@l}{true}\setboolean{@sig@c}{false}}%
\define@key{ov}{signatureleft}[true]%
{\iffixq{#1}{\setboolean{@sig@l}{true}\setboolean{@sig@c}{false}}}%
\DeclareOption{signleft}{\setboolean{@sig@l}{true}\setboolean{@sig@c}{false}}%
\define@key{ov}{sigleft}[true]%
{\iffixq{#1}{\setboolean{@sig@l}{true}\setboolean{@sig@c}{false}}}%
% Print signature centered
\DeclareOption{signaturecenter}{\setboolean{@sig@l}{false}\setboolean{@sig@c}{true}}%
\define@key{ov}{signaturecenter}[true]%
{\iffixq{#1}{\setboolean{@sig@l}{false}\setboolean{@sig@c}{true}}}%
\DeclareOption{sigcenter}{\setboolean{@sig@l}{false}\setboolean{@sig@c}{true}}%
\define@key{ov}{sigcenter}[true]%
{\iffixq{#1}{\setboolean{@sig@l}{false}\setboolean{@sig@c}{true}}}%
% Print signature right-justified
\DeclareOption{signatureright}{\setboolean{@sig@l}{false}\setboolean{@sig@c}{false}}%
\define@key{ov}{signatureright}[true]%
{\iffixq{#1}{\setboolean{@sig@l}{false}\setboolean{@sig@c}{false}}}%
\DeclareOption{sigright}{\setboolean{@sig@l}{false}\setboolean{@sig@c}{false}}%
\define@key{ov}{sigright}[true]%
{\iffixq{#1}{\setboolean{@sig@l}{false}\setboolean{@sig@c}{false}}}%
% No signature
\DeclareOption{signatureno}{\setboolean{@sig@p}{false}}%
\define@key{ov}{signatureno}[true]{\iffixf{#1}{@sig@p}}%
% Print all fr \info.
\def\@fix@all@fr{\setboolean{@use@all@fr}{true}
\setboolean{@af@p}{true}%
\setboolean{@af@l}{true}%
\setboolean{@addr@fr@f}{true}%
\setboolean{@addr@fr@e}{true}%
\setboolean{@addr@fr@t}{true}}%
% Print all fr \info.
\DeclareOption{printallfrom}{\@fix@all@fr}%
\define@key{ov}{printallfrom}[true]{\iffixq{#1}{\@fix@all@fr}}%
% Print all to \info.
\def\@fix@all@to{\setboolean{@use@all@to}{true}
\setboolean{@at@p}{true}%
\setboolean{@at@l}{true}%
\setboolean{@addr@to@f}{true}%
\setboolean{@addr@to@e}{true}%
\setboolean{@addr@to@t}{true}}%
\DeclareOption{printallto}{\@fix@all@to}%
\define@key{ov}{printallto}[true]{\iffixq{#1}{\@fix@all@to}}%
% Set header components to blank
\DeclareOption{blankheader}{\setboolean{@b@h}{true}}% 
\define@key{ov}{blankheader}[true]{\iffixt{#1}{@b@h}}% 
\DeclareOption{Blankheader}{\setboolean{@B@h}{true}}% 
\define@key{ov}{Blankheader}[true]{\iffixt{#1}{@B@h}}% 
% Set footer components to blank
\DeclareOption{blankfooter}{\setboolean{@b@f}{true}}%
\define@key{ov}{blankfooter}[true]{\iffixt{#1}{@b@f}}%
\DeclareOption{Blankfooter}{\setboolean{@B@f}{true}}% 
\define@key{ov}{Blankfooter}[true]{\iffixt{#1}{@B@f}}% 
% Set left margin components to blank
\DeclareOption{blanklmargin}{\setboolean{@b@l}{true}}%
\DeclareOption{blankleftmargin}{\setboolean{@b@l}{true}}% 
\define@key{ov}{blankleftmargin}[true]{\iffixt{#1}{@b@l}}% 
\DeclareOption{Blankleftmargin}{\setboolean{@B@l}{true}}%
\define@key{ov}{Blankleftmargin}[true]{\iffixt{#1}{@B@l}}%
% Set right margin components to blank
\DeclareOption{blankrmargin}{\setboolean{@b@r}{true}}%
\DeclareOption{blankrightmargin}{\setboolean{@b@r}{true}}% 
\define@key{ov}{blankrightmargin}[true]{\iffixt{#1}{@b@r}}% 
\DeclareOption{Blankrightmargin}{\setboolean{@B@r}{true}}%
\define@key{ov}{Blankrightmargin}[true]{\iffixt{#1}{@B@r}}%
% Set all components to blank
\DeclareOption{Blankall}{\setboolean{@B@f}{true}\setboolean{@B@l}{true}
\setboolean{@B@h}{true}\setboolean{@B@r}{true}}%
\define@key{ov}{Blankall}[true]%
{\iffixq{#1}{\setboolean{@B@f}{true}\setboolean{@B@l}{true}
\setboolean{@B@h}{true}\setboolean{@B@r}{true}}}%
\DeclareOption{blankall}{\setboolean{@b@f}{true}\setboolean{@b@l}{true}
\setboolean{@b@h}{true}\setboolean{@b@r}{true}}%
\define@key{ov}{blankall}[true]%
{\iffixq{#1}{\setboolean{@b@f}{true}\setboolean{@b@l}{true}
\setboolean{@b@h}{true}\setboolean{@b@r}{true}}}%
\DeclareOption{BlankTotal}% Fixed
{\setboolean{@B@f}{true}\setboolean{@B@l}{true}%
\setboolean{@B@h}{true}\setboolean{@B@r}{true}%
\setboolean{@b@f}{true}\setboolean{@b@l}{true}%
\setboolean{@b@h}{true}\setboolean{@b@r}{true}}%
\define@key{ov}{BlankTotal}[true]%
{\iffixq{#1}{\setboolean{@B@f}{true}\setboolean{@B@l}{true}%
\setboolean{@B@h}{true}\setboolean{@B@r}{true}%
\setboolean{@b@f}{true}\setboolean{@b@l}{true}%
\setboolean{@b@h}{true}\setboolean{@b@r}{true}}}%
% Use envelopes
\def\@set@pap#1#2#3{\def\@paper@type{#1}\setlength\@stock@height{#2}\setlength\@stock@width{#3}}%
\DeclareOption{useenvlab}{\setboolean{@set@env}{false}\setboolean{@use@envlab}{true}}%
\define@key{ov}{useenvlab}[true]{
\iffixq{#1}{\setboolean{@use@envlab}{true}\setboolean{@set@env}{false}}}%
% Use letterpaper
\DeclareOption{letterpaper}{\@set@pap{letterpaper}{11in}{8.5in}}%
\define@key{ov}{letterpaper}[true]{\iffixq{#1}{\@set@pap{letterpaper}{11in}{8.5in}}}%
% Use letterpaper
\DeclareOption{bigpaper}{\@set@pap{bigpaper}{17in}{11in}}%
\define@key{ov}{bigpaper}[true]{\iffixq{#1}{\@set@pap{bigpaper}{17in}{11in}}}%
% Use legalpaper
\DeclareOption{legalpaper}{\@set@pap{legalpaper}{14in}{8.5in}}%
\define@key{ov}{legalpaper}[true]{\iffixq{#1}{\@set@pap{legalpaper}{14in}{8.5in}}}%
% Use executivepaper
\DeclareOption{executivepaper}{\@set@pap{executivepaper}{10.5in}{7.25in}}%
\define@key{ov}{executivepaper}[true]{\iffixq{#1}{\@set@pap{executivepaper}{10.5in}{7.25in}}}%
% Use ebook
\DeclareOption{ebook}{\@set@pap{ebook}{9in}{6in}}%
\define@key{ov}{ebook}[true]{\iffixq{#1}{\@set@pap{ebook}{9in}{6in}}}%
% Use a3
\DeclareOption{a3paper}{\@set@pap{a3paper}{420mm}{297mm}}%
\define@key{ov}{a3paper}[true]{\iffixq{#1}{\@set@pap{a3paper}{420mm}{297mm}}}%
% Use a4
\DeclareOption{a4paper}{\@set@pap{a4paper}{297mm}{210mm}}%
\define@key{ov}{a4paper}[true]{\iffixq{#1}{\@set@pap{a4paper}{297mm}{210mm}}}%
% Use a5
\DeclareOption{a5paper}{\@set@pap{a5paper}{210mm}{148mm}}%
\define@key{ov}{a5paper}[true]{\iffixq{#1}{\@set@pap{a5paper}{210mm}{148mm}}}%
% Use a6
\DeclareOption{a6paper}{\@set@pap{a6paper}{148mm}{105mm}}%
\define@key{ov}{a6paper}[true]{\iffixq{#1}{\@set@pap{a6paper}{148mm}{105mm}}}%
% Use b3
\DeclareOption{b3paper}{\@set@pap{b3paper}{500mm}{353mm}}%
\define@key{ov}{b3paper}[true]{\iffixq{#1}{\@set@pap{b3paper}{500mm}{353mm}}}%
% Use b4
\DeclareOption{b4paper}{\@set@pap{b4paper}{353mm}{250mm}}%
\define@key{ov}{b4paper}[true]{\iffixq{#1}{\@set@pap{b4paper}{353mm}{250mm}}}%
% Use b5
\DeclareOption{b5paper}{\@set@pap{b5paper}{250mm}{176mm}}%
\define@key{ov}{b5paper}[true]{\iffixq{#1}{\@set@pap{b5paper}{250mm}{176mm}}}%
% Use b6
\DeclareOption{b6paper}{\@set@pap{b6paper}{176mm}{125mm}}%
\define@key{ov}{b6paper}[true]{\iffixq{#1}{\@set@pap{b6paper}{176mm}{125mm}}}%
% Set default options here
\setkeys{ov}{textwidthsize=-1pt,textheightsize=-1pt,bottommarginskip=5pt,letterpaper,%
headermarginskip=0pt,rightmarginsize=72pt,leftmarginsize=72pt,bottommarginskipbelow=5pt,%
leftmargintopdist=-1pt,addrtoskipafter=18pt,unprright=-1pt,labsize=\normalsize,%
leftmarginskipleft=10pt,leftmarginskipright=10pt,dateskipbefore=0pt,%
dateskipafter=0pt,addrfromskipafter=0pt,addrfromskipbefore=0pt,%
greettoskipafter=0pt,sigskipbefore=12pt,sigskipafter=12pt,sigsize=72pt,%
postsigskipafter=10pt,memoskipafter=15pt,memoskipbefore=35pt,unprtop=-1pt,unprbottom=-1pt,%
unprleft=-1pt}%
%    \end{macrocode}%
% \end{macro}
%
% \subsection{Executing Options}
%    Here we execute the default options to initialize certain variables.
%    \begin{macrocode}
\ExecuteOptions{\@paper@type,stdletter,american}%
%    \end{macrocode}
%
%    The |\ProcessOptions| command causes the execution of the code for every
%    option \Lopt{foo} which is declared and for which the
%    user typed the \Lopt{foo} option in his |\documentclass| command.
%    For every option \Lopt{bar} he typed, which is not declared, the
%    option is assumed to be a global option.  All options will be
%    passed as document options to any |\usepackage| command in the
%    document preamble.
%    \begin{macrocode}
\DeclareOption*{\PassOptionsToClass{\CurrentOption}{letter}}
\ProcessOptions
%    \end{macrocode}
%
% \begin{macro}{showdim}
%    This is here for debugging only.
%    \begin{macrocode}
\def\showdim#1{%
\txa{ * * * }
\txa{*****************************************************************************}
\txa{Dimensions: #1}%
% \printinunitsof{in}\pagevalues
\txa{\string\headheight:     \the\headheight,  \string\headsep:        \the\headsep}%
\txa{\string\paperheight:    \the\paperheight, \string\paperwidth:    \the\paperwidth}%
\txa{\string\textheight:     \the\textheight,  \string\textwidth:      \the\textwidth}
\txa{\string\@colht:         \the\@colht,      \string\@colroom:       \the\@colroom}%
\txa{\string\vsize:          \the\vsize,   \string\columnwidth: \the\columnwidth}%
\txa{\string\hsize: \the\hsize, \string\linewidth: \the\linewidth}%
\txa{\string\evensidemargin: \the\evensidemargin, \string\footskip:       \the\footskip}%
\txa{\string\oddsidemargin:  \the\oddsidemargin, \string\columnsep:      \the\columnsep}%
\txa{\string\topmargin:      \the\topmargin}%
\txa{\string\marginparpush: \the\marginparpush, \string\marginparsep: \the\marginparsep}%
\txa{*****************************************************************************}
\txa{ * * * }
}%
%    \end{macrocode}
% \end{macro}
%    Now that all the options have been executed we can load the
%    existing copy of letter.cls.  This will ensure that the various
%    constructions which work in letters (|\begin{letter}|, etc.) will
%    continue to work in the class.  The |newlfm.cls| class adds the 
%    environment |newlfm|, which adds a number of new commands to the 
%    |letter| class, but does not remove any |letter| class commands.
%    \begin{macrocode}
\showdim{Before LoadClass}%
\PassOptionsToClass{\@paper@type,oneside,final}{letter}%
\LoadClass{letter}%
\showdim{Before addrset}%
\RequirePackage{addrset}%
\IfFileExists{afterpage.sty}{\RequirePackage{afterpage}}{}%
\IfFileExists{envlab.sty}{\RequirePackage{envlab}}{}%
\showdim{After LoadClass}
%    \end{macrocode}%
%    Some of the page layout parameters are defined here.  Many of the values%
%    for the page layout parameters are set in geometry below.  In setting the%
%    values here, we expect that geometry will override a large number of the%
%    values.  However, the values must be assigned {\it a prior}.%
%    \begin{macrocode}%
\setlength{\voffset}{0in}%
\setlength{\itemsep}{.2em}%
\setlength{\topsep}{.2em}%
\setlength{\partopsep}{0\p@}%
\setlength{\arraycolsep}{5\p@}%
\setlength{\tabcolsep}{6\p@}%
\setlength{\arrayrulewidth}{.4\p@}%
\setlength{\doublerulesep}{2\p@}%
\setlength{\tabbingsep}{\labelsep}%
\skip\@mpfootins = \skip\footins%
\setlength{\fboxsep}{3\p@}%
\setlength{\fboxrule}{.4\p@}%
\providecommand{\geometry}{ }%
\def\geometry#1{\typeout{Command \string\geometry{items} no longer supported.}%
\typeout{newlfm supports several dimensional commands.  Please check the manual for detail.}%
}%
\renewcommand{\theequation}{\@arabic\c@equation}%
\renewcommand{\footnoterule}{%
  \kern-\p@%
  \hrule \@width .4\columnwidth%
  \kern .6\p@}%
  \long\def\@makefntext#1{%
    \noindent \hangindent 5\p@%
    \hb@xt@5\p@{\hss\@makefnmark}#1}%
%    \end{macrocode}%
%
%    \begin{macro}{table,figure}
%    Standard \LaTeX\ constructions |table| and |figure|
%    are not defined in |letter|.  They are added here.
%    \begin{macrocode}
\renewcommand{\thefigure}{\@arabic\c@figure}%
\providecommand{\figurename}{}\renewcommand{\figurename}{Figure}%
\providecommand{\tablename}{} \renewcommand{\tablename}{Table}%
\newcommand{\fps@figure}{tbp}\newcommand{\ftype@figure}{1}\newcommand{\ext@figure}{lof}%
\newcommand{\fnum@figure}{\figurename~\thefigure}%
\newenvironment{figure}{\@float{figure}}{\end@float}%
\newenvironment{figure*}{\@dblfloat{figure}}{\end@dblfloat}%
\renewcommand\thetable{\@arabic\c@table}%
\newcommand{\fps@table}{tbp}\newcommand{\ftype@table}{2}%
\newcommand{\ext@table}{lot}%
\newcommand{\fnum@table}{\tablename~\thetable}%
\newenvironment{table}{\@float{table}}{\end@float}%
\newenvironment{table*}{\@dblfloat{table}}{\end@dblfloat}%
\setlength\@caption@skip@above{10\p@}\setlength\@caption@skip@below{0\p@}%
\long\def\@makecaption#1#2{%
  \vskip\@caption@skip@above\sbox\@tempboxa{#1: #2}%
  \ifdim \wd\@tempboxa >\hsize%
    #1: #2\par%
  \else\global \@minipagefalse%
    \hb@xt@\hsize{\hfil\box\@tempboxa\hfil}%
  \fi\vskip\@caption@skip@below}%
\newcommand{\section}[1]{{\Large {\bfseries #1}}}%
%    \end{macrocode}%
% \end{macro}%
%
% \begin{macro}{Date and time macros}
%    These functions all use various system indicators of time and date to
%    furnish a time or date value to go on faxes and letters. 
%
%    \begin{macrocode}
\def\monthname{% timestamp function
  \ifcase\month%
    \or January\or February\or March\or April \or May\or June%
    \or July\or August\or September\or October \or November\or December%
  \fi%
}%
\def\timestring{%
  \begingroup%
    \count0 = \time \divide\count0 by 60%
    \count2 = \count0 % the hour%
    \count4 = \time \multiply\count0 by 60%
    \advance\count4 by -\count0 % the minute%
    \ifnum\count4<10 \toks1 = {0}    \else \toks1 = {}\fi%
    \ifnum\count2<12 \toks0 = {A.M.} %
      \else \toks0 = {P.M.}\advance\count2 by -12\fi%
    \ifnum\count2=0 \count2 = 12 \fi % make midnight 12%
    {\number\count2:\the\toks1 \number\count4%
    \thinspace \the\toks0}%
  \endgroup%
}%
\def\timestamp{\number\day\space\monthname\space\number\year,\space\timestring}%
\def\datestamp{\monthname\space\number\day,\space\number\year}%
%    \end{macrocode}%
% \end{macro}%
%
% \begin{macro}{Rules}%
%    These macros set up the width of rules.  They also determine whether they are printed.%
%    \begin{macrocode}%
\def\noheadline{\setboolean{@hl}{false}}%
\define@key{ov}{noheadline}[true]{\iffixq{#1}{\setboolean{@hl}{false}}}%
\def\nofootline{\setboolean{@fl}{false}}%
\define@key{ov}{nofootline}[true]{\iffixq{#1}{\setboolean{@fl}{false}}}%
\def\nolines{\setboolean{@fl}{false}\setboolean{@hl}{false}}%
\define@key{ov}{nolines}[true]{\iffixq{#1}{\setboolean{@fl}{false}\setboolean{@hl}{false}}}%
\def\@plhl{1}\def\nopheadline{\def\@plhl{0}}%
\def\@plfl{1}\def\nopfootline{\def\@plfl{0}}%
\def\Headlinewd#1{\setlength{\@Hrw}{#1}}%
\def\headlinewd#1{\setlength{\@hrw}{#1}}%
\def\Footlinewd#1{\setlength{\@Frw}{#1}}%
\def\footlinewd#1{\setlength{\@frw}{#1}}%
\define@key{ov}{Headlinewd}{\setlength{\@Hrw}{#1}}%
\define@key{ov}{headlinewd}{\setlength{\@hrw}{#1}}%
\define@key{ov}{Footlinewd}{\setlength{\@Frw}{#1}}%
\define@key{ov}{footlinewd}{\setlength{\@frw}{#1}}%
%    \end{macrocode}%
% \end{macro}%
%
%    \subsection{{\tt fancyhdr} in {\tt newlfm}} %
%    Using fancyhdr (version 1.2v or later), the |ltrhead| and |othhead| environments %
%    are set up.  The user actually does not control the \info{} using the %
%    standard macros, but rather uses Lfooter for the left footer on the %
%    letterhead and lfooter for the left footer on remaining pages.  Thus, the %
%    \info{} is transfered around in a simple manner. %
%
% \begin{macro}{ltrhead}%
%    \begin{macrocode}%
\fancypagestyle{ltrhead}{%
  \def\ifta{0}%
  \txa{Before setting up letterhead}%
  \showdim{Letterhead}%
  \fancyhf{}%
  \txa{Current stored info: \string\@ltr@head:\@ltr@head}%
  \fancyfoot[L]{\@Lfooter}%
  \fancyfoot[C]{\@Cfooter}%
  \fancyfoot[R]{\@Rfooter}%
  \fancyhead[L]{\@Lheader \vspace*{\the\@marg@tp@a}}%
  \fancyhead[C]{\@Cheader \vspace*{\the\@marg@tp@a}}%
  \fancyhead[R]{\@Rheader \vspace*{\the\@marg@tp@a}}%
  \showdim{Letterhead}%
  \def\@lodd{\relax}%
  \def\@rodd{\relax}%
%   \ifempty{\@LUheader}{}{\vspace*{-.5in}\@LUheader \vspace*{.5in}}%
%  }%   % section 2 goes here if we go to plan b%
%   \ifempty{\@RUheader}{}{}%
%  }%
% \@set@em@up%
% \settoheight{\@utila}{\@Rheader}\settodepth{\@utilb}{\@Rheader}\addtolength{\@utila}{\@utilb}%
% \txa{Right: \the\@utila}%
% \settoheight{\@utila}{\@Lheader}\settodepth{\@utilb}{\@Lheader}\addtolength{\@utila}{\@utilb}%
% \txa{Left: \the\@utila}%
% \settoheight{\@utila}{\@Cheader}\settodepth{\@utilb}{\@Cheader}\addtolength{\@utila}{\@utilb}%
% \txa{Center: \the\@utila}%
  \txa{After setting up letterhead}%
  \def\ifta{0}%
}%
%    \end{macrocode}%
% \end{macro}%
% \begin{macro}{othhead}%
%    \begin{macrocode}%
\fancypagestyle{othhead}{%
  \def\ifta{0}%
  \fancyhf{}%
  \fancyfoot[L]{\@lfooter}%
  \fancyfoot[C]{\@cfooter}%
  \fancyfoot[R]{\@rfooter}%
  \fancyhead[L]{\@lheader \vspace*{\the\@marg@tp@a}}%
  \fancyhead[R]{\@rheader \vspace*{\the\@marg@tp@a}}%
  \fancyhead[C]{\@cheader \vspace*{\the\@marg@tp@a}}%
  \def\@lodd{\relax}%
  \def\@rodd{\relax}%
}%
%    \end{macrocode}
% \end{macro}%
%
% \subsection{Wrapper code}
% \begin{macro}{makelth}
%    In order to use the program more efficiently, it is possible to set up a
%    database with addresses, letterhead setups and signature setups in it.
%    Rather than address placing \info{} about each letter in the letter
%    in the letter itself, \info{} is placed in the letter database file
%    and inserted into a letter using the wrapper.
%
%    \begin{enumerate}
%    \item The file is called |letrinfo.tex|.  
%    \item The file is placed somewhere on the \TeX{} path.  
%    \item In this file, place all addresses, letterhead setups and signature
%      setups as follows:
%      \begin{enumerate}
%      \item In file |letrinfo.tex|, set up a command 
%        |\makelth|{XXX}{ stuff for the letter head} 
%      \item This makes a macro out of the stuff, with the name |\lthXXX|
%      \item Issue the command |\lthXXX| prior to the start of the environment
%      \item The letterhead structure will then be used in the letter in which
%        it is called
%      \item The following commands are generally included in a letterhead
%        environment: lfooter, cfooter, rfooter, lheader, cheader, rheader,
%        Lfooter, Cfooter, Rfooter, Lheader, Cheader, Rheader, lmargin,
%        rmargin, Lmargin, Rmargin
%      \end{enumerate}
%    \end{enumerate}
%    
%    \begin{macrocode}
%</package>
%<*setdim>
\def\ifta{0}\def\iftb{0}%
\def\txa#1{\ifthenelse{\equal{\ifta}{1}}{\typeout{#1}}{}}%%
% Set text margin parameters
\def\settext#1#2#3#4#5{%
  \txa{\string\textheight: #1}\txa{\string\textwidth: #2}%
  \global\setlength{\textheight}{#1}%
  \global\setlength{\textwidth}{#2}%
  \global\setlength{\evensidemargin}{#3}%
  \global\setlength{\oddsidemargin}{#4}%
  \global\setlength{\columnsep}{#5}%
  \@change@text%
}
% Set text margin parameters locally, not globally
\def\lsettext#1#2#3#4#5{%
  \txa{\string\textheight: #1}\txa{\string\textwidth: #2}%
  \setlength{\textheight}{#1}%
  \setlength{\textwidth}{#2}%
  \setlength{\evensidemargin}{#3}%
  \setlength{\oddsidemargin}{#4}%
  \setlength{\columnsep}{#5}%
  \@lchange@text%
}
% Change text margin parameters
\def\@change@text{%
  \global\setlength{\@colht}{\textheight}%
  \txa{\string\@colht:\the\@colht}%
  \global\setlength{\@colroom}{\textheight}%
  \global\setlength{\vsize}{\textheight}%
  \global\setlength{\columnwidth}{\textwidth}%
  \if@twocolumn%
    \advance\columnwidth-\columnsep \divide\columnwidth\tw@%
    \@firstcolumntrue%
  \fi%
  \global\setlength{\hsize}{\columnwidth}%
  \global\setlength{\linewidth}{\hsize}%
}%
% Change text margin parameters locally, not globally
\def\@lchange@text{%
  \setlength{\@colht}{\textheight}%
  \txa{\string\@colht:\the\@colht}%
  \setlength{\@colroom}{\textheight}%
  \setlength{\vsize}{\textheight}%
  \setlength{\columnwidth}{\textwidth}%
  \if@twocolumn%
    \advance\columnwidth-\columnsep \divide\columnwidth\tw@%
    \@firstcolumntrue%
  \fi%
  \setlength{\hsize}{\columnwidth}%
  \setlength{\linewidth}{\hsize}%
}%
% Retain dimensions for change at a point, and later restoration
\def\retdims{%
  \showdim{Setpage A}%
  \txa{In setpage: \npind}%
  \global\setlength{\@xda}{\textheight}%
  \global\setlength{\@xdb}{\textwidth}%
  \global\setlength{\@xdc}{\evensidemargin}%
  \global\setlength{\@xdd}{\oddsidemargin}%
  \global\setlength{\@xde}{\columnsep}%
  \global\setlength{\@xdf}{\topmargin}%
  \global\setlength{\@xdg}{\headheight}%
  \global\setlength{\@xdh}{\headsep}%
  \global\setlength{\@xdi}{\footskip}%
}
% Restore dimensions from change at a point
\def\rstdims{%
  \showdim{Setpage A}%
  \txa{In setpage: \npind}%
  \global\setlength{\textheight}{\@xda}%
  \global\setlength{\textwidth}{\@xdb}%
  \global\setlength{\evensidemargin}{\@xdc}%
  \global\setlength{\oddsidemargin}{\@xdd}%
  \global\setlength{\columnsep}{\@xde}%
  \global\setlength{\topmargin}{\@xdf}%
  \global\setlength{\headheight}{\@xdg}%
  \global\setlength{\headsep}{\@xdh}%
  \global\setlength{\footskip}{\@xdi}%
  \@change@text%
}
% Set all dimensions
\def\setpage#1#2#3#4#5#6#7#8#9{%
  \showdim{Setpage A}%
  \txa{In setpage: \npind}%
  \settext{#1}{#2}{#3}{#4}{#5}%
  \global\setlength{\topmargin}{#6}%
  \global\setlength{\headheight}{#7}%
  \global\setlength{\headsep}{#8}%
  \global\setlength{\footskip}{#9}%
  \@change@text%
  \showdim{Setpage B}%
}
\def\lsetpage#1#2#3#4#5#6#7#8#9{%
  \showdim{Setpage A}%
  \txa{In setpage: \npind}%
  \lsettext{#1}{#2}{#3}{#4}{#5}%
  \setlength{\topmargin}{#6}%
  \setlength{\headheight}{#7}%
  \setlength{\headsep}{#8}%
  \setlength{\footskip}{#9}%
  \@lchange@text%
  \showdim{Setpage B}%
}
\def\changetext#1#2#3#4#5{%
  \addtolength{\textheight}{#1}%
  \addtolength{\textwidth}{#2}%
  \addtolength{\evensidemargin}{#3}%
  \addtolength{\oddsidemargin}{#4}%
  \addtolength{\columnsep}{#5}%
  \@change@text%
}%
\def\changepage#1#2#3#4#5#6#7#8#9{%
  \changetext{#1}{#2}{#3}{#4}{#5}%
  \addtolength{\topmargin}{#6}%
  \addtolength{\headheight}{#7}%
  \addtolength{\headsep}{#8}%
  \addtolength{\footskip}{#9}%
  \@change@text%
}%
%</setdim>
%<*addrset>
%    \end{macrocode}
%    \begin{macrocode}
\def\makeletterhead#1#2{\expandafter\newcommand\csname lth#1\endcsname{#2}}%
\def\makelth#1#2{\expandafter\newcommand\csname lth#1\endcsname{#2}}%
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\makesig}
%    In this wrapper macro, signature \info{} is associated with a name,
%    just as described above in the makelth macro. 
%
%    \begin{macrocode}
\def\makesignature#1#2{\expandafter\newcommand\csname sig#1\endcsname{#2}}%
\def\makesig#1#2{\expandafter\newcommand\csname sig#1\endcsname{#2}}%
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\makeadr}
%    In this wrapper macro, address \info{} is associated with a name,
%    just as described above in the makelth macro.  This includes macros
%    such as nameto, phoneto, faxto and other \info{} associated with a
%    particular addressee.
%
%    \begin{macrocode}
\def\makeadr#1#2{\expandafter\newcommand\csname adr#1\endcsname{#2}}%
\def\makeaddress#1#2{\expandafter\newcommand\csname adr#1\endcsname{#2}}%
%    \end{macrocode}
% \end{macro}
%    \begin{macrocode}
%</addrset>
%<*package>
%    \end{macrocode}
%
% \subsection{Text placement}
% \begin{macro}{Letterhead}
%    This suite of macro inserts text into a specified place for the |fancyhdr|
%    to use.  This is then later transfered into the footer of the
%    letterhead page, right side.  The remaining macros also do this, as
%    follows. r, c, l: right, center, left.  Header: top of page.  Footer:
%    bottom of page.   Capitalized: on letterhead page.  Non-capitalized: on
%    remaining pages.   
%    
%    In placing \info{} on the letterhead page, special constructions
%    allow placement {\it under} the top margin and {\it over} the footer
%    area.  These are the macros |\LOfooter|, |\COfooter|, |\ROfooter|,
%    |\LUheader|, |\CUheader| and |\RUheader|.  In the case of  |\LOfooter|,
%    |\COfooter| and |\ROfooter|, the boxed \info{} is placed over the
%    related footer section, which includes lying over the footer line (if
%    printed).  In the case of |\LUheader|, |\CUheader| and |\RUheader|, the
%    boxed \info{} is placed under the related header section, which
%    includes lying under the header line (if printed).  When any of these
%    special purpose sections are used, text length is adjusted as needed.
%    ({\bfseries NOTE:} Although this is under development, these commands are
%    not yet functional.
%    \begin{macrocode}
\providecommand{\@Backgrd}{}    \providecommand{\@backgrd}{}%
\providecommand{\@Lfooter}{}    \providecommand{\@Cfooter}{}%
\providecommand{\@Rfooter}{}    \providecommand{\@lfooter}{}%
\providecommand{\@cfooter}{}    \providecommand{\@rfooter}{}%
\providecommand{\@LOfooter}{}   \providecommand{\@COfooter}{}%
\providecommand{\@ROfooter}{}   \providecommand{\@Lheader}{}%
\providecommand{\@Cheader}{}    \providecommand{\@Rheader}{}%
\providecommand{\@lheader}{}    \providecommand{\@cheader}{}%
\providecommand{\@rheader}{}    \providecommand{\@LUheader}{}%
\providecommand{\@CUheader}{}   \providecommand{\@RUheader}{}%
\providecommand{\@Rmarg}{}      \providecommand{\@Lmarg}{}%
\providecommand{\@rmarg}{}      \providecommand{\@lmarg}{}%
\def\Backgrd#1{\setboolean{@Bg@use}{true}\def\@Backgrd{#1}}%
\def\backgrd#1{\setboolean{@bg@use}{true}\def\@backgrd{#1}}%
\def\Lfooter#1{\setboolean{@Lf@use}{true}\def\@Lfooter{#1}}%
\def\Cfooter#1{\setboolean{@Cf@use}{true}\def\@Cfooter{#1}}%
\def\Rfooter#1{\setboolean{@Rf@use}{true}\def\@Rfooter{#1}}%
\def\LOfooter#1{\setboolean{@LOf@use}{true}\def\@LOfooter{#1}}%
\def\COfooter#1{\setboolean{@COf@use}{true}\def\@COfooter{#1}}%
\def\ROfooter#1{\setboolean{@ROf@use}{true}\def\@ROfooter{#1}}%
\def\lfooter#1{\setboolean{@lf@use}{true}\def\@lfooter{#1}}%
\def\cfooter#1{\setboolean{@cf@use}{true}\def\@cfooter{#1}}%
\def\rfooter#1{\setboolean{@rf@use}{true}\def\@rfooter{#1}}%
\def\Lheader#1{\setboolean{@Lh@use}{true}\def\@Lheader{#1}}%
\def\Cheader#1{\setboolean{@Ch@use}{true}\def\@Cheader{#1}}%
\def\Rheader#1{\setboolean{@Rh@use}{true}\def\@Rheader{#1}}%
\def\LUheader#1{\setboolean{@LUh@use}{true}\def\@LUheader{#1}}%
\def\CUheader#1{\setboolean{@CUh@use}{true}\def\@CUheader{#1}}%
\def\RUheader#1{\setboolean{@RUh@use}{true}\def\@RUheader{#1}}%      
\def\lheader#1{\setboolean{@lh@use}{true}\def\@lheader{#1}}%
\def\cheader#1{\setboolean{@ch@use}{true}\def\@cheader{#1}}%
\def\rheader#1{\setboolean{@rh@use}{true}\def\@rheader{#1}}%
\def\Rmargin#1{\def\@Rmarg{#1}\setboolean{@marg@Ruse}{true}}%
\def\Lmargin#1{\def\@Lmarg{#1}\setboolean{@marg@Luse}{true}}%
\def\rmargin#1{\def\@rmarg{#1}\setboolean{@marg@ruse}{true}}%
\def\lmargin#1{\def\@lmarg{#1}\setboolean{@marg@luse}{true}}%
%    \end{macrocode}
% \end{macro}
%
% \subsection{Memo blocks}
% \begin{macro}{\Prnt@Chk}
%    This is a conditional printing macro.  The arguments are
%    \begin{enumerate}
%    \item true: print the remainder of this item.
%    \item true: print to the left.
%    \item true: print centered.  If 2) and 3) false, print to the right.
%    \item material to print.
%    \item material or other tokens to evaluate after the previous item is aligned.
%    \item vertical space above the item.
%    \item vertical space after the item.
%    \end{enumerate}
%    \begin{macrocode}
\newcommand{\Prnt@Chk}[7]{%
  \ifthenelse{\boolean{#1}}{\ifempty{#6}{}{\vspace*{-2\parskip}\vspace*{#6}}}{}%
  \ifthenelse{\boolean{#1}}%
    {\ifthenelse{\boolean{#2}}{\begin{flushleft}{#4}\end{flushleft}}%
    {\ifthenelse{\boolean{#3}}%
      {\begin{center}{#4}\end{center}}%
      {\begin{flushright}{#4}\end{flushright}}}%
    }{}%
  \ifthenelse{\boolean{#1}}{#5}{}%
  \ifthenelse{\boolean{#1}}{\ifempty{#7}{}%
    {\vspace*{-2\parskip}\vspace*{#7}}}{}%
}%
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\memosec}
%    \label{page:memosec}
%    This section defines the text used in printing a normal memo.  
%    This will go at the top of the text block.
%   
%    If the user intends to modify the |\memosec| code to provide their 
%    own memo, the code  in |smemosec.tex| should be modified.  Save  
%    this as file |memosec.tex|, with any desired modification.
%
%    \begin{macrocode}
\newcommand{\fixphr}[2]{\strut & \parbox[t]{\the\@utilc}{#1} #2 \\}%
\def\ifta{0}%
\def\memosec{%
  \def\ifta{0}\txa{Start of memosec}%
  \noindent\ignorespaces%
  \settowidth{\@utila}{{\bf \@hnfr@phr:\hspace*{1.25em}}}% 
  \setlength{\@utilb}{\textwidth-\@utila-.1em}%
  \addtolength{\@utilb}{-5pt}%   
  \settowidth{\@utilc}{\@phn@phr:\hspace*{2em}}%
  \settowidth{\@utild}{\@fax@phr:\hspace*{2em}}%
  \ifthenelse{\lengthtest{\@utilc<\@utild}}{\setlength{\@utilc}{\the\@utild}}{}%
  \settowidth{\@utild}{\@pager@phr:\hspace*{2em}}
  \ifthenelse{\lengthtest{\@utilc<\@utild}}{\setlength{\@utilc}{\the\@utild}}{}%
  \settowidth{\@utild}{\@email@phr:\hspace*{2em}}
  \ifthenelse{\lengthtest{\@utilc<\@utild}}{\setlength{\@utilc}{\the\@utild}}{}%
\txa{After length tests}
{\vspace*{-1em}\setlength{\tabcolsep}{0pt}%
\setboolean{@memo@a}{false}%
\vspace*{\@pre@memo@sp}\noindent\par%
\begin{flushleft}%
\begin{tabular}{p{\the\@utila}l}%
\ifthenelse{\boolean{@memo@g}}%
{\setboolean{@memo@a}{true}%
\strut {\bf \@hnto@phr:} & \@name@to \strut \\%
\ifthenelse{\boolean{@memo@b}}{\strut &%
\parbox[t]{\the\@utilb}{\@addr@to\strut}\strut\\}{}%
\ifthenelse{\boolean{@memo@c}}{\fixphr{\@phn@phr:}{\@phn@to}}{}%
\ifthenelse{\boolean{@memo@d}}{\fixphr{\@fax@phr:}{\@fax@to}}{}%
\ifthenelse{\boolean{@memo@n}}{\fixphr{\@pager@phr:}{\@pager@to}}{}%
\ifthenelse{\boolean{@memo@k}}{\fixphr{\@email@phr:}{\@email@to}}{}%
}{}%
\ifthenelse{\boolean{@memo@e}}%
{\setboolean{@memo@a}{true}%
\strut {\bf \@hnfr@phr:} &{\@name@fr} \strut \\%
\ifthenelse{\boolean{@memo@h}}{\strut &%
\parbox[t]{\the\@utilb}{\@addr@fr \strut} \strut \\}{}%
\ifthenelse{\boolean{@memo@i}}{\fixphr{\@phn@phr:}{\@phn@fr}}{}%
\ifthenelse{\boolean{@memo@j}}{\fixphr{\@fax@phr:}{\@fax@fr}}{}%
\ifthenelse{\boolean{@memo@m}}{\fixphr{\@pager@phr:}{\@pager@fr}}{}%
\ifthenelse{\boolean{@memo@l}}{\fixphr{\@email@phr:}{\@email@fr}}{}%
}{}%
\ifthenelse{\boolean{@memo@f}}{\setboolean{@memo@a}{true}%
\strut {\bf \@re@phr:}   &  {\@re@line} \\%
}{}%
\ifthenelse{\boolean{@dt@p}}{\strut {\bf \@date@phr:} & \@xdate \\}{}%
\ifthenelse{\boolean{@memo@a}}{\hline}{}%
\end{tabular}%
\end{flushleft}%
}%
\vspace*{\@post@memo@sp}\noindent\par%
\txa{End of memosec}
}%
\InputIfFileExists{memosec.tex}%
{\typeout{Reading {\tt memosec.tex}}}%
{\typeout{The default definition for memosec is used.  File memosec.tex doesn't exist.}}%
%    \end{macrocode}
% \end{macro}
% \subsection{Press Release blocks}
% \begin{macro}{\pressbegin}
%    \label{page:pressbegin}
%    This section defines the text used in printing a normal press release.  
%    This will go at the top of the text block.  It also sets up
%    appropriate page headers and turns off header and footer lines.
%
%    |\nolines| seemingly should disable header and footer lines, but
%    it only takes effect via |\@set@em@up|, which is only used if
%    |@over@all| is true.  It's not in this case.  That might be a
%    problem with the implementation of |\nolines|.  It would be good
%    if the redefinition of the line width only persisted within a
%    give lfmp environment.  It's not clear that is the case.
%
%    We want |\@more@phr| (usually ``-- more --'') to appear on the
%    bottom of every page but the last.  Because the output routine may
%    be triggered when we're already into the next page, the best way to
%    handle this is with the marking mechanism.  The left mark gets the
%    {\em last\/} such mark given, while the right mark uses the first
%    right mark on the page.  So we use the left mark to set the footer.
%
%    In principle, we might use the right mark for the short header used
%    on later pages, but the existing distinction between the first and
%    other pages already handles that.
%
%    There are a lot of hard-coded distances here; eventually they
%    should perhaps be generalized.
%
%    \begin{macrocode}
\newcommand{\pressbegin}{%maybe set dimensions, esp 1 inch margins, here
\settowidth{\@utila}{\@addr@fr}%
\def\ifta{0}%
\txa{Setup beginning of press release}%
\renewcommand{\headrulewidth}{0pt}\renewcommand{\footrulewidth}{0pt}%
\begin{flushleft}%
\rule{\textwidth}{1pt} \par \noindent%
\centerline{\LARGE \@pr@release \strut} \par\noindent%
\rule{\textwidth}{1pt} \par \noindent%
\txa{After first block}%
\setlength{\tabcolsep}{0pt}%
\begin{tabular}{l@{\hspace{1em}}l}%
\textbf{\@contact@phr:} & \@name@fr \strut \\%
& \parbox[t]{\@utila}{\@addr@fr  \strut } \strut \\ %%
\ifempty{\@phn@fr}{}{\textbf{\@phn@phr:} & \@phn@fr \strut \\}%
\ifempty{\@phnb@fr}{}{\textbf{\@phn@phr:} & \@phnb@fr \strut \\}%
\ifempty{\@phnc@fr}{}{\textbf{\@phn@phr:} & \@phnc@fr \strut \\}%
\ifempty{\@phnd@fr}{}{\textbf{\@phn@phr:} & \@phnd@fr \strut \\}%
\ifempty{\@fax@fr}{}{\textbf{\@fax@phr:} & \@fax@fr \strut \\}%    % maybe email, web site?
\textbf{Date:} & \@xdate%
\end{tabular}%
\end{flushleft}%
\txa{After endflushleft}%
\rule{\textwidth}{1pt} \par \noindent%
\centerline{\textbf{\Large \@pr@headline}} \par \noindent%
\rule{\textwidth}{1pt} \par \noindent%
\ifthenelse{\boolean{@space@d}}{\begin{doublespace}}{\begin{singlespace}}%
\ifthenelse{\boolean{@pr@by}}{\noindent \@pr@byline \\}{}%
\noindent%
\txa{end of pressbegin}%
}%
\InputIfFileExists{prsrls.tex}%
  {\typeout{Reading press release page setup from prsrls.tex}}%
  {\typeout{Press release definitions stored in newlfm.cls}}%
%    \end{macrocode}
% \end{macro}
% \subsection{ Fax blocks}
% \begin{macro}{\faxpage}
%    \label{page:faxsec}
%    Here we define a FAX page.  This separate stand-along page includes:
%    \begin{enumerate}
%    \item the term \@fax@cover@line in Huge text, boxed
%    \item From-name
%    \item Optional from-information
%    \item To-name
%    \item Optional to-information
%    \item Re-line
%    \item Additional information specified in |\faxmssg|
%    \end{enumerate}
%    
%    \begin{macrocode}
\txa{Next part}%
\newcommand*{\faxpage}{{%
\def\ifta{0}\showdim{Before setpage inside faxpage}%
\lsetpage{\@fax@height}{\@fax@width}{1in}{0in}{.25in}{1in}{.75in}{.25in}{.25in}%
\showdim{After setpage}%
{\def\ifta{0}\showdim{Before fax page setup A}%
\setlength{\@utila}{\paperheight}\addtolength{\@utila}{-1in}%
\setlength{\@utilb}{\paperwidth}\addtolength{\@utilb}{-2in}%
\global\setlength{\textwidth}{\paperwidth-2in}%
\txa{\string\paperheight:\paperheight,\string\@utila:\the\@utila}%
\txa{\string\paperwidth:\paperwidth,\string\@utilb:\the\@utilb}\gdef\npind{A1}%
\@clear@box%
\def\ifta{0}% 
\txa{\string\paperheight:\the\paperheight,\string\@utila:\the\@utila}%
\txa{\string\paperwidth:\the\paperwidth,\string\@utilb:\the\@utilb}%
\txa{\string\textheight:\the\textheight,\string\textwidth:\the\textwidth}%
\newpage\c@page\@ne\interlinepenalty=200%
\showdim{Before fax page setup B}%
\thispagestyle{empty}%
\vspace*{-\the\@Hgt@Head}\vspace*{.5in}%
\showdim{Inside fax page specification}%
\begin{center}%
\framebox{\Huge{\@fax@cover@line}} \\%
\vspace*{.5in} \Large{\@fax@page@count: \ref{totpage}} \\%
\vspace*{.5in} \Large{\timestamp} \\%
\end{center}%
\settowidth{\@utila}{\LARGE{\@hnto@phr:}}%
\settowidth{\@utilb}{\LARGE{\@hnfr@phr:}}%
\ifthenelse{\lengthtest{\@utila<\@utilb}}{\setlength{\@utila}{\@utilb}}{}%
\settowidth{\@utilb}{\LARGE{\@m@phr:}}%
\ifthenelse{\lengthtest{\@utila<\@utilb}}{\setlength{\@utila}{\@utilb}}{}%
\setlength{\tabcolsep}{0pt}%
\setlength{\@utilb}{\the\textwidth-\the\@utila}%
\txa{Lengths:\the\textwidth, \the\@utila, \the\@utilb}%
\begin{tabular}{p{\the\@utila}p{\the\@utilb}} \hline \\%
\LARGE{\@hnto@phr:} & \parbox[t]{\@utilb}{\@name@to \strut \\ \@addr@to \strut%
\ifempty{\@phn@to}{}{\\ \@phn@phr:\space\@phn@to \strut}%
\ifempty{\@phnb@to}{}{\\ \@phn@phr:\space\@phnb@to \strut}%
\ifempty{\@phnc@to}{}{\\ \@phn@phr:\space\@phnc@to \strut}%
\ifempty{\@phnd@to}{}{\\ \@phn@phr:\space\@phnd@to \strut}%
\ifempty{\@fax@to}{}{\\ \@fax@phr:\space\@fax@to \strut}} \vspace*{5pt} \\ \hline \vspace*{5pt}%
\LARGE{\@hnfr@phr:} & \vspace*{5pt}%
\parbox[t]{\@utilb}{\@name@fr \strut \\ \@addr@fr \strut %%
\ifempty{\@phn@fr}{}{\\ \@phn@phr:\space\@phn@fr \strut}%
\ifempty{\@phnb@fr}{}{\\ \@phn@phr:\space\@phnb@fr \strut}%
\ifempty{\@phnc@fr}{}{\\ \@phn@phr:\space\@phnc@fr \strut}%
\ifempty{\@phnd@fr}{}{\\ \@phn@phr:\space\@phnd@fr \strut}%
\ifempty{\@fax@fr}{}{\\ \@fax@phr:\space\@fax@fr \strut}} \vspace*{5pt} \\  \hline%
\vspace*{5pt}% 
\strut \LARGE{\@re@phr:} & \strut%
\ifthenelse{\equal{\@re@line}{---BLANK---}}{}{\@re@line}\strut \\%
\ifempty{\@fax@mssg}{}{ \strut%
\LARGE{\@m@phr:} \strut &%
\parbox[t]{\@utilb}{\strut \@fax@mssg} \strut \\ \hline}%
\end{tabular}}%
\def\ifta{0}\showdim{End of fax page setup }%
\@dim@resetfalse%
\txa{After dimreset}%
\gdef\npind{F}%
\txa{Before newpage}%
\newpage%
\txa{After newpage}%
}}%
\InputIfFileExists{faxpage.tex}%
  {\typeout{Reading FAX page definitions from faxpage.tex}}%
  {\typeout{faxpage definitions stored in newlfm.cls}}%
%    \end{macrocode}
% \end{macro}
% \begin{macro}{faxblocka}
%    Here we define FAX block a.  This block is inserted in several places in
%    the letter, by chosing several letter styles.  It can also be inserted in
%    several blocks by user choice.  Fax Block A includes
%    1.) name-from, 2.) fax-from, 3.) name-to, 4.) fax-to, and 5.) re-line.
%    FAX Block A is boxed in a frame.
%    \begin{macrocode}
\newcommand{\faxblocka}{%
  \sbox{\fba}{%
    \framebox[3.0in]{\parbox[b]{3.0in}{\setlength{\tabcolsep}{0pt}
    \begin{tabular}{p{1.0in}p{2in}}
    \multicolumn{2}{l}{\Large \hspace*{.25in} 
      \@fax@phr{} \@doc@phr} \\ \hline
      \@hnfr@phr:\space & \@name@fr \\
      \@fax@phr:\space & \@fax@fr \\ \hline
      \@hnto@phr:\space & \@name@to \\
      \@fax@phr:\space & \@fax@to \\ \hline
      \@re@phr: & \@re@line
    \end{tabular}}}}}
%    \end{macrocode}
% \end{macro}
% \begin{macro}{faxblockb}
%    Here we define FAX block b.  This block is inserted in several places in
%    the letter, by chosing several letter styles.  It can also be inserted in
%    several blocks by user choice.  Fax Block B includes
%    1.) name-from, 2.) fax-from, 3.) phone-from, 4.) name-to, 5.) fax-to,
%    6.) phone to, and 7.) re-line.
%    FAX Block B is boxed in a frame.
%    \begin{macrocode}
\newcommand{\faxblockb}{%
  {\parbox[t]{\textwidth}{\fbox{%
    \begin{tabular}{llll}%
    \@hnfr@phr:\space & \@name@fr & \@hnto@phr:\space & \@name@to \\%
    \@fax@phr:\space & \@fax@fr & \@fax@phr:\space & \@fax@to \\%
    \@phn@phr:\space & \@phn@fr & \@phn@phr:\space & \@phn@to \\%
    \@re@phr: & \multicolumn{3}{l}{\parbox[t]{2in}{\@re@line}} \\%
    \end{tabular}%
}}}}%
%    \end{macrocode}
% \end{macro}
% \subsection{Start of letter document}
% \begin{macro}{\@open@lfm}
%    Begin letter here.  First check for left margin boxes; if one has been
%    specified, set it into the margin, and change the margin spacing
%    accordingly.  After that, the left, right and center under-margin boxes
%    are checked.  If this is a memo, this \info{} is printed next.
%    Finally, we print (optionally) date, from-address, to-address and opening
%    salutation.
%    \begin{macrocode}
\newcommand{\@set@col}[4]{\ifthenelse{\boolean{#1}}{
\settowidth{\@utile}{\usebox{#2}}
\ifthenelse{\lengthtest{\@utile>\@utila}}{\setlength{\@utila}{\@utile}}{}
\settowidth{\@utile}{\usebox{#4}}
\ifthenelse{\lengthtest{\@utile>\@utilb}}{\setlength{\@utilb}{\@utile}}{}
}{}}%
\newcommand{\@set@box}[6]{%
\setboolean{@ztilb}{true}%
\ifthenelse{\swtch=1}{%
\setboolean{@ztila}{true}%
\ifthenelse{\boolean{@ztila}}{\ifthenelse{#1=1}%
{\renewcommand{#1}{a}\setboolean{@ztila}{false}}{}}{}%
\ifthenelse{\boolean{@ztila}}{\ifthenelse{#1=2}%
{\renewcommand{#1}{b}\setboolean{@ztila}{false}}{}}{}%
\ifthenelse{\boolean{@ztila}}{\ifthenelse{#1=3}%
{\renewcommand{#1}{c}\setboolean{@ztila}{false}}{}}{}%
\ifthenelse{\boolean{@ztila}}{\ifthenelse{#1=4}%
{\renewcommand{#1}{d}\setboolean{@ztila}{false}}{}}{}%
\ifthenelse{\boolean{@ztila}}{\ifthenelse{#1=5}%
{\renewcommand{#1}{e}\setboolean{@ztila}{false}}{}}{}%
\ifthenelse{\boolean{@ztila}}{\ifthenelse{#1=6}%
{\renewcommand{#1}{f}\setboolean{@ztila}{false}}{}}{}%
\ifthenelse{\boolean{@ztila}}{\ifthenelse{#1=7}%
{\renewcommand{#1}{g}\setboolean{@ztila}{false}}{}}{}%
\ifthenelse{\boolean{@ztila}}{\ifthenelse{#1=8}%
{\renewcommand{#1}{h}\setboolean{@ztila}{false}}{}}{}%
\ifthenelse{\boolean{@ztila}}%
{\typeout{Row index for Special #4 incorrect - print cancelled}%
\setboolean{@ztilb}{false}}{}\setboolean{@ztila}{true}%
\ifthenelse{\boolean{@ztila}}{\ifthenelse{#2=1}%
{\renewcommand{#2}{a}\setboolean{@ztila}{false}}{}}{}%
\ifthenelse{\boolean{@ztila}}{\ifthenelse{#2=2}%
{\renewcommand{#2}{b}\setboolean{@ztila}{false}}{}}{}%
\ifthenelse{\boolean{@ztila}}{\ifthenelse{#2=3}%
{\renewcommand{#2}{c}\setboolean{@ztila}{false}}{}}{}%
\ifthenelse{\boolean{@ztila}}%
{\typeout{Column index for Special #4 incorrect - print cancelled}%
\setboolean{@ztilb}{false}}{}}{}%
\ifthenelse{\boolean{@ztilb}}{\sbox{\csname @hblk@#1#2\endcsname}{\usebox{#3}}%
\setboolean{@hblk@#1}{true}%
\addtolength{\csname @hblk@#1@bef\endcsname}{#5}%
\addtolength{\csname @hblk@#1@aft\endcsname}{#6}}{}%
}%
\newcommand{\ifempty}[3]{\ifthenelse{\equal{#1}{}}{#2}{#3}}%
\newcommand{\ifpempty}[3]{\ifthenelse{\equal{\protect#1}{}}{#2}{#3}}%
%    \end{macrocode}
%    This is the actual section for openlfm.
%    \begin{macrocode}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\def\@open@lfm{%
\def\ifta{0}%
\txa{Start of the @open@lfm}%
\ifthenelse{\boolean{@marg@Ruse}}%             Here we set up right-side marginal notes
{\setlength{\@utile}{-\@Hgt@Head+\@marg@rt@tp@d}% Adjust column top to leftmargintopdist
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Set margin par stuff printed in margin 
\normalmarginpar%
\marginpar{\vspace*{\the\@utile}\hspace*{\@marg@rt@l}\hspace*{-\marginparsep}\@Rmarg}}{}%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Print in the left margin?
\ifthenelse{\boolean{@marg@Luse}}{%             Here we set up left-side marginal notes
\setlength{\@utile}{-\@Hgt@Head+\@marg@lt@tp@d}% Adjust column top to leftmargintopdist
\reversemarginpar\txa{Left margin}%             Switch margin printing to other side
\marginpar{\vspace*{\the\@utile}\hspace*{\@marg@lt@l}\@Lmarg}}{}%
\settoheight{\@utild}{Test testy}%
\setlength{\@utile}{\headrulewidth}\addtolength{\@utile}{-3\@utild}
\vspace*{\@utile}%
\txa{Running memosec}%                         Memo processing    
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Print memo block?
\ifthenelse{\boolean{@memo@bl}}%
{{\memosec}\setboolean{@dt@p}{false}\setboolean{@no@spc}{true}}{}%Memo
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Press release
\txa{Running pressbegin}%
\ifthenelse{\boolean{@pr@p}}%
{\pressbegin%                                Press release processing
\txa{here we go again - out of pressbegin}%
\setboolean{@no@spc}{true}}{}% % Press Release
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Set the from info into a box - on first pass, measure - second pass, fit
% parbox to the measure
%A2%
\txa{Fixing boxes}%
\sbox{\b@addr@fr}{\noindent\setlength{\tabcolsep}{0pt}% Address-from into a box
\raggedleft\begin{tabular}{l@{}}%
\noindent\ignorespaces\@addr@fr%
\ifthenelse{\boolean{@addr@fr@t}}{\\ \@phn@phr: \@phn@fr}{}%
\ifthenelse{\boolean{@addr@fr@f}}{\\ \@fax@phr: \@fax@fr}{}%
\ifthenelse{\boolean{@addr@fr@e}}{\\ \@email@phr: \@email@fr}{}%
\end{tabular}}%
\settowidth{\@utilc}{\usebox{\b@addr@fr}}%
\sbox{\b@addr@fr}{\noindent\setlength{\tabcolsep}{0pt}%
\parbox[t]{\@utilc}{\noindent\setlength{\tabcolsep}{0pt}%
\ignorespaces\@addr@fr%
\ifthenelse{\boolean{@addr@fr@t}}{\\ \@phn@phr: \@phn@fr}{}%
\ifthenelse{\boolean{@addr@fr@f}}{\\ \@fax@phr: \@fax@fr}{}%
\ifthenelse{\boolean{@addr@fr@e}}{\\ \@email@phr: \@email@fr}{}%
}}%
\txa{Done with box}%
%B1%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Set the to info into a box - on first pass, measure - second pass, fit
% parbox to the measure
\sbox{\b@addr@to}{\noindent\setlength{\tabcolsep}{0pt}% Address-from into a box
\raggedleft\begin{tabular}{l@{}}%
\noindent\ignorespaces\@name@to\strut\\\@addr@to%
\ifthenelse{\boolean{@addr@to@t}}{\\ \@phn@phr: \@phn@to}{}%
\ifthenelse{\boolean{@addr@to@f}}{\\ \@fax@phr: \@fax@to}{}%
\ifthenelse{\boolean{@addr@to@e}}{\\ \@email@phr: \@email@to}{}%
\end{tabular}}%
\settowidth{\@utilc}{\usebox{\b@addr@to}}%
\sbox{\b@addr@to}{\noindent\setlength{\tabcolsep}{0pt}%
\parbox[t]{\@utilc}{\noindent\setlength{\tabcolsep}{0pt}%
\noindent\ignorespaces\@name@to\strut\\\@addr@to%
\ifthenelse{\boolean{@addr@to@t}}{\\ \@phn@phr: \@phn@to}{}%
\ifthenelse{\boolean{@addr@to@f}}{\\ \@fax@phr: \@fax@to}{}%
\ifthenelse{\boolean{@addr@to@e}}{\\ \@email@phr: \@email@to}{}%
}}%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Now print the three components of the address in the three possible positions
\ifthenelse{\boolean{@no@spc}}{}{\@center@stuff}% Meat of the routine 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\txa{End of @open@lfm}%
\noindent\par
}%
\def\@center@stuff{\txa{centerstuff3}%
% Set up date
\sbox{\@xdateb}{\@xdate}%
% Set up side-by-side
\ifthenelse{\boolean{@s@b@s}}{\@d@pos{1}\@f@pos{2}\@t@pos{2}
\setboolean{@at@c}{false}\setboolean{@af@c}{false}
\setboolean{@at@l}{true}\setboolean{@af@l}{false}}{}
\txa{\string\@intd@pos:\@intd@pos}
\txa{\string\@intt@pos:\@intt@pos}
\txa{\string\@intf@pos:\@intf@pos}
% Set up the rows for printing of the date, from and to
\ifthenelse{\@intd@pos=1}{\def\@r@d{b}}{}%
\ifthenelse{\@intd@pos=2}{\def\@r@d{d}}{}%
\ifthenelse{\@intd@pos=3}{\def\@r@d{f}}{}%
\ifthenelse{\@intt@pos=1}{\def\@r@t{b}}{}%
\ifthenelse{\@intt@pos=2}{\def\@r@t{d}}{}%
\ifthenelse{\@intt@pos=3}{\def\@r@t{f}}{}%
\ifthenelse{\@intf@pos=1}{\def\@r@f{b}}{}%
\ifthenelse{\@intf@pos=2}{\def\@r@f{d}}{}%
\ifthenelse{\@intf@pos=3}{\def\@r@f{f}}{}%
% Set up the columns corresponding to the positions for header elements
\ifthenelse{\boolean{@af@l}}{\def\@c@f{a}}{%
\ifthenelse{\boolean{@af@c}}{\def\@c@f{b}}{\def\@c@f{c}}}%
\ifthenelse{\boolean{@at@l}}{\def\@c@t{a}}{%
\ifthenelse{\boolean{@at@c}}{\def\@c@t{b}}{\def\@c@t{c}}}%
\ifthenelse{\boolean{@dt@l}}{\def\@c@d{a}}{%
\ifthenelse{\boolean{@dt@c}}{\def\@c@d{b}}{\def\@c@d{c}}}%
% Set up the columns for each of the specials, if specials there are%
\txa{Here0}%
\def\swtch{1}%
\ifthenelse{\boolean{@use@spec@a}}%
{\sbox{\@sp@box}{\@spec@a}%
\@set@box{\@row@a}{\@col@a}{\@sp@box}{a}{\@sp@bef@a}{\@sp@aft@a}}{}%
\ifthenelse{\boolean{@use@spec@b}}%
{\sbox{\@sp@box}{\@spec@b}%
\@set@box{\@row@b}{\@col@b}{\@sp@box}{b}{\@sp@bef@b}{\@sp@aft@b}}{}%
\ifthenelse{\boolean{@use@spec@c}}%
{\sbox{\@sp@box}{\@spec@c}%
\@set@box{\@row@c}{\@col@c}{\@sp@box}{c}{\@sp@bef@c}{\@sp@aft@c}}{}%
\ifthenelse{\boolean{@use@spec@d}}%
{\sbox{\@sp@box}{\@spec@d}%
\@set@box{\@row@d}{\@col@d}{\@sp@box}{d}{\@sp@bef@d}{\@sp@aft@d}}{}%
\ifthenelse{\boolean{@use@spec@e}}%
{\sbox{\@sp@box}{\@spec@e}%
\@set@box{\@row@e}{\@col@e}{\@sp@box}{e}{\@sp@bef@e}{\@sp@aft@e}}{}%
\ifthenelse{\boolean{@use@spec@f}}%
{\sbox{\@sp@box}{\@spec@f}%
\@set@box{\@row@f}{\@col@f}{\@sp@box}{f}{\@sp@bef@f}{\@sp@aft@f}}{}%
\ifthenelse{\boolean{@use@spec@g}}%
{\sbox{\@sp@box}{\@spec@g}%
\@set@box{\@row@g}{\@col@g}{\@sp@box}{g}{\@sp@bef@g}{\@sp@aft@g}}{}%
\ifthenelse{\boolean{@use@spec@h}}%
{\sbox{\@sp@box}{\@spec@h}%
\@set@box{\@row@h}{\@col@h}{\@sp@box}{h}{\@sp@bef@h}{\@sp@aft@h}}{}%
\def\swtch{2}%
\txa{HereA}%
% Set up the columns for each of the components%
\ifthenelse{\boolean{@af@p}}%
{\@set@box{\@r@t}{\@c@t}{\b@addr@to}{}{\@addr@to@sk@b}{\@addr@to@sk@a}}{}%
\ifthenelse{\boolean{@af@p}}%
{\@set@box{\@r@f}{\@c@f}{\b@addr@fr}{}{\@addr@fr@sk@b}{\@addr@fr@sk@a}}{}%
\ifthenelse{\boolean{@dt@p}}%
{\@set@box{\@r@d}{\@c@d}{\@xdateb}{}{\@dt@sk@b}{\@dt@sk@a}}{}%
\txa{HereB}%
% Measure the columns for specification
\setlength{\@utila}{0pt}%
\setlength{\@utilb}{0pt}%
\@set@col{@hblk@a}{\@hblk@aa}{\@hblk@ab}{\@hblk@ac}%
\@set@col{@hblk@b}{\@hblk@ba}{\@hblk@bb}{\@hblk@bc}%
\@set@col{@hblk@c}{\@hblk@ca}{\@hblk@cb}{\@hblk@cc}%
\@set@col{@hblk@d}{\@hblk@da}{\@hblk@db}{\@hblk@dc}%
\@set@col{@hblk@e}{\@hblk@ea}{\@hblk@eb}{\@hblk@ec}%
\@set@col{@hblk@f}{\@hblk@fa}{\@hblk@fb}{\@hblk@fc}%
\@set@col{@hblk@g}{\@hblk@ga}{\@hblk@gb}{\@hblk@gc}%
% Define the lengths for the tabular - add just a tiny bit to each column
\setlength{\@utilc}{1pt}%
\addtolength{\@utila}{5\@utilc}%
\addtolength{\@utilb}{5\@utilc}%
\setlength{\@utild}{\textwidth-\@utila-\@utilb-10\@utilc}%
\txa{Lengths: \the\@utila -- \the\@utilb -- \the\@utilc -- \the\@utild}
%VALUE D
{\setlength{\tabcolsep}{0pt}\setlength{\arraycolsep}{0pt}%
\setboolean{@prnt@frm}{false}%
\ifthenelse{\boolean{@prnt@frm}}%
{\def\@tab@set{|p{\@utila}|p{\@utild}|p{\@utilb}|}\def\@tab@line{\hline}}%
{\def\@tab@set{p{\@utila}p{\@utild}p{\@utilb}}\def\@tab@line{}}%
%\rule{\textwidth}{.5pt}\par\nointerlineskip
\txa{regarding}%
\ifthenelse{\boolean{@pt@regard}}%
{\setboolean{@hblk@h}{true}\sbox{\@hblk@ha}{\@regard@phr:\@regard@line}%
\setlength{\@hblk@h@bef}{0pt}\setlength{\@hblk@h@aft}{0pt}}%
{\setboolean{@hblk@h}{false}}%
\txa{greeting}%
\ifthenelse{\boolean{@greet@p}}%
{\setboolean{@hblk@i}{true}\sbox{\@hblk@ia}{\@greet@to}%
\setlength{\@hblk@i@bef}{\@greet@to@sk@a}\setlength{\@hblk@i@aft}{\@greet@to@sk@a}}%
{\setboolean{@hblk@i}{false}}%
%Here finally print the header section
% Very ungainly here - multicolumn does not like the ifthenelse construction
\txa{Dimens: baselineskip:\the\baselineskip,@marg@tp@b:\the\@marg@tp@b}
{\setlength{\baselineskip}{0pt}
\settoheight{\@utile}{Test Testy grinch}
\renewcommand{\arraystretch}{0}
\txa{table start}
\txa{extrarulesep:\the\extrarulesep}
\setlength{\extrarulesep}{0pt}
\begin{flushleft}%
\begin{tabular}{\@tab@set}\@tab@line
\@prnt@boxa{@hblk@a}{\@hblk@a@bef}{1}{\@hblk@aa}{\@hblk@ab}{\@hblk@ac}%
{\@hblk@a@aft}{\@tab@line}{A}%
\@prnt@boxa{@hblk@b}{\@hblk@b@bef}{2}{\@hblk@ba}{\@hblk@bb}{\@hblk@bc}%
{\@hblk@b@aft}{\@tab@line}{B}%
\@prnt@boxa{@hblk@c}{\@hblk@c@bef}{3}{\@hblk@ca}{\@hblk@cb}{\@hblk@cc}%
{\@hblk@c@aft}{\@tab@line}{C}%
\@prnt@boxa{@hblk@d}{\@hblk@d@bef}{4}{\@hblk@da}{\@hblk@db}{\@hblk@dc}%
{\@hblk@d@aft}{\@tab@line}{D}%
\@prnt@boxa{@hblk@e}{\@hblk@e@bef}{5}{\@hblk@ea}{\@hblk@eb}{\@hblk@ec}%
{\@hblk@e@aft}{\@tab@line}{E}%
\@prnt@boxa{@hblk@f}{\@hblk@f@bef}{6}{\@hblk@fa}{\@hblk@fb}{\@hblk@fc}%
{\@hblk@f@aft}{\@tab@line}{F}%
\@prnt@boxa{@hblk@g}{\@hblk@g@bef}{7}{\@hblk@ga}{\@hblk@gb}{\@hblk@gc}%
{\@hblk@g@aft}{\@tab@line}{G}%
%\@prnt@mboxa{@hblk@h}{\@hblk@h@bef}{8}{\@hblk@ha}{\@hblk@hb}{\@hblk@hc}%
%{\@hblk@h@aft}{\@tab@line}{H}%
\end{tabular}%
\end{flushleft}%
\txa{Box a:Before-\the\@hblk@a@bef, After-\the\@hblk@a@aft}%
\settoheight{\@utila}{\usebox{\@hblk@aa}}%
\settoheight{\@utilb}{\usebox{\@hblk@ab}}%
\settoheight{\@utilc}{\usebox{\@hblk@ac}}%
\txa{Heights: \the\@utila, \the\@utilb, \the\@utilc}%       
\txa{Box b:Before-\the\@hblk@b@bef, After-\the\@hblk@b@aft}%
\settoheight{\@utila}{\usebox{\@hblk@ba}}%
\settoheight{\@utilb}{\usebox{\@hblk@bb}}%
\settoheight{\@utilc}{\usebox{\@hblk@bc}}%
\txa{Heights: \the\@utila, \the\@utilb, \the\@utilc}%       
\txa{Box c:Before-\the\@hblk@c@bef, After-\the\@hblk@c@aft}%
\settoheight{\@utila}{\usebox{\@hblk@ca}}%
\settoheight{\@utilb}{\usebox{\@hblk@cb}}%
\settoheight{\@utilc}{\usebox{\@hblk@cc}}%
\txa{Heights: \the\@utila, \the\@utilb, \the\@utilc}%       
\txa{Box d:Before-\the\@hblk@d@bef, After-\the\@hblk@d@aft}%
\settoheight{\@utila}{\usebox{\@hblk@da}}%
\settoheight{\@utilb}{\usebox{\@hblk@db}}%
\settoheight{\@utilc}{\usebox{\@hblk@dc}}%
\txa{Heights: \the\@utila, \the\@utilb, \the\@utilc}%       
\txa{Box e:Before-\the\@hblk@e@bef, After-\the\@hblk@e@aft}%
\settoheight{\@utila}{\usebox{\@hblk@ea}}%
\settoheight{\@utilb}{\usebox{\@hblk@eb}}%
\settoheight{\@utilc}{\usebox{\@hblk@ec}}%
\txa{Heights: \the\@utila, \the\@utilb, \the\@utilc}%       
\txa{Box f:Before-\the\@hblk@f@bef, After-\the\@hblk@f@aft}%
\settoheight{\@utila}{\usebox{\@hblk@fa}}%
\settoheight{\@utilb}{\usebox{\@hblk@fb}}%
\settoheight{\@utilc}{\usebox{\@hblk@fc}}%
\txa{Heights: \the\@utila, \the\@utilb, \the\@utilc}%       
\txa{Box g:Before-\the\@hblk@g@bef, After-\the\@hblk@g@aft}%
\settoheight{\@utila}{\usebox{\@hblk@ga}}%
\settoheight{\@utilb}{\usebox{\@hblk@gb}}%
\settoheight{\@utilc}{\usebox{\@hblk@gc}}%
\txa{Heights: \the\@utila, \the\@utilb, \the\@utilc}%       
\txa{table end}
\settowidth{\@utila}{\usebox{\@hblk@ha}}%
\settoheight{\@utilb}{\usebox{\@hblk@ha}}%
\txa{Greeting: \the\@utila, \the\@utilb}
\txa{Box h:Before-\the\@hblk@h@bef, After-\the\@hblk@h@aft}%
\noindent\par\ifthenelse{\boolean{@hblk@h}}%
{\parbox[b][\@hblk@h@bef+\@hblk@h@aft][b]{\@utila}
{\strut\raisebox{\@hblk@h@aft}{\usebox{\@hblk@ha}}}}{}% 
\settowidth{\@utila}{\usebox{\@hblk@ia}}%
\settoheight{\@utilb}{\usebox{\@hblk@ia}}%
\txa{Greeting: \the\@utila, \the\@utilb}
\txa{Box i:Before-\the\@hblk@i@bef, After-\the\@hblk@i@aft}%
\noindent\par\ifthenelse{\boolean{@hblk@i}}%
{\parbox[b][\@hblk@i@bef+\@hblk@i@aft][b]{\@utila}
{\strut\raisebox{\@hblk@i@aft}{\usebox{\@hblk@ia}}}}{}% 
\txa{end of centerstuff}%
}}}%
\newcommand{\@prnt@boxa}[9]{%
\ifthenelse{\boolean{#1}}{
\strut\rule{0pt}{#2+\@utile}\usebox{#4}&\usebox{#5}&\usebox{#6}\\[#7]#8}{}}%
\newcommand{\@prnt@mboxa}[9]{%
\ifthenelse{\boolean{#1}}{
\strut\rule{0pt}{#2+\@utile}\multicolumn{3}{l}{\usebox{#4}}\\[#7]#8}{}}%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%    \end{macrocode}
% \end{macro}
% \subsection{Close of document section}
% \begin{macro}{@clos@lfm}
%    In this section, the letter is terminated.  Several things happen here:
%    \begin{enumerate}
%    \item If signature block is to be printed, it is printed
%    \item If signature itself is to be printed, it is printed; otherwise,
%      just skip a reasonable amount of vertical space, to allow document to
%      be signed 
%    \item If sender name is to be printed, it is printed
%    \item For press releases, output |\PhrPRend| and blank the
%      ---more--- in the footer.  The marking mechanism is the proper
%      way to do this, avoiding the unlikely case where we might blank the footer
%      and then have the previous page output.
%    \end{enumerate}
%    \begin{macrocode}
\def\@fix@one@box{%
\sbox{\@sig@box@b}{\begin{tabular}{l}%
\ifthenelse{\boolean{@use@close}}{{\@closeline}\\}{}%
\ifthenelse{\boolean{@use@sig}}%
{{\@sig@fr}\\}{\parbox[t][\the\@sig@sp][t]{.1pt}{\vspace*{\@sig@sp}}\\}%
\ifthenelse{\boolean{@use@sig@nm}}{\@sig@nm\\}{\@name@fr\\}%
\end{tabular}}}%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\def\@close@lfm{\def\ifta{0}\txa{In @close@lfm}%
\setlength{\@utila}{\@sig@sk@b}\addtolength{\@utila}{-1.5\baselineskip}%
\vspace*{\the\@utila}\noindent\setlength{\tabcolsep}{0pt}%
\ifthenelse{\boolean{@pr@p}}%
{\medskip\begin{center}\@PRend@phr\end{center}%
 \markboth{}{}
}% markboth mechanism resets center footer 
{}% note require {} to finish ifthenelse
%%%%%
\ifthenelse{\boolean{@mult@sig}}%
{\begin{flushleft}%
\ifthenelse{\equal{\the@sig@tot}{1}}{\def\@sig@tab{l}}{}% Set multiple columns
\ifthenelse{\equal{\the@sig@tot}{2}}{\def\@sig@tab{ll}}{}%
\ifthenelse{\equal{\the@sig@tot}{3}}{\def\@sig@tab{lll}}{}%
\ifthenelse{\equal{\the@sig@tot}{4}}{\def\@sig@tab{llll}}{}%
\setlength{\@utilb}{0pt}\setlength{\@utila}{0pt}% Reset counters to 0
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Loop thru signature abbreviations
% Set flags 
% Set one signature, make box, measure
% Find max heights and widths
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\@for\@one@sig:=\@sig@list\do% 
{\setboolean{@use@sig}{false}\setboolean{@use@close}{false}%
\setboolean{@use@sig@nm}{false}% 
\expandafter\csname sig\@one@sig\endcsname%
\@fix@one@box\settowidth{\@utild}{\usebox{\@sig@box@b}}% 
\ifthenelse{\lengthtest{\@utila<\@utild}}{\setlength{\@utila}{\@utild}}{}%
\settoheight{\@utilc}{\usebox{\@sig@box@b}}\settodepth{\@utild}{\usebox{\@sig@box@b}}%
\addtolength{\@utilc}{\@utild}% Find total depth
\ifthenelse{\lengthtest{\@utilb<\@utilc}}{\setlength{\@utilb}{\@utilc}}{}}% 
\setcounter{@lab@cnt@col}{0}%
\setlength{\@utile}{0pt}% Set up for number signatures across
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Loop thru signature abbreviations
% Open new signature wrapper
% Set flags 
% Set one signature, make box, measure
% If number of sigs across at max, skip line
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\@for\@one@sig:=\@sig@list\do% Loop thru signature abbreviations
{\setboolean{@use@sig}{false}\setboolean{@use@close}{false}%
\setboolean{@use@sig@nm}{false}%
\txa{\the\@utile}
\ifthenelse{\equal{\the@lab@cnt@col}{0}}{~\vspace*{\the\@utile}\\\noindent}{}%
\expandafter\csname sig\@one@sig\endcsname% 
\ignorespaces \@fix@one@box\settoheight{\@utilc}{\usebox{\@sig@box@b}}%
\settodepth{\@utild}{\usebox{\@sig@box@b}}\addtolength{\@utilc}{\@utild}%
\ifthenelse{\equal{\the@sig@tot}{1}}{\setlength{\@utilb}{\@utilc}}{}%
\addtolength{\@utilc}{-\@utilb}%
\raisebox{-\the\@utilc/2}{\parbox[t]{\the\@utila}{\usebox{\@sig@box@b}}}%
\addtocounter{@lab@cnt@col}{1}%
\ifthenelse{\equal{\the@lab@cnt@col}{\the@sig@tot}}%
{\txa{else condition}
\setcounter{@lab@cnt@col}{0}\setlength{\@utile}{\@sig@sk@r}}{\hspace*{\the\@sig@sk@c}}}%
\vspace*{\the\@sig@sk@a}\end{flushleft}}%
{% Print normal signature
\@fix@one@box\settowidth{\@utila}{\usebox{\@sig@box@b}}% Set up box, measure
\Prnt@Chk{@sig@p}{@sig@l}{@sig@c}%
{\parbox{\@utila}{\usebox{\@sig@box@b}}}{}{\@sig@sk@b}{\@sig@sk@a}}%
}%
%    \end{macrocode}
% \end{macro}
% \subsection{Address \info}
% \begin{macro}{@post@sig@bl}
%    This is an internal macro which prints blocks of text after the signature
%    in a hanging block fashion. 
%
%    \begin{macrocode}
\def\@post@sig@bl#1#2#3{%
\setlength{\@utilb}{\textwidth}%
\settowidth{\@utila}{{\small\normalfont #1: }}%
\addtolength{\@utilb}{-\@utila}%
\ifthenelse{\equal{#2}{#3}}{}{%
\vspace*{\the\@post@sig@sp@b} \hspace*{.01pt} \\ \noindent%
\parbox[t]{\textwidth}{\@hangfrom{{\small\normalfont #1: }}%
\ignorespaces \parbox[t]{\@utilb}{{\small#2}}\strut}\par%
\vspace*{\the\@post@sig@sp@a}%
}}%
%    \end{macrocode}
% \end{macro}
%    \begin{macrocode}
%</package>
%<*addrset>
%    \end{macrocode}
% \begin{macro}{Commands}
%    These commands are either internal (begin with \verb|@|) or user-optional (do
%    not begin with \verb|@|).  User-optional commands are defined in the text
%    above. 
%    \begin{macrocode}
\def\addr#1{\protect\def\@addrxx{#1}}           \addr{}%
\def\addrfr#1{\protect\def\@addr@fr{#1}}        \addrfr{}%
\def\addrfrom#1{\protect\def\@addr@fr{#1}}      \addrfrom{}%
\def\addrto#1{\protect\def\@addr@to{#1}}        \addrto{}%
\def\cclist#1{\protect\def\@cc@item{#1}}        \cclist{---BLANK---}%  cc list
\def\city#1{\protect\def\@city{#1}}             \city{}%
\def\closeln#1{\protect\def\@closeline{#1}\setboolean{@use@close}{true}}%   Letter closing line
\def\closeline#1{\protect\def\@closeline{#1}\setboolean{@use@close}{true}}%
\def\dateset#1{\protect\def\@xdate{#1}}         \dateset{\today}% Letter date
\def\dept#1{\protect\def\@dept{#1}}             \dept{}%
\def\degree#1{\protect\def\@degree{#1}}         \degree{}%
\def\email#1{\protect\def\@email{#1}}           \email{}%
\def\emailb#1{\protect\def\@emailb{#1}}         \emailb{}%
\def\emailc#1{\protect\def\@emailc{#1}}         \emailc{}%
\def\emailbto#1{\protect\def\@emailb@to{#1}}    \emailbto{}%
\def\emailcto#1{\protect\def\@emailc@to{#1}}    \emailcto{}%
\def\emailbfr#1{\protect\def\@emailb@fr{#1}}    \emailbfr{}%
\def\emailcfr#1{\protect\def\@emailc@fr{#1}}    \emailcfr{}%
\def\emailfr#1{\protect\def\@email@fr{#1}}      \emailfr{}%
\def\emailfrom#1{\protect\def\@email@fr{#1}}    \emailfrom{}%
\def\emailto#1{\protect\def\@email@to{#1}}      \emailto{}%
\def\encllist#1{\protect\def\@encl@item{#1}}    \encllist{---BLANK---}%
\def\fax#1{\protect\def\@fax{#1}}               \fax{}%
\def\faxto#1{\protect\def\@fax@to{#1}}          \faxto{}%
\def\faxfr#1{\protect\def\@fax@fr{#1}}          \faxfr{}%
\def\faxfrom#1{\protect\def\@fax@fr{#1}}        \faxfrom{}%
\def\faxmssg#1{\protect\def\@fax@mssg{#1}}      \faxmssg{}% 
\def\fname#1{\protect\def\@f@name{#1}}          \fname{}%    
\def\fnameto#1{\protect\def\@f@name@to{#1}}     \fnameto{}%
\def\fnamefr#1{\protect\def\@f@name@fr{#1}}     \fnamefr{}%
\def\greet#1{\protect\def\@greet{#1}}           \greet{}%
\def\greetto#1{\protect\def\@greet@to{#1}}      \greetto{}%
\def\greetfr#1{\protect\def\@greet@fr{#1}}      \greetfr{}%
\def\initials#1{\protect\def\@init@item{#1}}    \initials{}%
\def\institute#1{\protect\def\@institute{#1}}   \institute{}%
\def\jtitle#1{\protect\def\@jtitle{#1}}         \jtitle{}%
\def\lname#1{\protect\def\@l@name{#1}}          \lname{}%
\def\lnameto#1{\protect\def\@l@name@to{#1}}     \lnameto{}%
\def\lnamefr#1{\protect\def\@l@name@fr{#1}}     \lnamefr{}%
\def\mname#1{\protect\def\@m@name{#1}}          \mname{}%
\def\mnameto#1{\protect\def\@m@name@to{#1}}     \mnameto{}%
\def\mnamefr#1{\protect\def\@m@name@fr{#1}}     \mnamefr{}%
\def\name#1{\protect\def\@namev{#1}}            \name{}%
\def\namefr#1{\protect\def\@name@fr{#1}}        \namefr{}%
\def\namefrom#1{\protect\def\@name@fr{#1}}      \namefrom{}%
\def\nameto#1{\protect\def\@name@to{#1}}        \nameto{}%
\def\organization#1{\protect\def\@org{#1}}      \organization{}%
\def\pager#1{\protect\def\@pager{#1}}           \pager{}% 
\def\pagerto#1{\protect\def\@pager@to{#1}}      \pagerto{}%  
\def\pagerfrom#1{\protect\def\@pager@fr{#1}}    \pagerfrom{}%
\def\pagerfr#1{\protect\def\@pager@fr{#1}}      \pagerfr{}% 
\def\phone#1{\protect\def\@phn{#1}}             \phone{}%               Phone
\def\phonea#1{\protect\def\@phna{#1}}           \phonea{}%              Phone
\def\phoneb#1{\protect\def\@phnb{#1}}           \phoneb{}%              Phone
\def\phonec#1{\protect\def\@phnc{#1}}           \phonec{}%              Phone
\def\phoned#1{\protect\def\@phnd{#1}}           \phoned{}%              Phone
\def\phoneo#1{\protect\def\@phno{#1}}           \phoneo{}%              Phone
\def\phoneh#1{\protect\def\@phnh{#1}}           \phoneh{}%              Phone
\def\phonefr#1{\protect\def\@phn@fr{#1}}        \phonefr{}%            Phone from
\def\phonefrom#1{\protect\def\@phn@fr{#1}}      \phonefrom{}%          Phone from
\def\phoneafrom#1{\protect\def\@phn@fr{#1}}     \phoneafrom{}%         Phone from
\def\phoneafr#1{\protect\def\@phn@fr{#1}}       \phoneafrom{}%         Phone from
\def\phonebfrom#1{\protect\def\@phnb@fr{#1}}    \phonebfrom{}%         Phone from
\def\phonecfrom#1{\protect\def\@phnc@fr{#1}}    \phonecfrom{}%         Phone from
\def\phonedfrom#1{\protect\def\@phnd@fr{#1}}    \phonedfrom{}%         Phone from
\def\phonebfr#1{\protect\def\@phnb@fr{#1}}      \phonebfrom{}%         Phone from
\def\phonecfr#1{\protect\def\@phnc@fr{#1}}      \phonecfrom{}%         Phone from
\def\phonedfr#1{\protect\def\@phnd@fr{#1}}      \phonedfrom{}%         Phone from
\def\phoneto#1{\protect\def\@phn@to{#1}}        \phoneto{}%            Phone to
\def\phoneoto#1{\protect\def\@phno@to{#1}}      \phoneoto{}%            Phone to
\def\phonehfr#1{\protect\def\@phnh@fr{#1}}      \phonehfr{}%            Phone to
\def\phoneofr#1{\protect\def\@phno@fr{#1}}      \phoneofr{}%            Phone to
\def\phonehto#1{\protect\def\@phnh@to{#1}}      \phonehto{}%            Phone to
\def\phoneato#1{\protect\def\@phn@to{#1}}       \phoneto{}%           Phone to
\def\phonebto#1{\protect\def\@phnb@to{#1}}      \phonebto{}%           Phone to
\def\phonecto#1{\protect\def\@phnc@to{#1}}      \phonecto{}%           Phone to
\def\phonedto#1{\protect\def\@phnd@to{#1}}      \phonedto{}%           Phone to
\def\plngadj#1{\protect\def\@f@f{#1}}           \plngadj{0in}%
\def\position#1{\protect\def\@position{#1}}     \position{}%
\def\ppsitem#1{\protect\def\@pps@item{#1}}      \ppsitem{---BLANK---}%
\def\pppsitem#1{\protect\def\@ppps@item{#1}}    \pppsitem{---BLANK---}%
\def\psitem#1{\protect\def\@ps@item{#1}}        \psitem{---BLANK---}%
\def\re#1{\protect\def\@re@line{#1}}            \re{---BLANK---}%
\def\regarding#1{\setboolean{@pt@regard}{true}\protect\def\@regard@line{#1}}%
\def\role#1{\protect\def\@role{#1}}             \role{}%
\def\sender#1{\protect\def\@sender{#1}}         \sender{}%
\def\signature#1{\protect\def\@sig@fr{#1}\setboolean{@use@sig}{true}}%
\def\sigacross#1{\setcounter{@sig@tot}{#1}}%
\def\siglist#1{\protect\def\@sig@list{#1}\setboolean{@mult@sig}{true}%
\setboolean{@sig@l}{true}\setboolean{@sig@c}{false}}%
\def\signame#1{\protect\def\@sig@nm{#1}\setboolean{@use@sig@nm}{true}}% 
\def\socsec#1{\protect\def\@socsec{#1}}         \socsec{}%
\def\SSnumto#1{\protect\def\@SS@num@to{#1}}     \SSnumto{}%
\def\state#1{\protect\def\@state{#1}}           \state{}%
\def\staddr#1{\protect\def\@staddr{#1}}         \staddr{}%
\def\subre#1{\protect\def\@sub@re@line{#1}}     \subre{}% 
\def\subdept#1{\protect\def\@subdept{#1}}       \subdept{}%
\def\zip#1{\protect\def\@zip{#1}}               \zip{}%
\def\byline#1{\setboolean{@pr@by}{true}\protect\def\@pr@byline{#1}}%
\byline{}\setboolean{@pr@by}{false}%
\def\headline#1{\protect\def\@pr@headline{#1}%
                \protect\def\@pr@shorthead{#1}}  \headline{---BLANK---}%
\def\release#1{\protect\def\@pr@release{#1}}     \release{\@release@phr}%
\def\shorthead#1{\protect\def\@pr@shorthead{#1}}  % set by headline
\regarding{---BLANK---} \setboolean{@pt@regard}{false}%
\siglist{}%
\signature{}%            
\sigacross{1}%
\closeline{}%
\setboolean{@use@sig}{false}%
\setboolean{@use@close}{false}%
\setboolean{@mult@sig}{false}%
\signame{}%           
\setboolean{@use@sig@nm}{false}%
% \end{macro}
%    \begin{macrocode}
%    \end{macrocode}
% \begin{macro}{Commands}
%    These commands are either internal (begin with |@|) or user-optional (do
%    not begin with |@|).  User-optional commands are defined in the text
%    above. 
%    \begin{macrocode}
\def\fixadr#1{\expandafter\csname adr#1\endcsname}%
\def\setadrto#1{\global\protect\let\@addrxx\@empty%
\global\protect\let\@namev\@empty      \global\protect\let\@phn\@empty%
\global\protect\let\@phna\@empty       \global\protect\let\@phnb\@empty%
\global\protect\let\@phnc\@empty       \global\protect\let\@phnd\@empty%
\global\protect\let\@phno\@empty       \global\protect\let\@phnh\@empty%
\global\protect\let\@pager\@empty      \global\protect\let\@fax\@empty%
\global\protect\let\@greet\@empty      \global\protect\let\@email\@empty%
\global\protect\let\@emailb\@empty     \global\protect\let\@emailc\@empty%
\global\protect\let\@l@name\@empty     \global\protect\let\@f@name\@empty%
#1\txa{In setadrto - }\txa{Second}
\txa{\@addrxx}
\global\protect\let\@addr@to\@addrxx \txa{Z}  \global\protect\let\@name@to\@namev%
\txa{A1}
\global\protect\let\@phn@to\@phn       \global\protect\let\@phna@to\@phna%
\global\protect\let\@phnb@to\@phnb     \global\protect\let\@phnc@to\@phnc%
\txa{A2}
\global\protect\let\@phnd@to\@phnd     \global\protect\let\@phno@to\@phno%
\global\protect\let\@phnh@to\@phnh     \global\protect\let\@pager@to\@pager%
\txa{A3}
\global\protect\let\@fax@to\@fax       \global\protect\let\@greet@to\@greet%
\global\protect\let\@email@to\@email   \global\protect\let\@emailb@to\@emailb%
\txa{A4}
\global\protect\let\@emailc@to\@emailc \global\protect\let\@l@name@to\@l@name%
\global\protect\let\@f@name@to\@f@name%
\txa{End of setadrto}
}%
\def\setadrfr#1{\global\protect\let\@addrxx\@empty%
\global\protect\let\@namev\@empty      \global\protect\let\@phn\@empty%
\global\protect\let\@phna\@empty       \global\protect\let\@phnb\@empty%
\global\protect\let\@phnc\@empty       \global\protect\let\@phnd\@empty%
\global\protect\let\@phno\@empty       \global\protect\let\@phnh\@empty%
\global\protect\let\@pager\@empty      \global\protect\let\@fax\@empty%
\global\protect\let\@greet\@empty      \global\protect\let\@email\@empty%
\global\protect\let\@emailb\@empty     \global\protect\let\@emailc\@empty%
\global\protect\let\@l@name\@empty     \global\protect\let\@f@name\@empty%
#1\txa{In setadrfr}%
\global\protect\let\@addr@fr\@addrxx   \global\protect\let\@name@fr\@namev%
\global\protect\let\@phn@fr\@phn       \global\protect\let\@phna@fr\@phna%
\global\protect\let\@phnb@fr\@phnb     \global\protect\let\@phnc@fr\@phnc%
\global\protect\let\@phnd@fr\@phnd     \global\protect\let\@phno@fr\@phno%
\global\protect\let\@phnh@fr\@phnh     \global\protect\let\@pager@fr\@pager%
\global\protect\let\@fax@fr\@fax       \global\protect\let\@greet@fr\@greet%
\global\protect\let\@email@fr\@email   \global\protect\let\@emailb@fr\@emailb%
\global\protect\let\@emailc@fr\@emailc \global\protect\let\@l@name@fr\@l@name%
\global\protect\let\@f@name@fr\@f@name%
\txa{End of setadrfr}
}%
\DeclareRobustCommand*{\printnameto}{\@name@to}%
\DeclareRobustCommand*{\printaddrto}{\@addr@to}%
\DeclareRobustCommand*{\printphoneto}{\@phn@to}%
\DeclareRobustCommand*{\printphoneato}{\@phna@to}%
\DeclareRobustCommand*{\printphonebto}{\@phnb@to}%
\DeclareRobustCommand*{\printphonecto}{\@phnc@to}%
\DeclareRobustCommand*{\printphonedto}{\@phnd@to}%
\DeclareRobustCommand*{\printphoneoto}{\@phno@to}%
\DeclareRobustCommand*{\printphonehto}{\@phnh@to}%
\DeclareRobustCommand*{\printpagerto}{\@pager@to}%
\DeclareRobustCommand*{\printfaxto}{\@fax@to}%
\DeclareRobustCommand*{\printgreetto}{\@greet@to}%
\DeclareRobustCommand*{\printemailto}{\@email@to}%
\DeclareRobustCommand*{\printemailbto}{\@emailb@to}%
\DeclareRobustCommand*{\printemailcto}{\@emailc@to}%
\DeclareRobustCommand*{\printlnameto}{\@l@name@to}%
\DeclareRobustCommand*{\printfnameto}{\@f@name@to}%
\DeclareRobustCommand*{\printnamefrom}{\@name@fr}%
\DeclareRobustCommand*{\printaddrfrom}{\@addr@fr}%
\DeclareRobustCommand*{\printphonefrom}{\@phn@fr}%
\DeclareRobustCommand*{\printphoneafrom}{\@phna@fr}%
\DeclareRobustCommand*{\printphonebfrom}{\@phnb@fr}%
\DeclareRobustCommand*{\printphonecfrom}{\@phnc@fr}%
\DeclareRobustCommand*{\printphonedfrom}{\@phnd@fr}%
\DeclareRobustCommand*{\printphoneofrom}{\@phno@fr}%
\DeclareRobustCommand*{\printphonehfrom}{\@phnh@fr}%
\DeclareRobustCommand*{\printpagerfrom}{\@pager@fr}%
\DeclareRobustCommand*{\printfaxfrom}{\@fax@fr}%
\DeclareRobustCommand*{\printgreetfrom}{\@greet@fr}%
\DeclareRobustCommand*{\printemailfrom}{\@email@fr}%
\DeclareRobustCommand*{\printemailbfrom}{\@emailb@fr}%
\DeclareRobustCommand*{\printemailcfrom}{\@emailc@fr}%
\DeclareRobustCommand*{\printlnamefrom}{\@l@name@fr}%
\DeclareRobustCommand*{\printfnamefrom}{\@f@name@fr}%
%    \end{macrocode}
% \end{macro}
%    \begin{macrocode}
%</addrset>
%<*package>
%    \end{macrocode}
% \end{macro}
% \subsection{Address book handling}
%    |newlfm| stores \info{} in a file |letrinfo.tex|.  This \info{} is
%    stored in a series of wrapper macros.  This are the macros |\makelth|,
%    |\makesig| and |\makeadr|.  These are used in letters and memos by
%    issuing the commands |\adrXXX|, |\lthXXX| and |\sigXXX| {\it before} the
%    |\begin{newlfm}| statement:
%    \begin{verbatim}
%    \begin{document}
%    \ltrTST \sigABC \setadrto{\adrDEF} \setadrfr{\adrPWW}
%    \begin{newlfm} 
%    \end{verbatim}
%    Alternatively, the wrapper macros may be included in the document using
%    the |letrh|, |addrt|, |addrf|, and |sigtr| commands in the |\newlfmP|
%    command as:
%    \begin{verbatim}
%    \begin{document}
%    \newlfmP{letrh=TST,sigtr=ABC,addrt=DEF,addrf=PWW}
%    \begin{newlfm} 
%    \end{verbatim}
%    The wrapper macros function as a very generalized
%    hash table for addresses, letterheads and signature \info.
%    Each type of \info{} is keyed by the use of the appropriate value of XXX.
%    When |newlfm| starts up, the program reads in standard declarations of names,
%    addresses,  signatures, header blocks, etc., stored in file
%    |letrinfo.tex|.  This file will contain \info{} which is normally
%    included in a letter.  That way, it need not be entered separately into
%    each different letter.
%
%    \begin{macrocode}%
\newif \if@read@one \@read@onetrue%
\def\@ltr@info@name{letrinfo.tex}%
%\DeclareOption{InfoFileName}[1]{\renewcommand{\@ltr@info@name}{#1}}
\define@key{ov}{InfoFileName}{\def\@ltr@info@name{#1}}%
\InputIfFileExists{\@ltr@info@name}%
{\typeout{Reading default letter definitions from \@ltr@info@name}}%
{\typeout{\@ltr@info@name\ not found.  All letter definitions must be in newlfm.cls}}%
%    \end{macrocode}
%
% \subsection{Form letters}
% \begin{macro}{doletter}
%    In this section, we set up the environment to prepare form letters.
%    This is done by:
%    \begin{enumerate}
%    \item Defining the body of the letter using the command
%      \verb|\letterbody|.  The body may include macro items.  The body
%      {\it should not} include the |newlfm| command,
%      which is invoked by the macro |\doletter| itself.  Thus,  do not
%      include the \verb|\begin{newlfm}| or \verb|\end{newlfm}| statements.
%    \item For each letter, use the construction \verb|\doletter{}|.  The 
%      required argument includes a specification of the address
%      information, usually.  The required argument is used directly before
%      the  {\tt newlfm} environment is specified, and the form letter
%      specified.  Thus, the address for the several letters can easily be
%      listed. 
%    \item |\doltr| and |\ltrbody| are previous forms of the form letter
%      commands, but are no longer supported.
%    \end{enumerate}
%    \begin{macrocode}
\gdef\npind{0}
\def\ltrbody#1{\protect\def\@ltr@body{#1}}%
\DeclareRobustCommand{\letterbody}[1]{\def\@ltr@body{#1}}%
\DeclareRobustCommand*{\doltr}[1]%
{#1 \begin{newlfm} \@ltr@body \end{newlfm} \gdef\npind{B} % \newpage%
\ifthenelse{\boolean{@env@open}}{}{}}%
\DeclareRobustCommand*{\@env@label}[1]{#1\parbox[t][\@lab@bh][t]{\@lab@bw}%
{{\@name@to \\ \@addr@to} \hfill}}%
\DeclareRobustCommand*{\@env@oth}[2]{%
\txa{box height:\the\@lab@bh, box width:\the\@lab@bw, between: \the\tabcolsep}%
\parbox[t][\@lab@bh][t]{\@lab@bw}{\@lab@size \strut #1 \\ #2 \strut}}%
\DeclareRobustCommand*{\@env@row}[4]{\settowidth{\@utila}{\@hnfr@phr:}%
\setlength{\tabcolsep}{0pt}%
\fbox{\parbox[t][\@lab@bh][t]{\@lab@bw}{%
\@lab@size \begin{tabular}{ll}{\Large\@hnfr@phr:}&{\Large\@hnto@phr:}\\%
\parbox[t]{2.0in}{#3\\#4}&\parbox[t]{2.0in}{#1\\#2}%
\end{tabular}\hfill}}}%
\DeclareRobustCommand*{\@env@col}[4]{\parbox[t][\@lab@bh][t]{\@lab@bw}{%
{\@lab@size{\Large\@hnfr@phr:}\\#3\\#4\\{\Large\@hnto@phr:}\\#1\\#2}}}%
\DeclareRobustCommand*{\x@env@col}[4]{\parbox[t][\@lab@bh][t]{\@lab@bw}{%
{\@lab@size\begin{tabular}{p{.5in}p{3.25in}}{\Large\@hnfr@phr:}&#3\\&\parbox[t]{3.25in}{#4}%
\vspace*{10pt}\\{\Large\@hnto@phr:}&#1\\&\parbox[t]{3.25in}{#2}\\\end{tabular}}}}%
\def\multletter#1{\@for\@addr@x:=#1\do{{\oneletter{\@addr@x}}}}%
\def\doletter#1{\setadrto{#1}\txa{ZA}%
\begin{newlfm}\@ltr@body\end{newlfm}\gdef\npind{D}\newpage}%
\def\oneletter#1{\txa{In oneletter}\setadrto{\csname adr#1\endcsname}\txa{ZB}\addrt{#1}%
\begin{newlfm}\@ltr@body\end{newlfm}\gdef\npind{E}}%
\DeclareRobustCommand*{\@env@ext}[1]{\txa{#1:1}%
\setadrto{\csname adr#1\endcsname}\txa{ZC}\txa{#1:2}%    
\@env@oth{\@name@to}{\@addr@to}\txa{#1:3}}%
\def\clearall{\def\@ltr@head{}\def\@adr@to{}\def\@adr@fr{}\def\@sig@blok{}%
\setboolean{@over@setto}{false}\setboolean{@over@setfr}{false}}%
\def\makeenvst{}%
\def\makeenvfn{%
  \def\ifta{0}%
  \nolines\dateset{}\clearall\noheadline\@dim@resetfalse\def\headrulewidth{0pt}%
  \@clear@box\def\footrulewidth{0pt}%
  \setboolean{@over@all}{false}\setboolean{@fax@RA}{false}%  
  \setboolean{@fax@RU}{false}\setboolean{@fax@hdr@pg}{false}% 
  \setboolean{@no@spc}{true}\setboolean{@B@f}{false}%
  \setboolean{@B@h}{false}\setboolean{@B@l}{false}%     
  \setboolean{@B@r}{false}\setboolean{@b@f}{false}%        
  \setboolean{@b@h}{false}\setboolean{@b@l}{false}%
  \setboolean{@b@r}{false}\setboolean{@sig@p}{false}%   
  \setboolean{@sig@mp}{false}\setboolean{@env@open}{false}%
  \ifthenelse{\lengthtest{\@lab@th<12pt}}{\setlength{\@lab@th}{12.1pt}}{}%
  \ifthenelse{\boolean{@use@envlab}}{%
    \def\ifta{0}%
    \setpage{\@stock@height}{\@stock@width}{-1in}{72pt}{0in}{-1in}{120pt}{0in}{20pt}%
    \txa{use@envlab true}%
    }%
    {%
    \gdef\npind{A3}%
    \setpage{\@lab@pl}{\@stock@width}{-1in}{\@lab@lm}{0in}{-1in}{\@lab@th}{0in}{20pt}%
    \txa{use@envlab false}%
    \txa{headheight:\the\@lab@th}%
  }%
  \setboolean{@in@makeenv}{true}%
  \begin{newlfm}\pagestyle{empty}\thispagestyle{empty}%
  \def\ifta{0}%
  \showdim{Start of makeenvfn}%
  \@nlfm@util=0%
  \setcounter{@lab@cnt@col}{0} \setcounter{@lab@cnt@row}{0}%
  \setboolean{@env@open}{true} \setboolean{@env@close}{true}%
  \setboolean{@ztila}{false}%
  \def\ifta{0}%
  \txa{Count:\number\@nlfm@addr,Test:\number\@nlfm@util}%
  \setboolean{@do@any}{false}%
  \loop \ifnum\number\@nlfm@util<\number\@nlfm@addr% 
    \global\advance\@nlfm@util by1%
    \txa{Loop S Count: \number\@nlfm@util}%
    \setboolean{@do@any}{true}%
    \def\@onet{\csname @aadr@t\number\@nlfm@util\endcsname}%
    \def\@onef{\csname @aadr@f\number\@nlfm@util\endcsname}%
    \txa{\string\@onet:\@onet -- \string\@onef:\@onef}%
    \protect\setadrto{\csname adr\@onet\endcsname}\txa{ZD}%
    \protect\setadrfr{\csname adr\@onef\endcsname}%
    \def\ifta{0}%
    \txa{To: adr\@onet,\@name@to --- From: \@name@fr,adr\@onef --- Just:\@tab@just}%
    \txa{@aadr@t\number\@nlfm@util: \csname @aadr@t\number\@nlfm@util\endcsname}%
    \ifthenelse{\boolean{@env@open}}%
      {\setcounter{@lab@cnt@row}{0}\txa{New page}%
       \setboolean{@env@open}{false} \setboolean{@env@close}{true}%
       \def\ifta{0}%
       \showdim{Checking values before newpage}%
       \gdef\npind{C}%
       \ifthenelse{\boolean{@ztila}}{\newpage}{}%
       \setboolean{@ztila}{true}%
       \showdim{Checking values after newpage}%
       \def\ifta{0}%
       \setlength{\tabcolsep}{\@lab@bl} \begin{table}[t] \begin{tabular}{\@tab@just}%
       \txa{Starting table}%
      }%
      {}%
    \ifthenelse{\boolean{@lab@t}}%
      {\txa{Label to only}\@env@oth{\@name@to}{\@addr@to}}{}%
    \ifthenelse{\boolean{@lab@rft}}%
      {\txa{Label row from to}\@env@row{\@name@to}{\@addr@to}{\@name@fr}{\@addr@fr}}{}%
    \ifthenelse{\boolean{@lab@cft}}%
      {\txa{Label col from to}\@env@col{\@name@to}{\@addr@to}{\@name@fr}{\@addr@fr}}{}%
    \addtocounter{@lab@cnt@col}{1}%
    \ifthenelse{\equal{\the@lab@cnt@col}{\the@lab@tot@col}}%
      {\addtocounter{@lab@cnt@row}{1}\setcounter{@lab@cnt@col}{0}%
       \txa{Ending row}\\}%
      {\txa{Ending column}&}%
    \ifthenelse{\equal{\the@lab@cnt@row}{\the@lab@tot@row}}%
      {\setcounter{@lab@cnt@row}{0}\setcounter{@lab@cnt@col}{0}%
       \txa{Ending table}\\ \end{tabular}\end{table}%
       \setboolean{@env@close}{false} \setboolean{@env@open}{true}%
      }%
      {}%
    \def\ifta{0}%
    \txa{Loop E Count: \number\@nlfm@util}%
  \repeat%
  \txa{Ending table}%
  \txa{Out of big loop: \arabic{@lab@cnt@col}}%
  \def\ifta{0}%
  \global\@nlfm@uta=\value{@lab@cnt@row}%
  \sbox{\@x@l}{\phantom{A}}%
  \ifthenelse{\boolean{@env@close} \and \boolean{@do@any}}%
    {\txa{\the@lab@cnt@col, \the@lab@cnt@row, \the@lab@tot@row}%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Finish off current row first 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
      \ifthenelse{\equal{\arabic{@lab@cnt@col}}{0}}{}%
        {\whiledo{\the@lab@cnt@col<\the@lab@tot@col}%
          {\@env@oth{\usebox{\@x@l}}{\usebox{\@x@l}}%
           \addtocounter{@lab@cnt@col}{1}%
           \ifthenelse{\the@lab@cnt@col<\the@lab@tot@col}{&}{}} \\% 
         \addtocounter{@lab@cnt@row}{1}%
        }%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Add remaining rows, each with all columns
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
      \whiledo{\the@lab@cnt@row<\the@lab@tot@row}%
        {\setcounter{@lab@cnt@col}{0}%
         \whiledo{\the@lab@cnt@col<\the@lab@tot@col}%
          {\@env@oth{\usebox{\@x@l}}{\usebox{\@x@l}}% 
           \addtocounter{@lab@cnt@col}{1}%
           \ifthenelse{\the@lab@cnt@col<\the@lab@tot@col}{&}{\\}%
          }%
         \addtocounter{@lab@cnt@row}{1}%
         \ifthenelse{\the@lab@cnt@row<\the@lab@tot@row}%
           {}%
           {\\ \end{tabular}\end{table} \newpage%
      \showdim{At the end of the table}}%
      \setboolean{@env@close}{false}%
      \setboolean{@env@open}{true}%
      }%
    }%
    {}%
  \setboolean{@use@envlab}{false}%
  \end{newlfm}%
  \def\ifta{0}%
}%
%    \end{macrocode}
% \end{macro}
% \subsection{Main section}
% \begin{macro}{newlfm}
%    This is the main section.  In this section, we actually print a letter.
%    Here is how it is done:
%    \begin{enumerate}
%    \item Insert \info{} into environment
%    \item Determine sizes of header and footer largest pieces
%    \item Set all lengths to the height of the appropriate box
%    \item Set paperlength: 
%    \begin{enumerate}
%    \item Begin with paperheight
%    \item Subtract |\@Hgt@Head|
%    \item Subtract |\footskip|, which includes |\@Hgt@Foot| 
%    \item Take into account |voffset|, and 1 inch, which are designed to offset
%    one another 
%    \item Subtract |headsep| and |headheight|
%    \end{enumerate}
%    \end{enumerate}
%    \begin{macrocode}
\newenvironment{newlfm}{% Start of fax environment, in fax class%
  \if@read@one \global\@read@onefalse \fi%
  \def\ifta{0}\txa{Start of newlfm startup}%
  \txa{nameto: \@name@to}%
  \ifthenelse{\boolean{@over@all}}{\txa{overall: true}}{\txa{overall: false}}%
  \ifthenelse{\boolean{@over@setto}}{\txa{oversetto: true}}{\txa{oversetto: false}}%
  \txa{namefrom: \@name@fr}%
  \ifthenelse{\boolean{@over@setfr}}{\txa{oversetfr: true}}{\txa{oversetfr: false}}%
  \ifthenelse{\boolean{@over@all}}{%
    \faxblocka%
  }{}%
  \ifthenelse{\boolean{@fax@RA}}%
    {\ifthenelse{\boolean{@fax@bla}}{\Rheader{\usebox{\fba}}}{}%
     \ifthenelse{\boolean{@fax@blb}}{\Rheader{\faxblockb}}{}}{}%
  \ifthenelse{\boolean{@fax@RU}}%
    {\txa{setting up ruh}%
     \ifthenelse{\boolean{@fax@bla}}{\RUheader{\faxblocka}}{}%
     \ifthenelse{\boolean{@fax@blb}}{\RUheader{\faxblockb}}{}}{}%
  \ifthenelse{\boolean{@over@all}}{%
    \expandafter\csname lth\@ltr@head \endcsname%
    \ifthenelse{\boolean{@over@setto}}{%
      \setadrto{\expandafter\csname adr\@adr@to \endcsname}}{}%
    \ifthenelse{\boolean{@over@setfr}}{\txa{True}%
      \setadrfr{\expandafter\csname adr\@adr@fr \endcsname}}{\txa{false}}%
    \ifthenelse{\boolean{@over@sigbl}}{\txa{True}%
      \expandafter\csname sig\@sig@blok \endcsname}{\txa{false}}%
    \@set@em@up%
  }{}%
  \txa{setting up ruh}%
  \def\ifta{0}%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
  \txa{name@to:\@name@to}%
  \ifthenelse{\boolean{@over@setto}}{\txa{oversetto:true}}{\txa{oversetto:false}}%
  \txa{name@fr:\@name@fr}%
  \ifthenelse{\boolean{@over@setfr}}{\txa{oversetfr:true}}{\txa{oversetfr:false}}%
  \retdims%
  \ifthenelse{\boolean{@fax@hdr@pg}}%
    {{\txa{FAX Page Setup}%
    \def\ifta{0}%
    \showdim{Before resetting dimensions for fax}%
    \faxpage%
    \def\ifta{0}%
    \showdim{After resetting dimensions for fax}%
    \showdim{After restoring dimensions for fax}%
    \txa{Before newpage issued}%
    \txa{After newpage issued}%
    \showdim{After fax page setup}%
  }}{}%
  \rstdims%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
  \def\ifta{0}\showdim{After fax page section closes}\gdef\npind{G}%
  \if@twoside \ifodd\c@page%
  \else\thispagestyle{empty}\null\newpage\fi  \fi%
  \c@page\@ne%
  \interlinepenalty=200 % smaller than the TeXbook value%
  \setlength{\headwidth}{\textwidth}%
  \txa{Before Rfooter}\ifthenelse{\boolean{@B@f}}%
    {\Cfooter{} \Rfooter{} \Lfooter{}} {}%
%   {\Cfooter{\phantom{\Cfooter}} \Rfooter{\phantom{\Rfooter}} \Lfooter{\phantom{\Lfooter}}} {}%
  \txa{Before Rheader}\ifthenelse{\boolean{@B@h}}%
    {\Rheader{} \Lheader{} \Cheader{}} {}%
%   {\Rheader{\phantom{\Rheader}} \Lheader{\phantom{\Lheader}} \Cheader{\phantom{\Cheader}}} {}%
  \txa{Before Lmargin}\ifthenelse{\boolean{@B@l}}%
    {\ifempty{\@Lmarg}{}{\Lmargin{}}}{}%
%   {\ifempty{\@Lmarg}{}{\Lmargin{\phantom{\Lmargin}}}}{}%
  \txa{Before Rmargin}\ifthenelse{\boolean{@B@r}}% 
    {\ifempty{\@Rmarg}{}{\Rmargin{}}}{}%
%   {\ifempty{\@Rmarg}{}{\Rmargin{\phantom{\Rmargin}}}}{}%
  \txa{Before rfooter}\ifthenelse{\boolean{@b@f}}%  
    {\rfooter{} \lfooter{} \cfooter{}} {}%
%   {\rfooter{\phantom{\rfooter}} \lfooter{\phantom{\lfooter}} \cfooter{\phantom{\cfooter}}} {}%
  \txa{Before rheader}\ifthenelse{\boolean{@b@h}}%  
    {\rheader{} \lheader{} \cheader{}} {}%
%   {\rheader{\phantom{\rheader}} \lheader{\phantom{\lheader}} \cheader{\phantom{\cheader}}} {}%
  \txa{Before lmargin}\ifthenelse{\boolean{@b@l}}%
    {\lmargin{}} {}%
%   {\lmargin{\phantom{\lmargin}}} {}%
  \txa{Before rmargin}\ifthenelse{\boolean{@b@r}}%
    {\rmargin{}} {}%
%   {\rmargin{\phantom{\rmargin}}} {}%
  \setlength{\textwidth}{\paperwidth-\@marg@rt-\@marg@lt-1pt}%
  \txa{Before opening}%
  \txa{\string\@marg@rt: \the\@marg@rt, \string\@marg@rt: \the\@marg@rt}%
  \txa{\string\textwidth: \the\textwidth, \string\paperwidth: \the\paperwidth}%
%  \ifthenelse{\boolean{@over@all}}{%
  \@open@lfm%
%  }{}
  \def\ifta{0}%
  \txa{nameto:\@name@to}%
  \txa{namefr:\@name@fr}%
  \txa{\string\@marg@rt: \the\@marg@rt, \string\@marg@rt: \the\@marg@rt}%
  \txa{\string\textwidth: \the\textwidth, \string\paperwidth: \the\paperwidth}%
  \txa{After opening}%
  \def\ifta{0}%
  \txa{\string\@marg@rt: \the\@marg@rt, \string\@marg@rt: \the\@marg@rt}%
  \txa{\string\textwidth: \the\textwidth, \string\paperwidth: \the\paperwidth}%
  \txa{Before pagestyle}%
  \pagestyle{othhead}\thispagestyle{ltrhead}%
  \def\ifta{0}%
  \txa{After pagestyle}%
  \ifthenelse{\boolean{@in@makeenv}}{\txa{makeenv true}}{\txa{makeenv false}%
    \global\advance \@nlfm@addr by1%
    \txa{Count: \number\@nlfm@addr -- To: \@adr@to -- From: \@adr@fr}
    \expandafter\xdef\csname @aadr@t\number\@nlfm@addr\endcsname{\@adr@to}%
    \expandafter\xdef\csname @aadr@f\number\@nlfm@addr\endcsname{\@adr@fr}%
    \txa{Count: \number\@nlfm@addr -- To: \@adr@to -- From: \@adr@fr}%
    \txa{@aadr@t\number\@nlfm@addr: \csname @aadr@t\number\@nlfm@addr\endcsname}%
    \txa{To:  \csname @aadr@t\number\@nlfm@addr\endcsname,\@adr@to}%
  }%
  \showdim{Dimensions at end of newlfm startup section}\def\ifta{0}%
}%
%    \end{macrocode}
%    The next block of code defines the operation at the close of the
%    environment. This is a bit odd, since |closlfmp| seemingly already
%    catered to that case.  As you will see below, there is quite a bit
%    more to do.
%
%    Currently, press release and all others are handled quite
%    differently, raising the possibility that they should use different
%    macros.  Currently, |closlfmp| does both.  Close study is warranted,
%    as well as consideration of whether a press release might want to
%    repeat contact information at the bottom, or be combined with a fax,
%    letter, form letter/fax.  There may be additional things the regular
%    code path does as well.
%
%    \begin{macrocode}
{% Here we are at the processing of the close of the newlfm env - start
  \def\ifta{0}\txa{At the start of the close of newlfm env}%
  \ifthenelse{\boolean{@pr@p}}{\@close@lfm}{}%
  \ifthenelse{\boolean{@sig@p}}%
   {\txa{Before closing}%
    \ifthenelse{\boolean{@pr@p}}{}{\@close@lfm}%
    \txa{After closing}%
    \showdim{Current Dimensions}%
    \@post@sig@bl{\@ps@phr}{\@ps@item}{---BLANK---}%
    \@post@sig@bl{\@pps@phr}{\@pps@item}{---BLANK---}%
    \@post@sig@bl{\@ppps@phr}{\@ppps@item}{---BLANK---}%
    \@post@sig@bl{\@encl@phr}{\@encl@item}{---BLANK---}%
    \@post@sig@bl{\@cc@phr}{\@cc@item}{---BLANK---}}{}%
  \ifthenelse{\boolean{@sig@mp}}{%
    \@post@sig@bl{\@ps@phr}{\@ps@item}{---BLANK---}%
    \@post@sig@bl{\@pps@phr}{\@pps@item}{---BLANK---}%
    \@post@sig@bl{\@ppps@phr}{\@ppps@item}{---BLANK---}%
    \@post@sig@bl{\@encl@phr}{\@encl@item}{---BLANK---}%
    \@post@sig@bl{\@cc@phr}{\@cc@item}{---BLANK---}}{}%
  \ifthenelse{\boolean{@env@open}}{}{}%
% \ifthenelse{\boolean{@use@envlab}}{\@make@big@env}{}%
  \txa{Before the pagebreak}%
  \gdef\npind{J}%
  \stopletter\@@par\pagebreak\@@par%
  \immediate\write\@auxout{\string\newlabel{totpage}{{\thepage}{0}}}%
  \@clear@box%
  \global\@read@onetrue%
  \setboolean{@s@b@s}{false}%
%    \end{macrocode}
% The end of the |doublespace| environment also destroys the 
% settings for the page headers (except for the the first page, which,
% being global, persists and is not wanted).  For that reason, one
% {\em must} close the spacing environment here, after the
% |\pagebreak|, rather than earlier.
%
% Only the press release uses that environment.
%    \begin{macrocode}
\ifthenelse{\boolean{@pr@p}}{%
\ifthenelse{\boolean{@space@d}}{\end{doublespace}}{\end{singlespace}}%
}{}%
}%  Here we are at the processing of the close of the newlfm env - end
\def\@make@big@env{%
  \@nlfm@util=0%
  \def\ifta{0}%
  \txa{In @make@big@env}%
  \txa{Count: \number\@nlfm@addr}%
  \txa{ZI}%
  \txa{@aadr@t\number\@nlfm@addr: \csname @aadr@t\number\@nlfm@addr\endcsname}%
  \txa{To:  \csname @aadr@t\number\@nlfm@addr\endcsname,\@adr@to}%
  \loop \ifnum\@nlfm@util < \@nlfm@addr%
  \advance\@nlfm@util by1%
  \def\@onet{\expandafter\csname @aadr@t\number\@nlfm@util\endcsname}%
  \def\@onef{\expandafter\csname @aadr@f\number\@nlfm@util\endcsname}%
  \setadrto{\expandafter\csname adr\@onet\endcsname}\txa{ZF}%
  \setadrfr{\expandafter\csname adr\@onef\endcsname}%
  \gdef\npind{I}%
  \newpage%
  \def\ifta{0}%
  \gdef\npind{A4}%
  \setpage{\@stock@height}{\@stock@width}{1in}{1in}{0pt}{0in}{120in}{0in}{0in}%
  \txa{Actually using the makeenvelope...}%
  \startlabels%
  \@capitalizeaddressfalse%
  \txa{From: \@name@fr}%
  \txa{To: \@name@to}%
  \mlabel{\@name@fr \hspace*{.1pt} \\ \@addr@fr \hspace*{.1pt}}%
         {\@name@to \hspace*{.1pt} \\ \@addr@to \hspace*{.1pt}}%
  \txa{From: \@name@fr}%
  \txa{To: \@name@to}%
  \repeat%
  \global\@nlfm@addr=0%
  \txa{Count at end: \number\@nlfm@addr}%
}%
\def\@clear@box{%
\Backgrd{} \backgrd{} \Lfooter{} \Cfooter{} \Rfooter{} \LOfooter{}%
\COfooter{}\ROfooter{}\lfooter{} \cfooter{} \rfooter{} \Lheader{}%
\Cheader{} \Rheader{} \LUheader{}\CUheader{}\RUheader{}\lheader{}%
\cheader{} \rheader{} \Rmargin{} \Lmargin{} \rmargin{} \lmargin{}%
}%
%    \end{macrocode}
% \end{macro}
%
%    \begin{macrocode}
\newcommand{\pgrph}[1]{{\bf #1}}%
\pagestyle{ltrhead}%
\pagenumbering{arabic}%
\raggedbottom%
\providecommand{\@texttop}{}%
\DeclareRobustCommand*{\@texttop}{\ifnum\c@page=1\vskip \z@ plus.00006fil\relax\fi}%
\onecolumn%
\def\@set@em@up{%
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Here we put some information about the pressrelease stuff
% Much of this is in contravention of the philosophy of newlfm - since 
% it displaces information that might have been placed into the blocks
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\txa{Real start}%
\ifthenelse{\boolean{@pr@p}}{%
\PhrMore{\thepage\ of \pageref{LastPage}}%
\Cfooter{\@more@phr}\cfooter{\@more@phr}%
}{}%
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Continue with the stuff for the @set@em@up
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\def\ifta{0}\txa{Start of @set@em@up}%
\ifthenelse{\boolean{@set@env}}{\makeenvst\txa{Making envelope}}{}%
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% First, set the header and footer widths
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\ifthenelse{\boolean{@hl}}{\def\headrulewidth{\the\@Hrw}}%
  {\setlength{\@Hrw}{0pt}\def\headrulewidth{0pt}}% 
\ifthenelse{\boolean{@fl}}{\def\footrulewidth{\the\@Frw}}%
  {\setlength{\@Frw}{0pt}\def\footrulewidth{0pt}}% 
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Now, set the contents of the header and footer sections into boxes
% Boxes can be measured
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\def\ifta{0}\txa{Here in the middle}%
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Check the heights and depths of boxes
% Letterhead header section
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\sbox{\@x@c}{\@Cheader}\sbox{\@x@l}{\@Lheader}\sbox{\@x@r}{\@Rheader}%
\ifthenelse{\boolean{@Ch@use}}%
{\settoheight{\@Hgt@H@C}{\strut\usebox{\@x@c}\strut}%
\settodepth{\@Dth@H@C}{\strut\usebox{\@x@c}\strut}%
\addtolength{\@Hgt@H@C}{\@Dth@H@C}}{\setlength{\@Hgt@H@C}{0pt}}%
\ifthenelse{\boolean{@Rh@use}}%
{\settoheight{\@Hgt@H@R}{\strut\usebox{\@x@r}\strut}%
\settodepth{\@Dth@H@R}{\strut\usebox{\@x@r}\strut}%
\addtolength{\@Hgt@H@R}{\@Dth@H@R}}{\setlength{\@Hgt@H@R}{0pt}}%
\ifthenelse{\boolean{@Lh@use}}%
{\settoheight{\@Hgt@H@L}{\strut\usebox{\@x@l}\strut}%
\settodepth{\@Dth@H@L}{\strut\usebox{\@x@l}\strut}%
\addtolength{\@Hgt@H@L}{\@Dth@H@L}}{\setlength{\@Hgt@H@L}{0pt}}%
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Check the heights and depths of boxes
% Non-letterhead header section
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\sbox{\@x@c}{\@cheader}\sbox{\@x@l}{\@lheader}\sbox{\@x@r}{\@rheader}%
\ifthenelse{\boolean{@ch@use}}%
{\settoheight{\@Hgt@h@c}{\strut\usebox{\@x@c}\strut}%
\settodepth{\@Dth@h@c}{\strut\usebox{\@x@c}\strut}%
\addtolength{\@Hgt@h@c}{\@Dth@h@c}}{\setlength{\@Hgt@h@c}{0pt}}%
\ifthenelse{\boolean{@rh@use}}%
{\settoheight{\@Hgt@h@r}{\strut\usebox{\@x@r}\strut}%
\settodepth{\@Dth@h@r}{\strut\usebox{\@x@r}\strut}%
\addtolength{\@Hgt@h@r}{\@Dth@h@r}}{\setlength{\@Hgt@h@r}{0pt}}%
\ifthenelse{\boolean{@lh@use}}%
{\settoheight{\@Hgt@h@l}{\strut\usebox{\@x@l}\strut}%
\settodepth{\@Dth@h@l}{\strut\usebox{\@x@l}\strut}%
\addtolength{\@Hgt@h@l}{\@Dth@h@l}}{\setlength{\@Hgt@h@l}{0pt}}%
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Check the heights and depths of boxes
% Letterhead footer section
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\sbox{\@x@c}{\@Cfooter}\sbox{\@x@l}{\@Lfooter}\sbox{\@x@r}{\@Rfooter}%
\ifthenelse{\boolean{@Cf@use}}%
{\settoheight{\@Hgt@F@C}{\strut\usebox{\@x@c}\strut}%
\settodepth{\@Dth@F@C}{\strut\usebox{\@x@c}\strut}%
\addtolength{\@Hgt@F@C}{\@Dth@F@C}}{\setlength{\@Hgt@F@C}{0pt}}%
\ifthenelse{\boolean{@Rf@use}}%
{\settoheight{\@Hgt@F@R}{\strut\usebox{\@x@r}\strut}%
\settodepth{\@Dth@F@R}{\strut\usebox{\@x@r}\strut}%
\addtolength{\@Hgt@F@R}{\@Dth@F@R}}{\setlength{\@Hgt@F@R}{0pt}}%
\ifthenelse{\boolean{@Lf@use}}%
{\settoheight{\@Hgt@F@L}{\strut\usebox{\@x@l}\strut}%
\settodepth{\@Dth@F@L}{\strut\usebox{\@x@l}\strut}%
\addtolength{\@Hgt@F@L}{\@Dth@F@L}}{\setlength{\@Hgt@F@L}{0pt}}%
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Check the heights and depths of boxes
% Non-letterhead footer section
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\sbox{\@x@c}{\@cfooter}\sbox{\@x@l}{\@lfooter}\sbox{\@x@r}{\@rfooter}%
\ifthenelse{\boolean{@ch@use}}%
{\settoheight{\@Hgt@f@c}{\strut\usebox{\@x@c}\strut}%
\settodepth{\@Dth@f@c}{\strut\usebox{\@x@c}\strut}%
\addtolength{\@Hgt@f@c}{\@Dth@f@c}}{\setlength{\@Hgt@f@c}{0pt}}%
\ifthenelse{\boolean{@rh@use}}%
{\settoheight{\@Hgt@f@r}{\strut\usebox{\@x@r}\strut}%
\settodepth{\@Dth@f@r}{\strut\usebox{\@x@r}\strut}%
\addtolength{\@Hgt@f@r}{\@Dth@f@r}}{\setlength{\@Hgt@f@r}{0pt}}%
\ifthenelse{\boolean{@lh@use}}%
{\settoheight{\@Hgt@f@l}{\strut\usebox{\@x@l}\strut}%
\settodepth{\@Dth@f@l}{\strut\usebox{\@x@l}\strut}%
\addtolength{\@Hgt@f@l}{\@Dth@f@l}}{\setlength{\@Hgt@f@l}{0pt}}%
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Determine the height of the letterhead header
% Note: the minheight will be used to set up the cello window stuff
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\txa{Height of letterhead header}%
\ifthenelse{\lengthtest{\@Hgt@H@L<\@Hgt@H@C}}%
{\setlength{\@Hgt@Head}{\@Hgt@H@C}}{\setlength{\@Hgt@Head}{\@Hgt@H@L}}%
\txa{1) @Hgt@Head: \the\@Hgt@Head,C:\the\@Hgt@H@C,L:\the\@Hgt@H@L,R:\the\@Hgt@H@R}%
\ifthenelse{\lengthtest{\@Hgt@Head<\@Hgt@H@R}}%
{\setlength{\@Hgt@Head}{\@Hgt@H@R}}{}%
\txa{2) @Hgt@Head: \the\@Hgt@Head}%
\ifthenelse{\lengthtest{\@Hgt@Head<\@Min@Hgt@Head}}%
{\setlength{\@Hgt@Head}{\@Min@Hgt@Head}}{}%
\txa{3) @Hgt@Head: \the\@Hgt@Head}%
\ifthenelse{\lengthtest{\@Hgt@Head<1pt}}%
{\setlength{\@Hgt@Head}{\@marg@tp}}%
{%\ifthenelse{\lengthtest{\@marg@tp@a<\@unpr@tp}}%
%{\setlength{\@marg@tp@a}{\@unpr@tp}}{}%
\txa{5) @Hgt@Head: \the\@Hgt@Head}%
\addtolength{\@Hgt@Head}{\@unpr@tp}%
\txa{6) @Hgt@Head: \the\@Hgt@Head}%
\addtolength{\@Hgt@Head}{\@marg@tp@a}%
\txa{7) @Hgt@Head: \the\@Hgt@Head}%
\addtolength{\@Hgt@Head}{\the\@Hrw+2.60005pt}%
\ifthenelse{\lengthtest{\@Hrw<2pt}}{\addtolength{\@Hgt@Head}{2.0pt}}{}%
\txa{8) @Hgt@Head: \the\@Hgt@Head,\the\@Hrw,\headrulewidth}%
}%
\txa{Left: \the\@Hgt@H@L, Center: \the\@Hgt@H@C, Right: \the\@Hgt@H@R}%
\txa{Min: \the\@Min@Hgt@Head, Total: \the\@Hgt@Head}%
\txa{Marg: \the\@marg@tp, Marga: \the\@marg@tp@a, Unpr: \the\@unpr@tp}%
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Determine the height of the non-letterhead header
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\txa{Height of non-letterhead header}%
\ifthenelse{\lengthtest{\@Hgt@h@l<\@Hgt@h@c}}%
{\setlength{\@Hgt@head}{\@Hgt@h@c}}%
{\setlength{\@Hgt@head}{\@Hgt@h@l}}%
\ifthenelse{\lengthtest{\@Hgt@head<\@Hgt@h@r}}%
{\setlength{\@Hgt@head}{\@Hgt@h@r}}{}%
\ifthenelse{\lengthtest{\@Hgt@head<\@Min@Hgt@head}}%
{\setlength{\@Hgt@head}{\@Min@Hgt@head}}{}%
%  \addtolength{\@Hgt@head}{8pt}
\ifthenelse{\lengthtest{\@Hgt@head<1pt}}%
{\setlength{\@Hgt@head}{\@marg@tp}}%
{%\ifthenelse{\lengthtest{\@marg@tp@a<\@unpr@tp}}%
%{\setlength{\@marg@tp@a}{\@unpr@tp}}{}%
\addtolength{\@Hgt@head}{\@marg@tp@a}%
\addtolength{\@Hgt@head}{\the\@hrw+2.60005pt}%
\ifthenelse{\lengthtest{\@hrw<2pt}}{\addtolength{\@Hgt@head}{2.0pt}}{}%
}%
\txa{Left: \the\@Hgt@h@l, Center: \the\@Hgt@h@c, Right: \the\@Hgt@h@r}%
\txa{Min: \the\@Min@Hgt@head, Total: \the\@Hgt@head}%
\txa{Marg: \the\@marg@tp, Marga: \the\@marg@tp@a, Unpr: \the\@unpr@tp}%
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Determine the height of the letterhead footer
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\txa{Height of letterhead footer}%
\ifthenelse{\lengthtest{\@Hgt@F@L<\@Hgt@F@C}}%
{\setlength{\@Hgt@Foot}{\@Hgt@F@C}}{\setlength{\@Hgt@Foot}{\@Hgt@F@L}}%
\ifthenelse{\lengthtest{\@Hgt@Foot<\@Hgt@F@R}}%
{\setlength{\@Hgt@Foot}{\@Hgt@F@R}}{}%
\ifthenelse{\lengthtest{\@Hgt@Foot<\@Min@Hgt@Foot}}%
{\setlength{\@Hgt@Foot}{\@Min@Hgt@Foot}}{}%
\ifthenelse{\lengthtest{\@Hgt@Foot<1pt}}%
{\setlength{\@Hgt@Foot}{\@marg@bt}}%
{\ifthenelse{\lengthtest{\@marg@bt@b<\@unpr@bm}}%
{\setlength{\@marg@bt@b}{\@unpr@bm}}{}%
\addtolength{\@Hgt@Foot}{\@marg@bt@a}}%
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Determine the height of the non-letterhead footer
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\txa{Height of non-letterhead footer}%
\ifthenelse{\lengthtest{\@Hgt@f@l<\@Hgt@f@c}}%
{\setlength{\@Hgt@foot}{\@Hgt@f@c}} {\setlength{\@Hgt@foot}{\@Hgt@f@l}}%
\ifthenelse{\lengthtest{\@Hgt@foot<\@Hgt@f@r}}%
{\setlength{\@Hgt@foot}{\@Hgt@f@r}}{}%
\ifthenelse{\lengthtest{\@Hgt@foot<\@Min@Hgt@foot}}%
{\setlength{\@Hgt@foot}{\@Min@Hgt@foot}}{}%
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Check the under boxes here
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\setboolean{@ztila}{false}
\ifthenelse{\boolean{@LUh@use}}{\txa{zorth}\sbox{\@hblk@aa}{\@LUheader}%
\setboolean{@hblk@a}{true}\setboolean{@ztila}{true}}{}%
\ifthenelse{\boolean{@CUh@use}}{\txa{zorth}\sbox{\@hblk@ab}{\@CUheader}%
\setboolean{@hblk@a}{true}\setboolean{@ztila}{true}}{}%
\ifthenelse{\boolean{@RUh@use}}{\txa{zorth}\sbox{\@hblk@ac}{\@RUheader}%
\setboolean{@hblk@a}{true}\setboolean{@ztila}{true}}{}%
\ifthenelse{\boolean{@ztila}}
{\ifthenelse{\lengthtest{\@hblk@a@aft<\@marg@tp@b}}
{\setlength{\@hblk@a@aft}{\@marg@tp@b}}{}
\setlength{\@marg@tp@b}{0pt}}{}%
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Set the printable length as the difference of all those others
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\ifthenelse{\lengthtest{\@marg@lt@tp@d<1pt}}%
{\setlength{\@marg@lt@tp@d}{\@Hgt@Head+\@marg@tp@a}}{}%
%\addtolength{\@Hgt@Head}{1pt}%
%\addtolength{\@Hgt@head}{1pt}%
\setlength{\@Plg}{\paperheight-\@Hgt@Head-\@Hgt@Foot-\@marg@tp@b-\@marg@tp@a-%
\@marg@bt@a-\@marg@bt@b-\@f@f-\footrulewidth-\headrulewidth}%
\setlength{\@plg}{\paperheight-\@Hgt@head-\@Hgt@foot-\@marg@tp@b-\@marg@tp@a-%
\@marg@bt@a-\@marg@bt@b-\@f@f-\footrulewidth-\headrulewidth}%
\ifthenelse{\lengthtest{\@text@height>.1pt}}{\setlength{\@Plg}{\@text@height}}{}%
\ifthenelse{\boolean{@Bg@use}}{\AddToShipoutPicture*{\@Backgrd}}{}%
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Print feedback if requested
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\def\ifta{0}%
\txa{\string\@Hgt@H@C: \the\@Hgt@H@C, \string\@Hgt@H@R: \the\@Hgt@H@R}%
\txa{\string\@Hgt@H@L: \the\@Hgt@H@L, \string\@Hgt@Head: \the\@Hgt@Head}%
\txa{\string\@Hgt@h@c: \the\@Hgt@h@c, \string\@Hgt@h@r: \the\@Hgt@h@r}%
\txa{\string\@Hgt@h@l: \the\@Hgt@h@l, \string\@Hgt@head: \the\@Hgt@head}%
\txa{\string\@Hgt@F@C: \the\@Hgt@F@C, \string\@Hgt@F@R: \the\@Hgt@F@R}%
\txa{\string\@Hgt@F@L: \the\@Hgt@F@L, \string\@Hgt@Foot: \the\@Hgt@Foot}%
\txa{\string\@Hgt@f@c: \the\@Hgt@f@c, \string\@Hgt@f@r: \the\@Hgt@f@r}%
\txa{\string\@Hgt@f@l: \the\@Hgt@f@l, \string\@Hgt@foot: \the\@Hgt@foot}%
\txa{\string\@Plg:\the\@Plg, \string\paperheight:\the\paperheight}%
\txa{\string\@Hgt@Head:\the\@Hgt@Head, \string\@Hgt@head:\the\@Hgt@head}%
\txa{\string\@f@f:\@f@f,\string\footskip:\the\footskip}%
\txa{\string\@Hgt@foot:\the\@Hgt@Foot, \string\baselineskip:\the\baselineskip}%
\txa{\string\@plg:\the\@plg, \string\paperheight:\the\paperheight}%
\txa{\string\@Hgt@foot:\the\@Hgt@Foot, \string\baselineskip:\the\baselineskip}%
\txa{\string\@Hgt@foot:\the\@Hgt@Foot}%
\txa{\string\voffset:\the\voffset, \string\headsep:\the\headsep}%
\txa{\string\footruleskip:\footruleskip, \string\footrulewidth:\footrulewidth}%
\def\ifta{0}%
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Now set widths 
% Set margins to defaults, or to set values
% If there marginal notes, set margins to 0in
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\ifthenelse{\boolean{@marg@Luse}}%
{\txa{Setting up left column...}%
\settowidth{\@utile}{\@Lmarg}%
\txa{Lt column width:\the\@utile}
\ifthenelse{\lengthtest{\@unpr@lt>\@marg@lt@l}}{\setlength{\@marg@lt@l}{\@unpr@lt}}%
{\addtolength{\@marg@lt@l}{\@unpr@lt}}%
\addtolength{\@utile}{\@marg@lt@l}%
\setlength{\marginparwidth}{\@utile}%
\setlength{\marginparsep}{\@marg@lt@r}%
\setlength{\@marg@lt}{\@utile}%
%   \addtolength{\@marg@lt}{\@marg@lt@r}%
\txa{Lt Column width+edge:\the\@util,\the\@marg@lt@l}%
\txa{\string\@util:\the\@util, width:\the\marginparwidth,sep:\the\marginparsep}%
\ifthenelse{\lengthtest{\@marg@lt@tp@d<1pt}}{\setlength{\@marg@lt@tp@d}{\@Hgt@Head}}{}%
\txa{Done!}
}%
{%
\setlength{\marginparsep}{0in}%
\setlength{\marginparwidth}{0in}%
\ifthenelse{\lengthtest{\@unpr@lt>\@marg@lt}}{\setlength{\@marg@lt}{\@unpr@lt}}{}%
}%
\ifthenelse{\boolean{@marg@Ruse}}%
{%
\txa{Setting up right column...}%
\settowidth{\@utile}{\@Rmarg}%
\txa{Rt Column width:\the\@utile}%
\ifthenelse{\lengthtest{\@marg@rt@l<.01pt}}{\setlength{\@marg@rt@l}{\@marg@lt@r}}{}%
\ifthenelse{\lengthtest{\@marg@rt@r<.01pt}}{\setlength{\@marg@rt@r}{\@marg@lt@l}}{}%
\txa{Unpr Rt:\the\@unpr@rt,Marg Rt R:\the\@marg@rt@r}
\ifthenelse{\lengthtest{\@unpr@rt>\@marg@rt@r}}{\setlength{\@marg@rt@r}{\@unpr@rt}}{}%
\txa{Unpr Rt:\the\@unpr@rt,Marg Rt R:\the\@marg@rt@r}%
\addtolength{\@utile}{\@marg@rt@r}%
\txa{Rt Column width+gutter:\the\@utile}%
\addtolength{\@utile}{\@marg@rt@l}%
\txa{Rt Column width+edge:\the\@utile}%
%setlength{\marginparwidth}{\@utile}%
%setlength{\marginparsep}{\@marg@rt@l}%
\setlength{\@marg@rt}{\@utile}%
\txa{\string\@util:\the\@util, \string\marginparwidth:\the\marginparwidth}%
\ifthenelse{\lengthtest{\@marg@rt@tp@d<1pt}}%
  {\setlength{\@marg@rt@tp@d}{\@Hgt@Head}}{}%
\txa{Done!}%
}%
{%
\txa{No right column}%
\ifthenelse{\lengthtest{\@unpr@rt>\@marg@rt}}{\setlength{\@marg@rt}{\@unpr@rt}}{}%
\ifthenelse{\lengthtest{\@unpr@rt>\@marg@rt}}{\setlength{\@marg@rt}{\@unpr@rt}}{}%
}%
% \ifthenelse{\lengthtest{\@unpr@rt>\@marg@rt}}{\setlength{\@marg@rt}{\@unpr@rt}}{}%
\setlength{\@Pwd}{\paperwidth-\@marg@lt-\@marg@rt}%
\txa{Page width:\the\@Pwd,paper:\the\paperwidth}%
\txa{\string\@Hgt@H@C:\the\@Hgt@H@C, width:\the\marginparwidth,sep:\the\marginparsep}%
\ifthenelse{\lengthtest{\@text@width>.1pt}}{\setlength{\@Pwd}{\@text@width}}{}%
\showdim{At raggedbottom}%
\raggedbottom%
\def\ifta{0}%
\showdim{Before setpage}%
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Now set dimensions of all page lengths
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\txa{\string\@marg@tp@a:\the\@marg@tp@a,\string\@Hgt@Head:\the\@Hgt@Head}%
\txa{\string\@marg@tp@b:\the\@marg@tp@b,\string\@Hgt@Foot:\the\@Hgt@Foot}%
\txa{\string\@marg@bt@a:\the\@marg@bt@a,\string\@Hgt@Head:\the\@Hgt@Head}%
\txa{\string\@marg@bt@b:\the\@marg@bt@b,\string\@Hgt@Foot:\the\@Hgt@Foot}%
\txa{\string\@unpr@bm:\the\@unpr@bm,\string\@unpr@tp:\the\@Hgt@Foot}%
\txa{Before Setting page 1}%
\settoheight{\@utile}{\@Rheader}%
\settodepth{\@utilb}{\@Rheader}%
\addtolength{\@utile}{\@utilb}%
\txa{Right: \the\@utile}%
\settoheight{\@utile}{\@Cheader}%
\settodepth{\@utilb}{\@Cheader}%
\addtolength{\@utile}{\@utilb}%
\txa{Center: \the\@utile}%
\settoheight{\@utile}{\@Lheader}%
\settodepth{\@utilb}{\@Lheader}%
\addtolength{\@utile}{\@utilb}%
\txa{Left: \the\@utile}%
\gdef\npind{A5}%
\txa{Plg:\the\@Plg,Pwd:\the\@Pwd,marg@rt:\the\@marg@rt,marg@lt:\the\@marg@lt}
\txa{marg@tp@a:\the\@marg@tp@a,Hgt@head:\the\@Hgt@head,marg@tp@b:\the\@marg@tp@b,Hgt@foot:\the\@Hgt@foot}
\setpage{\@Plg}{\@Pwd}{\@marg@rt-1in}{\@marg@lt-1in}{10pt}%
{\@marg@tp@a-1in}{\@Hgt@Head}{\@marg@tp@b}{\@Hgt@Foot}%
\ifthenelse{\lengthtest{\@Hgt@head<10pt}}{\setlength{\@Hgt@head}{13pt}}{}%
\txa{After Setting page 1}%
\fixhh{\@Hgt@head}%
\fixth{\@plg}%
\showdim{After setpage}%
\setlength{\headwidth}{\textwidth}%
\def\ifta{0}%
\ifthenelse{\boolean{@cello@win}} {
\setlength{\@utila}{\@cello@d}%
\txa{1. \the\@utila}
\addtolength{\@utila}{-\@Hgt@Head}%
\txa{2. \the\@utila,\the\@Hgt@Head}%
\addtolength{\@utila}{-\@marg@tp@a}%
\txa{3. \the\@utila,\the\@marg@tp@a}
\addtolength{\@utila}{-\@marg@tp@b}%
\txa{4. \the\@utila,\the\@marg@tp@b}
\ifthenelse{\boolean{@dt@p}}{\txa{Fixing date}
\ifthenelse{\@intd@pos<\@intt@pos}{%
\addtolength{\@utila}{-\@dt@sk@b}%
\txa{5. \the\@utila,\the\@dt@sk@b}
\addtolength{\@utila}{-\@dt@sk@a}%
\txa{6. \the\@utila,\the\@dt@sk@a}
\settoheight{\@utile}{\@xdate}
\addtolength{\@utila}{-\@utile}%
\txa{7. \the\@utila,\the\@utile}
}{}}{}%
\ifthenelse{\boolean{@af@p}}{\txa{Fixing from address}
\ifthenelse{\@intf@pos<\@intt@pos}{%
\addtolength{\@utila}{-\@addr@fr@sk@b}%
\addtolength{\@utila}{-\@addr@fr@sk@a}%
\sbox{\b@addr@fr}{\noindent\setlength{\tabcolsep}{0pt}% Address-from into a box
\raggedleft\begin{tabular}{l@{}}%
\noindent\ignorespaces\@addr@fr%
\ifthenelse{\boolean{@addr@fr@t}}{\\ \@phn@phr: \@phn@fr}{}%
\ifthenelse{\boolean{@addr@fr@f}}{\\ \@fax@phr: \@fax@fr}{}%
\ifthenelse{\boolean{@addr@fr@e}}{\\ \@email@phr: \@email@fr}{}%
\end{tabular}}%
\settoheight{\@utile}{\usebox{\b@addr@fr}}%
\addtolength{\@utila}{-\@utile}%
\txa{8. \the\@utila,\the\@utile}
\sbox{\b@addr@fr}{\noindent\setlength{\tabcolsep}{0pt}% Address-from into a box
\raggedleft\begin{tabular}{l@{}}%
\noindent\ignorespaces\@addr@fr%
\ifthenelse{\boolean{@addr@fr@t}}{\\ \@phn@phr: \@phn@fr}{}%
\ifthenelse{\boolean{@addr@fr@f}}{\\ \@fax@phr: \@fax@fr}{}%
\ifthenelse{\boolean{@addr@fr@e}}{\\ \@email@phr: \@email@fr}{}%
\end{tabular}}%
}{}}{}%
\txa{9. \the\@utila}
\setlength{\@utilb}{\@cello@l}%
\txa{10. Horizontal position}
\txa{11. Start: \the\@utilb}
\addtolength{\@utilb}{-\@marg@lt}%
\txa{12. \the\@utilb,\the\@marg@lt}
\txa{13. \the\@utilb}
\ifthenelse{\lengthtest{\@utila > 0pt}}{\setboolean{@ztila}{true}}
{\typeout{Cello window requested, but cannot be used.}
 \typeout{'To-address' cannot be placed vertically.  Suggestions:}
 \typeout{1. Make letterhead components smaller.}
 \typeout{2. Eliminate date or 'from-address' from letter.}
 \typeout{3. Move date or 'from-address' below 'to-address'.}
 \setboolean{@ztila}{false}%
}
\ifthenelse{\lengthtest{\@utilb > 0pt}}{\setboolean{@ztilb}{true}}
{\typeout{Cello window requested, but cannot be used.}
 \typeout{'To-address' cannot be placed horizontally.  Suggestions:}
 \typeout{1. Make left-margin width smaller.}
 \typeout{2. Eliminate margin components.}
 \setboolean{@ztilb}{false}%
}
\ifthenelse{\boolean{@ztila} \and \boolean{@ztilb}}{
\setlength{\@addr@to@sk@b}{\@utila}
\setlength{\@extr@hor}{\@utila}}{}
}{\setboolean{@cello@win}{false}\setlength{\@extr@hor}{0pt}}%
\def\ifta{0}%
\txa{End of @set@em@up}%
}%
\newif \if@dim@reset \@dim@resettrue%
\newif \if@repth \@repthfalse%
\newcommand{\@rep@th}{}%
\newcommand{\fixth}[1]{\renewcommand{\@rep@th}{#1} \global\@repthtrue}%
\newdimen \@rep@th%
\newif \if@reptw \@reptwfalse%
\newcommand{\@rep@tw}{}%
\newcommand{\fixtw}[1]{\renewcommand{\@rep@tw}{#1} \global\@reptwtrue}%
\newdimen \@rep@tw%
\newif \if@repom \@repomfalse%
\newcommand{\@rep@om}{}%
\newcommand{\fixom}[1]{\renewcommand{\@rep@om}{#1} \global\@repomtrue}%
\newdimen \@rep@om%
\newif \if@repem \@repemfalse%
\newcommand{\@rep@em}{}%
\newcommand{\fixem}[1]{\renewcommand{\@rep@em}{#1} \global\@repemtrue}%
\newdimen \@rep@em%
\newif \if@repcs \@repcsfalse%
\newcommand{\@rep@cs}{}%
\newcommand{\fixcs}[1]{\renewcommand{\@rep@cs}{#1} \global\@repcstrue}%
\newdimen \@rep@cs%
\newif \if@reptm \@reptmfalse%
\newcommand{\@rep@tm}{}%
\newcommand{\fixtm}[1]{\renewcommand{\@rep@tm}{#1} \global\@reptmtrue}%
\newdimen \@rep@tm%
\newif \if@rephh \@rephhfalse%
\newcommand{\@rep@hh}{}%
\newcommand{\fixhh}[1]{\renewcommand{\@rep@hh}{#1} \global\@rephhtrue}%
\newdimen \@rep@hh%
\newif \if@rephs \@rephsfalse%
\newcommand{\@rep@hs}{}%
\newcommand{\fixhs}[1]{\renewcommand{\@rep@hs}{#1} \global\@rephstrue}%
\newdimen \@rep@hs%
\newif \if@repfs \@repfsfalse%
\newcommand{\@rep@fs}{}%
\newcommand{\fixfs}[1]{\renewcommand{\@rep@fs}{#1} \global\@repfstrue}%
\newdimen \@rep@fs%
%
\def\@outputpage{%
  \def\ifta{0}%
  \txa{npind:\npind}%
  \showdim{New page - before shipout}%
  \begingroup%           % the \endgroup is put in by \aftergroup
    \let \protect \noexpand
    \@resetactivechars
    \global\let\@@if@newlist\if@newlist
    \global\@newlistfalse
    \@parboxrestore
\txa{topmargin:\the\topmargin}
\txa{Before shipout...}
  \showdim{New page - immediately before shipout}
    \shipout \vbox{%
      \set@typeset@protect
      \aftergroup \endgroup
      \aftergroup \set@typeset@protect% correct? or just restore by ending the group
      \if@specialpage
        \global\@specialpagefalse\@nameuse{ps@\@specialstyle}%
      \fi
      \if@twoside
        \ifodd\count\z@ \let\@thehead\@oddhead \let\@thefoot\@oddfoot
          \let\@themargin\oddsidemargin
        \else \let\@thehead\@evenhead
          \let\@thefoot\@evenfoot \let\@themargin\evensidemargin
        \fi
      \fi
      \reset@font
      \normalsize
\txa{Before normalsfcodes}
      \normalsfcodes
      \let\label\@gobble
      \let\index\@gobble
      \let\glossary\@gobble
      \baselineskip\z@skip \lineskip\z@skip \lineskiplimit\z@
      \@begindvi
      \vskip \topmargin
    \moveright\@themargin \vbox {%
      \setbox\@tempboxa \vbox to\headheight{%
        \vfil
        \color@hbox
          \normalcolor
          \hb@xt@\textwidth{\@thehead}%
        \color@endbox
        }%                        %% 22 Feb 87
      \dp\@tempboxa \z@
      \box\@tempboxa
      \vskip \headsep
      \box\@outputbox
      \baselineskip \footskip
      \color@hbox
        \normalcolor
        \hb@xt@\textwidth{\@thefoot}%
      \color@endbox
      }%
    }%
\txa{After shipout}
\global\let\if@newlist\@@if@newlist
\showdim{New page - before reset}
\if@dim@reset 
\if@repth \global\textheight \@rep@th \global\@repthfalse \fi
\fi
\global \@colht \textheight
\stepcounter{page}%
\let\firstmark\botmark
\if@dim@reset 
\if@repth \global\textheight \@rep@th     \global\@repthfalse \fi
\if@reptw \global\textwidth \@rep@tw      \global\@reptwfalse \fi
\if@repom \global\oddsidemargin \@rep@om  \global\@repomfalse \fi
\if@repem \global\evensidemargin \@rep@em \global\@repemfalse \fi
\if@repcs \global\columnsep \@rep@cs      \global\@repcsfalse \fi
\if@reptm \global\topmargin \@rep@tm      \global\@reptmfalse   
\txa{Fixing tm} \fi
\if@rephh \global\headheight \@rep@hh     \global\@rephhfalse \fi
\if@rephs \global\headsep \@rep@hs        \global\@rephsfalse \fi
\if@repfs \global\footskip \@rep@fs       \global\@repfsfalse \fi
\fi
\showdim{New page - after reset}
\def\ifta{0}%
\renewcommand{\headrulewidth}{\the\@Hrw}
\renewcommand{\footrulewidth}{\the\@Frw}
}
\AtEndDocument{%
\ifthenelse{\boolean{@set@env}}%
{\@clear@box%
\pagestyle{empty}\thispagestyle{empty}%
\def\ifta{0}%
\showdim{Before changeing dimensions}%
\gdef\npind{A6}%
\setpage{\@stock@height}{\@stock@width}{-1in}{-1in}{0in}{-1in}{0in}{0in}{0in}%
\txa{Starting the call to makeenvfn}%
\makeenvfn%
\txa{After return from the call to makeenvfn}%
}{}%
\ifthenelse{\boolean{@use@envlab}}{\@make@big@env}{}%
}%
\AtBeginDocument{
\def\ifta{0}%
\txa{AtBeginDocument...}
\@nlfm@addr=0
\ifthenelse{\boolean{@use@envlab}}
{
\IfFileExists{envlab.sty}
{\makelabels}
{\typeout{The option <useenvlab> was issued.  File <envlab.sty> cannot be found.}
\typeout{Option <useenvlab> is disabled.  Please install envlab system.}
\setboolean{@use@envlab}{false}}}{}
{}
\txa{At the very very end...}
}
\endinput%
%    \end{macrocode}
%
%    \begin{macrocode}
%</package>
%    \end{macrocode}

%%% Local Variables: 
%%% mode: latex
%%% TeX-master: t
%%% End: 
