% DOCUMENT OPTION STYLE -- Released 21-MAR-1991
%
% adapted from LETTER DOCUMENT STYLE by Leslie Lamport
%
% This style has to be used as an optional style.
% Tests have been made with the article.sty as the basis sty.
% This style was also used together with the finder.sty.
% Advice: Use the STBrief.Sty in connection with the DefUser.Sty.
%         (Of course ist works without it)
%
% Copyright (c) 1991,1991 by Steffen Steinhaeuser
% Permission to copy all or part of this work is granted, provided
% that the copies are not made or distributed for resale, and that
% the copyright notice and this notice are retained.
%
% THIS WORK IS PROVIDED ON AN "AS IS" BASIS.  THE AUTHOR PROVIDES NO
% WARRANTY WHATSOEVER, EITHER EXPRESS OR IMPLIED, REGARDING THE WORK,
% INCLUDING WARRANTIES WITH RESPECT TO ITS MERCHANTABILITY OR FITNESS
% FOR ANY PARTICULAR PURPOSE.
%
% If you make any improvements, I'd like to hear about them.
%
% Steffen Steinh\"auser
% Landwehrstr. 47
% 6100 Darmstadt
% Federal Republic of Germany
% steinhaeuser@ddagsi5.bitnet
% steffen_steinhaeuser@mz.maus.de
%
\def~{ }
\typeout{-------------------------------------------------------}
\typeout{| STBRIEF.STY V1.4 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|}
\typeout{| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~c'15-Feb-91 R.Th/Stone |}
\typeout{-------------------------------------------------------}
\typeout{}
%
% Die Liste der folgenden Makros sollte mit den benutzerspezifischen
% Daten in eine Datei als Optionstyle in \documentstyle[]{} angegeben
% werden. Diese Arbeit sollte aber, falls vorhanden, der DefUser.Sty
% uebernehmen.
%
% Folgenden Makros sollten die eigenen Einstellungen uebergeben werden:
%
% \name{}
% \strasse{}
% \stadt{}
% \signature{}
% \telefon{}
% \faxnummer{}
% \kontonr{}
% \bank{}
% \bankleitzahl{}
% \smallogo{}
% \logo{}
% \logosymbol{}
% \datum{}
%
% Folgende Makros sollten ggf. nur angegeben werden (oder nicht)
%
% \fax
%
% Folgende Flags bzgl. eigener Einstellung setzen
%
% \toplogo[true]    oder \toplogofalse
% \toprule[true]    oder \toprulefalse
% \bottomrule[true] oder \bottomrulefalse
% \bankvtrue        oder \bankv[false]
% \from[true]       oder \fromfalse
% \symlogotrue      oder \symlogo[false]
%
% [...] ist die Defaulteinstellung im STBrief.sty
%
% Ende der Liste
%

%
% Font fuer das Logo im Briefkopf
%
\newfont{\toplogofnt}{cmtt10 scaled 2074}
%
% Skip zwischen zwei Absaetzen ist so gross wie etwa eine Leerzeile
% Begin des Absatzes ist nicht eingerueckt
%
\parskip1.5ex plus.5ex minus.5ex
\parindent0pt
%
%    ****************************************
%    *        laengen - definitionen        *
%    ****************************************
%
% This is from documentsubstyle DINA4 for DIN A4 pagesize. GMD Z1.BN  12.06.85
\oddsidemargin 0pt
\evensidemargin 0pt
\marginparwidth 0pt
\marginparsep 0pt
\marginparpush 0pt

\topmargin -1.2cm
\headheight 2.5cm
\headsep 1cm
\footheight 0.7cm
\footskip 1cm
\textheight 17cm
\textwidth 16.2cm
%
% individuelle Einstellung je nach Computertyp und Druckertreiber
%
\voffset-8mm
%\hoffset
%
%    ****************************************
%    *    logische flags - definitionen     *
%    ****************************************
%
% Steuerung von etwaigen Ausgaben (oder nicht) durch neue IF-Kommandos
%
\newif\iftoplogo    % Ausgabe des toplogos
\newif\iftoprule    % Linie oben (unter dem TopLogo)
\newif\ifbottomrule % Linie unten (ueber der Bankverbindung)
\newif\ifsmallfrom  % Absender ueber der Adresse
\newif\iffrom       % from (-address) kann angeschaltet werden
\newif\ifbankv      % Ausgabe der Bankverbindung in der Fu_zeile
\newif\ifsymlogo    % Ausgabe eines Logosymbols
%
\newif\ifdefuser
%
% Defaulteinstellungen
%
\fromtrue
\smallfromtrue
\bankvfalse
\toplogotrue
\symlogofalse
\topruletrue
\bottomruletrue
%
%    ****************************************
%    *        textmakro - definitionen      *
%    ****************************************
%
\def\fax{ %
\smallfromfalse
\toprulefalse
\bottomrulefalse}

\def\kontonr#1{\def\kontono{#1}}
\def\kontono{}

\def\bank#1{\def\bankname{#1}}
\def\bankname{}

\def\bankleitzahl#1{\def\bankzahl{#1}}
\def\bankzahl{}

\def\name#1{\def\fromname{#1}\def\fromsig{#1}}
\def\fromname{}

\def\strasse#1{\def\fromstreet{#1}}
\def\fromstreet{}

\def\stadt#1{\def\fromcity{#1}}
\def\fromcity{}

\def\signature#1{\def\fromsig{#1}}
\def\fromsig{}

\def\faxnummer#1{\def\faxnum{#1}}
\def\faxnum{}

\newlength{\telenumwidth}
\newlength{\telewidth}
\settowidth{\telewidth}{Telefon}

\def\telefon#1{\def\telephonenum{#1}\settowidth{\telenumwidth}{#1}}
\def\telephonenum{}

\def\smallogo#1{\def\sfromlogo{#1}}
\def\sfromlogo{}

\def\logo#1{\def\fromlogo{#1}\def\sfromlogo{#1}}
\def\fromlogo{}

\def\logosymbol#1{\def\symlogo{#1} %
    \iftoplogo\else\def\fromlogo{#1}\fi %
    \ifx\@empty\symlogo\symlogofalse\else\symlogotrue\fi}

\def\datum#1{\def\date{#1}}
\def\date{\today}
%
%    ****************************************
%    *  stbrief environment - definitionen   *
%    ****************************************
%
\def\opening#1{
 \thispagestyle{firstpage}
 {\hbox{} \par}
 \vspace*{5mm}  % \vfill
 \par #1\par\nobreak
}

\long\def\closing#1{\par\nobreak\vspace{\parskip}
  \stopbreaks
  \noindent
  \parbox{0.5\textwidth}{\raggedright
       \ignorespaces #1\\[12mm]
       \ifx\@empty\fromsig\else
       \fromsig \fi\strut}\vfill
   \par}

\def\cc#1{\par\noindent
\parbox[t]{\textwidth}{\@hangfrom{\rm  \ccname }\ignorespaces #1\strut}\par}

\def\encl#1{\par\noindent
\parbox[t]{\textwidth}{\@hangfrom{\rm  \enclname }\ignorespaces #1\strut}\par}

\def\stopletter{}
%
% Labels
%
\def\returnaddress{}
\newcount\labelcount
%
% The following \startlabels command sets things up for producing
% labels in two columns of five 2" X 4-1/4" labels each, suitable
% for reproducing onto Avery brand number 5352 address labels.
%
\def\startlabels{\labelcount=0 \baselineskip=0pt \lineskip=0pt
\pagestyle{empty}
\let\@texttop=\relax
\topmargin -50pt
\headsep 0pt
\oddsidemargin -35pt
\evensidemargin -35pt
\textheight 10in
\@colht\textheight  \@colroom\textheight \vsize\textheight
\textwidth 550pt
\columnsep 25pt
\xpt
\baselineskip=0pt
\lineskip=0pt
\boxmaxdepth=0pt
\twocolumn\relax}

\def\mlabel#1#2{\setbox0\vbox{\parbox[b]{3.6in}{\strut\ignorespaces #2}}
         \vbox to 2in{\vss \box0 \vss}}
%
%    ****************************************
%    *     THE GENERIC STBRIEF COMMANDS     *
%    ****************************************
%
\long\def\letter#1{\newpage
  \c@page\@ne
  \interlinepenalty=200 % smaller than the TeXbook value
  \@processto{#1}}

\def\endletter{\stopletter\@@par\pagebreak \@@par
  \if@filesw
    \begingroup
      \def\protect{\string}
      \let\\=\relax
      \def\protect##1{\string##1\space}
      \immediate\write\@auxout{\string\mlabel{\returnaddress}{\toname
           \\\toaddress}}
    \endgroup
  \fi}

\long\def\@processto#1{\@xproc #1\\@@@\ifx\toaddress\@empty
    \else \@yproc #1@@@\fi}
\long\def\@xproc #1\\#2@@@{\def\toname{#1}\def\toaddress{#2}}
\long\def\@yproc #1\\#2@@@{\def\toaddress{#2}}

\def\stopbreaks{\interlinepenalty \@M
   \def\par{\@@par\nobreak}\let\\=\@nobreakcr
   \let\vspace\@nobreakvspace}

\def\@nobreakvspace{\@ifstar{\@nobreakvspacex}{\@nobreakvspacex}}

\def\@nobreakvspacex#1{\ifvmode\nobreak\vskip #1\relax\else
               \@bsphack\vadjust{\nobreak\vskip #1}\@esphack\fi}

\def\@nobreakcr{\vadjust{\penalty\@M}\@ifstar{\@xnewline}{\@xnewline}}

\def\startbreaks{\let\\=\@normalcr
   \interlinepenalty 200\def\par{\@@par\penalty 200}}

\def\document{\endgroup
  \@colht\textheight  \@colroom\textheight \vsize\textheight
   \columnwidth\textwidth \@clubpenalty\clubpenalty
   \if@twocolumn \advance\columnwidth -\columnsep
      \divide\columnwidth\tw@ \hsize\columnwidth \@firstcolumntrue
   \fi
  \hsize\columnwidth \linewidth\hsize
  \begingroup\@floatplacement\@dblfloatplacement\endgroup
  \if@filesw \immediate\openout\@mainaux=\jobname.aux
   \immediate\write\@mainaux{\string\startlabels\string\@startlabels}\fi
  \def\do##1{\let ##1\@notprerr}
  \@preamblecmds
  \let\do\noexpand
  \@normalsize\everypar{}
%
% Sollten noch keine benutzerspezifischen Daten definiert sein,
% gibt es jetzt die Moegloichkeit dazu
%
\ifdefuser\else\defuser\fi
}

\def\enddocument{\@checkend{document}\newpage\begingroup
\if@filesw \immediate\closeout\@mainaux
\makeatletter\input \jobname.aux\clearpage
\fi\endgroup\deadcycles\z@\@@end}

\def\makelabels{\@fileswtrue}

\def\@startlabels{}
%
%    ****************************************
%    *            PAGE STYLES               *
%    ****************************************
%
\gdef\@knickpoint{%
\vbox to0pt{%
 \vskip1.8cm%
 \noindent\hbox to0pt{\hskip-1.8cm \null\vrule height.3pt width.5cm \hss}%
\vss}%
}

\def\ps@firstpage{ %
\headheight 7.5cm
\def\@smallfrom{%
      \hbox{%
        \ifx\@empty\sfromlogo %
         \tiny \fromname\  $\cdot$ \fromstreet\ $\cdot$ \fromcity %
        \else %
         \tiny \sfromlogo\ $\cdot$ \fromstreet\ $\cdot$ \fromcity %
        \fi
      }
   }

\def\@from{%
    \parbox[t]{0.33\textwidth}{\raggedright
                                        \vspace{8mm} %
                                        \iffrom %
                                          \scriptsize     %
                                          \fromname \\    %
                                          \fromstreet \\  %
                      \fromcity \\    %
                              \parbox[t]{\telewidth}{Telefon} %
                                          \parbox[t]{\telenumwidth}{\telephonenum} \\
                                          \ifx\@empty\faxnum \else%
                                          \parbox[t]{\telewidth}{Telefax} %
                                          \parbox[t]{\telenumwidth}{\faxnum} \\ \fi%
                                          \normalsize    %
                    \else             %
                                          \par \vspace{5mm} \par %
                                        \fi
                                        \vspace{12mm}
                                        \date}}

\gdef\@firsthed{
        \vbox {
      \iftoplogo%
          \ifx\@empty\fromlogo%
        \parbox{\textwidth}{\Huge \fromname}%
          \else %
            \ifsymlogo%
          \parbox{\textwidth}{\symlogo}%
            \else %
          {\toplogofnt \fromlogo}%
            \fi%
          \fi%
      \fi%
          \vskip 3mm
          \iftoprule %
           \rule[0pt]{\textwidth}{1pt} %
      \fi%
        }
}

\def\@firsthef{ %
   \hbox to0pt{\@knickpoint\hss}%
   \vbox to \headheight{ %
      \@firsthed
      \vspace*{21mm}\par
      \vbox{
      \parbox[t]{.6\textwidth}{
            \vspace{8mm}
        \ifsmallfrom %
              \raggedright \@smallfrom %
              \vskip 1mm      %
              \hrule          %
        \fi
            \vskip 5mm
            \hspace*{.05\textwidth}
            \parbox[t]{.5\textwidth}{
        \ifx\toname\@empty
        \ifx\toaddress\@empty
            \vbox{.} \vspace{3cm} \vbox{.}
        \fi
        \else
        \toname \\ \toaddress
        \fi
        }
      }
      \hfil
      \@from
    }
    \vspace*{10mm}  % \vfill
    }
 }

\def\@oddhead{%
        \kern-9pt %
        \@firsthef
}

\def\@oddfoot{%
    \kern-3pt \vbox{
       \ifbottomrule %
         \rule[0pt]{\textwidth}{1pt} %
         \ifbankv %
          \scriptsize Bankverbindung:
          \bankname\ $\cdot$ BLZ.\bankzahl\ $\cdot$ Kto.\kontono %
              \hfill %
         \fi %
        \fi
    }
}

\def\@evenfoot{
     \iftoprule %
        \vbox{\rule[0pt]{\textwidth}{1pt} } %
     \fi
   }
\global\textheight 21.7cm
\global\@colht\textheight
\global\@colroom\textheight
\global\vsize\textheight
}

\def\ps@plain{ %
\def\@plainhef{ %
   \vbox to \headheight {
     \@firsthed \vskip 10mm
     \vbox{\rm \hfil Seite \thepage }
   \vfill}
}

\def\@oddhead{
 \kern-9pt %
 \@plainhef
}

\def\@oddfoot{
   \vbox{
         \ifbottomrule\rule[0pt]{\textwidth}{1pt}\fi}
  }
\let\@evenhead\@oddhead
\def\@evenfoot{
   \vbox{
        \iftoprule\rule[0pt]{\textwidth}{1pt}\fi
   }
}
}

\let\anlage\encl
\let\kopie\cc
%
% stbrief default preparation
%
\ps@plain                    % 'plain' page style
\pagenumbering{arabic}       % Arabic page numbers
\onecolumn                   % Single-column
\@fileswfalse                % Inhibits writing of .AUX file.
%
%    ****************************************
%    *           DEFINE USER                *
%    ****************************************
%
\gdef\defuser{ %
\openin1 defuser.sty
\ifeof1
  \closein1\relax
  \typeout{}
  \typeout{TeX kann den DefUser.Sty nicht finden. Sie muessen die von Hand}
  \typeout{erstellte Datei mit den benutzerspezifischen Daten in die Liste}
  \typeout{der Optionen im \string\documentstyle~ eintragen. Sie sollten versuchen}
  \typeout{sich den DefUser.Sty zu besorgen, da er ihnen viel Arbeit erspart}
  \typeout{und immer ueber den neusten Stand des STBrief.Sty informiert ist.}
  \typeout{}
  \typeout{Da Ihr Brief ohne die benutzerspezifischen Daten nicht auskommt,}
  \typeout{wird an dieser Stelle der TeXlauf abgebrochen.}
  \typeout{}
  \typein[\return]{Druecken Sie <RETURN> !}
  \end{document}
\else
\closein1\relax
\def\ja{j}
\def\Ja{J}
\typeout{}
\typeout{Achtung:}
\typeout{}
\typeout{Wie sie wissen, benoetigt man fuer den STBrief.Sty eine Datei mit}
\typeout{benutzerspezifischen Daten. Hier gibt es nun die Moeglichkeit}
\typeout{diese Datei interaktiv anzulegen und gleich zu verwenden. Sollten}
\typeout{jedoch eine solche Datei schon existieren, so geben sie einfach}
\typeout{deren Namen ein.}
\typeout{}
\typein[\filename]{Bitte den Namen des DefUser-Files eingeben (ohne Extension):}
\typeout{}
\typeout{Merken Sie sich den Dateinamen \filename[.sty], damit Sie ihn}
\typeout{demnaechst im \string\documentstyle~ als Option angeben koennen.}
\openin2\filename.sty
\ifeof2
    \closein2\relax
    \typeout{}
    \typeout{Keine Datei namens \filename.sty~ gefunden.}
    \typeout{Der DefUser.Sty wird Ihnen helfen eine zu erstellen.}
    \input{defuser.sty}
\else
    \closein2\relax
    \typeout{}
    \typein[\antwort]{Soll die Datei \filename.sty~ geaendert werden (J/N)? [N]}
    \if\antwort\ja\let\antwort\Ja\fi
    \if\antwort\Ja
      \input{defuser.sty}
    \else
      \input{\filename.sty}
    \fi
\fi
\fi
}
