% \CheckSum{0}
% \iffalse
% ======================================================================
% plength.dtx
% Copyright (c) Markus Kohm, 2005-2006
%
% This file is part of the LaTeX2e KOMA-Script bundle.
%
% This work may be distributed and/or modified under the conditions of
% the LaTeX Project Public License, version 1.3b of the license.
% The latest version of this license is in
%   http://www.latex-project.org/lppl.txt
% and version 1.3b or later is part of all distributions of LaTeX 
% version 2005/12/01 or later and of this work.
%
% This work has the LPPL maintenance status "author-maintained".
%
% The Current Maintainer and author of this work is Markus Kohm.
%
% This work consists of all files listed in manifest.txt.
% ----------------------------------------------------------------------
% plength.dtx
% Copyright (c) Markus Kohm, 2005-2006
%
% Dieses Werk darf nach den Bedingungen der LaTeX Project Public Lizenz,
% Version 1.3b, verteilt und/oder veraendert werden.
% Die neuste Version dieser Lizenz ist
%   http://www.latex-project.org/lppl.txt
% und Version 1.3b ist Teil aller Verteilungen von LaTeX
% Version 2005/12/01 oder spaeter und dieses Werks.
%
% Dieses Werk hat den LPPL-Verwaltungs-Status "author-maintained"
% (allein durch den Autor verwaltet).
%
% Der Aktuelle Verwalter und Autor dieses Werkes ist Markus Kohm.
% 
% Dieses Werk besteht aus den in manifest.txt aufgefuehrten Dateien.
% ======================================================================
%
% Generation of plength figures at scrlttr2 chapter of the KOMA-Script guide
% Maintained by Markus Kohm
% Original source by Stephan Hennig
%
% ---------------------------------------------------------------------------
%
% Erzeugung der plength Abbildungen im scrlttr2-Kapitel der
%   KOMA-Script-Anleitung
% Verwaltet von Markus Kohm
% Originalquellen von Stephan Hennig
%
% ============================================================================
%<*ins>
\def\batchfile{plength.dtx}
\input docstrip.tex

\ifx\askonceonly\undefined\else\askonceonly\fi

\preamble
\endpreamble

\postamble
\endpostamble

\keepsilent
\askforoverwritefalse

\generate{%
  \file{plength.drv}{\from{plength.dtx}{driver}}%
  \file{plenDIN.mp}{\from{plength.dtx}{main,DIN,length,\languagename}}%
% Ebenfalls enthalten, derzeit aber nicht verwendet:
%  \file{varDIN.mp}{\from{plength.dtx}{main,DIN,variables,\languagename}}%
%  \file{plenSN.mp}{\from{plength.dtx}{main,SN,length,\languagename}}%
%  \file{varSN.mp}{\from{plength.dtx}{main,SN,variables,\languagename}}%
  \file{plinc.mp}{\from{plength.dtx}{include}}%
  \file{pltex.mp}{\from{plength.dtx}{tex}}%
  \file{pllcoDIN.mp}{\from{plength.dtx}{DIN,values}}%
% Ebenfalls enthalten, derzeit aber nicht verwendet:
%  \file{pllcoSN.mp}{\from{plength.dtx}{SN,values}}%
}

\csname endinput\endcsname
%</ins>
%
%<*driver>
%    \begin{macrocode}
\ProvidesFile{plength.drv}[2005/08/30 plength MetaPost graphics]
\documentclass{ltxdoc}
\usepackage{ngerman}
\usepackage[utf8]{inputenc}
\begin{document}
  \DocInput{plength.dtx}
\end{document}
%    \end{macrocode}
%</driver>
% \fi
%
% \title{MetaPost-Grafiken für das Briefkapitel}
% \author{Stephan Henig}
% \date{2005-08-30}
% \maketitle
%
% Es werden diverse Dateien erzeugt: \texttt{plenDINde.mp},
% \texttt{varDINde.mp}, \texttt{plenSNde.mp}, \texttt{varSNde.mp}, \dots Diese
% mit
% \begin{flushleft}
% \texttt{mpost --tex=latex} \meta{mp-file}
% \end{flushleft}
% bearbeitet ergibt \texttt{1}-Dateien. Diese können als EPS-Dateien
% geladen werden. Es kann aber auch mit
% \begin{flushleft}
% \texttt{mptopdf} \meta{1-Datei}
% \end{flushleft}
% eine PDF-Datei erzeugt werden.
%
% Anpassungen werden ausschließlich in der \texttt{dtx}-Datei vorgenommen!
% Wesentlich ist dabei der Abschnitt \texttt{main}.
% 
%<*main>
% \section{Der Abschnitt \texttt{main}}
% Diese Abschnitt erzeugt die Haupttreiberdateien, die dann mit \texttt{mpost}
% bearbeitet werden.
%
% Hinweise zu den Variablen:
% \begin{itemize}
% \item \texttt{input pllcoDIN} oder \texttt{input pllcoSN}\hfill\\
%   legt fest, ob die Maße für Briefe nach DIN oder SN
%   geladen werden. Damit kann gewählt werden, welches Layout
%   verdeutlicht werden soll. Sollen die Längen eingezeichnet werden,
%   ist pllcoDIN zu verwenden.
% \item \texttt{grafikhoehe}\hfill\\
%   legt die Höhe der Ausgabedatei fest.
% \item \texttt{strichstaerke}\hfill\\
%   bestimmt die Stiftbreite, die zum Zeichnen des
%   Briefbogens, der Faltmarken und der From-Rule benutzt wird.
% \item \texttt{framestrichstaerke}\hfill\\
%   bestimmt die Stiftbreite zum Zeichnen der
%   Element-Rahmen (nicht der Hilfsrahmen).
% \item \texttt{hilfsstrichstaerke}\hfill\\
%   bestimmt die Stiftbreite zum Zeichnen der
%   Bemaßung und der Hilfsrahmen.
% \item \texttt{tickhoehe}\hfill\\
%   legt die Höhe der vertikalen Linien horizontaler
%   Bemaßung fest (Makro hmeasure). Die Maßlinie wird auf halber Höhe
%   von tickhoehe gezeichnet. Für die Makros vmeasure und dmeasure gilt
%   ähnliches. In dmeasure wird jedoch ein Vielfaches von tickhoehe
%   verwendet.
% \item \texttt{framed} und \texttt{filled}\hfill\\ 
%   legen fest, ob die Elemente mit einem Rahmen
%   versehen bzw. gefüllt werden sollen.
% \item \texttt{drawcolor}\hfill\\
%   legt die Farbe von Linien und Text fest.
% \item \texttt{fillcolor}\hfill\\
%   legt die Füllfarbe fest, falls filled=true ist.
% \item \texttt{latexlengths}\hfill\\
%   legt fest, ob die unveränderlichen LaTeX-Längen
%   angezeigt werden sollen.
% \item \texttt{latexlengthcolor}\hfill\\
%     legt die Farbe fest, mit der LaTeX-Längen
%   gezeichnet werden.
% \item \texttt{language}\hfill\\
%   legt die Sprache der Beschreibung fest.
% \item \texttt{ahlength}\hfill\\
%   Da foldmarkhpos sehr klein ist, können sich bei kleinen Grafiken
%   die Pfeilspitzen der Bemaßung berühren. Um das zu verhindern, kann
%   mit der MetaPost-internen Variablen ahlength die Pfeillänge
%   verringert werden.
% \end{itemize}
%
%    \begin{macrocode}
prologues:=1;
%<DIN>input pllcoDIN
%<SN>input pllcoSN
input plinc
input pltex
beginfig(1);
  numeric grafikhoehe;
  numeric tickhoehe;
  numeric strichstaerke, framestrichstaerke, hilfsstrichstaerke;
  boolean framed, filled, latexlengths;
  color drawcolor, fillcolor, latexlengthcolor;
  string language;
  grafikhoehe := 167mm;
  strichstaerke := 0.6pt;
  framestrichstaerke := 0.2pt;
  hilfsstrichstaerke := 0.2pt;
  tickhoehe := 10pt;
  framed := true;
  filled := true;
  drawcolor := black;
  fillcolor := .8white;
  latexlengths := true;
  latexlengthcolor := .4white;
%<ngerman>  language := "de";
%<english>  language := "en";
  ahlength := 0.7mm;
  picture description[], plength[], latexlength[];
  transform T;
  T = identity reflectedabout ((0pt,.5*paperheight),
        (paperwidth,.5*paperheight)) scaled (grafikhoehe/paperheight);
%<length>  lengths; writedescription(language);
%<variables>  describe(language);
endfig
end
%    \end{macrocode}
%</main>
%
%<*tex>
% \section{Der Abschnitt \texttt{tex}}
%
% Dieser Abschnitt enthält sozusagen den \TeX{}-Part der Grafiken.
% Hier werden beispielsweise die Fonts festgelegt.
%
% \begin{macrocode}
verbatimtex
\documentclass[8pt]{scrartcl}
\usepackage[utf8]{inputenc}
\usepackage{ngerman}
\usepackage[T1]{fontenc}
\IfFileExists{scrnonfree.tex}{%
  \usepackage{charter}%
  \usepackage[scaled=0.87]{luximono}%
  \usepackage[scaled=0.92]{frutiger}%
}{%
  \usepackage{lmodern}%
}
\newcommand*{\plength}{\fontsize{7}{8}\sffamily}
\newcommand*{\descr}{\fontsize{7}{8}\itshape}
\newcommand*{\latexlength}{\fontsize{7}{8}\ttfamily}
\begin{document}
etex

def deflengths =
begingroup
  plength[1]=btex \plength{}backaddrheight etex;
  plength[2]=btex \plength{}bfoldmarkvpos etex;
  plength[3]=btex \plength{}firstfootvpos etex;
  plength[4]=btex \plength{}firstfootwidth etex;
  plength[5]=btex \plength{}firstheadvpos etex;
  plength[6]=btex \plength{}firstheadwidth etex;
  plength[7]=btex \plength{}foldmarkhpos etex;
  plength[8]=btex \plength{}locwidth\strut etex;
  plength[9]=btex \plength{}refaftervskip etex;
  plength[10]=btex \plength{}refvpos etex;
  plength[11]=btex \plength{}refwidth etex;
  plength[12]=btex \plength{}sigbeforevskip etex;
  plength[13]=btex \plength{}sigindent etex;
  plength[14]=btex \plength{}specialmailindent etex;
  plength[15]=btex \plength{}specialmailrightindent etex;
  plength[16]=btex \plength{}tfoldmarkvpos etex;
  plength[17]=btex \plength{}toaddrhpos\strut etex;
  plength[18]=btex \plength{}toaddrindent\strut etex;
  plength[19]=btex \plength{}toaddrvpos etex;
  plength[20]=btex \plength{}toaddrwidth\strut etex;
  plength[21]=btex \plength{}toaddrheight etex;
  plength[22]=btex \plength{}refhpos etex;
  plength[23]=btex \plength{}fromrulewidth etex;
  plength[24]=btex \plength{}-toaddrhpos\strut etex;
endgroup
enddef;

def deflatexlengths =
begingroup
  latexlength[1] = btex \latexlength{}\textbackslash{}baselineskip etex;
  latexlength[2] = btex \latexlength{}2\textbackslash{}baselineskip etex;
  latexlength[3] = btex \latexlength{}\textbackslash{}textwidth etex;
  latexlength[4] = btex \latexlength{}$\geq$\textbackslash{}footskip etex;
endgroup
enddef;

def defdescriptionde =
begingroup
  description[1]=btex \descr{}Briefkopf etex;
  description[2]=btex \descr{}Brief"|fuß etex;
  description[3]=btex \descr{}Rücksendeadresse etex;
  description[4]=btex \descr{}Versandart etex;
  description[5]=btex \descr{}Empfängeradresse etex;
  description[6]=btex \descr{}Geschäftszeile etex;
  description[7]=btex \descr{}Titel etex;
  description[8]=btex \descr{}Betreff etex;
  description[9]=btex \descr{}Anrede etex;
  description[10]=btex \descr{}Brieftext etex;
  description[11]=btex \descr{}Grußfloskel etex;
  description[12]=btex \descr{}Signatur etex;
  description[13]=btex \descr{}\begin{tabular}{@{}c@{}}Absender-\\ergänzung\end{tabular} etex;
endgroup
enddef;

def defdescriptionen =
begingroup
  description[1]=btex \descr{}letter-head etex;
  description[2]=btex \descr{}letter foot etex;
  description[3]=btex \descr{}return address etex;
  description[4]=btex \descr{}special mail etex;
  description[5]=btex \descr{}addressee etex;
  description[6]=btex \descr{}business line etex;
  description[7]=btex \descr{}title etex;
  description[8]=btex \descr{}subject etex;
  description[9]=btex \descr{}opening etex;
  description[10]=btex \descr{}letter body etex;
  description[11]=btex \descr{}closing etex;
  description[12]=btex \descr{}signature etex;
  description[13]=btex \descr{}\begin{tabular}{@{}c@{}}supplemental\\data\end{tabular} etex;
endgroup
enddef;
% \end{macrocode}
%</tex>
%
%<*values>
% \section{Der Abschnitt \texttt{values}}
% In diesem Abschnitt finden sich Maße für die unterschiedlichen Briefe
% ausgehend von \texttt{11pt}, \texttt{a4paper}.
%
%<*DIN>
% \section{Maße für DIN-Briefe}
%
%\begin{macrocode}
numeric paperwidth;
numeric paperheight;
numeric textwidth;
numeric textheight;
numeric evensidemargin;
numeric oddsidemargin;
numeric topmargin;
numeric headheight;
numeric headsep;
numeric topskip;
numeric footskip;
numeric baselineskip;

paperwidth     = 597.50793pt;
paperheight    = 845.04694pt;
textwidth      = 418.25555pt;
textheight     = 595.80026pt;
evensidemargin = 17.3562pt;
oddsidemargin  = 17.3562pt;
topmargin      = -25.16531pt;
headheight     = 17.0pt;
headsep        = 20.40001pt;
topskip        = 11.0pt;
footskip       = 47.60002pt;
baselineskip   = 13.6pt;



numeric foldmarkhpos;
numeric tfoldmarkvpos;
numeric bfoldmarkvpos;
numeric toaddrvpos;
numeric refvpos;
numeric refaftervskip;
numeric toaddrhpos;
numeric toaddrwidth;
numeric toaddrheight;
numeric toaddrindent;
numeric specialmailindent;
numeric specialmailrightindent;
numeric locwidth;
numeric backaddrheight;
numeric firstheadvpos;
numeric firstheadwidth;
numeric firstfootwidth;
numeric firstfootvpos;
numeric refwidth;
numeric sigindent;
numeric sigbeforevskip;


foldmarkhpos = 3.5mm;
tfoldmarkvpos = 105mm;
bfoldmarkvpos = 210mm;
toaddrvpos = 45mm;
refvpos = 98.5mm;
refaftervskip = baselineskip;
toaddrhpos = 20mm;
toaddrwidth = 85mm;
toaddrheight = 40mm;
toaddrindent = 0mm;
%specialmailindent = \fill;
specialmailrightindent = 11pt;
locwidth = 3.75cm;
backaddrheight = 5mm;
firstheadvpos = 8mm;
firstheadwidth = paperwidth - 2*abs(toaddrhpos);
firstfootwidth = firstheadwidth;
firstfootvpos = 1in + topmargin + headheight + headsep + textheight + footskip;
refwidth = 0pt;
sigindent = 0mm;
sigbeforevskip = 2*baselineskip;

%    \end{macrocode}
% weitere Hilfsvariablen
%    \begin{macrocode}
numeric firstheadhpos;
numeric firstheadheight;
numeric firstfoothpos;
numeric firstfootheight;
numeric fromrulewidth;
numeric fromrulehpos;
numeric specialmailwidth;
numeric specialmailheight;
numeric lochpos;
numeric refhpos;
numeric refheight;
numeric titlevpos;
numeric titlewidth;
numeric titleheight;
numeric subjectvpos;
numeric subjectwidth;
numeric subjectheight;
numeric openingvpos;
numeric openingwidth;
numeric openingheight;
numeric bodyvpos;
numeric bodywidth;
numeric bodyheight;
numeric typeareabottom;
numeric sigvpos;
numeric sigwidth;
numeric sigheight;
numeric tfoldmarkwidth;
numeric mfoldmarkwidth;
numeric bfoldmarkwidth;
firstheadhpos = 0.5*(paperwidth-firstheadwidth);
firstheadheight = 5*baselineskip;
firstfoothpos = 0.5*(paperwidth-firstfootwidth);
firstfootheight = 3*baselineskip;
fromrulewidth = 0.5*firstheadwidth;
fromrulehpos = firstheadhpos+0.5*(firstheadwidth-fromrulewidth);
specialmailwidth = 5cm;
specialmailheight = baselineskip;
specialmailindent = toaddrwidth-specialmailrightindent-specialmailwidth;
lochpos = paperwidth-toaddrhpos-locwidth;
refhpos = 1in+oddsidemargin;
refheight = 2*baselineskip;
refwidth := textwidth;
titlevpos = refvpos+refheight+refaftervskip;
titlewidth = 9cm;
titleheight = 1.2*baselineskip;
subjectvpos = titlevpos+titleheight+1*baselineskip;
subjectwidth = 8cm;
subjectheight = baselineskip;
openingvpos = subjectvpos+subjectheight+2*baselineskip;
openingwidth = 6cm;
openingheight = baselineskip;
bodyvpos = openingvpos+openingheight+baselineskip;
bodywidth = textwidth;
bodyheight = 8*baselineskip;
typeareabottom = firstfootvpos-footskip; 
sigvpos = bodyvpos+bodyheight+baselineskip;
sigwidth = 5cm;
sigheight = baselineskip;
tfoldmarkwidth = 2mm;
mfoldmarkwidth = 4mm;
bfoldmarkwidth = 2mm;
%    \end{macrocode}
%</DIN>
%
%<*SN>
% \section{Maße für SN-Briefe}
%    \begin{macrocode}
numeric paperwidth;
numeric paperheight;
numeric textwidth;
numeric textheight;
numeric evensidemargin;
numeric oddsidemargin;
numeric topmargin;
numeric headheight;
numeric headsep;
numeric topskip;
numeric footskip;
numeric baselineskip;

paperwidth     = 597.50793pt;
paperheight    = 845.04694pt;
textwidth      = 418.25555pt;
textheight     = 595.80026pt;
evensidemargin = 17.3562pt;
oddsidemargin  = 17.3562pt;
topmargin      = -25.16531pt;
headheight     = 17.0pt;
headsep        = 20.40001pt;
topskip        = 11.0pt;
footskip       = 47.60002pt;
baselineskip   = 13.6pt;



numeric foldmarkhpos;
numeric tfoldmarkvpos;
numeric bfoldmarkvpos;
numeric toaddrvpos;
numeric refvpos;
numeric refaftervskip;
numeric toaddrhpos;
numeric toaddrwidth;
numeric toaddrheight;
numeric toaddrindent;
numeric specialmailindent;
numeric specialmailrightindent;
numeric locwidth;
numeric backaddrheight;
numeric firstheadvpos;
numeric firstheadwidth;
numeric firstfootwidth;
numeric firstfootvpos;
numeric refwidth;
numeric sigindent;
numeric sigbeforevskip;


foldmarkhpos = 3.5mm;
tfoldmarkvpos = 105mm;
bfoldmarkvpos = 210mm;
toaddrvpos = 45mm;
refvpos = 98.5mm;
refaftervskip = baselineskip;
toaddrhpos = -8mm;
toaddrwidth = 90mm;
toaddrheight = 40mm;
toaddrindent = 0mm;
%specialmailindent = \fill;
specialmailrightindent = 11pt;
locwidth = (paperwidth-2*abs(toaddrhpos)-toaddrwidth)/2;
backaddrheight = 5mm;
firstheadvpos = 8mm;
firstheadwidth = paperwidth - 2*abs(toaddrhpos);
firstfootwidth = firstheadwidth;
firstfootvpos = 1in + topmargin + headheight + headsep + textheight + footskip;
show firstfootvpos;
refwidth = 0pt;
sigindent = 0mm;
sigbeforevskip = 2*baselineskip;


%    \end{macrocode}
% weitere Hilfsvariablen
%    \begin{macrocode}
numeric firstheadhpos;
numeric firstheadheight;
numeric firstfoothpos;
numeric firstfootheight;
numeric fromrulewidth;
numeric fromrulehpos;
numeric specialmailwidth;
numeric specialmailheight;
numeric lochpos;
numeric refhpos;
numeric refheight;
numeric titlevpos;
numeric titlewidth;
numeric titleheight;
numeric subjectvpos;
numeric subjectwidth;
numeric subjectheight;
numeric openingvpos;
numeric openingwidth;
numeric openingheight;
numeric bodyvpos;
numeric bodywidth;
numeric bodyheight;
numeric typeareabottom;
numeric sigvpos;
numeric sigwidth;
numeric sigheight;
numeric tfoldmarkwidth;
numeric mfoldmarkwidth;
numeric bfoldmarkwidth;
firstheadhpos = 0.5*(paperwidth-firstheadwidth);
firstheadheight = 4*baselineskip;
firstfoothpos = 0.5*(paperwidth-firstfootwidth);
firstfootheight = 3*baselineskip;
fromrulewidth = 0.5*firstheadwidth;
fromrulehpos = firstheadhpos+0.5*(firstheadwidth-fromrulewidth);
specialmailwidth = 5cm;
specialmailheight = baselineskip;
specialmailindent = toaddrwidth-specialmailrightindent-specialmailwidth;
lochpos = -toaddrhpos;
refhpos = 1in+oddsidemargin;
refheight = 2*baselineskip;
refwidth := textwidth;
titlevpos = refvpos+refheight+refaftervskip;
titlewidth = 9cm;
titleheight = 1.2*baselineskip;
subjectvpos = titlevpos+titleheight+1*baselineskip;
subjectwidth = 8cm;
subjectheight = baselineskip;
openingvpos = subjectvpos+subjectheight+2*baselineskip;
openingwidth = 6cm;
openingheight = baselineskip;
bodyvpos = openingvpos+openingheight+baselineskip;
bodywidth = textwidth;
bodyheight = 8*baselineskip;
typeareabottom = firstfootvpos-footskip; 
sigvpos = bodyvpos+bodyheight+baselineskip;
sigwidth = 5cm;
sigheight = baselineskip;
tfoldmarkwidth = 2mm;
mfoldmarkwidth = 4mm;
bfoldmarkwidth = 2mm;
%    \end{macrocode}
%</SN>
%</values>
%
%<*include>
% \section{Der Abschnitt \texttt{include}}
% \changes{}{2005-08-30}{Korrektur der Stiftstärken}
%
% Dieser Abschnitt erzeugt die Datei \texttt{plinc.mp} mit den wesentlichen
% Definitionen für die Erzeugung eines Elements. Eine Element ist
% beispielsweise eine Pseudolänge, eine Beschreibung (Variable), ein Feld,
% \dots).
%
%    \begin{macrocode}
def lengths =
  toaddrindent := 0.7cm;
%    \end{macrocode}
% Die Breite des \texttt{location}-Feldes wird später berechnet und deshalb
% hier nicht mehr mit
% \begin{verbatim}
%  locwidth := 3.7cm;
% \end{verbatim}
% gesetzt.
%    \begin{macrocode}
  firstheadheight := firstheadheight-3pt;
  firstheadvpos := firstheadvpos+3pt;
  sigindent := 1cm;
  if (latexlengths=true):
    writelatexlengths;
  fi
  if (filled=true):
    drawfilledelements;
  fi
  if (framed=true):
    drawframedelements;
  fi
  drawpaperandfoldmarks;
  drawboxes;
%    \end{macrocode}
% From-Rule:
%    \begin{macrocode}
  draw ((fromrulehpos,firstheadvpos+firstheadheight-strichstaerke)--
    (fromrulehpos+fromrulewidth,firstheadvpos+firstheadheight-strichstaerke)) 
    transformed T withpen pencircle scaled strichstaerke;
  writelengths;
enddef;

def describe(expr lang) =
  drawpaperandfoldmarks;
  if (filled=true):
    drawfilledelements;
  fi
  if (framed=true):
    drawframedelements;
  fi
  writedescription(lang);
enddef;    

def drawframedelements =
  if toaddrhpos < 0 :
    istoaddrhpos := paperwidth-abs(toaddrhpos)-toaddrwidth;
  else :
    istoaddrhpos := toaddrhpos;
  fi
  pickup pencircle scaled framestrichstaerke;
  drawoptions(withcolor drawcolor);
%    \end{macrocode}
% Kopf und Fuß
%    \begin{macrocode}
  draw unitsquare xscaled firstheadwidth yscaled firstheadheight 
    shifted (firstheadhpos, firstheadvpos) transformed T;
  draw unitsquare xscaled firstfootwidth yscaled firstfootheight 
    shifted (firstfoothpos, firstfootvpos) transformed T;
%    \end{macrocode}
% Adressfeld
%    \begin{macrocode}
  draw unitsquare xscaled toaddrwidth yscaled backaddrheight 
    shifted (istoaddrhpos, toaddrvpos) transformed T;
  draw unitsquare xscaled specialmailwidth yscaled specialmailheight 
    shifted (istoaddrhpos+toaddrwidth-specialmailwidth-specialmailrightindent, 
             toaddrvpos+backaddrheight) transformed T;
  draw unitsquare xscaled (toaddrwidth-2*toaddrindent) 
    yscaled (toaddrheight-backaddrheight-specialmailheight) 
    shifted (istoaddrhpos+toaddrindent, 
             toaddrvpos+backaddrheight+specialmailheight) transformed T;
%    \end{macrocode}
% Absenderergänzung:
%    \begin{macrocode}
  draw unitsquare xscaled locwidth yscaled toaddrheight 
    shifted (lochpos, toaddrvpos) transformed T;
%    \end{macrocode}
% Geschäftszeile:
%    \begin{macrocode}
  draw unitsquare xscaled refwidth yscaled refheight 
    shifted (1in+oddsidemargin, refvpos) transformed T;
%    \end{macrocode}
% Titel:
%    \begin{macrocode}
  draw unitsquare xscaled titlewidth yscaled titleheight 
    shifted (1in+oddsidemargin+0.5(textwidth-titlewidth), titlevpos) 
    transformed T;
%    \end{macrocode}
% Betreff:
%    \begin{macrocode}
  draw unitsquare xscaled subjectwidth yscaled subjectheight 
    shifted (1in+oddsidemargin, subjectvpos) transformed T;
%    \end{macrocode}
% Anrede:
%    \begin{macrocode}
  draw unitsquare xscaled openingwidth yscaled openingheight 
    shifted (1in+oddsidemargin, openingvpos) transformed T;
%    \end{macrocode}
% Brieftext:
%    \begin{macrocode}
  draw unitsquare xscaled bodywidth yscaled bodyheight 
    shifted (1in+oddsidemargin, bodyvpos) transformed T;
%    \end{macrocode}
% Signatur:
%    \begin{macrocode}
  draw unitsquare xscaled sigwidth yscaled sigheight 
    shifted (1in+oddsidemargin+sigindent, sigvpos) transformed T;
  draw unitsquare xscaled (0.8*sigwidth) yscaled sigheight 
    shifted (1in+oddsidemargin+sigindent+.1*sigwidth, 
             sigvpos+sigheight+sigbeforevskip) transformed T;
enddef;

def drawfilledelements =
  if toaddrhpos < 0 :
    istoaddrhpos := paperwidth-abs(toaddrhpos)-toaddrwidth;
  else :
    istoaddrhpos := toaddrhpos;
  fi
  drawoptions (withcolor fillcolor);
%    \end{macrocode}
% Kopf und Fuß:
%    \begin{macrocode}
  fill unitsquare xscaled firstheadwidth yscaled firstheadheight 
    shifted (firstheadhpos, firstheadvpos) transformed T;
  fill unitsquare xscaled firstfootwidth yscaled firstfootheight 
    shifted (firstfoothpos, firstfootvpos) transformed T;
%    \end{macrocode}
% Adressfeld:
%    \begin{macrocode}
  fill unitsquare xscaled toaddrwidth yscaled backaddrheight 
    shifted (istoaddrhpos, toaddrvpos) transformed T;
  fill unitsquare xscaled specialmailwidth yscaled specialmailheight 
    shifted (istoaddrhpos+toaddrwidth-specialmailwidth-specialmailrightindent, 
             toaddrvpos+backaddrheight) transformed T;
  fill unitsquare xscaled (toaddrwidth-2*toaddrindent) 
    yscaled (toaddrheight-backaddrheight-specialmailheight) 
    shifted (istoaddrhpos+toaddrindent,
             toaddrvpos+backaddrheight+specialmailheight) transformed T;
%    \end{macrocode}
% Absenderergänzung:
%    \begin{macrocode}
  fill unitsquare xscaled locwidth yscaled toaddrheight 
    shifted (lochpos, toaddrvpos) transformed T;
%    \end{macrocode}
% Geschäftszeile:
%    \begin{macrocode}
  fill unitsquare xscaled refwidth yscaled refheight 
    shifted (refhpos, refvpos) transformed T;
%    \end{macrocode}
% Titel:
%    \begin{macrocode}
  fill unitsquare xscaled titlewidth yscaled titleheight 
    shifted (1in+oddsidemargin+0.5(textwidth-titlewidth), titlevpos) 
    transformed T;
%    \end{macrocode}
% Betreff:
%    \begin{macrocode}
  fill unitsquare xscaled subjectwidth yscaled subjectheight 
    shifted (1in+oddsidemargin, subjectvpos) transformed T;
%    \end{macrocode}
% Anrede:
%    \begin{macrocode}
  fill unitsquare xscaled openingwidth yscaled openingheight 
    shifted (1in+oddsidemargin, openingvpos) transformed T;
%    \end{macrocode}
% Brieftext:
%    \begin{macrocode}
  fill unitsquare xscaled bodywidth yscaled bodyheight 
    shifted (1in+oddsidemargin, bodyvpos) transformed T;
%    \end{macrocode}
% Signatur:
%    \begin{macrocode}
  fill unitsquare xscaled sigwidth yscaled sigheight 
    shifted (1in+oddsidemargin+sigindent, sigvpos) transformed T;
  fill unitsquare xscaled (0.8*sigwidth) yscaled sigheight 
    shifted (1in+oddsidemargin+sigindent+.1*sigwidth, 
             sigvpos+sigheight+sigbeforevskip) transformed T;
enddef;

def drawpaperandfoldmarks =
  pickup pencircle scaled strichstaerke;
  drawoptions(withcolor drawcolor);
%    \end{macrocode}
% Briefbogen:
%    \begin{macrocode}
  draw unitsquare xscaled paperwidth yscaled paperheight transformed T;
%    \end{macrocode}
% Falzmarken:
%    \begin{macrocode}
  draw ((foldmarkhpos,tfoldmarkvpos)--
        (foldmarkhpos+tfoldmarkwidth,tfoldmarkvpos)) transformed T;
  draw ((foldmarkhpos,0.5*paperheight)--
        (foldmarkhpos+mfoldmarkwidth,0.5*paperheight)) transformed T;
  draw ((foldmarkhpos,bfoldmarkvpos)--
        (foldmarkhpos+bfoldmarkwidth,bfoldmarkvpos)) transformed T;
enddef;

def drawboxes =
  if toaddrhpos < 0 :
    istoaddrhpos := paperwidth-abs(toaddrhpos)-toaddrwidth;
  else :
    istoaddrhpos := toaddrhpos;
  fi
  pickup pencircle scaled hilfsstrichstaerke;
  drawoptions(withcolor drawcolor);
%    \end{macrocode}
% Kasten Adressfeld:
%    \begin{macrocode}
  draw unitsquare xscaled toaddrwidth yscaled toaddrheight 
    shifted (istoaddrhpos, toaddrvpos) transformed T;
%    \end{macrocode}
% ^^A auskommentiert:
% ^^A Kasten Adresszeile
% ^^A draw unitsquare xscaled (paperwidth-2*toaddrhpos) 
% ^^A   yscaled toaddrheight shifted (toaddrhpos, toaddrvpos) transformed T;
% Kasten Signatur:
%    \begin{macrocode}
  draw unitsquare xscaled sigwidth yscaled (2*sigheight+sigbeforevskip) 
    shifted (1in+oddsidemargin+sigindent,sigvpos) transformed T;
%    \end{macrocode}
% Kasten Satzspiegel:
%    \begin{macrocode}
  draw unitsquare xscaled textwidth yscaled (typeareabottom-titlevpos) 
    shifted (1in+oddsidemargin,titlevpos) transformed T;
enddef;

def writelengths =
begingroup
  if toaddrhpos < 0 :
    istoaddrhpos := paperwidth-abs(toaddrhpos)-toaddrwidth;
  else :
    istoaddrhpos := toaddrhpos;
  fi
  deflengths;
  pickup pencircle scaled hilfsstrichstaerke;
  drawoptions(withcolor drawcolor);
%    \end{macrocode}
% \texttt{firstheadwidth}:
%    \begin{macrocode}
  hmeasure((firstheadhpos,firstheadvpos), firstheadwidth, plength[6], origin, 
           top);
%    \end{macrocode}
% \texttt{fromrulewidth}:
%    \begin{macrocode}
  hmeasure((fromrulehpos,firstheadvpos+firstheadheight-strichstaerke), 
           fromrulewidth, plength[23], origin, top);
%    \end{macrocode}
% \texttt{toaddrwidth}:
%    \begin{macrocode}
  hmeasure((istoaddrhpos,toaddrvpos), toaddrwidth, plength[20], origin, top);
%    \end{macrocode}
% \texttt{locwidth}:
%    \begin{macrocode}
  hmeasure((lochpos,toaddrvpos), locwidth, plength[8], origin, top);
%    \end{macrocode}
% \texttt{specialmailindent}:
%    \begin{macrocode}
  hmeasure((istoaddrhpos, 
            toaddrvpos+backaddrheight+0.5*(specialmailheight+tickhoehe)), 
           specialmailindent, plength[14], (-0.5*specialmailindent+toaddrindent,+14pt), rt);
%    \end{macrocode}
% \texttt{specialmailrightindent}:
%    \begin{macrocode}
  hmeasure((istoaddrhpos+toaddrwidth-specialmailrightindent,
            toaddrvpos+backaddrheight+0.5*(specialmailheight+tickhoehe)), 
           specialmailrightindent, plength[15], 
           (0.5*specialmailrightindent-3pt,0pt), rt);
%    \end{macrocode}
% \texttt{toaddrhpos}:
%    \begin{macrocode}
  if toaddrhpos > 0 :
  hmeasure((0,toaddrvpos), toaddrhpos, plength[17], (6pt,0pt), top);
  hmeasure((lochpos+locwidth,toaddrvpos), toaddrhpos, plength[17], (-6pt,0pt), 
           top);
  else :
  hmeasure((0,toaddrvpos), -toaddrhpos, plength[24], (6pt,0pt), top);
  hmeasure((paperwidth+toaddrhpos,toaddrvpos), -toaddrhpos, plength[24], 
           (-6pt,0pt), top);
  fi
%    \end{macrocode}
% \texttt{toaddrindent}:
%    \begin{macrocode}
  hmeasure((istoaddrhpos,
            toaddrvpos+0.75*(toaddrheight+backaddrheight+specialmailheight+tickhoehe)), 
           toaddrindent, plength[18], (0.5*toaddrindent,0pt), rt);
  hmeasure((istoaddrhpos+toaddrwidth-toaddrindent,
            toaddrvpos+0.75*(toaddrheight+backaddrheight+specialmailheight+tickhoehe)), 
           toaddrindent, plength[18], (-0.5*toaddrindent,0pt), lft);
% \end{macrocode}
% \texttt{refwidth}:
%    \begin{macrocode}
  hmeasure((1in+oddsidemargin,refvpos), refwidth, plength[11], origin, top);
%    \end{macrocode}
% \texttt{refhpos}:
%    \begin{macrocode}
  hmeasure((0,refvpos), refhpos, plength[22], origin, top);
%    \end{macrocode}
% \texttt{foldmarkhpos}:
%    \begin{macrocode}
  hmeasure((0,bfoldmarkvpos+tickhoehe), foldmarkhpos, plength[7], 
           (-6pt,0.5*tickhoehe), lrt);
%    \end{macrocode}
% \texttt{sigindent}:
%    \begin{macrocode}
  hmeasure((1in+oddsidemargin,sigvpos+0.5*(sigheight+tickhoehe)), sigindent, 
           plength[13], (-0.5*sigindent,0pt), lft);
%    \end{macrocode}
% \texttt{firstfootwidth}:
%    \begin{macrocode}
  hmeasure((firstfoothpos,firstfootvpos), firstfootwidth, plength[4], origin, 
           top);
%    \end{macrocode}
% \texttt{toaddrheight}:
%    \begin{macrocode}
  vmeasure((istoaddrhpos-tickhoehe,toaddrvpos), toaddrheight, 
           plength[21] rotated 90, origin, lft);
  vmeasure((lochpos+locwidth,toaddrvpos), toaddrheight, 
           plength[21] rotated 90, origin, rt);
%    \end{macrocode}
% \texttt{backaddrheight}:
%    \begin{macrocode}
  vmeasure((istoaddrhpos+toaddrwidth,toaddrvpos), backaddrheight, plength[1], 
           origin, rt);
%    \end{macrocode}
% \texttt{refaftervskip}:
% ^^A auskommentiert:
% ^^A  vmeasure((1in+oddsidemargin+0.5*(textwidth+titlewidth),
% ^^A           refvpos+refheight), refaftervskip, plength[9], origin, rt);
%    \begin{macrocode}
  vmeasure((1in+oddsidemargin+textwidth,refvpos+refheight), refaftervskip, 
           plength[9], origin, rt);
%    \end{macrocode}
% \texttt{sigbeforvskip}:
%    \begin{macrocode}
  vmeasure((1in+oddsidemargin+sigindent+0.1*sigwidth-tickhoehe,
           sigvpos+sigheight), sigbeforevskip, plength[12], origin, rt);
%    \end{macrocode}
% \texttt{firstheadvpos}:
%    \begin{macrocode}
  dmeasure((firstheadhpos-2*tickhoehe,firstheadvpos), plength[5], origin, rt);
%    \end{macrocode}
% \texttt{toaddrvpos}:
%    \begin{macrocode}
  if toaddrhpos > 0 :
    dmeasure((istoaddrhpos+toaddrwidth,toaddrvpos), plength[19], origin, top);
  else :
    dmeasure((lochpos+locwidth,toaddrvpos), plength[19], origin, top);
  fi
%    \end{macrocode}
% \texttt{refvpos}:
%    \begin{macrocode}
  dmeasure((refhpos+refwidth,refvpos), plength[10], (0pt,0pt), top);
%    \end{macrocode}
% \texttt{tfoldmarkvpos}:
%    \begin{macrocode}
  dmeasure((foldmarkhpos+tfoldmarkwidth,tfoldmarkvpos), plength[16], 
           (18pt,1.5*tickhoehe), bot);
%    \end{macrocode}
% \texttt{bfoldmarkvpos}:
%    \begin{macrocode}
  dmeasure((foldmarkhpos+bfoldmarkwidth,bfoldmarkvpos), plength[2], 
           (18pt,0pt), top);
%    \end{macrocode}
% \texttt{firstfootvpos}:
%    \begin{macrocode}
  dmeasure((firstfoothpos-2*tickhoehe,firstfootvpos), plength[3], origin, top);
endgroup
enddef;

def writelatexlengths =
begingroup
  color temp;
  deflatexlengths;
  temp := drawcolor;
  drawcolor := latexlengthcolor;
  pickup pencircle scaled hilfsstrichstaerke;
%    \end{macrocode}
% \LaTeX-Längen:
%    \begin{macrocode}
  vmeasure((1in+oddsidemargin+openingwidth,subjectvpos-baselineskip), 
           baselineskip, latexlength[1], origin, rt);
  vmeasure((1in+oddsidemargin+openingwidth,subjectvpos+baselineskip), 
           2*baselineskip, latexlength[2], origin, rt);
  vmeasure((1in+oddsidemargin+openingwidth,openingvpos+baselineskip), 
           baselineskip, latexlength[1], origin, rt);
  vmeasure((1in+oddsidemargin+sigindent+sigwidth,sigvpos-baselineskip), 
           baselineskip, latexlength[1], origin, rt);
  hmeasure((1in+oddsidemargin,typeareabottom+tickhoehe), 
           textwidth, latexlength[3], (0pt,-3pt), bot);
  draw ((1in+oddsidemargin+textwidth,typeareabottom)--
       (firstfoothpos+firstfootwidth,typeareabottom)) transformed T;
  vmeasure((firstfoothpos+firstfootwidth,typeareabottom), 
           firstfootvpos-typeareabottom, latexlength[4] rotated 90, origin,
           rt);
  drawcolor := temp;
endgroup
enddef;
%    \end{macrocode}
% Anker ist links unten.
%    \begin{macrocode}
def hmeasure(expr p, breite, pic, s)(suffix alig) =
begingroup
  save pleft, pright;
  pair pleft, pright;
  drawoptions(withcolor drawcolor);
%    \end{macrocode}
% linker Tick:
%    \begin{macrocode}
  draw (p--p shifted (0,-tickhoehe)) transformed T;
%    \end{macrocode}
% rechter Tick:
%    \begin{macrocode}
  draw (p--p shifted (0,-tickhoehe)) shifted (breite,0) transformed T;
%    \end{macrocode}
% Messlinie;
% die Korrektur der Stiftstärke muss nach der Transformation
% in Zeichenkoordinaten erfolgen:
%    \begin{macrocode}
  pleft = p shifted (0,-0.5*tickhoehe)
    transformed T shifted (hilfsstrichstaerke,0);
  pright = p shifted (0,-0.5*tickhoehe) shifted (breite,0)
    transformed T shifted (-hilfsstrichstaerke,0);
  drawdblarrow pleft--pright;
  label.alig(pic, (p shifted (0.5*breite, -0.5*tickhoehe) shifted s) 
    transformed T);
endgroup
enddef;


%    \end{macrocode}
% Anker ist links oben.
%    \begin{macrocode}
def vmeasure(expr p, breite, pic, s)(suffix alig) =
begingroup
  save ptop, pbottom;
  pair ptop, pbottom;
  drawoptions(withcolor drawcolor);
%    \end{macrocode}
% oberer Tick:
%    \begin{macrocode}
  draw (p--p shifted (tickhoehe,0)) transformed T;
%    \end{macrocode}
% unterer Tick:
%    \begin{macrocode}
  draw (p--p shifted (tickhoehe,0)) shifted (0,breite)  transformed T;
%    \end{macrocode}
% Messlinie;
% die Korrektur der Stiftstärke muss nach der Transformation
% in Zeichenkoordinaten erfolgen:
%    \begin{macrocode}
  ptop = p shifted (0.5*tickhoehe,0)
    transformed T shifted (0,-hilfsstrichstaerke);
  pbottom = p shifted (0.5*tickhoehe,0) shifted (0,breite)
    transformed T shifted (0,hilfsstrichstaerke);
  drawdblarrow ptop--pbottom;
  label.alig(pic, (p shifted (0.5*tickhoehe, 0.5*breite) shifted s) 
    transformed T);
endgroup
enddef;


%    \end{macrocode}
% Anker ist links unten.
%    \begin{macrocode}
def dmeasure(expr p, pic, s)(suffix alig) =
begingroup
  save ptop, pbottom;
  pair ptop, pbottom;
  drawoptions(withcolor drawcolor);
%    \end{macrocode}
% horizontale Linie:
%    \begin{macrocode}
   draw (p--p shifted (2*tickhoehe,0)) transformed T;
%    \end{macrocode}
% Messlinie:
%    \begin{macrocode}
  ptop = p shifted (0,-1.5*tickhoehe) shifted (tickhoehe,0)
     transformed T;
%    \end{macrocode}
% Die Korrektur der Stiftstärke muss nach der Transformation
% in Zeichenkoordinaten erfolgen.
%    \begin{macrocode}
  pbottom = p shifted (tickhoehe,0)
    transformed T shifted (0,hilfsstrichstaerke);
  drawarrow ptop--pbottom;
   label.alig(pic, (p shifted (tickhoehe, -1.5*tickhoehe) shifted s)
     transformed T);
endgroup
enddef;


def writedescription(expr lang) =
  if toaddrhpos < 0 :
    istoaddrhpos := paperwidth-abs(toaddrhpos)-toaddrwidth;
  else :
    istoaddrhpos := toaddrhpos;
  fi
  if (lang="de"): defdescriptionde;
  else: defdescriptionen;
  fi
  drawoptions(withcolor drawcolor);
%    \end{macrocode}
% Kopf und Fuß:
%    \begin{macrocode}
  label(description[1], 
    (firstheadhpos+0.5*firstheadwidth, firstheadvpos+0.5*firstheadheight) 
      transformed T);
  label(description[2], 
    (firstfoothpos+0.5*firstfootwidth, firstfootvpos+0.5*firstfootheight) 
      transformed T);
%    \end{macrocode}
% Adressfeld:
%    \begin{macrocode}
  label(description[3], 
    (istoaddrhpos+0.5*toaddrwidth, toaddrvpos+0.5*backaddrheight) 
      transformed T);
  label(description[4],
    (istoaddrhpos+toaddrwidth-specialmailrightindent-0.5*specialmailwidth, 
     toaddrvpos+backaddrheight+0.5*specialmailheight) transformed T);
  label(description[5], 
    (istoaddrhpos+0.5*toaddrwidth, 
      toaddrvpos+backaddrheight+specialmailheight+0.5*(toaddrheight-backaddrheight-specialmailheight)) 
      transformed T);
%    \end{macrocode}
% Absenderergänzung:
%    \begin{macrocode}
  label(description[13], (lochpos+0.5*locwidth, toaddrvpos+0.5*toaddrheight) 
    transformed T);
%    \end{macrocode}
% Geschäftszeile:
%    \begin{macrocode}
  label(description[6], (1in+oddsidemargin+0.5*refwidth,
  refvpos+0.5*refheight)
    transformed T);
%    \end{macrocode}
% Titel:
%    \begin{macrocode}
  label(description[7], 
    (1in+oddsidemargin+0.5textwidth, titlevpos+0.5*titleheight) 
    transformed T);
%    \end{macrocode}
% Betreff:
%    \begin{macrocode}
  label(description[8], 
    (1in+oddsidemargin+0.5*subjectwidth, subjectvpos+0.5*subjectheight) 
    transformed T);
%    \end{macrocode}
% Anrede:
%    \begin{macrocode}
  label(description[9], 
    (1in+oddsidemargin+0.5*openingwidth, openingvpos+0.5*openingheight) 
    transformed T);
%    \end{macrocode}
% Brieftext:
%    \begin{macrocode}
  label(description[10], 
    (1in+oddsidemargin+0.5*bodywidth, bodyvpos+0.5*bodyheight) 
    transformed T);
%    \end{macrocode}
% Signatur:
%    \begin{macrocode}
  label(description[11], 
    (1in+oddsidemargin+sigindent+0.5*sigwidth, sigvpos+0.5*sigheight) 
    transformed T);
  label(description[12], 
    (1in+oddsidemargin+sigindent+0.5*sigwidth, 
     sigvpos+sigheight+sigbeforevskip+0.5*sigheight) transformed T);
enddef;
%    \end{macrocode}
%</include>
%
% \iffalse
\endinput
%%% Local Variables: 
%%% mode: doctex
%%% TeX-master: t
%%% End: 
% \fi
