% \CheckSum{146}
% \iffalse meta-comment
% ======================================================================
% scraddr.dtx
% Copyright (c) Markus Kohm, 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.
% ----------------------------------------------------------------------
% scraddr.dtx
% Copyright (c) Markus Kohm, 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.
% ======================================================================
% \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
%%% From File: scraddr.dtx
%<*dtx>
\ProvidesFile{scraddr.dtx}
%</dtx>
%<scraddr>\NeedsTeXFormat{LaTeX2e}[1995/12/01]
%<driver>\ProvidesFile{scraddr.drv}
%<scraddr>\ProvidesPackage{scraddr}
%<*dtx|scraddr|driver>
              [2006/03/28 v1.1c KOMA-Script
%</dtx|scraddr|driver>
%<scraddr>               package]
%<*dtx|driver>
              Script bundle]
%</dtx|driver>
%<*driver>
\documentclass{scrdoc}
\usepackage[english,ngerman]{babel}
\usepackage[latin1]{inputenc}
\CodelineIndex
\RecordChanges
\GetFileInfo{scraddr.dtx}
\title{Das scraddr\thanks{Diese Datei hat die Versionsnummer
    \fileversion, letzte Änderung vom \filedate.}-Paket zur
  Auswertung von Adressdateien}
\author{Markus Kohm \and Jens-Uwe Morawski}
\date{\filedate}

\begin{document}
  \maketitle
  \tableofcontents
  \DocInput{scraddr.dtx}
\end{document}
%</driver>
% \fi
%
% \changes{v1.1a}{2002/05/19}{Erste Version, die von \texttt{scrlettr}
%   losgelöst ist.}
%
% \section{Anleitung}
%
% \subsection{Rechtliches}
% Es wird keinerlei Haftung übernommen für irgendwelche Schäden,
% die aus der Benutzung der Programme und Dateien des hier
% beschriebenen Paketes folgen.
%
% \subsection{Das \textsf{KOMA-Script} Paket}
%
% Das gesamte \textsf{KOMA-Script} Paket besteht aus mehreren Teilen.
% Der Teil |scrclass.dtx| beinhaltet die Haupt-classes |scrartcl.cls|,
% |scrreprt.cls| und |scrbook.cls| und |scrlttr2.cls| sowie das von
% diesen benötigte package |typearea.sty|.
%
% Das ursprünglich in |scrlettr.dtx| enthaltene
% \texttt{scraddr}-Paket liegt nun hier als |scraddr.dtx| separat
% vor. Dies wurde erforderlich, das ansonsten in |scrlettr.dtx| nur
% noch obsolete Teile enthalten sind.
%
% Die Anleitung zu diesem Paket ist in der Anleitung zu
% \textsf{KOMA-Script} zu finden. Diese liegt in Deutsch und in
% Englisch vor.
%
% \StopEventually{\PrintIndex\PrintChanges}
%
% \section{Implementierung}
%
%\iffalse
%    \begin{macrocode}
%<*scraddr>
%<*beta>
\PackageWarningNoLine{scraddr}
  {THIS IS A BETA VERSION!\MessageBreak
    YOU SHOULD NOT USE THIS VERSION!\MessageBreak
    YOU SHOULD INSTALL THE RELEASE FROM CTAN\MessageBreak
    AND USE THAT INSTEAD OF THIS BETA VERSION}
%</beta>
%</scraddr>
%\fi
%
%
% \changes{v1.0}{1996/01/22}{Neues Package scraddr.}
%    \begin{macrocode}
%<*scraddr>
%    \end{macrocode}
% Dieses Paket liest beliebige - auch mehrere - Adressdateien im oben
% beschriebenen Format ein und legt für jeden Eintrag eine Reihe von
% Markos an. Bedingung dafür ist, dass das achte Element jedes
% |\adrentry|-Eintrags - der Kürzeleintrag - nichtleer ist.
% Dies gilt in gleicher Weise auch für das neunte Element neuerer
% |\addrentry|-Einträge.
% Im Falle von
% identischen Kürzeleinträgen überschreiben spätere Einträge
% frühere. Die Inhalte können dann über spezielle Befehle ermittelt
% werden.
%
% \subsection{Optionen}
%
%  \begin{option}{adrFreeIVempty}
%    \changes{v1.1a}{2002/05/19}{Neue Option}
%  \begin{option}{adrFreeIVshow}
%    \changes{v1.1a}{2002/05/19}{Neue Option}
%  \begin{option}{adrFreeIVwarn}
%    \changes{v1.1a}{2002/05/19}{Neue Option}
%  \begin{option}{adrFreeIVstop}
%    \changes{v1.1a}{2002/05/19}{Neue Option}
%  \begin{macro}{\@adrFIVerror}
%    \changes{v1.1a}{2002/05/19}{Neue (intern)}
%  Die neuen Optionen dienen der Wahl, ob die Verwendung von
%  \verb|\FreeIV| für einen Eintrag, der mit \verb|\adrentry|
%  definiert wurde, ignoriert wird, durch eine Ausgabe im Text
%  angezeigt wird, zu einer Warnung oder einem Fehler führt. Im Makro
%  wird die Einstellung gespeichert. Voreingestellt ist
%  \texttt{adrFreeIVshow}.
%    \begin{macrocode}
\newcommand*{\@adrFIVerror}{}
\DeclareOption{adrFreeIVempty}{\renewcommand*{\@adrFIVerror}{0}}
\DeclareOption{adrFreeIVshow}{\renewcommand*{\@adrFIVerror}{1}}
\DeclareOption{adrFreeIVwarn}{\renewcommand*{\@adrFIVerror}{2}}
\DeclareOption{adrFreeIVstop}{\renewcommand*{\@adrFIVerror}{3}}
%    \end{macrocode}
%  \end{macro}
%  \end{option}
%  \end{option}
%  \end{option}
%  \end{option}
%
% \changes{v1.0a}{2001/08/07}{\cs{ExecuteOption}\cs{relax} korrigiert}
% \changes{v1.1a}{2002/05/19}{Option \texttt{adrFreeIVshow} ist
%   Voreinstellung}
%    \begin{macrocode}
\ExecuteOptions{adrFreeIVshow}
\ProcessOptions\relax
%    \end{macrocode}
%
% \subsection{Adressdatei einlesen}
%  \begin{macro}{\InputAdressFile}
% Mit Hilfe des Befehls |\InputAddressFile| wird die angegebene
% Adressdatei eingelesen und in Adressmakros gewandelt, die dann beliebig
% verwendet werden können. Die Adressmakros werden global generiert.
% Andere Makros insbesondere die Definitionen von |\adrentry| und
% |\addrentry| bleiben erhalten.
%   \changes{v1.1}{2002/05/18}{Erweitert auf \cs{addrentry}
%     Einträge} 
%   \changes{v1.1b}{2002/06/02}{Falls erforderlich werden auch
%     \cs{addrchar} und \cs{adrchar} definiert}
%    \begin{macrocode}
\newcommand{\InputAddressFile}[1]{\begingroup
  \ifcase\@adrFIVerror
    \def\adrentry##1##2##3##4##5##6##7{%
      \addrentry{##1}{##2}{##3}{##4}{##5}{##6}{##7}{}}%
  \or
    \def\adrentry##1##2##3##4##5##6##7##8{%
      \addrentry{##1}{##2}{##3}{##4}{##5}{##6}{##7}{%
        (entry FreeIV undefined at `##8')}{##8}}%
  \or
    \def\adrentry##1##2##3##4##5##6##7##8{%
      \addrentry{##1}{##2}{##3}{##4}{##5}{##6}{##7}{%
        \PackageWarning{scraddr}{%
          `##8' was defined using \string\adrentry\MessageBreak
          so \string\FreeIV-entry is not defined}}{##8}}%
  \else
    \def\adrentry##1##2##3##4##5##6##7##8{%
      \addrentry{##1}{##2}{##3}{##4}{##5}{##6}{##7}{%
        \PackageError{scraddr}{%
          \string\FreeIV\space undefined at `##8'}{%
          `##8' was defined using \string\adrentry\MessageBreak
           so \string\FreeIV-entry is not defined.\MessageBreak
          You may continue but you should check output}}{##8}}%
  \fi
  \providecommand*{\addrchar}[1]{}%
  \providecommand*{\adrchar}{\addrchar}%
  \def\addrentry##1##2##3##4##5##6##7##8##9{%
    \def\@tempa{##9}\ifx\@tempa\@empty\else
      \expandafter\gdef\csname ##9.LN\endcsname{##1}
      \expandafter\gdef\csname ##9.FN\endcsname{##2}
      \expandafter\gdef\csname ##9.A\endcsname{##3}
      \expandafter\gdef\csname ##9.P\endcsname{##4}
      \expandafter\gdef\csname ##9.FI\endcsname{##5}
      \expandafter\gdef\csname ##9.FII\endcsname{##6}
      \expandafter\gdef\csname ##9.FIII\endcsname{##7}
      \expandafter\gdef\csname ##9.FIV\endcsname{##8}    
    \fi}
%    \end{macrocode}
% Existiert die Datei nicht, so wird ein Fehler ausgegeben, ansonsten
% wird die Ladeaktion angezeigt.
%    \begin{macrocode}
  \InputIfFileExists{#1.adr}
                    {\typeout{Load addressfile: #1.adr.}}
                    {\PackageError{scraddr}
                                  {File #1.adr not found}
                                  {The addressfile you wanted is not
                                   available}}
  \endgroup}
%    \end{macrocode}
%  \end{macro}
%
% \subsection{Zugriff auf die Elemente der eingelesenen Adressdatei}
%
% Da keine Vorschriften existieren, wie genau das Kürzel aufgebaut sein
% muss, können innerhalb des Kürzels theoretisch auch solche Zeichen
% enthalten sein, die für Makronamen normalerweise ungeeignet sind.
% Deshalb existiert ein Satz von Befehlen, über den auf die zu einem
% Kürzel gehörenden Elemente zugegriffen werden kann. Dabei wird davon
% ausgegangen, dass die Adressdatei dem zuvor vorgeschlagenen Aufbau
% entspricht.
%
%  \begin{macro}{\Name}
% Der Name wird aus dem Vornamen (Firstname) und Nachnamen (Lastname)
% zusammengesetzt, wobei einfach ein Leerzeichen dazwischen geklemmt
% wird.
%    \begin{macrocode}
\newcommand*{\Name}[1]{\FirstName{#1}\ \LastName{#1}}
%    \end{macrocode}
%  \end{macro}
%  \begin{macro}{\FirstName}
% Der Vorname (Firstname) ist mit \emph{Kürzel}|.FN| codiert.
%    \begin{macrocode}
\newcommand*{\FirstName}[1]{\csname #1.FN\endcsname}
%    \end{macrocode}
%  \end{macro}
%  \begin{macro}{\LastName}
% Der Nachname (Lastname) ist mit \emph{Kürzel}|.LN| codiert.
%    \begin{macrocode}
\newcommand*{\LastName}[1]{\csname #1.LN\endcsname}
%    \end{macrocode}
%  \end{macro}
%  \begin{macro}{\Address}
% Die Adresse (Address) ist mit \emph{Kürzel}|.A| codiert.
%    \begin{macrocode}
\newcommand*{\Address}[1]{\csname #1.A\endcsname}
%    \end{macrocode}
%  \end{macro}
%  \begin{macro}{\Telephone}
% Die Telephonnummer (Telephone/Phone) ist mit \emph{Kürzel}|.P|
% codiert.
%    \begin{macrocode}
\newcommand*{\Telephone}[1]{\csname #1.P\endcsname}
%    \end{macrocode}
%  \end{macro}
%  \begin{macro}{\FreeI}
%  \begin{macro}{\FreeII}
% Es existieren zwei freie Einträge, die mit \emph{Kürzel}|.FI| und
% \emph{Kürzel}.|FII| codiert sind.
%    \begin{macrocode}
\newcommand*{\FreeI}[1]{\csname #1.FI\endcsname}
\newcommand*{\FreeII}[1]{\csname #1.FII\endcsname}
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%  \begin{macro}{\Comment}
%  \begin{macro}{\FreeIII}
% Das dritte freie Element ist über zwei Makros erreichbar.
% Das Makro |\Comment| dient zur Kompatibilität mit älteren
% |\adrentry|-Einträgen, da hier der vorletzte Parameter als
% Kommentar gekennzeichnet war.
% Das Makro |\FreeIII| ist passend zur Definition des Makros
% |\addrentry| benannt.
% Die Daten sind im Makro mit \emph{Kürzel}|.FIII| kodiert.
% \changes{v1.1}{2002/05/18}{Erweitert auf addrentry Einträge}
%    \begin{macrocode}
\newcommand*{\Comment}{}
\newcommand*{\FreeIII}[1]{\csname #1.FIII\endcsname}
\let\Comment\FreeIII
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%  \begin{macro}{\FreeIV}
% Das letzte Makro gibt ebenfalls Zugriff auf ein freies Element, das mit
% \emph{Kürzel}|.FIV| codiert ist. Dies wurde ebenfalls für
% neue |\addrentry| Einträgen eingeführt. Bei älteren |\adrentry|
% Einträgen, führt die Benutzung dieses Macros zu einer Warnung im Text.
% \changes{v1.1}{2002/05/18}{Erweitert auf addrentry Einträge}
%    \begin{macrocode}
\newcommand*{\FreeIV}[1]{\csname #1.FIV\endcsname}
%    \end{macrocode}
%  \end{macro}
%
% \subsection{Ende des Pakets}
%    \begin{macrocode}
%</scraddr>
%    \end{macrocode}
%
% \IndexPrologue{\clearpage
%                \section*{Index}
%                \markboth{Index}{Index}
%                Die kursiven Zahlen geben die Seiten an, auf denen
%                der entsprechende Eintrag beschrieben ist.
%                Die unterstrichenden Zahlen geben die Stelle der
%                Definition des Eintrags an.
%                Alle anderen Zahlen benennen Stellen, an denen der
%                entsprechende Eintrag verwendet ist.
%                \vspace{1em}\noindent}
%
% \GlossaryPrologue{\section*{Änderungsverzeichnis}
%                   \markboth{Änderungsverzeichnis}{Änderungsverzeichnis}
%                   \addcontentsline{toc}{section}{Änderungsverzeichnis}
%                   Die erste Version des \textsf{KOMA-Script} Pakets
%                   stammt vom 7.\,Juli~1994. Es werden nur die
%                   Änderungen ab diesem Zeitpunkt dokumentiert.\par%
%                   \vspace{1em}\noindent}
%
% \Finale
%
\endinput
%
% Ende der Datei `scraddr.dtx'

%%% Local Variables:
%%% mode: doctex
%%% Text-master: t
%%% End: