
\chapter{User-Interface}

\marklabel{menufile}{\section{Men"u}}

\subsection{Einleitung}

    F"ur viele Pakete ist eine Administration unerl"asslich. Sofern
    eine Administration vorgesehen ist, muss diese "uber das \eisfair\
    Setup-Men"u erfolgen.

    Dieses Kapitel der Entwicklerdokumentation beschreibt die Erstellung
    und Einbindung eigener Untermen"us in das \eisfair\ Men"usystem.

    Die einzelnen Men"us liegen unter \texttt{/var/install/menu/} und
    sind in einer XML--"ahnlichen Syntax geschrieben. Wichtig dabei ist,
    dass jedes Tag vollst"andig in einer separaten Zeile steht. Der
    Dateiname muss nach folgendem Schema aufgebaut sein:

\begin{verbatim}
setup.services.$package[.$submenu].menu
\end{verbatim}

\begin{example}
Beispiele:
\begin{verbatim}
/var/install/menu/setup.services.foo.menu
/var/install/menu/setup.services.foo.bar.menu
\end{verbatim}
\end{example}

\begin{example}
Beispiel:
\begin{verbatim}
setup.services.foo.menu

<!-- /var/install/menu/setup.services.foo.menu -->
<!-- Creation:     2005-04-09  max             -->
<!-- Last Update:  2005-04-09  max             -->
<title>Administration of Package Foo</title>
<package>foo</package>
<version/>
<doc>Read Foo Documentation</doc>
<edit>Edit Foo Configuration</edit>
<menu file="setup.services.foo.bar.menu">All bar functions of foo</menu>
<init task="start">Start Foo</init>
<init task="stop">Stop Foo</init>
<script file="foo-dosomething">Do Something</script>
\end{verbatim}
\end{example}

    \achtung{Da derzeit keine mehrsprachigen Men"us unterst"utzt werden,
    \textbf{m"ussen} die Men"utexte in Englisch verfasst sein.}


\subsection{Verf"ugbare Tags}

    Im folgenden werden die einzelnen Tags mit den jeweiligen Optionen
    erkl"art.


\subsubsection{<!---- --  >-Tag}

    Mit dem \texttt{<!--\--}\ -Tag wird eine Kommentarzeile eingeleitet und
    mit dem \texttt{--\-->}-Tag beendet.

\begin{example}
Beispiel:
\begin{verbatim}
<!-- Creation: 2005-04-09 jed -->
\end{verbatim}
\end{example}


    \achtung{Es d"urfen nicht mehrere Kommentarzeilen zusammengefasst
    werden, dies f"uhrt im classic Menu zu einem Fehler in der
    Darstellung}

\begin{example}
Beispiel: So nicht
\begin{verbatim}
<!--
/var/install/menu/setup.services.foo.menu
Creation:     2005-04-09  max
Last Update:  2005-04-09  max
-->
\end{verbatim}
\end{example}




\subsubsection{<title>-Tag}

    Mit dem \tag{title}-Tag wird der Titel des Men"us angegeben.

    In jedem Men"u und Untermen"u muss das \tag{title}-Tag gesetzt
    werden.

\begin{example}
Beispiel:
\begin{verbatim}
<title>Administration of Package Foo</title>
\end{verbatim}
\end{example}


\subsubsection{<package>-Tag}

    Mit dem \tag{package}-Tag wird die Umgebungsvariable PACKAGE
    gesetzt. Diese kann dann von abh"angigen Skripten ausgewertet
    werden.

    In jedem Men"u und Untermen"u eines Pakets muss ein \tag{package}-Tag
    gesetzt werden.

\begin{example}
Beispiel:
\begin{verbatim}
<package>foo</package>
\end{verbatim}
\end{example}


\subsubsection{<version>-Tag}

    Mit diesem Tag wird gesteuert, dass die aktuelle \eisfair\--Version
    und eiskernel--Version auf dieser Men"uebene angezeigt werden sollen.

\begin{example}
Beispiel:
\begin{verbatim}
<version/>
\end{verbatim}
\end{example}


\subsubsection{<url>-Tag}

    Dient zur Anzeige der aktuellen Paket-Installationsquelle.

\begin{example}
Beispiel:
\begin{verbatim}
<url/>
\end{verbatim}
\end{example}


\subsubsection{<menu>-Tag}

    Zum Einh"angen eines Untermen"us dient der \tag{menu}-Tag. Hier wird
    mit der Option \texttt{file=\dq untermen"u\dq} die Men"udatei des
    Untermen"us angegeben. Diese muss ebenfalls den Spezifikationen des
    vorliegenden Kapitels gen"ugen.

    Der anzuzeigende Name des Untermen"us wird innerhalb des Tags
    angegeben.

\begin{example}
Beispiel:
\begin{verbatim}
<menu file="setup.services.foo.bar.menu">All bar functions of foo</menu>
\end{verbatim}
\end{example}

    Die Men"udateien m"ussen alle unter \texttt{/var/install/menu/} liegen
    und den Namen \texttt{setup.services.\package.menu} bzw.
    \texttt{setup.services.\package.\textit{\$submenu}.menu} tragen. \\


\tipp{Beim Tag \tag{menu} kann optional die Option \texttt{package={\dq\dq}}
      verwendet werden um die Variable {\texttt\textit \$PACKAGE} explizit f"ur
      ein Untermen"u zu setzen. Dies entspricht der Verwendung des Tags
      \tag{package} in diesem Untermen"u.\\
\\
      Dieses Vorgehen ist nur f"ur generische Untermen"us (z.B. ACFH)
      gedacht, bei denen eine explizite Verwendung des Tags \tag{package}
      nicht m"oglich ist.}
\\

\subsubsection{<doc>-Tag}

    Die Dokumentation des Paketes oder eine beliebige andere Datei im
    Unix-Textformat kann mit Hilfe des \tag{doc}-Tags angezeigt werden.

    Die anzuzeigende Datei wird mit der Option \texttt{file=\dq\dq}
    angegeben. Sofern die Datei im Verzeichnis
    \texttt{/usr/share/doc/\package} liegt, ist die Angabe des Dateinamens
    ausreichend.

    Wird kein Dateiname angegeben, so wird die Datei
    \texttt{/usr/share/doc/\package/\package.txt} angezeigt.

    Bei abweichenden Verzeichnissen muss der absolute Pfad mit angegeben
    werden.

    Der Aufbau der Paketdokumentation ist im
    \jump{documentation}{entprechenden Kapitel} der verliegenden
    Entwicklerdokumentation beschrieben.

    Zur Anzeige auf der Konsole wird automatisch der in der
    Basiskonfiguration eingestellte PAGER verwendet.

\begin{example}
Beispiele:
\begin{verbatim}
<doc file="foo.txt">Read Foo Documentation</doc>
<doc file="/usr/share/doc/foo/bar.txt">Display bar-txt</doc>
\end{verbatim}
\end{example}


\subsubsection{<edit>-Tag}

    Mit dem \tag{edit}-Tag wird eine Funktion zum Editieren der
    \eisfair\-Konfiguration eingeh"angt. Es wird dabei immer die mit dem
    \tag{package}-Tag gesetzte Konfiguration bearbeitet.

    Bei der Option \texttt{package=\dq\dq} kann optional der Name der
    Konfigurationsdatei unter \texttt{/var/config.d/} angegeben werden.
    Dieser entspricht dem Namen des Paketes.

    Der im Men"u anzuzeigende Text ist innerhalb des Tags anzugeben.

    Auf der Konsole wird automatisch der in der Basiskonfiguration
    eingestellte Konfigurationseditor verwendet. Alternative
    Administrationsoberfl"achen bieten teilweise eigene Editoren.

    Voraussetzung f"ur die Verwendung des \tag{edit}-Tags sind:

\begin{itemize}
   \item Die Konfiguration steht in \texttt{/etc/config.d/\package} und
          entspricht den Richtlinien f"ur eine \eisfair\-Konfiguration.

   \item Es existiert eine Standardkonfiguration
          \texttt{/etc/default.d/\package}.

   \item Es wird die G"ultigkeitspr"ufung mittels
          \texttt{/etc/check.d/\package} durchgef"uhrt.

   \item Es existiert ein spezifikationskonformes Apply-Skript
          \texttt{/var/install/config.d/\package.sh} zum Schreiben der
          "`nativen"' Konfigurationsdateien des Pakets.

   \item \texttt{/etc/init.d/\package} kennt den Parameter
          "`\texttt{restart}"' zum Neustarten des Pakets.
\end{itemize}

\begin{example}
Beispiele:
\begin{verbatim}
<package>foo</package>
<edit>Edit Foo Configuration</edit>
<edit package="myfoo">Edit MyFoo Configuration</edit>
<edit stopstart>Stop process, edit configuration, start process</edit>
\end{verbatim}
\end{example}

    Die Verarbeitung des Parameters "`restart"' in
    \texttt{/etc/init.d/\package} sieht im einfachsten Fall so aus:

\begin{example}
Beispiel:
\begin{verbatim}
restart)
    $0 stop
    $0 start
    ;;
\end{verbatim}
\end{example}

    Sollte ein Neuschreiben der Konfiguration nur m"oglich sein, wenn das
    Paket vorher gestoppt wurde, dann kann dazu die Option
    \texttt{stopstart} genutzt werden. In diesem Fall wird nicht
    \texttt{/etc/init.d/\package\ restart} zum Neustarten des Pakets
    verwendet, sondern es wird als erstes das Paket mittels
    \texttt{/etc/init.d/\package\ stop} angehalten, bevor die Konfiguration
    neu geschrieben und danach das Paket wieder gestartet wird. Diese
    Vorgehensweise darf nur verwendet werden, wenn der normale Ablauf
    nicht m"oglich ist!


\subsubsection{<init>-Tag}

    Funktionen in \texttt{/etc/init.d/\package} k"onnen "uber die
    standardisierte Schnittstelle \tag{init} aufgerufen werden. Als
    Option wird die durchzuf"uhrende Aktion \texttt{task=\dq\dq} "ubergeben.

    Es wird dazu immer das Script unter \texttt{/etc/init.d/} aufgerufen,
    das dem in \tag{package} gesetztem Paketnamen entspricht. Optional
    kann aber auch mittels der Option \verb+package=""+ das anzusteuernde
    Skript angegeben werden. Bei dieser Funktion k"onnen auch mehrere
    Pakete mit einem einzelnen Aufruf angesteuert werden, dazu sind diese
    durch ein Leerzeichen (Space) getrennt anzugeben.

    Im Parameter \verb+task=""+ wird die Funktion sowie optional
    Aufrufparameter angegeben. G"angige Funktionen sind \texttt{start},
    \texttt{stop} oder \texttt{status}. Ein Parameter wird durch ein
    Leerzeichen getrennt in \texttt{task=\dq\dq} mit angegeben.

\begin{example}
Beispiele:
\begin{verbatim}
<init task="start">Start Foo</init>
<init task="stop">Stop Foo</init>
<init package="foo" task="stop -force">Kill Foo/init>
<init task="status">Show Foo Status</init>
\end{verbatim}
\end{example}

\tipp{Beim \tag{init}-Tag k"onnen mit der Option \texttt{package=\dq\dq}
      auch mehrere Pakete durch Leerzeichen getrennt angegeben werden.
      Die jeweiligen Aktionen werden dann f"ur alle Pakete ausgef"uhrt:\\
      \\
      Beispiel:\\
      \\
      {\texttt\small <init package=\dq foo bar\dq task=\dq start\dq>Foo und
      Bar starten</init>}}


\subsubsection{<script>-Tag}

    Der Aufruf paketeigener Skripte erfolgt "uber das Tag <script>.
    Dort wird mit der Option \verb+file=""+ das auszuf"uhrende
    Skript angegeben.

    Wenn dieses Skript unter \verb+/var/install/bin/+ liegt, dann reicht
    die Angabe des Namens (ohne absoluten Pfad). (empfohlen)

    Alternativ kann auch ein Skript in einem anderen Verzeichnis
    aufgerufen werden. Dazu muss der absolute Pfad mit angegeben
    werden. Diese Methode funktioniert nicht mehr mit zuk"unftigen
    Webconf-Versionen (siehe Webconf).

\begin{example}
Beispiele:
\begin{verbatim}
<script file="foo-dosomething">Do Something</script>
<script file="/usr/local/foo/doanything">Do Anything</script>
\end{verbatim}
\end{example}

\subsection{Men"us auf alternativen Benutzeroberfl"achen}
    Aktuell existieren mehrere alternative Benutzeroberfl"achen, die
    Men"uinhalte darstellen k"onnen. Dies sind das klassische Men"usystem,
    die Curses-Oberfl"ache und das Web-Frontend ''webconf''. Teilweise
    unterscheiden sich die Men"usysteme in ihrer Funktion und in ihrem
    Verhalten, weshalb eine M"oglichkeit existiert, die Sichtbarkeit von
    Men"ueintr"agen einzuschr"anken. Zu diesem Zweck kann bei den
    Tags\texttt{<menu>},\texttt{<doc>},\texttt{<script>} und\texttt{<init>} das optionale
    Attribut ''ui'' angegeben werden.

    G"ultige Werte f"ur das Attribut sind bislang ''classic'' und ''cui''.
    Wird das Attribut nicht angegeben ist der entsprechende Men"ueintrag
    immer sichtbar. Wird ''ui'' mit dem Wert ''classic'' angegeben ist der
    Eintrag lediglich im klassischen Men"u sichtbar, w"ahrend ''cui'' das
    selbe f"ur das Curses-Men"u leistet. Es ist auch m"oglich mehrere Werte
    durch Komma getrennt anzugeben.

\begin{example}
Beispiele:
\begin{verbatim}
<doc file="foo.txt">This item is always visible</doc>
<script file="foo.cui.sh" ui="cui">Curses mode only</script>
<menu file="setup.foo.menu" ui="classic">Classic mode only</menu>
\end{verbatim}
\end{example}

\subsection{Dynamisches Verhalten in Men"us}
    Falls das bis hierher beschriebene statische Verhalten von Men"us
    nicht ausreicht, um den Anforderungen eines Paketes zu gen"ugen,
    k"onnen Skripte zur Vor- und Nachbearbeitung von Men"uaktionen
    eingebunden werden. Damit kann z.B. dynamisch ein Untermen"u oder
    eine Dokumentationsdatei erstellt werden.

    Zu diesem Zweck kennen die Men"u-Tags\texttt{<menu>},\texttt{<doc>},
   \texttt{<edit>},\texttt{<init>} und\texttt{<script>} die optionalen
    Attribute ''pre'' und ''post''.
    Als Wert f"ur die beiden Attribute wird dabei der Verweis auf ein
    Programm oder ein Shell-Skript erwartet, das entweder mit einem
    absoluten Pfad oder nur mit seinem Dateinamen angegeben wird. Im
    zweiten Fall wird angenommen, dass die Datei vom Paketentwickler
    im Verzeichnis \verb+/var/install/bin+ abgelegt wurde.

\begin{example}
    Beispiele:
\begin{verbatim}
<menu file="setup.foo.dyn.menu" pre="foo_menu.sh">Dynamic Menu</menu>
<doc pre="foo_compose_mod_doc.sh">View Foo Modules Doc</doc>
\end{verbatim}
\end{example}

    Im Beispiel wird das Skript\texttt\textit{/var/install/bin/foo\_menu.sh}
    aufgerufen, bevor das Untermen"u ge"offnet wird. Ein entsprechendes
    post-Skript w"urde entsprechend beim Verlassen des Untermen"us
    ausgef"uhrt.

    \hinweis{In fast allen Anwendungsf"allen reicht das statische
    Verhalten des Men"us mit dessen M"oglichkeiten vollkommen aus. Das
    dynamische Verhalten richtet sich in erster Linie an erfahrene
    Paketentwickler, welche eine Funktionalit"at ben"otigen, die in
    eisfair noch nicht vorgesehen ist.}

    An die pre/post-Skripte bzw. -Programme werden eine Reihe von
    Parametern "ubergeben, mit denen sich deren Verhalten steuern l"asst.
    Die zu den jeweiligen Tags passenden Parameter sind in der folgenden
    Tabelle dargestellt:

    \begin{tabularx}{\textwidth}[t]{X|X|X|X|X|X}
      \textbf{Tag}&\textbf{\$1}&\textbf{\$2}&\textbf{\$3}&\textbf{\$4}&\textbf{\$5}\\
       \hline
       ~ & ~ & ~ & ~ & ~ & ~ \\
       \texttt{<menu>} & \texttt{''pre''}  \texttt{''post''} &\texttt\textit{\$package} &
          \texttt{''menu''} &\texttt\textit{\$menu\_file} & ~ \\
       ~ & ~ & ~ & ~ & ~ & ~ \\
       \texttt{<doc>} & \texttt{''pre''}  \texttt{''post''} &\texttt\textit{\$package} &
          \texttt{''doc''} &\texttt\textit{\$doc\_file} & ~ \\
       ~ & ~ & ~ & ~ & ~ & ~ \\
       \texttt{<edit>} & \texttt{''pre''}  \texttt{''post''} &\texttt\textit{\$package} &
          \texttt{''edit''} &\texttt\textit{\$config\_file} & \texttt{\$stopstart}\\
       ~ & ~ & ~ & ~ & ~ & ~ \\
       \texttt{<init>} & \texttt{''pre''}  \texttt{''post''} &\texttt\textit{\$package} &
          \texttt{''init''} &\texttt\textit{\$init\_file} &\texttt\textit{\$init\_task}\\
       ~ & ~ & ~ & ~ & ~ & ~ \\
       \texttt{<script>} & \texttt{''pre''}  \texttt{''post''} &\texttt\textit{\$package} &
          \texttt{''script''} &\texttt\textit{\$shell\_script} & ~ \\
       ~ & ~ & ~ & ~ & ~ & ~ \\
    \end{tabularx}

    Der Parameter\texttt\textit{\$stopstart} des\texttt\textit{<edit>} Tags nimmt die
    Werte ''apply'' oder ''apply-stopstart'' an, je nachdem, ob der zu
    konfigurierende Dienst neu gestartet werden muss oder nicht.

    Dateiverweise wie\texttt\textit{\$shell\_script} werden immer mit einem
    absoluten Pfad an die pre/post-Skripte "ubergeben. Steht im Men"u
    die Datei ohne Pfadangabe, dann wird der Pfad nach dem in der
    folgenden Tabelle dargestellten Schema erweitert.

    \begin{tabularx}{\textwidth}[t]{X|p{10cm}}
      \textbf{Datei}&\textbf{Name und absoluter Pfad}\\
       \hline
       ~ & ~ \\
      \texttt\textit{menu file} & \texttt{/var/install/menu/\textit{\$menu\_file}}\\
      \texttt\textit{doc file} & \texttt{/usr/share/doc/\textit{\$package/\$doc\_file}}\\
      \texttt\textit{config file} & \texttt{/etc/config.d/\textit{\$config\_file}}\\
      \texttt\textit{init file} & \texttt{/etc/init.d/\textit{\$init\_file}}\\
      \texttt\textit{shell script} & \texttt{/etc/init.d/\textit{\$shell\_script}}\\
       ~ & ~ \\
    \end{tabularx}

    Sollte ein pre/post-Skript eine Fehlerbedingung feststellen, so kann
    es durch einen R"uckgabewert ungleich ''0'' (z.B. \texttt{exit 1} )
    diesen Fehler an das Men"u signalisieren. Im Falle des pre-Skripts
    wird dadurch zudem die Ausf"uhrung der mit dem Men"u-Tag verbundenen
    Aktion unterbunden. Im Falle von Fehlern sollte in jedem Fall "uber
    die Standardausgabe oder die Fehlerausgabe eine erkl"arende
    Fehlermeldung erfolgen.

\begin{example}
    Beispiel:
\begin{verbatim}
    echo "Unable to write menu file "\$3"!"
    exit 1
\end{verbatim}
\end{example}

    \hinweis{Die mit einem Tag verbundene Men"uaktion wird auch dann
     nicht ausgef"uhrt, wenn das in der ''pre'' Option angegebene
     Programm oder Skript nicht gefunden oder nicht ausgef"uhrt werden
     konnte. Eine entsprechende Fehlermeldung wird in diesem Fall vom
     System erzeugt.}


\subsection{Untermen"us einh"angen und entfernen}
    Um eigene Untermen"us ins \eisfair\-Men"u einh"angen zu k"onnen, gibt
    es die Skripte \texttt{/var/install/bin/add-menu} und
    \texttt{/var/install/bin/del-menu}. Beide Skripte werden mit den selben
    Parametern aufgerufen, deshalb werden diese nur einmal gemeinsam
    erkl"art.

\begin{verbatim}
/var/install/bin/add-menu MENUE UNTERMENUE MENUETEXT
/var/install/bin/del-menu MENUE UNTERMENUE
\end{verbatim}

    \begin{tabular}{ll}
    MENUE      & gibt das Men"u an, unter welches das ne"u Men"u geh"angt
                 werden soll.\\
    UNTERMENUE & gibt das Untermen"u an, dass in MENUE eingeh"angt werden
                 soll.\\
    MENUETEXT  & gibt den in MENUE anzuzeigenden Text an.\\
    \end{tabular}

\begin{example}
Beispiele:
\begin{verbatim}
/var/install/bin/add-menu         \
    setup.services.menu           \
    setup.services.foo.menu       \
    "Foo Configuration"

/var/install/bin/del-menu         \
    setup.services.menu           \
    setup.services.foo.menu
\end{verbatim}
\end{example}

    \achtung{Hier hat sich die Aufrufsyntax gegen"uber der alten Version
    ge"andert. Der alte Aufruf mit dem auszuf"uhrenden Skript als
    Parameter funktioniert aus Kompatibilit"atsgr"unden weiter, darf
    aber bei neuen Releases nicht mehr verwendet werden!}

    \hinweis{Bis inklusive Base Version 1.0.7 wurde eine andere Syntax
    f"ur die Men"ustruktur verwendet. Dabei konnten aus dem Men"u nur
    Shellscripts aufgerufen werden, die ggf. wieder ein Men"u anzeigten.

    Diese Men"usyntax ist veraltet und wird nur "ubergangsweise parallel
    unterst"utzt. Alternative Administrationsoberfl"achen werden
    mit der alten Men"ustruktur nicht funktionieren, weshalb die
    Verwendung der alten Struktur in ne"un Releases nicht mehr zul"assig
    ist.

    Bei Verwendung der neuen Men"usyntax sind die alten Scripte wie
    foo-edit, foo-doc oder foo-bar nicht mehr n"otig, da viele Funktionen
    jetzt standardisiert aufgerufen werden.}

    Sollte es aus einem Grund einmal n"otig sein eine komplett neue
    Men"udatei anzulegen, so kann dies durch Aufruf des Skriptes
    \texttt{/var/install/bin/create-menu} erledigt werden.

\begin{verbatim}
/var/install/bin/create-menu MENUE MENUETITEL
\end{verbatim}

\begin{tabular}{ll}
    MENUE      & gibt das Men"u an, welches erzeugt werden soll.\\
    MENUETITEL & gibt den Men"utitel an, welcher "uber dem Men"u
                 angezeigt werden soll.\\
\end{tabular}
\\


\marklabel{documentation}{\section{Dokumentation}}

\subsection{Dokumentation}

    Die eigentliche Dokumentation eines Pakets muss im Verzeichnis
    \texttt{/usr/share/doc/\package} abgelegt werden und eine im
    Unix-Textformat erstellte Datei Namens \texttt{\package.txt} sein.

    In der Dokumentation m"ussen zumindest folgende Punkte genauer
    erkl"art werden:

    \begin{itemize}
       \item Welche weiteren Pakete werden ben"otigt?
       \item Eventuelle Konfigurationsdateien und die in ihr definierten
              Variablen.
       \item Die Punkte im Setup-Men"u, soweit sie dieses Paket
              betreffen.
       \item Die Funktionen des Pakets.
       \item Wie arbeitet dieses Paket mit anderen Paketen zusammen?
    \end{itemize}

    Zus"atzliche Dokumentation, die den Originalquellen normalerweise
    beiliegt (man-Pages, info-Dateien, README, etc.), d"urfen \textbf{nicht}
    mitgeliefert werden.


\subsection{Changelog}

    Im Verzeichnis \texttt{/usr/share/doc/\package} ist eine Datei
    \texttt{changes.txt} anzulegen, in dem die Ver"anderungen, die von
    Version zu Version am Paket durchgef"uhrt werden, kurz beschrieben
    werden.

    Bew"ahrt hat sich eine Form wie in folgendem Beispiel:

\begin{example}
Beispiel f"ur ein Changelog:
\begin{verbatim}
1.0.6
-----
- added file /bin/bigone
- deleted obsolete variable ONE in
  /etc/config.d/master
- renamed /etc/old to /etc/new
-
-

1.0.5
-----
- modified some comments in /etc/this
-
-

\end{verbatim}
\end{example}

    Dabei sollten die letzten "anderungen jeweils oben in der Datei
    changes.txt stehen. Uralte "anderungen k"onnen mit der Zeit auch
    entfallen.

