% \iffalse meta-comment
%
% Copyright (C) 1995 - 2006 Jobst Hoffmann, FH Aachen, Abt. J"ulich
% <j.hoffmann _at_ fh-aachen.de>
% -------------------------------------------------------------------------------------------
%
% This file may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, either version 1.2
% of this license or (at your option) any later version.
% The latest version of this license is in:
%
%    http://www.latex-project.org/lppl.txt
%
% and version 1.2 or later is part of all distributions of LaTeX
% version 1999/12/01 or later.
%
% \fi
%
% \iffalse
%<struktex|struktxf|struktxp|strukdoc>\NeedsTeXFormat{LaTeX2e}[1999/12/01]
%<struktex|struktxf|struktxp|strukdoc>\def\filedate{2006/08/20}
%<struktex|struktxf|struktxp|strukdoc>\def\fileversion{v8.3b}
%<struktex>\ProvidesPackage{struktex}
%<struktex>   [\filedate\space\fileversion\space Nassi Shneidermann Charts (Jobst Hoffmann)]
%<struktxf>\ProvidesPackage{struktxf}
%<struktxf>   [\filedate\space\fileversion\space Fonts for Nassi Shneidermann Charts (Jobst Hoffmann)]
%<struktxp>\ProvidesPackage{struktxp}
%<struktxp>   [\filedate\space\fileversion\space Keywords for Nassi Shneidermann Charts (Jobst Hoffmann)]
% \fi
% \CheckSum{2071}
% \def\docdate {2006/08/20} ^^A not style'able!!
%
%    \iffalse meta-comment
%   struktex.dtx                                       $Revision: 7.14 $
%                                              $Date: 2006/08/20 11:43:18 $
%                                                $RCSfile: struktex.dtx,v $
%   $Log: struktex.dtx,v $
%   Revision 7.14  2006/08/20 11:43:18  ax006ho
%   - kleine Korrekturen (\fileversion ... aktualisiert)
%   - Makefile erweitert: das Ziel "dist" erzeugt automatisch eine
%     Datei THIS_IS_VERSION_...
%   - Option english in der DAtei getversion.tex gestrichen
%
%   Revision 7.13  2006/08/19 18:36:36  ax006ho
%   - struktex.el kann nun case korrekt einfuegen: es wird die entsprechende
%     Anzahl von switch-Kommandos mitsamt den zugehoerigen Argumenten
%     eingefuegt
%
%   Revision 7.12  2006/08/18 20:06:15  ax006ho
%   - die zusaetzlichen Optionen draft und final wurden eingefuehrt
%   - einige Tippfehler wurden korrigiert, Umlaute gegen die Ersatzdarstellung
%     ausgetauscht
%   - Beispiel 2 wurde geaendert: die Option draft wird bei Verzicht auf
%     sProofOn benutzt
%   - die Funktionalitaet von struktex.el wurde erweitert
%
%   Revision 7.11  2006/08/16 20:30:43  ax006ho
%   - AUCTeX Unterstuetzung verbessert
%   - kleinere Textkorrekturen
%   - verbesserte Dokumentation der Optionen
%   - Dokumentation des Makros `assert
%   - Korrektur des integrierten Makefiles
%   - verbesserte Dokumentation von struktex.el
%   - neue Option "nofiller"
%   - `ifmmode durch `ensuremath ersetzt
%   - Korrektur eines Fehlers: schraege Linien enden nun korrekt
%
%   Revision 7.10  2006/01/17 12:01:04  ax006ho
%   - AUCTeX Unterstuetzung eingefuehrt
%
%   Revision 7.9  2005/09/01 07:03:04  ax006ho
%   - corrected the make target (clean-all -> realclean) in the Makefile header
%
%   Revision 7.8  2005/06/13 13:22:25  ax006ho
%   - Dokumentation von `case verbessert
%   - Code bereinigt
%   - fehlerhafte Umbenennung von `tempx@nss korrigiert
%   - Tippfehler korrigiert
%
%   Revision 7.7  2005/06/13 13:02:28  ax006ho
%   - ein paar Tippfehler korrigiert
%   - Test auf das Arbeiten mit pdfTeX umgestellt (nun unter Benutzung von
%     ifpdf.sty
%
%   Revision 7.6  2005/01/12 11:16:08  ax006ho
%   - updated copyright
%   - some small changes in the documentation (case)
%   - changed the license remark in the english version
%   - corrected error with case (height of the separating lines)
%   - added key words for Python
%   - added file variables for XEmacs
%
%   Revision 7.5  2004/07/16 10:55:25  ax006ho
%   - Texte verbessert
%   - Umschaltung der Sprache nun durch ein Literal
%   - Ueberschriften fuer die Inhaltsangabe teilweise verkuerzt
%   - Beispieldatei zum Testen der Fontauswahl verbessert: \obeylines
%     ist nun gruppenweise gesetzt
%   - Makefile korrigiert
%   - Literaturangaben aktualisiert
%
%   Revision 7.4  2004/07/14 12:47:57  ax006ho
%   - \fileversion und \filedate zur einfacheren zentralen Verwaltung von
%     Entwicklungsdaten eingefuehrt
%   - Im Vorwort Hinweis auf pict2e.sty gegeben
%   - Entwicklungsgeschichte korrigiert und erweitert
%   - Umstellung der Sprachverwaltung auf babel
%   - Zeichnung zum Layout der Deklarationen verbessert (\multiput statt n-mal
%     \put, Korrektur von Bezeichnungen)
%   - .pdf-Ausgabe eingefuehrt
%   - Hinweis auf Luxi Mono als Ersatz fuer cmbtt
%
%   Revision 7.3  2004/07/13 10:01:51  ax006ho
%   - explizites Laden von pict2e
%   - kleine Korrektur am Makefile
%   - in der zweiten Beispieldatei wird nun statt curves.sty pict2e.sty geladen
%
%   Revision 7.2  2004/07/13 08:46:04  ax006ho
%   - an pict2e.sty angepasst
%   - kleinere Korrekturen an der Dokumentation
%
%   Revision 7.1  2004/07/12 15:32:42  ax006ho
%   - Anzahl der Z"ahler reduziert
%   - einige kleinere Korrekturen angebracht
%
%   Revision 7.0.1.1  2004/03/09 10:09:16  ax006ho
%   - Adresse ge"andert
%   - Code teilweise umgestellt
%   - Dateinamen ge"andert
%   - Tippfehler korrigiert
%   - Marker f"ur interne Beispiel
%   - Testrahmen ge"andert
%   - Beispiele f"ur unterschiedlichen Programmierspracheneinsatz erweitert
%   - Makefile integriert
%   - `pLanguage ge"andert: `pLanguage@nss zus"atzlich eingef"uhrt
%   - Sprachbezeichnungen ge"andert: Suffix @nss
%   - Erweiterung f"ur die Verifikation von Algorithmen eingef"uhrt
%
%   Revision 7.0  2004/01/04 11:07:13  ax006ho
%   - Adresse ge"andert
%   - Code teilweise umgestellt
%   - Dateinamen ge"andert
%   - Tippfehler korrigiert
%   - Marker f"ur interne Beispiel
%   - Testrahmen ge"andert
%   - Beispiele f"ur unterschiedlichen Programmierspracheneinsatz erweitert
%   - Makefile integriert
%   - `pLanguage ge"andert: `pLanguage@nss zus"atzlich eingef"uhrt
%   - Sprachbezeichnungen ge"andert: Suffix @nss
%
%   Revision 6.0  2001/05/25 09:33:44  ax006ho
%   - Dokumentation von `case verbessert
%   - Makros `cs, `marg, `oarg, `pparg sowie `envb und `enve zur besseren
%     Dokumentation eingesetzt
%   - Englische "Ubersetzung der Dokumentation hinzugef"ugt
%   - Code umgestaltet, z.B. `def \(\rightarrow\) `newcommand,
%     \$\ldots\$ \(\rightarrow\) `(\ldots`)
%   - Zus"atzliche Paketoption "`curves"' zur Gestaltung beliebiger Steigungen
%     eingef"uhrt
%
%   Revision 5.0.4.2  2001/04/22 17:18:25  ax006ho
%   - Umgebungen zur einfacheren Notation der Dokumentation eingef"uhrt
%   - Erster Versuch einer gemischtsprachigen Dokumentation
%
%   Revision 5.0.4.1  1999/11/16 20:06:20  Hoffmann
%   - Neuimplementierung des Setzens von Ausdr"ucken und
%     (Schluessel-)woertern
%
%   Revision 5.0.3.1  1999/11/16 10:29:27  Hoffmann
%   - Text in Entscheidungsbloecken wird der Steigung der Linien
%     entsprechend gesetzt
%
%   Revision 5.0.2.2  1998/05/28 11:59:22  Hoffmann
%   - Tippfehlerkorrektur: Umlaut "`ue"' durch "`"u"' ersetzt
%
%   Revision 5.0.2.1  1997/12/03 13:03:33  Hoffmann
%   - Umstellung der Dokumentation, dadurch Verzicht auf eigene Treiberdatei
%     m"oglich
%   - kleinere Korrekturen
%
%   Revision 5.0.1.2  1997/11/02 20:11:39  Hoffmann
%   - Dokumentation umgestellt mittels der Umgebung example sowie der Makros
%     verbatiminput und verbatimwrite
%   - Zugehoerige Makros neu, aber noch nicht dokumentiert
%
%   Revision 5.0.1.1  1997/05/13 06:29:22  Hoffmann
%   kleinere stilistische "Anderungen nach W. Hanrath
%
%   Revision 5.0  1997/04/28 09:46:41  Hoffmann
%   - Dateinamen zwecks Kompatibilit"at auf Kleinschreibung umgesetzt
%   - kleinere textuelle "Anderungen, Fontauswahl teilweise ge"andert
%   - Abh"angigkeiten der Dokumentation von zus"atzlichen Paketen beseitigt
%
%   Revision 4.5  1997/04/28 08:29:29  Hoffmann
%   Umstellung auf Versionskontrolle mit rcs
%
%----------------------------------------------------------------------------
% \fi
%\iffalse    Dies ist ein META-KOMMENTAR
%            Alles bis zum n"achsten `\ fi' (ohne Leerzeichen) wird
%            ignoriert.  Das ist notwendig, da `%' nicht weiter
%            Kommentar einleitet, wenn diese Datei eingelesen wird.
%
% Stil-Option `struktex' zum Gebrauch mit LaTeX2e
% Copyright (C) 1995-2004 Jobst Hoffmann, alle Rechte vorbehalten.
%
%
% Das Kopieren dieser Datei ist nur zul"assig, wenn
% (1) keinerlei "Anderungen an dieser Datei durchgef"uhrt werden, oder
% (2) wenn diese Datei ge"andert wird, sie einen anderen Namen als
%     struktex.DTX erh"alt.
% Diese Einschr"ankung dient dazu, dass alle Stiloptionen identisch bleiben.
%
% Fehlermeldungen werden erbeten an: Dr. Jobst Hoffmann
%                                    Fachhochschule Aachen, Abt. J"ulich
%                                    Ginsterweg 1
%                                    52428 J"ulich
%                                    Bundesrepublik Deutschland
%                            Email:  <j.hoffmann _at_ fh-aachen.de>
%
% Achtung: um korrekte Bearbeitung zu erzielen, muss die Umgebung
%    \begin{macrocode}
%    ...
%    \end{macrocode}
% immer (mindestens) f"unf Zeichen einger"uckt sein, also in Spalte
% sechs beginnen!
%
% \fi
%
% \def\StrukTeXSty{\textsf{struktex.sty}}
%
% \changes{v8.3b}{06/08/20}{Erweiterung im Makefile: f"ur dist wird automatisch
% eine Datei THIS_IS_VERSION_... erzeugt.}
% \changes{v8.3a}{06/08/19}{struktex.el erweitert: es wird die korrekte Anzahl
% von `switch{} generiert und mit Inhalt gef"ullt}
% \changes{v8.3}{06/08/18}{Weitere Optionen "`draft"' und "`final"' eingef"uhrt}
% \changes{v8.2a}{06/01/17}{struktex.el korrigiert und erweitert}
% \changes{v8.1a}{05/09/01}{Erste (fehlerhafte) Version einer struktex.el Stil
% Datei zur Unterst"utzung von AUC\TeX hinzugef"ugt}
% \changes{v8.0f}{05/06/11}{Dokumentation von `case verbessert}
% \changes{v8.0d}{04/12/29}{`switch zeigt bei geeigneten Beispielen das
% rechtsb"undige Setzen von Bedingungen}
% \changes{v8.0c}{04/07/15}{Zweisprachigkeit verbessert, Bezeichner statt
% Nummern eingef"uhrt}
% \changes{v8.0b}{04/07/14}{`fileversion und `filedate zur einfacheren
% zentralen Verwaltung von Entwicklungsdaten eingef"uhrt}
% \changes{v7.0b}{04/03/09}{Anzahl der Z"ahler reduziert}
% \changes{v7.0a}{03/04/21}{Code teilweise umgestellt}
% \changes{v7.0a}{03/04/21}{Dateinamen ge"andert}
% \changes{v7.0a}{03/04/21}{Tippfehler korrigiert}
% \changes{v7.0a}{03/04/21}{Marker f"ur interne Beispiele umbenannt}
% \changes{v7.0a}{03/04/21}{Testrahmen ge"andert}
% \changes{v7.0a}{03/04/21}{Beispiele f"ur unterschiedlichen Programmierspracheneinsatz erweitert}
% \changes{v7.0a}{03/04/21}{Makefile integriert}
% \changes{v7.0a}{03/04/21}{`pLanguage ge"andert: `pLanguage@nss zus"atzlich eingef"uhrt}
% \changes{v7.0a}{03/04/21}{Sprachbezeichnungen ge"andert: Suffix @nss}
% \changes{v7.0}{03/04/21}{Wechsel von der RWTH Aachen zur FH Aachen, Abt. J"ulich}
% \changes{v6.0a}{01/04/22}{Dokumentation von `case verbessert}
% \changes{v6.0a}{00/12/08}{Makros `cs, `marg, `oarg, `pparg sowie  
%                           `envb und `enve zur besseren Dokumentation
%                           eingesetzt}
% \changes{v6.0a}{00/11/24}{Englische "Ubersetzung der Dokumentation 
%                           hinzugef"ugt}
% \changes{v6.0a}{00/11/24}{Code umgestaltet, z.B. `def $\rightarrow$ 
%                           `newcommand, \$\ldots\$ $\rightarrow$ `(\ldots`)}
% \changes{v6.0a}{00/11/24}{Zus"atzliche Paketoption "`curves"' zur Gestaltung
%                           beliebiger Steigungen eingef"uhrt}
% \changes{v5.4b}{00/12/08}{Umgebungen zur einfacheren Notation der
%                           Dokumentation eingef"uhrt}
% \changes{v5.4b}{00/12/08}{Erster Versuch einer gemischtsprachigen
%                           Dokumentation}
% \changes{v5.4a}{99/11/16}{\textsf{stuktxp.sty} "uberarbeitet zur besseren
%                           Darstellung von Programmen}
% \changes{v5.3a}{98/11/27}{Die Form des Textes in Bedingungen ist nun an
%                           beliebige Steigungen angepasst}
% \changes{v5.2b}{98/05/28}{Tippfehlerkorrektur: Umlaut "`ue"' durch
%                           "`"u"' ersetzt}
% \changes{v5.2a}{97/12/03}{Umstellung der Dokumentation, dadurch Verzicht
%                           auf eigene Treiberdatei m"oglich}
% \changes{v5.2a}{97/12/03}{kleinere Korrekturen}
% \changes{v5.1b}{97/11/02}{Umstellung der Dokumentation mittels Umgebung
%                           \texttt{example}, `verbatiminput und verbatimwrite}
% \changes{v5.1a}{97/04/29}{kleinere stilistische "Anderungen nach W. Hanrath}
% \changes{v5.0}{97/04/28}{Dateinamen zwecks Kompatibilit"at auf Kleinschreibung umgesetzt}
% \changes{v5.0}{97/04/28}{kleinere textuelle "Anderungen, Fontauswahl teilweise ge"andert}
% \changes{v5.0}{97/04/28}{Abh"angigkeiten der Dokumentation von zus"atzlichen Paketen beseitigt}
% \changes{v4.5e}{97/04/25}{Verzicht auf Gro"s- und Kleinschreibung im Namen von .sty-Dateien}
% \changes{v4.5a}{96/03/14}{Umgebung \texttt{description} auf \texttt{list}-Umgebung zur"uckgef"uhrt}
% \changes{v4.5a}{96/03/14}{Eigenes Paket zur Formatierung von Programminhalten integriert}
% \changes{v4.1c}{95/07/24}{Dokumentation verbessert}
% \changes{v4.1b}{95/07/19}{H"ohe des Bedingungsrechteckes bei `ifthenelse vorgebbar}
% \changes{v4.1a}{95/07/17}{Geraden mit beliebiger Steigung durch `emline m"oglich}
% \changes{v4.0a}{95/04/12}{Anpassung an LaTeX2e}
% \changes{v3.5a}{94/11/22}{Entwicklunglinien J. Dietel, J. Hoffmann vereinigt}
% \changes{v3.3a}{94/09/14}{Schnittstellenbeschreibung verallgemeinert}
% \changes{v3.2a}{94/09/14}{Dokumentation verbessert}
% \changes{v3.1a}{94/09/09}{Verschiedene Erweiterungen}
% \changes{v3.0a}{94/06/06}{Urversion mit integrierter Dokumentation}
% \changes{v2.5}{93/09/09}{Jobst Hoffmann, Rechenzentrum RWTH Aachen}
% \changes{v2.0}{92/01/17}{Dorothea Rieger, Rechenzentrum RWTH Aachen}
% \changes{v1.41}{88/06/20}{Andreas Wagener, Proze"srechner CYBER 815}
%
% \DoNotIndex{\ ,\!,\C,\[,\\,\],\^,\`,\{,\},\~,\<,\=}
% \DoNotIndex{\@ifundefined,\@ne,\catcode,\def,\docdate}
% \DoNotIndex{\else,\endinput,\expandafter,\fi,\filedate,\fileversion}
% \DoNotIndex{\gdef,\global,\ifnum,\ifx,\let,\long}
% \DoNotIndex{\newcount,\newdimen,\newif,\next,\space,\string}
% \DoNotIndex{\the,\xdef,\z@}
% \DoNotIndex{\@@par, \@empty, \@hangfrom, \@reffalse, \@reftrue,}
% \DoNotIndex{\advance, \Alph, \alph, \arabic, \baselineskip, \begin}
% \DoNotIndex{\bgroup, \box, \bullet, \cdot, \centering}
% \DoNotIndex{\columnwidth, \day, \divide}
% \DoNotIndex{\egroup, \end, \font, \footins, \foo}
% \DoNotIndex{\frenchspacing, \hbadness, \hbox, \hfil, \hfill}
% \DoNotIndex{\hrule, \hsize, \hskip, \hspace, \hss, \ifcase \ifdim, \ifodd}
% \DoNotIndex{\ifvmode, \ignorespaces, \input, \interlinepenalty, \item}
% \DoNotIndex{\itemindent, \kern, \L, \list, \listparindent, \magstep}
% \DoNotIndex{\magstephalf, \makelabel, \MakeShortVerb, \marginpar}
% \DoNotIndex{\mark, \month, \newpage, \nobreak, \noindent, \normalsize, \null}
% \DoNotIndex{\number, \onecolumn, \or, \overfullrule}
% \DoNotIndex{\pagebreak, \parbox, \penalty, \phantom, \raggedbottom, \raggedleft}
% \DoNotIndex{\relax, \renewcommand, \reversemarginpar}
% \DoNotIndex{\rightmargin, \rule, \setbox, \setcounter}
% \DoNotIndex{\setlength, \settowidth, \strut, \svtnsfb}
% \DoNotIndex{\thepage, \thispagestyle, \triangleright}
% \DoNotIndex{\underline, \vadjust, \vbadness, \vbox, \verb, \vfil}
% \DoNotIndex{\vspace, \wd, \year}
% \DoNotIndex{\arg}
% \DoNotIndex{\begingroup, \bottomfraction}
% \DoNotIndex{\CodelineIndex, \columnsep, \csname}
% \DoNotIndex{\DisableCrossrefs, \DocInput, \documentstyle, \dp}
% \DoNotIndex{\empty, \EnableCrossrefs, \endcsname, \endgroup}
% \DoNotIndex{\evensidemargin, \exhyphenpenalty}
% \DoNotIndex{\framebox}
% \DoNotIndex{\headsep, \ht, \hyphenpenalty}
% \DoNotIndex{\ifmmode, \ifundefined, \it}
% \DoNotIndex{\leftarrow, \leftskip}
% \DoNotIndex{\makeatletter, \makeatother, \makebox, \marginparwidth}
% \DoNotIndex{\newbox}
% \DoNotIndex{\oddsidemargin, \OnlyDescription}
% \DoNotIndex{\parfillskip, \parindent, \parshape, \parskip, \pretolerance}
% \DoNotIndex{\raise, \RecordChanges}
% \DoNotIndex{\textheight, \textwidth, \tolerance, \topmargin, \typeout}
% \DoNotIndex{\vrule, \vtop}% \DoNotIndex{\bf, \tt, \par, \smallskip, \stepcounter}
%
% \pFonts{\itshape}{}{} ^^A Variablen werden als italics ausgegeben
%
% \IndexPrologue{\section*{Index} \ifnum\language=\languageNGerman
% Die kursiven Zahlen bezeichnen die Seite,
% auf der der jeweilige Eintrag beschrieben ist, unterstrichene Zahlen
% verweisen auf seine Definition; alle anderen Zahlen geben Stellen an,
% an denen der Eintrag auftritt.
% \else
% The italic numbers mark the page certain entries are described on.
% Underlined numbers refer to its definition. All other numbers declare
% positions, where the entry occurs.
% \fi}
% ^^A \setlength{\IndexMin}{0.3\textheight}
%
% ^^A \iflanguage{}{} ist f"ur gro"se Textbl"ocke nicht nutzbar (stack
% ^^A overflow), daher durchgehend die Konstruktion
% ^^A \ifnum\language=\languageNGerman
% ^^A <deutscher Text>
% ^^A \else
% ^^A <englischer Text>
% ^^A \fi
%
% \GlossaryPrologue{\section*{\ifnum\language=\languageNGerman 
% Revisionsgeschichte
% \else 
% History\fi}}
%
% \title{\StrukTeXSty\thanks{\ifnum\language=\languageNGerman%
%           Diese Datei hat die Versionsnummer \fileversion, wurde zuletzt
%           bearbeitet am \filedate, und die Dokumentation datiert vom
%           \docdate.
% \else
%          This file has the version number \fileversion. It has been worked 
%          at at last on \filedate{} and the documentation has been dated 
%          on \docdate.
% \fi}
%        }
% \author{\ifnum\language=\languageNGerman
%         Jobst Hoffmann\\
%         Fachhochschule Aachen, Abt. J"ulich\\
%         Ginsterweg 1\\
%         52428 J"ulich\\
%         Bundesrepublik Deutschland
% \else Jobst Hoffmann\\
%         University of Applied Sciences Aachen, Abt. J\"ulich\\
%         Ginsterweg 1\\
%         52428 J\"ulich\\
%         Federal Republic of Germany
% \fi}
% \date{\ifnum\language=\languageNGerman gedruckt am \else printed on \fi \today}
%
% ^^A\markboth{\ifnum\language=\languageNGerman \LaTeX\ Stil-Option struktex, 
% ^^A                            Version \fileversion\ vom \filedate
% ^^A          \else \LaTeX\ styleoption struktex, 
% ^^A                            version \fileversion\ from \filedate
% ^^A          \fi}
% ^^A         {\ifnum\language=\languageNGerman \LaTeX\ Stil-Option struktex, 
% ^^A                            Version \fileversion\ vom \filedate
% ^^A          \else \LaTeX\ styleoption struktex, 
% ^^A                            version \fileversion\ from \filedate
% ^^A          \fi}
%
% \maketitle
%
% \ifnum\language=\languageNGerman%
% \begin{abstract}
% Dieser Artikel beschreibt den Einsatz und die Implementation der
% \LaTeX-\foreign{package} \StrukTeXSty\ zum Setzen von Struktogrammen nach
% Nassi-Shneidermann.
% \end{abstract}
% \else
% \begin{abstract}
% This article describes the use and implementation of
% \LaTeX-\foreign{package} \StrukTeXSty\ for structured box charts
% (Nassi-Shneidermann charts).
% \end{abstract}
% \fi
%
% \newif\ifmulticols
% \IfFileExists{multicol.sty}{\multicolstrue}{}
%
% \ifmulticols
% \addtocontents{toc}{\protect\begin{multicols}{2}}
% \fi
%
% {\parskip 0pt                ^^A We have to reset \parskip
%                              ^^A (bug in \LaTeX)
% \tableofcontents
% }
%
% \ifnum\language=\languageNGerman
% \else
%
% \section{License}
% This package is copyright c 1995 -- 2004 by:
%      Jobst Hoffmann, c/o University of Applied Sciences Aachen
%      Aaachen, Germany
%      E-Mail: j.hoffmann \_at\_ fh-aachen.de
%    This program can be redistributed and/or modified under the terms of the LaTeX
% Project Public License, distributed from CTAN archives as macros/latex/base/lppl.txt;
% either version 1 of the License, or (at your option) any later version.
% \fi
%
% \ifnum\language=\languageNGerman
% \section{Vorwort}
% \changes{v8.0b}{04/07/14}{Hinweis auf \textsf{pict2e.sty}}
% \changes{v8.0b}{04/07/14}{Entwicklungsgeschichte korrigiert und erweitert}
% Mit dem hier beschriebenen Makropaket ist es m"oglich, Struktogramme
% mit \LaTeX\ zu zeichnen. Das Makropaket wird im folgenden immer \StrukTeX\
% genannt. Es ist in der Lage, die wichtigsten Elemente eines Struktogrammes
% wie \zB\ Verarbeitungsbl"ocke, Schleifenkonstrukte, Sinnbilder f"ur
% Alternativen usw.\ zu generieren. Die Struktogramme werden mit Hilfe der
% Picture-Umgebung von \LaTeX\ erzeugt.
% \else
% \section{Preface}
% It is possible to draw structured box charts by this package of macros 
% which is described herewith. Through this article the package will be 
% always called \StrukTeX\. It can generate the most important elements of a 
% structured box chart like processing blocks, loops, mapping conventions for 
% alternatives etc.
% \fi
%
% \ifnum\language=\languageNGerman
% Ab Version 4.1a werden die mathematischen Symbole von \AmSTeX\ geladen,
% die den
% mathematischen Zeichensatz erweitern und andere Darstellungen von
% Mengensymbolen (etwa $\nat$, $\integer$ und $\real$ f"ur die nat"urlichen,
% ganzen und reellen Zahlen) erm"oglichen.
% Insbesondere das Zeichen f"ur die leere Menge ($\emptyset$) ist in der
% Darstellung auff"alliger als das standardm"a"sige Zeichen 
% ("`$\mathchar"023B$"')
% und somit besser f"ur die Darstellung von Struktogrammen geeignet.
% \else
% Since version 4.1a the mathematical symbols are loaded by \AmSTeX\.
% They extend the mathematical character set and make other representations
% of symbols sets (like $\nat$, $\integer$ and $\real$ for the natural, the whole
% and the real numbers) possible.
% Especially the symbol for the emptyset ($\emptyset$) has a more outstanding
% representation than the standard symbol ("`$\mathchar"023B$"'). Therefore it
% is the better representation in structured box charts.
% \fi
%
% \ifnum\language=\languageNGerman
% Weiterhin ist aus dem \textsf{oz.sty} die Idee "ubernommen,
% Variablennamen in \foreign{italics} zu setzen, ohne dass die teilweise
% unsch"onen Zwischenr"aume erzeugt werden.
% \else
% Furthermore the idea to set names of variables in \foreign{italics}
% without generating the partly unpleasant distances is taken over from
% \textsf{oz.sty}.
% \fi
%
% \ifnum\language=\languageNGerman
% Die Entwicklung dieses Makropaketes ist noch nicht abgeschlossen.
% Es war geplant, die Struktogramme unter dem Einsatz des Makros aus
% \textsf{emlines2.sty} zu zeichnen, um die durch \LaTeX\ gegebenen
% Einschr"ankungen -- es gibt nur vordefinierte Steigungen --
% aufzuheben. Dies ist -- f"ur das \cs{ifthenelse} mit den
% Versionen 4.1a und 4.1b, f"ur das \cs{switch} mit der Version 4.2a --
% erledigt, nicht jedoch f"ur Systeme, die die
% entsprechenden |\special{|\dots|}|-Befehle nicht unterst"utzen.
% Erreicht werden kann dies jedoch durch Einsatz entsprechender Makros
% aus dem \textsf{curves.sty}. Seit der Version 8.0a wird das Paket
% \textsf{pict2e.sty} unterst"utzt, das mittels der "ublichen Treiber die von
% der |picture|-Umgebung bekannten Beschr"ankungen auf nur wenige Steigungen
% im wesentlichen aufhebt, so dass sich die Benutzung der entsprechenden
% Option (s.u.) dauerhaft empfiehlt.
% \else
% The development of this macro package is still not finished.
% It was planned to draw the structured box charts by using the macros of
% \textsf{emlines2.sty} for eliminating the constraints given by \LaTeX\.
% -- There are only predefined gradients. -- This is done for the \cs{ifthenelse}
% in the versions 4.1a and 4.1b and for \cs{switch} in the version 4.2a,
% but not for the systems, which do not support the corresponding
% |\special{|\dots|}|-commands. Nevertheless it can be attained by using the
% corresponding macros of \textsf{curves.sty}. Since version 8.0a the
% package \textsf{pict2e} is supported. This package eliminates the above
% mentioned constraints by using the common drivers, so it is recommended
% to use the respective (see below) option permanently.
% \fi
%
% \ifnum\language=\languageNGerman
% Ebenso ist es geplant, Struktogramme um Kommentarbl"ocke zu erweitern,
% wie sie in dem Buch von Futschek (\cite{Futschek:Programmentwicklung})
% eingesetzt werden. Dieses ist ebenfalls mit der Version 8.0a realisiert
% worden. 
% \else
% Just so it is planned to extend structured box charts by comments
% as they are used in the book of Futschek
% (\cite{Futschek:Programmentwicklung}). This is also implemented in
% version 8.0a
% \fi
%
% \ifnum\language=\languageNGerman
% Weitere Zukunftspl"ane sind:
% \else
% Further plans for future are:
% \fi
%
% \begin{enumerate}
%
% \item \ifnum\language=\languageNGerman
% Ein \cs{otherwise}-Zweig beim \cs{switch} (abgeschlossen durch die
% Version 4.2a).
% \else
% An \cs{otherwise}-branch at \cs{switch} (done in version 4.2a).
% \fi
%
% \item \ifnum\language=\languageNGerman
% Die Neuimplementation der |declaration|-Umgebung mittels der
% |list|-Umgebung gem"a"s
% \cite[Abs. 3.3.4]{GoossensMittelbachSamarin:Companion} (abgeschlossen mit
% der Version 4.5a).
% \else
% The reimplementation of the |declaration|-environment through the
% |list|-environment by
% \cite[Abs. 3.3.4]{GoossensMittelbachSamarin:Companion} (done in version 4.5a).
% \fi
%
% \item \ifnum\language=\languageNGerman
% Die Anpassung an \LaTeXe\ im Sinne eines Packages
% (abgeschlossen durch die Version 4.0a).
% \else
% The adaption to \LaTeXe\ in the sense of packages
% (done in version 4.0a)
% \fi
%
% \item \ifnum\language=\languageNGerman
% Die Verbesserung der Dokumentation, um Teile des Algorithmus
% verst"andlicher zu machen.
% \else
% The improvement of documentation in order to make parts of the
% algorithm more understandable.
% \fi
%
% \item \ifnum\language=\languageNGerman
% Die Unabh"angigkeit des \StrukTeXSty\ von anderen
% \textsf{.sty}-Dateien wie etwa dem
% \textsf{JHfMakro.sty} (abgeschlossen mit der Version 4.5a).
% \else
% The independence of \StrukTeXSty\ of other \textsf{.sty}-files
% like e.g. \textsf{JHfMakro.sty} (done in version 4.5a).
% \fi
%
% \item \ifnum\language=\languageNGerman
% die vollst"andige Implementation der Makros \cs{pVar},
% \cs{pKey}, \cs{pFonts}, \cs{pTrue}, \cs{pFalse} und \cs{pBoolValue}
% (erledigt vor Version 7.0),
% \changes{v4.5a}{96/03/14}{Umbenenneungen: `sVar $\rightarrow$ `pVar, \ldots}
% \changes{v4.3a}{96/01/26}{Variable `sBoolValue ersetzt `sLVal}
% \else
% The complete implementation of the macros \cs{pVar}, \cs{pKey}, \cs{pFonts},
% \cs{pTrue}, \cs{pFalse} and \cs{pBoolValue} (done before version 7.0),
% \changes{v4.5a}{96/03/14}{redesignation: `sVar $\rightarrow$ `pVar, \ldots}
% \changes{v4.3a}{96/01/26}{variable `sBoolValue replaces `sLVal}
% \fi
%
% \item \ifnum\language=\languageNGerman
% die vollst"andige Internalisierung von Kommandos, die nur in der
% Umgebung |struktogramm| Sinn machen. Internalisierung bedeutet, dass
% diese Kommandos nur innerhalb der Umgebung definiert sind. Dies hat den
% Zweck, das Paket mit anderen Paketen vertr"aglicher zu gestalten, etwa
% mit dem \textsf{ifthenelse.sty}. Begonnen
% wurde die Internalisierung mit der Version 4.4a.
% \changes{v4.4a}{96/02/29}{Kommando `ifthenelse internalisiert}
% \else
% The complete internalization of commands, which only make sense
% in the environment |struktogramm|. Internalization means, that these
% commands are only defined in this environment. This is for compatibility
% of this package with other packages, e.g. with \textsf{ifthenelse.sty}.
% The internalization has been started in version 4.4a.
% \changes{v4.4a}{96/02/29}{command `ifthenelse internalisated}
% \fi
%
% \item \ifnum\language=\languageNGerman
% Die Unabh"angigkeit der Dokumentation von anderen
% \textsf{.sty}-Dateien wie etwa dem
% \textsf{JHfMakro.sty} (abgeschlossen mit der Version 5.0).
% \else
% The independence of the documentation of other \textsf{.sty}-files like
% \textsf{JHfMakro.sty} (done in version 5.0).
% \fi
%
% \item \ifnum\language=\languageNGerman
% Eine alternative Darstellung der Deklarationen, wie sie von
% Rico Bolz vorgeschlagen wurde
% \else
% an alternative representation of declarations as proposed by Rico Bolz
% \fi
%
% \item \ifnum\language=\languageNGerman
% Wiedereinf"uhrung der |make|-Ziele |dist-src| |dist-tar| und |dist-zip|.
% \else
% Reintroduction of the |make|-targets |dist-src| |dist-tar| and 
% |dist-zip|.
% \fi
%
% \end{enumerate}
%
% \ifnum\language=\languageNGerman
% Der derzeitige Stand der Implementierung ist an entsprechender Stelle
% vermerkt.
% \else
% The current state of the implementation is noted at suitable points.
% \fi
%
%
% \section{\ifnum\language=\languageNGerman%
%   Hinweise zur Pflege und Installation sowie die Treiberdatei zur
%   Erzeugung dieser Dokumentation%
%   \else%
%   Hints for maintenance and installation as well as driver file creating
%   of this documentation%
%   \fi}
%
% \ifnum\language=\languageNGerman
% \changes{v4.5e}{97/04/26}{Neue .sty-Datei strukdoc.sty eingef"uhrt}
% \changes{v1.5}{92/01/07}{StrukTeX Makros nun als .sty-Datei, J. Hoffmann}
% \changes{v2.0}{92/01/17}{Erweitert um `exit, `forever und `foreverend, D. Rieger}
% \changes{v2.1}{92/01/07}{`exit modifiziert, J. Hoffmann}
% \changes{v2.2}{93/09/08}{Beschreibung von Variablen eingef"uhrt, J. Hoffmann}
% \changes{v2.2a}{93/09/09}{Beschreibung von Variablen verbessert, J. Hoffmann}
% \else
% \changes{v4.5e}{97/04/26}{new .sty-File strukdoc.sty introduced}
% \changes{v1.5}{92/01/07}{StrukTeX macros now as .sty-File, J. Hoffmann}
% \changes{v2.0}{92/01/17}{extended by `exit, `forever and `foreverend, D. Rieger}
% \changes{v2.1}{92/01/07}{`exit modified, J. Hoffmann}
% \changes{v2.2}{93/09/08}{description of variables introduced, J. Hoffmann}
% \changes{v2.2a}{93/09/09}{description of variables improved, J. Hoffmann}
% \fi
%
% \ifnum\language=\languageNGerman
% Das Paket, zu dem der  \StrukTeXSty\ geh"ort, besteht aus
% insgesamt sechs Dateien:
% \begin{quote}
% \texttt{LIESMICH}, \\
% \texttt{README}, \\
% \texttt{struktex.ins}, \\
% \texttt{struktex.dtx}, \\
% \texttt{struktex.de.pdf} und \\
% \texttt{struktex.en.pdf}.
% \end{quote}
% Um daraus einerseits die Dokumentation, andererseits die \textsf{.sty}-Datei
% zu erzeugen, muss folgenderma"sen vorgegangen werden:
% \else
% The package \StrukTeXSty\ is belonging to consists of altogether two files:
% \begin{quote}
% \texttt{LIESMICH}, \\
% \texttt{README}, \\
% \texttt{struktex.ins}, \\
% \texttt{struktex.dtx}, \\
% \texttt{struktex.de.pdf} und \\
% \texttt{struktex.en.pdf}.
% \end{quote}
% In order to generate on the one hand the documentation and on the other hand the
% \textsf{.sty}-file one has to proceed as follows:
% \fi
%
% \ifnum\language=\languageNGerman
% Zun"achst wird mit \zB\
% \begin{quote}\tt
% latex  struktex.ins
% \end{quote}
% die Datei \textsf{struktex.ins} formatiert.
% Dieser Formatierungslauf erzeugt elf weitere Dateien. Dies sind zun"achst
% die drei \textsf{.sty}-Dateien \textsf{struktex.sty},
% \textsf{struktxf.sty} und
% \textsf{struktxp.sty}, die beim Einsatz des \StrukTeXSty\ ben"otigt werden;
% weiterhin sind es die beiden Dateien \textsf{struktex\_test\_0.nss}
% und \textsf{strukdoc.sty}, die zur
% Erzeugung der hier vorliegenden Dokumentation ben"otigt werden. Dazu kommen
% drei Testdateien \textsf{struktex\_test\_\textit{i}.nss},
% \(i=1(2)3\), sowie die beiden Dateien \textsf{struktex.makemake} und
% \textsf{struktex.mk} (vgl. Abschnitt~\ref{sec:Makefile}).
% 
% Die Dokumentation wird wie "ublich durch
% \begin{quote}\tt
% latex struktex.dtx \\
% latex struktex.dtx \\
% makeindex -s gind.ist struktex.idx \\
% latex struktex.dtx
% \end{quote}
% erzeugt.\footnote{Die Erzeugung der Dokumentation kann durch den Einsatz
% einer \texttt{make}-Datei vereinfacht werden, vgl. 
% Abschnitt~\ref{sec:Makefile}} Das Ergebnis dieses Formatierlaufes ist die
% Dokumentation
% in Form einer \textsf{.dvi}-Datei, die in gewohnter Weise weiterbearbeitet
% werden kann. Weitere Informationen zum Arbeiten mit der integrierten
% Dokumentation findet man in \cite{FM:TheDocAndShortvrbPackages-V2.0} und
% \cite{MittelbachDuchierBraams:DocStrip-V2.5b}.
% Die Dateien \textsf{tst\_strf.tex}, \textsf{tst\_strp.tex} schlie"slich
% sind Dateien zum Austesten
% der hier beschriebenen Makros.
% \else
% First the file \textsf{struktex.ins} will be formatted e.g.\ with
% \begin{quote}\tt
% tex \&latexg struktex.ins
% \end{quote}.
% This formatting run generates eleven further files. These are first of all the
% three \textsf{.sty}-files \textsf{struktex.sty}, \textsf{struktxf.sty} and
% \textsf{struktxp.sty}, that are used for \StrukTeXSty\.
% Furthermore these are the two files \textsf{struktex\_test\_0.nss} and 
% \textsf{strukdoc.sty},
% which are used for the generation of the hereby presented documentation.
% Then there are three test files \textsf{struktex\_test\_\textit{i}.nss},
% \(i=1(2)3\) as well as the files \textsf{struktex.makemake} and
% \textsf{struktex.mk} (see section~\ref{sec:Makefile}).
% 
% The common procedure to produce the documentation is
% \begin{quote}\tt
% latex struktex.dtx \\
% latex struktex.dtx \\
% makeindex -s gind.ist struktex.idx \\
% latex struktex.dtx
% \end{quote}
% The result of this formatting run is the documentation in form of a
% \textsf{.dvi}-file, that can be manipulated the normal way. Further 
% informations
% about the work with the integrated documentation one can find in
% \cite{FM:TheDocAndShortvrbPackages-V2.0} and
% \cite{MittelbachDuchierBraams:DocStrip-V2.5b}.\footnote{Generating the
% documentation is much easier with the \texttt{make} utility, see 
% section~\ref{sec:Makefile}.}
% Finally there are the files \textsf{tst\_strf.tex},
% \textsf{tst\_strp.tex} for testing
% purposes of the macros described herewith.
% \fi
%
% \ifnum\language=\languageNGerman
% Die Installation wird abgeschlossen, indem die Datei
% \texttt{struktex.sty} in ein Verzeichnis verschoben wird, das von \TeX{}
% gefunden werden kann, das ist in einer
% TDS-konformen Installation typischerweise
% \texttt{.../tex/latex/struktex/}, die Dokumentation wird analog in das
% Verzeichnis \texttt{.../doc/latex/struktex/} verschoben.\footnote{Wenn
% die automatische Installation (vgl. Abschnitt \ref{sec:Makefile})
% vorgenommen wird, erfolgt diese in die
% Verzeichnisse \texttt{.../doc/latex/jhf/struktex/},
% \texttt{.../tex/latex/jhf/struktex/} und 
% \texttt{.../source/latex/jhf/struktex/}.}
% \else
% To finish the installation, the file \texttt{struktex.sty} should be
% moved to a directory, where \TeX{} can find it, in a TDS conform
% installation this is \texttt{.../tex/latex/struktex/} typical,
% analogously the documentation has to be moved to
% \texttt{.../doc/latex/struktex/}. If the installation process is done
% automatically (see section \ref{sec:Makefile}), the target directories are 
% \texttt{.../doc/latex/jhf/struktex/},
% \texttt{.../tex/latex/jhf/struktex/} and 
% \texttt{.../source/latex/jhf/struktex/} resp.
% \fi
%
% \ifnum\language=\languageNGerman
% Sollen "Anderungen durchgef"uhrt werden, so sollten neben diesen
% die Werte von \cs{fileversion}, \cs{filedate} und \cs{docdate} bei Bedarf
% entsprechend ge"andert werden. Weiterhin sollte darauf geachtet werden,
% dass die Revisionsgeschichte durch Eintr"age von
% \begin{quote}
% |\changes{|\meta{Version}|}{|\meta{Datum}|}{|\meta{Kommentar}|}|
% \end{quote}
% weitergeschrieben wird.
% \meta{Version} gibt die Versionsnummer an, unter der die jeweilige
% "Anderung durchgef"uhrt wurde,
% \meta{Datum} gibt das Datum in der Form |yy/mm/dd| an und
% \meta{Kommentar} erl"autert die jeweilige "Anderung.
% \meta{Kommentar} darf nicht mehr als 64 Zeichen enthalten.
% Daher sollten Kommandos nicht mit dem "`$\backslash$"'
% (\foreign{backslash}) eingeleitet werden, sondern  mit dem "``"'
% (\foreign{accent}).
% \else
% If one wants to carry out changes, the values of \cs{fileversion}, \cs{filedate}
% and \cs{docdate} should be also changed if needed. Furthermore one should
% take care that the audit report will be carried on by items in the form of
% \begin{quote}
% |\changes{|\meta{version}|}{|\meta{date}|}{|\meta{comment}|}|
% \end{quote}
% The version number of the particular change is given by \meta{version}.
% The date is given by \meta{date} and has the form |yy/mm/dd|.
% \meta{comment} describes the particular change. It need not contain
% more than 64 characters.
% Therefore commands should'nt begin with "`$\backslash$"' (\foreign{backslash}),
% but with the "``"' (\foreign{accent}).
% \fi
%
% \ifnum\language=\languageNGerman
% \changes{v8.0b}{04/07/14}{Umstellung der Sprachverwaltung auf babel}
% Die n"achsten Anweisungen bilden den Treiber f"ur die hier vorliegende
% Dokumentation.
% \else
% The following commands make up the driver of the documentation lieing before.
% \fi
% \iffalse
%<*driver>
% \fi
%    \begin{macrocode}
\documentclass[a4paper, english, ngerman]{ltxdoc} %swap english and ngerman
                                % for producing an english version of this text

\usepackage{babel}                   % for switching the documentation language
\usepackage{strukdoc}                % the style-file for formatting this
                                     % documentation
\usepackage[pict2e, % <--------------- to produce finer results
                                     % visible under xdvi, alternatives are
                                     % curves or emlines2 (visible only under 
                                     % ghostscript), leave out if not 
                                     % available
    verification]
    {struktex}
\usepackage{url}
\GetFileInfo{struktex.sty}

\EnableCrossrefs
%\DisableCrossrefs   % say \DisableCrossrefs if index is ready

%\RecordChanges      % say \RecordChanges to gather update information

%\CodelineIndex      % say \CodelineIndex to index entry code by line number

\OnlyDescription    % say \OnlyDescription to omit the implementation details

\MakeShortVerb{\|}   % |\foo| acts like \verb+\foo+

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% to avoid underfull ... messages while formatting two/three columns
\hbadness=10000 \vbadness=10000

\def\languageNGerman{3}

\begin{document}
\makeatletter
\@ifundefined{selectlanguageEnglish}{}{\selectlanguage{english}}
\makeatother
\DocInput{struktex.dtx}
\end{document}
%    \end{macrocode}
% \iffalse
%</driver>
% \fi
%
% \section{\ifnum\language=\languageNGerman Die Benutzungsschnittstelle
%             \else The User Interface\label{interface}
%             \fi}
% \label{Schnittstelle}
%
% \changes{v4.3a}{96/01/26}{Dokumentation verbessert und korrigiert}
% \ifnum\language=\languageNGerman
% Der \StrukTeXSty\ wird wie jede andere |.sty|-Datei als \foreign{package} in
% ein \LaTeX-Dokument eingebunden:
% \begin{quote}
% |\usepackage[|\meta{Optionen}|]{struktex}|
% \end{quote}
% \else
% The \StrukTeXSty\ will be included in a LaTeX-document like every other
% |.sty|-file by \foreign{package}:
% \begin{quote}
% |\usepackage[|\meta{options}|{struktex}|
% \end{quote}
% \fi
%
% \ifnum\language=\languageNGerman
% Die folgenden Optionen stehen zur Verf"ugung:
% \begin{enumerate}
%   \item |emlines|, |curves| oder |pict2e|:
%
%     Durch Angabe einer der drei Optionen ist es m"oglich, beliebige
%     Steigungen in Struktogrammen zu zeichnen. Erstere Option ist
%     sinnvoll, wenn mit dem em\TeX-Paket von Eberhard Mattes gearbeitet
%     wird (DOS oder OS/2), ansonsten wird der Einsatz von |pict2e|
%     empfohlen. Der Einsatz des Paketes \textsf{curves.sty} (Ian
%     Maclaine-cross), das das Zeichnen von Geraden beliebiger Steigungen
%     durch das Setzen vieler einzelner Punkte erm"oglicht, ist durch das
%     Erscheinen des Paketes \textsf{pict2e.sty} (Hubert G"a"slein und Rolf
%     Niepraschk) im Prinzip obsolet, aus Kompatibilit"atsgr"unden wird er
%     weiter unterst"utzt. Durch die Angabe einer der genannten Option wird
%     das jeweilige Paket (\textsf{emlines2.sty}, \textsf{curves.sty} bzw.
%     \textsf{pict2e.sty}) automatisch geladen.
%   \item |verification|:
%
%     Nur wenn diese Option gesetzt ist, steht \cs{assert} als Kommando zur
%     Verf"ugung.
%   \item |nofiller|:
%
%     Setzen dieser Option l"asst jeden Freiraum leer. Ansonsten wird
%     Freiraum in Alternativen als \(\emptyset\) markiert.
%   \item |draft|, |final|:
%
%     Diese Optionen dienen in "ublicher Weise dazu, den Entwurf
%     beziehungsweise die endg"ultige Fassung zu kennzeichnen (vgl.
%     |\sProofOn|/|\sProofOff|). Im Entwurfsmodus werden die vier Eckpunkte
%     eines Struktogramms in der vom Benutzer vorgegebenen Gr"o"se
%     ausgegeben, diese Markierung f"allt in der endg"ultigen Fassung weg.
% \end{enumerate}
% Nach dem Laden der |.sty|-Datei stehen verschiedene Kommandos und Umgebungen
% zur Verf"ugung, die das Zeichnen der Struktogramme erm"oglichen.%
% \else%
% The following options are available:
% \begin{enumerate}
%   \item |emlines|, |curves|, or |pict2e|:
%
%     If you set one of these options, any ascent can be drawn in the
%     structured box chart. You should use |emlines|, if you are working
%     with the em\TeX-package for DOS or OS/2 by E. Mattes, else you should
%     use |pict2e|; |curves| is included just for compatibility. In all
%     cases the required packages (\textsf{emline2.sty},
%     \textsf{curves.sty}, or \textsf{pict2e} resp.) will be loaded
%     automatically.
%   \item |verification|:
%
%     Only if this option is set, the command \cs{assert} is available.
%   \item |nofiller|:
%
%     Setting this option prohibits setting of \(\emptyset\) in alternatives.
%   \item |draft|, |final|:
%
%     These options serve as usual to diffentiate between the draft and the
%     final version of a structured box chart (see |\sProofOn|). While in
%     the draft mode the user given size of the chart is denoted by the
%     four bullets, the final version leaves out these markers.
% \end{enumerate}
% After loading the |.sty|-file there are different commands and environments,
% which enable the draw of structured box charts.
% \fi
%
% \DescribeMacro{\StrukTeX}
% \ifnum\language=\languageNGerman
% Zun"achst sei der Befehl erw"ahnt, der das Logo \StrukTeX\ erzeugt:
% \else
% First of all the logo \StrukTeX\ producing command should be mentioned:
% \fi
% \begin{quote}
% \verb-\StrukTeX-
% \end{quote}
%
% \ifnum\language=\languageNGerman
% Damit kann in Dokumentationen auf die hier vorliegende Stil-Option
% verwiesen werden.
% \else
% So in documentations one can refer to the style option given hereby.
% \fi
%
% \subsection{\ifnum\language=\languageNGerman Spezielle Zeichen und Textdarstellung
%                 \else Specific Characters and Text Representation
%                 \fi}
%
% \DescribeMacro{\nat}
% \DescribeMacro{\integer}
% \DescribeMacro{\real}
% \DescribeMacro{\complex}
% \DescribeMacro{\emptyset}
% \ifnum\language=\languageNGerman
% Wegen ihres h"aufigen Auftretens sind die Mengen der nat"urlichen, ganzen,
% reellen und komplexen Zahlen ($\nat$, $\integer$, $\real$ und $\complex$)
% im Mathematik-Modus "uber
% die folgenden Makros erreichbar: \cs{nat}, \cs{integer}, \cs{real} und \cs{complex}.
% Ebenso ist das mit \cs{emptyset} erzeugte
% "`$\emptyset$"' als Zeichen f"ur die leere Anweisung auff"alliger als
% das standardm"a"sige Zeichen "`$\mathchar"023B$"'
% Andere Mengensymbole wie $\mathbb L$ (f"ur L"osungsmenge) sind "uber
% |$\mathbb L$| zu
% erzeugen.
% \else
% Since sets of natural, whole, real and complex numbers ($\nat$, $\integer$,
% $\real$ and $\complex$) occur often in the Mathematics Mode they can be
% reached by the macros \cs{nat}, \cs{integer}, \cs{real} and \cs{complex}.
% Similarly "`$\emptyset$"', which is generated by \cs{emptyset}, is the more
% remarkable symbol for the empty statement than the standard symbol
% "`$\mathchar"023B$"'.
% Other set symbols like $\mathbb L$ (for solution space) have to be
% generated by |$\mathbb L$|.
% \fi
%
% \DescribeMacro{\MathItalics}
% \DescribeMacro{\MathNormal}
% \ifnum\language=\languageNGerman
% Mit diesen beiden Makros kann die Darstellung von Variablennamen beeinflusst
% werden:
% \else
% One can influence the descriptions of variable names by these macros.
% \fi
% \ifnum\language=\languageNGerman
% \begin{example}
% \MathNormal
% \[
% NeuerWert = AlterWert + Korrektur
% \]
% \end{example}
% \ifnum\language=\languageNGerman und\else and\fi
% \begin{example}
% \MathItalics
% \[
% NeuerWert = AlterWert + Korrektur
% \]
% \end{example}
% \else
% \begin{example}
% \MathNormal
% \[
% NewValue = OldValue + Correction
% \]
% \end{example}
% und
% \begin{example}
% \MathItalics
% \[
% NewValue = OldValue + Correction
% \]
% \end{example}
% \fi
%
% \subsection{\ifnum\language=\languageNGerman Makros zur Darstellung von Variablen, Schl"usselw"ortern
% und anderen programmierspezifischen Details
% \else Macros for Representation of Variables, Keywords and other
% Specific Details of Programming
% \fi}
%
% \DescribeMacro{\pVariable}
% \DescribeMacro{\pVar}
% \ifnum\language=\languageNGerman
% \changes{v2.0n}{94/03/31}{Dokumentation "uberarbeitet}
% \else
% \changes{v2.0n}{94/03/31}{documentation changed}
% \fi
% \DescribeMacro{\pKeyword}
% \DescribeMacro{\pKey}
% \DescribeMacro{\pComment}
% \ifnum\language=\languageNGerman
% Mit |\pVariable{|\meta{Variablenname}|}| wird ein Variablenname gesetzt.
% \meta{Variablenname} ist dabei ein Bezeichner eine Variable, wobei der
% Unterstrich "`|_|"', das kaufm"annische Und "`|&|"' und das Dach "`|^|"'
% als Teile des Variablennamens erlaubt sind:
% \else
% Variable names are set by |\pVariable{|\meta{VariableName}|}|.
% There \meta{VariableName} is an identifier of a variable, whereby the underline
% "`|_|"', the commercial and "`|&|"' and the hat "`|^|"' are allowed to be parts
% of variables:
% \fi
% \ifnum\language=\languageNGerman
% \pFonts{\ttfamily}{\ttfamily\bfseries}{\ttfamily\slshape}
% \begin{example}\obeylines
% \renewcommand{\pLanguage}{C}
% \pVariable{cEineNormaleVariable}
% \pVariable{c_eine_normale_Variable}
% \pVariable{&iAdresseEinerVariablen}
% \renewcommand{\pLanguage}{Pascal}
% \pVariable{zZeigerAufEineVariable^.sInhalt}
% \end{example}
% \else
% \pFonts{\ttfamily}{\ttfamily\bfseries}{\ttfamily\slshape}
%  \begin{example}\obeylines
% \pVariable{cANormalVariable}
% \pVariable{c_a_normal_variable}
% \pVariable{&iAddressOfAVariable}
% \pVariable{pPointerToAVariable^.sContent}
% \end{example}
% \fi
% \ifnum\language=\languageNGerman
% Leerzeichen werden beachtet, so dass ganze Anweisungen geschrieben werden
% k"onnen.
% Es darf als Abk"urzung \cs{pVar} benutzt werden.
% \else
% Blanks are considered such, that whole statements can be written.
% For abbreviation it is allowed to use \cs{pVar}.
% \fi
%
% \ifnum\language=\languageNGerman
% Entsprechend wird mit |\pKeyword{|\meta{Schl"usselwort}|}| ein Schl"usselwort
% gesetzt.
% Dabei ist \meta{Schl"usselwort} ein Schl"usselwort in einer
% Programmiersprache, wobei der Unterstrich "`|_|"' und das
% \foreign{hash}-Zeichen "`|#|"' als Teil des Schl"usselwortes
% erlaubt ist. Damit l"asst sich setzen:
% \else
% A keyword is set by |\pKeyword{|\meta{keyword}|}| respectively.
% There \meta{keyword} is a keyword in a programming language, whereby
% the underline "`|_|"' and the \foreign{hash} symbol "`|#|"' are allowed to be
% parts of keywords. Therewith the following can be set:
% \fi
% \begin{example}\obeylines
% \pKeyword{begin}
% \renewcommand{\pLanguage}{Pascal}
% \pKeyword{program}
% \renewcommand{\pLanguage}{C}
% \pKeyword{#include}
% \end{example}
% \ifnum\language=\languageNGerman
% Auch \cs{pKeyword} darf
% abgek"urzt werden: \cs{pKey}. Damit erzeugt dann der Quelltext
% \else
% \cs{pKeyword} is also allowed to be abbreviated by \cs{pKey}. With that the 
% source code
% \fi
% \begin{verbatimwrite}{struktex.tmp}
% \renewcommand{\pLanguage}{Pascal}
% \pKey{begin} \pExp{iVar := iVar + 1;} \pKey{end}
% \end{verbatimwrite}
% \begin{quote}
% \verbatiminput{struktex.tmp}
% \end{quote}
% \ifnum\language=\languageNGerman
% als Ausgabe dieses Ergebnis:
% \else
% generates the following result as output:
% \fi
% \begin{quote}
% \input{struktex.tmp}
% \end{quote}
%
% \ifnum\language=\languageNGerman
% In "ahnlicher Weise dient \cs{pComment} zur Darstellung von Kommentar.
% Das Argument darf nur Zeichen der \TeX-Kategorie \foreign{letter}
% haben, Zeichen, die einen Kommentar einleiten, m"ussen geschrieben
% werden. \cs{pComment} kann nicht abgek"urzt werden.
% Beispielsweise ergibt
% \else
% In a similar way \cs{pComment} is of representation purposes of comments.
% The argument is only allowed to consist of characters of the
% category \foreign{letter}. Characters, that start a comment, have to be written.
% \cs{pComment} can't be abbreviated. For instance
% \fi
% \begin{verbatimwrite}{struktex.tmp}
% \pExp{a = sqrt(a);} \pComment{// Iteration}
% \end{verbatimwrite}
% \begin{quote}
% \verbatiminput{struktex.tmp}
% \end{quote}
% \ifnum\language=\languageNGerman
% die Zeile
% \else
% results in the line
% \fi
% \begin{quote}
% \input{struktex.tmp}
% \end{quote}
%
% \DescribeMacro{\pTrue}
% \DescribeMacro{\pFalse}
% \ifnum\language=\languageNGerman
% Logische Werte spielen in der Programmierung eine wesentliche Rolle.
% Mit \cs{pTrue} und \cs{pFalse} sind entsprechende Werte vorgegeben:
% \pTrue\ und \pFalse.
% \else
% Boolean values play an importand role in programming. There are given
% adequate values by \cs{pTrue} and \cs{pFalse}: \pTrue\ and \pFalse.
% \fi
%
% \DescribeMacro{\pFonts}
% \DescribeMacro{\pBoolValue}
% \ifnum\language=\languageNGerman
% Der Makro \cs{pFonts} dient der Auswahl von Fonts zur Darstellung von
% Variablen, Schl"usselw"ortern und Kommentar:
% \begin{quote}
% |\pFonts{|\meta{Variablenfont}|}{|\meta{Schl"usselwortfont}|}|%
%     |{|\meta{Kommentarfont}|}|
% \end{quote}
% \else
% The macro \cs{pFonts} is used for the choice of fonts for representation of
% variables, keywords and comments:
% \begin{quote}
% |\pFonts{|\meta{variablefont}|}{|\meta{keywordfont}|}|%
%     |{|\meta{commentfont}|}|
% \end{quote}
% \fi
% \ifnum\language=\languageNGerman
% Vorbesetzt sind die einzelnen Fonts mit
% \begin{itemize}
% \item \meta{Variablenfont} als |\small\sffamily|,
%
% \item \meta{Schl"usselwortfont} als |\small\sffamily\bfseries| und
%
% \item \meta{Kommentarfont} als |\small\sffamily\slshape|.
%
% \end{itemize}
% \else
% The default values for the certain fonts are
% \begin{itemize}
% \item \meta{variablefont} as |\small\sffamily|,
%
% \item \meta{keywordfont} as |\small\sffamily\bfseries| and
%
% \item \meta{commentfont} as |\small\sffamily\slshape|.
%
% \end{itemize}
% \fi
% \ifnum\language=\languageNGerman
% Damit wird die obige Zeile nach
% \else
% With that the above line
% \fi
% \ifnum\language=\languageNGerman
% \begin{verbatimwrite}{struktex.tmp}
% \pFonts{\itshape}{\sffamily\bfseries}{\scshape}
% \pVar{a = }\pKey{sqrt}\pVar{(a);} \pComment{// Iteration}
% \end{verbatimwrite}
% \begin{quote}
% \verbatiminput{struktex.tmp}
% \end{quote}
% zu
% \else
% becomes
% \fi
% \begin{quote}
% \input{struktex.tmp}
% \end{quote}
% \ifnum\language=\languageNGerman 
% \else
% \fi
% \ifnum\language=\languageNGerman
% Entsprechend k"onnen durch den Makro
% \begin{quote}
%   |\sBoolValue{|\meta{Ja-Wert}|}{|\meta{Nein-Wert}|}|
% \end{quote}
% die Werte von \cs{pTrue} und \cs{pFalse} umdefiniert werden. Somit liefern die
% Zeilen
% \begin{verbatimwrite}{struktex.tmp}
% \renewcommand{\pLanguage}{Pascal}
% \sBoolValue{\textit{ja}}{\textit{nein}}
% \(\pFalse = \pKey{not}\ \pTrue\)
% \end{verbatimwrite}
% \else
% Similarly the values of \cs{pTrue} and \cs{pFalse} can be redefined by the macro
% \begin{quote}
%   |\sBoolValue{|\meta{Yes-Value}|}{|\meta{No-Value}|}|
% \end{quote}
% So the lines
% \begin{verbatimwrite}{struktex.tmp}
% \renewcommand{\pLanguage}{Pascal}
% \sBoolValue{\textit{yes}}{\textit{no}}
% \(\pFalse = \pKey{not} \pTrue\)
% \end{verbatimwrite}
% \fi
% \begin{quote}
% \verbatiminput{struktex.tmp}
% \end{quote}
% \ifnum\language=\languageNGerman
% das folgende Ergebnis:
% \else
% result in the following:
% \fi
% \begin{quote}
% \input{struktex.tmp}
% \end{quote}
%
% \DescribeMacro{\sVar}
% \DescribeMacro{\sKey}
% \DescribeMacro{\sTrue}
% \DescribeMacro{\sFalse}
% \ifnum\language=\languageNGerman
% Die Makros \cs{sVar} und \cs{sKey} sind mit den Makros \cs{pVar} und \cs{pKey}
% identisch, sie werden hier nur definiert, um Kompatibilit"at mit
% fr"uheren Versionen des \StrukTeXSty\ zu gew"ahrleisten.
% Dasselbe gilt auch f"ur die Makros \cs{sTrue} und \cs{sFalse}.
% \else
% The macros \cs{sVar} and \cs{sKey} are the same as the macros |pVar| and |pKey|.
% Here they are just described for compatibility reasons with former versions
% of \StrukTeXSty. The same rule shall apply to the macros \cs{sTrue} and 
% \cs{sFalse}.
% \fi
%
% \subsection{\ifnum\language=\languageNGerman Die Makros zur Erzeugung von Struktogrammen
%                    \else The Macros for Generating Structured Box Charts
%                    \fi}
%
% \DescribeEnv{struktogramm}
% \DescribeMacro{\sProofOn}
% \DescribeMacro{\sProofOff}
% \DescribeMacro{\PositionNSS}
% \ifnum\language=\languageNGerman
% Die Umgebung
% \begin{quote}\obeylines
% \envb{struktogramm}\pparg{Breite}{H"ohe}\oarg{"Uberschrift}
% \dots
% \enve{struktogramm}
% \end{quote}
% erzeugt Raum f"ur ein
% neues Struktogramm. Die beiden Parameter
% legen die Breite und die H"ohe des Platzes fest, der f"ur das Struktogramm
% reserviert wird. Die Angaben werden in Millimetern gemacht, wobei der
% aktuelle Wert von \cs{unitlength} keine Rolle spielt.
% Dabei entspricht die Breite der tats"achlichen Breite,
% die tats"achliche H"ohe wird den Erfordernissen angepasst. Stimmt die
% angegebene H"ohe nicht mit den tats"achlichen Erfordernissen "uberein,
% l"auft das Struktogramm in den umgebenden Text hinein oder es bleibt
% Raum frei. Es gibt einen Schalter \cs{sProofOn}, mit dem die angegebene
% Gr"o"se des Struktogramms durch vier Punkte gezeigt wird, um Korrekturen
% einfacher durchf"uhren zu k"onnen. \cs{sProofOff} schaltet diese Hilfe
% entsprechend wieder ab.
% Die "Uberschrift dient zur Identifizierung des Struktogramms,
% wenn man sich von anderer Stelle, etwa aus einem anderen Struktogramm
% heraus auf dieses hier beziehen will.
% \else
% The environment
% \begin{quote}\obeylines
% |\begin{struktogramm}(|\meta{width}|,|\meta{height}|)|\oarg{titel}
% \dots
% |\end{struktogramm}|
% \end{quote}
% generates space for a new box chart. Both the parameters provide the width
% and the height of the place, which is reservated for the structured box chart.
% Lengths etc. are described in millimeters. In doing so the actual
% value of \cs{unitlength} is unimportand.
% At the same time the width corresponds with the real width and the
% real height will be adjusted to the demands. If the given height does'nt match
% with the real demands, the structured box chart reaches into the surrounding
% text or there is empty space respectively. There is a switch \cs{sProofOn},
% with which the stated dimensions of the structured box charts is given by
% four points to make corrections easier. \cs{sProofOff} similarly switches this help
% off.
% The title is for identification of structured box charts, if one wants to refer
% to this from another part, e.g. from a second box chart.
% \fi
%
% \ifnum\language=\languageNGerman
% Die Struktogramm-Umgebung basiert auf der |picture|-Umgebung von
% \LaTeX.
% Die in der |picture|-Umgebung
% gebr"auchliche L"angeneinheit \cs{unitlength} wird bei den Struktogrammen
% nicht benutzt; die L"angeneinheit ist aus technischen Gr"unden auf $1\, mm$
% festgelegt. Weiterhin m"ussen alle L"angenangaben ganzzahlige Werte sein.
% \cs{unitlength} hat zwar nach dem Zeichnen eines Struktogrammes mit
% \StrukTeX\ den gleichen Wert wie vorher, ist aber innerhalb eines
% Struktogrammes umdefiniert und darf dort auch nicht ge"andert werden.
% \else
% The structured box chart environment is based on the |picture| environment of
% \LaTeX.
% The unit of length \cs{unitlength}, which is often used in the |picture| environment,
% is not used in structured box charts. The unit of length is fixed by
% $1\, mm$ for technical reasons. Furthermore all of length specifications have to
% be whole numbers. After drawing a structured box chart by \StrukTeX\
% \cs{unitlength} is of the same quantity as before. But it is redefined within a
% structured box chart and need not be changed there.
% \fi
%
% \DescribeMacro{\assign}
% \ifnum\language=\languageNGerman
% Das Hauptelement eines Struktogramms ist ein Kasten, in dem eine Operation
% beschrieben wird. Ein solcher Kasten wird mit \cs{assign} erzeugt. Die
% Syntax ist
% \begin{quote}
% \cs{assign}\oarg{H"ohe}\marg{Inhalt},
% \end{quote}
% wobei die eckigen Klammern wie "ublich ein optionales Argument
% bezeichnen.  Die Breite und die H"ohe des Kastens werden den
% Erfordernissen gem"a"s automatisch angepasst, man kann aber mittels des
% optionalen Argumentes die H"ohe des Kastens vorgeben.%
% \else%
% The main element of a structured box chart is a box, in which an
% operation is described. Such a box will be assigned by \cs{assign}. The
% syntax is the following:
% \begin{quote}
% \cs{assign}\oarg{height}\marg{content},
% \end{quote}
% where the square brackets name an optional element as usual. The width
% and the height of the box will be adjusted automatically according to
% demands. But one can predefine the height of the box by the optional
% argument.%
% \fi
%
% \ifnum\language=\languageNGerman
% Der \textit{Text} wird normalerweise zentriert in den
% Kasten gesetzt; ist er daf"ur zu lang, so wird ein Paragraph gesetzt.
% \else
% The \textit{text} is normally set centered in the box. If the text is too long for
% that, then a paragraph is set.
% \fi
%
% \ifnum\language=\languageNGerman
% \begin{tExample}
% Ein einfaches Struktogramm wird mit den folgenden Anweisungen erzeugt:
% \begin{verbatimwrite}{struktex.tmp}
% \sProofOn
% \begin{struktogramm}(70,20)[1.\ Versuch]
%     \assign{Quadratwurzel von $\pi$ berechnen und ausgeben}
% \end{struktogramm}
% \sProofOff
% \end{verbatimwrite}
% \begin{quote}
% \verbatiminput{struktex.tmp}
% \end{quote}
% Diese Anweisungen f"uhren zu folgendem Struktogramm, wobei der Anwender
% wie auch bei der zugrundeliegenden |picture|-Umgebung f"ur eine geeignete
% Positionierung zu sorgen hat. Die Positionierung erfolgt in dieser
% Dokumentation im Regelfall mit der |quote|-Umgebung, man kann ein
% Struktogramm aber auch mit der |center|-Umgebung zentrieren.
% Die Breite des Struktogramms ist mit 70mm vorgegeben, die H"ohe mit 12mm.
% Eine Alternative ist durch die |centernss|-Umgebung gegeben,
% die auf Seite \pageref{centernss} beschrieben wird.
% \else
% \begin{tExample}
% A simple structured box chart will be generated by the following instructions:
% \begin{verbatimwrite}{struktex.tmp}
% \sProofOn
% \begin{struktogramm}(70,20)[1.\ trial]
%     \assign{Root of $\pi$, calculation and output}
% \end{struktogramm}
% \sProofOff
% \end{verbatimwrite}
% \begin{quote}
% \verbatiminput{struktex.tmp}
% \end{quote}
% These instructions lead to the following box chart, at which the user has to
% provide an appropriate positioning like in the basing \cs{picture} environment.
% Herewith the positioning is normally done by the |quote| environment. But one can
% also center the structured box chart by the |center| environment.
% The width of the box chart is given by 70mm, the height by 12mm. An alternative
% is given by the |centernss| environment, that is described on page
% \pageref{centernss}
% \fi
%
% \ifnum\language=\languageNGerman
% Gleichzeitig wird die Wirkung von \cs{sProofOn} und \cs{sProffOff} gezeigt,
% wobei die zu gro"se vorgegebene Gr"o"se des Struktogrammes zu beachten ist.
% \else
% At the same time the effect of \cs{sProofOn} and \cs{sProofOff} is shown,
% at which the too large size of structured box chart has to be taken notice of.
% \fi
% \begin{quote}
% \input{struktex.tmp}
% \end{quote}
% \end{tExample}
%
% \ifnum\language=\languageNGerman
% Die Bedeutung des optionalen Argumentes macht das folgende Beispiel deutlich.
% \begin{tExample}
% Die H"ohe des Kastens wird vorgegeben:
% \begin{verbatimwrite}{struktex.tmp}
% \begin{center}
% \begin{struktogramm}(70,20)
%     \assign[20]{Quadratwurzel von $\pi$ berechnen und ausgeben}
% \end{struktogramm}
% \end{center}
% \end{verbatimwrite}
% \begin{quote}
% \verbatiminput{struktex.tmp}
% \end{quote}
% Diese Anweisungen f"uhren zu folgendem Struktogramm, wobei zu beachten
% ist, dass die |struktogramm|-Umgebung mittels einer |center|-Umgebung
% zentriert wurde, wobei die Breite des Struktogramms wiederum mit 70mm
% vorgegeben ist, die H"ohe diesmal aber mit 20mm.
% \else
% The meaning of the optional argument will be made clear by the following
% example:
% \begin{tExample}
% The height of the box is given by:
% \begin{verbatimwrite}{struktex.tmp}
% \begin{center}
% \begin{struktogramm}(70,20)
%     \assign[20]{Root of $\pi$, calculation and output}
% \end{struktogramm}
% \end{center}
% \end{verbatimwrite}
% \begin{quote}
% \verbatiminput{struktex.tmp}
% \end{quote}
% These instructions lead to the following structured box chart. In doing so it is to
% pay attention on the |struktogramm| environment, which has been centered
% by the |center| environment, at which the width of the structured box chart is again
% given by 70mm, but the height by 20mm this time.
% \fi
% \begin{quote}
% \input{struktex.tmp}
% \end{quote}
% \end{tExample}
%
% \DescribeEnv{declaration}
% \ifnum\language=\languageNGerman
% Die |declaration|-Umgebung dient der Beschreibung von Variablen bzw.
% der Beschreibung der Schnittstelle. Ihre
% Syntax ist
% \begin{quote}\obeylines
% \envb{declaration}\oarg{"Uberschrift}
% \dots
% \enve{declaration}
% \end{quote}
% \else
% The |declaration| environment is used for the description of variables or interfaces
% respectively. Its syntax is given by
% \begin{quote}\obeylines
% \envb{declaration}\oarg{titel}
% \dots
% \enve{declaration}
% \end{quote}
% \fi
%
% \DescribeMacro{\declarationtitle}
% \ifnum\language=\languageNGerman
% Die "Uberschriftsangabe ist optional. L"asst man die Angabe weg, so wird
% standardm"a"sig die "Uberschrift: "`Speicher bereitstellen:"' erzeugt.
% Will man einen anderen Text haben, wird dieser mit
% \cs{declarationtitle}\marg{"Uberschrift} global festgelegt. Will man f"ur
% ein einzelnes Struktogramm einen speziellen Titel erzeugen, so gibt man
% diesen in den eckigen Klammern an.
% \else
% The declaration of the title is optional. If the declaration is omitted, the standard
% title: "'Providing Storage Space:"' will be generated.
% If one wants to have another text, it will be provided globally by
% \cs{declarationtitle}\marg{title}. If one wants to generate a special title for a
% certain structured box chart, one has to declare it within square brackets.
% \fi
%
% \DescribeMacro{\description}
% \DescribeMacro{\descriptionindent}
% \DescribeMacro{\descriptionwidth}
% \DescribeMacro{\descriptionsep}
% \changes{v8.0b}{04/07/14}{Zeichnung zum Layout der Deklarationen
% verbessert (`multiput statt n-mal `put, Korrektur von Bezeichnungen)}
% \ifnum\language=\languageNGerman
% Innerhalb der |declaration|-Umgebung werden die Beschreibungen der einzelnen
% Variablen mit
% \begin{quote}
% \cs{description}\marg{Variablenname}\marg{Variablenbeschreibung}
% \end{quote}
% erzeugt. Dabei ist zu beachten, dass \meta{Variablenname} keine
% schlie"sende eckige Klammer "`]"' beinhalten darf, da dieser Makro
% mittels des \cs{item}-Makros definiert worden ist. Eckige Klammern sind in
% diesem Fall als \cs{lbracket} und \cs{rbracket} einzugeben.
% \else
% Within the |declaration| environment the descriptions of the variables can be
% generated by
% \begin{quote}
% \cs{description}\marg{variableName}\marg{variableDescription}
% \end{quote}
% In doing so one has to pay attention on the \meta{variableName}, that is not
% allowed to content a right square bracket "']"', because this macro has been
% defined by the \cs{item} macros. Square brackets have to be entered as 
% \cs{lbracket} or \cs{rbracket} respectively.
% \fi
%
% \ifnum\language=\languageNGerman
% Das Aussehen einer Beschreibung l"asst sich mit drei Parametern
% steuern: \cs{descriptionindent}, \cs{descriptionwidth} und \cs{descriptionsep};
% die Bedeutung der Parameter ist der \Abb{description} zu entnehmen
% (\cs{xsize@nss} und \cs{xin@nss} sind interne Gr"o"sen, die von \StrukTeX\
% vorgegeben werden).
% Die Vorbesetzung dieser Werte ist folgenderma"sen:
% \begin{quote}\begin{verbatim}
% \descriptionindent=1.5em
% \descriptionwidth=40pt
% \descriptionsep=\tabcolsep
% \end{verbatim}\end{quote}
% Die Bedeutung von \cs{descriptionwidth} ist darin zu sehen, dass ein
% Variablenname, der k"urzer als \cs{descriptionwidth} ist, eine Beschreibung
% erh"alt, die auf der gleichen H"ohe liegt; ansonsten wird die Beschreibung
% eine Zeile tiefer begonnen.
% \else
% The shape of a description can be controled by three parameters:
% \cs{descriptionindent}, \cs{descriptionwidth} and \cs{descriptionsep}.
% The meaning of the parameters can be taken from \ref{description}
% (\cs{xsize@nss} and \cs{xin@nss} are internal sizes, that are given by 
% \StrukTeX).
% The default values are the following:
% \begin{quote}\begin{verbatim}
% \descriptionindent=1.5em
% \descriptionwidth=40pt
% \descriptionsep=\tabcolsep
% \end{verbatim}\end{quote}
% The significance of \cs{descriptionwidth} is, that a variable name, which 
% is shorter than \cs{descriptionwidth}, gets a description of the same 
% height. Otherwise the description will be commenced in the next line.
% \fi
% \begin{figure}[tb]
%     \unitlength 1.00mm
%     \linethickness{0.4pt}
%     \begin{picture}(125.00,100.00)
%         \put(0.00,0.00){\framebox(125.00,100.00)[cc]{}}
%         \put(62.50,95.00){\makebox(0,0)[cc]{{\cs{xsize@nss}}}}
%         \put(62.50,85.00){\makebox(0,0)[cc]{{\cs{tempxx@nss}}}}
%         \put(10.00,70.00){\framebox(105.00,5.00)[cc]{}}
%         \put(15.00,71.00){\makebox(0,0)[lb]{\ifnum\language=\languageNGerman%
%                                                 \meta{"Uberschrift}%
%                                             \else%
%                                                 \meta{title}%
%                                             \fi}}
%         \put(72.50,95.00){\vector(1,0){52.50}}
%         \put(52.50,95.00){\vector(-1,0){52.50}}
%         \put(73.50,85.00){\vector(1,0){41.50}}
%         \put(51.50,85.00){\vector(-1,0){41.50}}
%         \put(30.00,56.00){\makebox(0,0)[lb]{\ifnum\language=\languageNGerman% 
%                                                 \meta{Variablenname}%
%                                             \else%
%                                                 \meta{variable name}%
%                                             \fi}}
%         \put(40.00,52.00){\vector(1,0){17.00}}
%         \put(19.00,57.00){\vector(-1,0){9.00}}
%         \put(67.00,5.00){\framebox(48.00,5.00)[cc]{}}
%         \put(67.00,25.00){\framebox(48.00,35.00)[cc]{}}
%         \put(72.00,56.00){\makebox(0,0)[lb]{\ifnum\language=\languageNGerman%
%                                                 \meta{Variablenbeschreibung}%
%                                             \else%
%                                                 \meta{variable description}%
%                                             \fi}}
%         \put(72.00,6.00){\makebox(0,0)[lb]{\ifnum\language=\languageNGerman%
%                                                 \meta{Variablenbeschreibung}%
%                                            \else%
%                                                 \meta{variable description}%
%                                            \fi}}
%         \put(30.00,16.00){\makebox(0,0)[lb]{\ifnum\language=\languageNGerman%
%                                                 \meta{Variablenname}%
%                                             \else%
%                                                 \meta{variable name}%
%                                             \fi}}
%         \put(25.00,15.00){\framebox(90.00,5.00)[cc]{}}
%         \put(19.00,57.00){\vector(1,0){6.00}}
%         \put(40.00,52.00){\vector(-1,0){15.00}}
%         \put(25.00,50.00){\framebox(32.00,10.00)[cc]{}}
%         \put(62.00,54.00){\vector(-1,0){5.00}}
%         \put(62.00,54.00){\vector(1,0){5.00}}
%         \put(15.00,17.00){\vector(1,0){10.00}}
%         \put(15.00,17.00){\vector(-1,0){5.00}}
%         \put(40.00,42.00){\makebox(0,0)[cc]{{\cs{descriptionwidth}}}}
%         \put(66.00,32.00){\makebox(0,0)[rc]{{\cs{descriptionsep}}}}
%         \put(12.00,36.00){\makebox(0,0)[lc]{{\cs{descriptionindent}}}}
%         \multiput(10.00,100.00)(0.00,-3.00){33}{\line(0,-1){2.00}}
%         \put(10.00,1.00){\line(0,-1){1.00}}
%         \multiput(115.00,100.00)(0.00,-3.00){33}{\line(0,-1){2.00}}
%         \put(115.00,1.00){\line(0,-1){1.00}}
%         \put(60.00,35.00){\line(0,-1){2.00}}
%         \put(17.00,33.00){\line(0,1){1.00}}
%         \put(17.00,39.00){\line(0,-1){1.00}}
%         \put(60.00,35.00){\line(0,1){19.00}}
%         \put(40.00,43.00){\line(0,1){9.00}}
%         \put(17.00,57.00){\line(0,-1){18.00}}
%         \put(17.00,33.00){\line(0,-1){16.00}}
%         \put(17.00,17.00){\circle*{1.00}}
%         \put(17.00,57.00){\circle*{1.00}}
%         \put(40.00,52.00){\circle*{1.00}}
%         \put(60.00,54.00){\circle*{1.00}}
%     \end{picture}
%     \caption{\label{description}\ifnum\language=\languageNGerman Aufbau einer 
%                                     Variablenbeschreibung
%                                 \else Construction of a Variable Description
%                                 \fi}
% \end{figure}
%
% \begin{tExample}
% \ifnum\language=\languageNGerman
% Zun"achst wird nur eine einzelne Variable beschrieben.
% \begin{verbatimwrite}{struktex.tmp}
% \begin{struktogramm}(95,20)
%     \assign%
%     {%
%         \begin{declaration}
%             \description{\pVar{iVar}}{eine \pKey{int}-Variable,
%                             deren Beschreibung hier allein dem
%                             Zweck dient, den Makro vorzuf"uhren}
%         \end{declaration}
%     }
% \end{struktogramm}
% \end{verbatimwrite}
% \else
% First there will be described only one variable.
% \begin{verbatimwrite}{struktex.tmp}
% \begin{struktogramm}(95,20)
%     \assign%
%     {%
%         \begin{declaration}
%             \description{\pVar{iVar}}{an \pKey{int} variable, which is 
%                             described here just for presentation of the 
%                             macro}
%         \end{declaration}
%     }
% \end{struktogramm}
% \end{verbatimwrite}
% \fi
% \begin{quote}
% \verbatiminput{struktex.tmp}
% \end{quote}
% \ifnum\language=\languageNGerman
% Das zugeh"orige Struktogramm, wobei zu beachten ist, dass durch die
% leeren eckigen Klammern keine "Uberschrift erzeugt wird.
% \else
% The corresponding structured box chart is the following, at which one has to
% pay attention, that there are no titels generated by the empty square
% brackets.
% \fi
% \begin{quote}
% \input{struktex.tmp}
% \end{quote}
% \ifnum\language=\languageNGerman
% Nun werden Variablen genauer spezifiziert:
% \begin{verbatimwrite}{struktex.tmp}
% \begin{struktogramm}(95,50)
%     \assign{%
%         \begin{declaration}[Parameter:]
%             \description{\pVar{iPar}}{ein \pKey{int}-Parameter,
%                         dessen Bedeutung hier beschrieben wird}
%         \end{declaration}
%         \begin{declaration}[lokale Variablen:]
%             \description{\pVar{iVar}}{eine \pKey{int}-Variable,
%                         deren Bedeutung hier beschrieben wird}
%             \description{\pVar{dVar}}{eine \pKey{double}-Variable,
%                         deren Bedeutung hier beschrieben wird}
%         \end{declaration}
%     }
% \end{struktogramm}
% \end{verbatimwrite}
% \else
% Now varibles will be specified more precisely:
% \begin{verbatimwrite}{struktex.tmp}
% \begin{struktogramm}(95,50)
%     \assign{%
%         \begin{declaration}[Parameter:]
%             \description{\pVar{iPar}}{an \pKey{int} parameter with the 
%                         meaning described here}
%         \end{declaration}
%         \begin{declaration}[local Variables:]
%             \description{\pVar{iVar}}{an \pKey{int} variable with the meaning
%                         described here}
%             \description{\pVar{dVar}}{a \pKey{double} variable with the 
%                          meaning described here}
%         \end{declaration}
%     }
% \end{struktogramm}
% \end{verbatimwrite}
% \fi
% \begin{quote}
% \verbatiminput{struktex.tmp}
% \end{quote}
% \ifnum\language=\languageNGerman
% Das ergibt:
% \else
% This results in:
% \fi
% \begin{quote}
% \input{struktex.tmp}
% \end{quote}
%
% \ifnum\language=\languageNGerman
% Zuletzt die globale Vereinbarung eines Titels:
% \begin{verbatimwrite}{struktex.tmp}
% \def\declarationtitle{globale Variablen:}
% \begin{struktogramm}(95,13)
%     {\catcode`\_=12%
%         \assign{%
%             \begin{declaration}
%                 \description{\pVar{iVar_g}}{eine \pKey{int}-Variable}
%             \end{declaration}
%         }
%     }
% \end{struktogramm}
% \end{verbatimwrite}
% \else
% Finally the global declaration of a titel:
% \begin{verbatimwrite}{struktex.tmp}
% \def\declarationtitle{global variables}
% \begin{struktogramm}(95,13)
%     {\catcode`\_=12%
%         \assign{%
%             \begin{declaration}
%                 \description{\pVar{iVar_g}}{an \pKey{int} variable}
%             \end{declaration}
%         }
%     }
% \end{struktogramm}
% \end{verbatimwrite}
% \fi
% \begin{quote}
% \verbatiminput{struktex.tmp}
% \end{quote}
% \ifnum\language=\languageNGerman
% Dies ergibt das folgende Aussehen:
% \else
% This results in the following shape:
% \fi
% \begin{quote}
% \input{struktex.tmp}
% \end{quote}
% \ifnum\language=\languageNGerman
% Hier ist die lokale Umsetzung des \cs{catcode}s des Unterstrichs zu
% beachten, die erforderlich ist, wenn man einen Unterstrich in einem
% Makroargument einsetzen m"ochte. Diese lokale Umsetzung wird zwar auch
% schon bei \cs{pVar} gemacht, reicht aber bei der Makroexpansionstechnik
% von \TeX\ nicht aus.
% \else
% Here one has to notice the local realisation of the \cs{catcode} of the
% underline, which is necessary, if one wants to place an underline into 
% an argument of macro. Although this local transfer is already realized 
% at \cs{pVar} it doesn't suffice with the technique of macro expanding 
% of \TeX.
% \fi
% \end{tExample}
%
% \DescribeMacro{\sub}
% \DescribeMacro{\return}
% \ifnum\language=\languageNGerman
% Die Sinnbilder f"ur einen Unterprogrammsprung und einen Aussprung aus dem
% Programm sehen "ahnlich aus und werden mit folgenden Befehlen gezeichnet:
% \begin{quote}\obeylines
% \cs{sub}\oarg{H"ohe}\marg{Text}
% \cs{return}\oarg{H"ohe}\marg{Text}
% \end{quote}
% \else
% The mapping conventions for jumps of subprograms and for exits of program
% look similar and are drawn by the following instructions:
% \begin{quote}\obeylines
% \cs{sub}\oarg{height}\marg{text}
% \cs{return}\oarg{height}\marg{text}
% \end{quote}
% \fi
% \ifnum\language=\languageNGerman
% Die Parameter haben dieselbe Bedeutung wie bei \cs{assign}.
% Das n"achste Beispiel zeigt, wie diese Sinnbilder gezeichnet werden.\par
% \begin{verbatimwrite}{struktex.tmp}
% \begin{struktogramm}(95,20)
%     \sub{Liste sortieren}
%     \return{Listenkopf zur"uckgeben}
% \end{struktogramm}
% \end{verbatimwrite}
% \else
% The parameters mean the same as at \cs{assign}. The next example
% shows how the mapping conventions are drawn.\par
% \begin{verbatimwrite}{struktex.tmp}
% \begin{struktogramm}(95,20)
%     \sub{sorting the list}
%     \return{return of list header}
% \end{struktogramm}
% \end{verbatimwrite}
% \fi
% \begin{tExample}
% \begin{quote}
% \verbatiminput{struktex.tmp}
% \end{quote}
% \ifnum\language=\languageNGerman
% Diese Anweisungen f"uhren zu folgendem Struktogramm:
% \else
% These instructions lead to the following structured box chart:
% \fi
% \begin{quote}
% \input{struktex.tmp}
% \end{quote}
% \end{tExample}
%
%\DescribeMacro{\while}
%\DescribeMacro{\whileend}
%\DescribeMacro{\until}
%\DescribeMacro{\untilend}
%\DescribeMacro{\forever}
%\DescribeMacro{\foreverend}
% \ifnum\language=\languageNGerman
% Zum Darstellen von Schleifenkonstrukten stehen die drei Befehle
% \cs{while}, \cs{until} und \cs{forever} zur Verf"ugung.
% Die While-Schleife stellt
% eine Wiederholung mit vorausgehender Bedingungspr"ufung (kopfgesteuerte
% Schleife) dar, die
% Until-Schleife testet die Bedingung am Schleifenende (fu"sgesteuerte
% Schleife) und die
% Forever-Schleife ist eine Endlosschleife, aus der man mit dem Befehl
% \cs{exit} herausspringen kann.
% \begin{quote}\obeylines
% \cs{while}\oarg{Breite}\marg{Text}\meta{Unterstruktogramm}\cs{whileend}
% \cs{until}\oarg{Breite}\marg{Text}\meta{Unterstruktogramm}\cs{untilend}
% \cs{forever}\oarg{Breite}\meta{Unterstruktogramm}\cs{foreverend}
% \cs{exit}\oarg{H"ohe}\marg{Text}
% \end{quote}
% \meta{Breite} ist die Dicke des Rahmens des Sinnbildes,
% \meta{Text} ist
% der Bedingungstext, der in diesen Rahmen geschrieben wird. Wird die
% Breite nicht angegeben, richtet sich die Rahmendicke nach der H"ohe des
% Textes. Der Text wird linksb"undig in den Rahmen geschrieben.
% Ist der Text leer,  so wird ein d"unner Rahmen gezeichnet 
% \else
% For representation of loop constructions there are three instructions 
% available:
% \cs{while}, \cs{until} and \cs{forever}.
% The while loop is a repetition with preceding condition check (loop with 
% test before).
% The until loop checks the condition at the end of the loop (loop with 
% test after).
% And the forever loop is a neverending loop, that can be left by \cs{exit}.
% \begin{quote}\obeylines
% \cs{while}\oarg{width}\marg{text}\meta{structured subbox chart}%
%         \cs{whileend}
% \cs{until}\oarg{width}\marg{text}\meta{structured subbox chart}%
%         \cs{untilend}
% \cs{forever}\oarg{width}\meta{structured subbox chart}\cs{foreverend}
% \cs{exit}\oarg{height}\meta{text}
% \end{quote}
% \meta{width} is the width of frame of the mapping convention and \meta{text}
% is the conditioning text, that is written inside this frame. If the width 
% is not given, the thickness of frame depends on the height of text. The 
% text will be written left adjusted inside the frame. If there is'nt given 
% any text, there will be a thin frame.
% \fi
%
% \ifnum\language=\languageNGerman
% An Stelle
% von \meta{Unterstruktogramm} k"onnen beliebige Befehle von \StrukTeX\
% stehen (mit Ausnahme von \cs{openstrukt} und \cs{closestrukt}), die
% das Struktogramm innerhalb der \cs{while}-, der \cs{until}- oder der
% \cs{forever}-Schleife
% bilden.
% \else
% Instead of \meta{structured subbox chart} there might be written any
% instructions of \StrukTeX\ (except \cs{openstrukt} and \cs{closestrukt}), which
% build up the box chart within the \cs{while} loop, the \cs{until} loop or the 
% \cs{forever} loop.
% \fi
%
% \ifnum\language=\languageNGerman
% Um Kompatiblit"at mit der Weiterentwicklung des \StrukTeXSty\ von J.~Dietel
% zu erreichen, gibt es die Makros \cs{dfr} und \cs{dfrend} mit derselben
% Bedeutung wie \cs{forever} und \cs{foreverend}.
% \else
% For compatibility with further development of the \StrukTeXSty\ of J.~Dietel
% there are the macros \cs{dfr} and \cs{dfrend} with the same meaning as |forever|
% and |foreverend|.
% \fi
%
% \ifnum\language=\languageNGerman
% Die folgenden Beispiele zeigen den Einsatz der \cs{while}- und \cs{until}-Makros,
% \cs{forever} wird weiter unten gezeigt.
% \begin{verbatimwrite}{struktex.tmp}
% \begin{struktogramm}(95,40)
%     \assign{\(I \gets 1\)}
%     \while[8]{\(I < 99\)}
%         \assign{\(J \gets I+1\)}
%         \until{\(J < 100\)}
%             \sub{Vertausche, falls gilt: \(FELD(I) > FELD(J)\)}
%             \assign{\(J \gets J+1\)}
%         \untilend
%         \assign{\(I \gets I+1\)}
%     \whileend
%  \end{struktogramm}
% \end{verbatimwrite}
% \else
% The following examples show use of \cs{while} and \cs{until} macros. \cs{forever}
% will be shown later.
% \begin{verbatimwrite}{struktex.tmp}
% \begin{struktogramm}(95,40)
%     \assign{\(I \gets 1\)}
%     \while[8]{\(I < 99\)}
%         \assign{\(J \gets I+1\)}
%         \until{\(J < 100\)}
%             \sub{Swap, if valid: \( ARRAY(I) > ARRAY(J) \)}
%             \assign{\(J \gets J+1\)}
%         \untilend
%         \assign{\(I \gets I+1\)}
%     \whileend
%  \end{struktogramm}
% \end{verbatimwrite}
% \fi
% \begin{tExample}
% \begin{quote}
% \verbatiminput{struktex.tmp}
% \end{quote}
% \ifnum\language=\languageNGerman
% Diese Anweisungen f"uhren zu folgendem Struktogramm:
% \else
% These instructions lead to the following structured box chart:
% \fi
% \begin{quote}
% \input{struktex.tmp}
% \end{quote}
% \end{tExample}
%
% \ifnum\language=\languageNGerman
% Die \cs{exit}-Anweisung gibt nur im Zusammenhang mit einfachen oder mehrfachen
% Verzweigungen Sinn, daher wird sie im Anschluss an die Diskussion der
% Verzweigungen diskutiert.
% \else
% The \cs{exit} instruction makes only sense in connection with simple or
% multiple branches. Therefore it will be discussed after the discussion 
% of branches.
% \fi
%
% \DescribeMacro{\ifthenelse}
% \DescribeMacro{\change}
% \DescribeMacro{\ifend}
% \ifnum\language=\languageNGerman
% Zur Darstellung von Alternativen stellt \StrukTeX\ die Sinnbilder f"ur
% einen If-Then-Else-Block und f"ur mehrfache Alternativen eine
% Case-Konstruktion zur Verf"ugung. Da in der Picture-Umgebung von \LaTeX\
% nur Linien mit bestimmten Steigungen gezeichnet werden k"onnen, muss der
% Benutzer bei beiden Befehlen selbst den Winkel bestimmen, mit dem
% die notwendigen schr"agen Linien gezeichnet werden sollen (hier ist also
% etwas mehr \glq Handarbeit\grq\ n"otig).
% \else
% For representation of alternatives \StrukTeX\ provides mapping conventions
% for an If-Then-Else-block and a Case-construction for multiple alternatives.
% Since in the picture environment of \LaTeX\ only lines of certain gradients 
% can be drawn, in both cases the user has to specify himself the angle, with
% which the necessary slanted lines shall be drawn. (Here is a little bit more
% \grq handy work\grq\ required.)
% \fi
%
% \changes{6.0}{00/11/24}{Einsatz von curves.sty zum Zeichnen beliebiger Steigungen implementiert}
% \ifnum\language=\languageNGerman
% Wenn hingegen der der \textsf{curves.sty} bzw. der \textsf{emlines2.sty}
% eingesetzt wird, ist die Darstellung von Geraden mit beliebiger Steigung
% m"oglich.
% \else
% If however the \textsf{curves.sty} or the \textsf{emlines2.sty} is used,
% then the representation of lines with any gradient can be drawn. 
% \fi
%
% \ifnum\language=\languageNGerman
% Der If-Then-Else-Befehl sieht so aus:
% \begin{quote}\obeylines
% \cs{ifthenelse}\oarg{H"ohe}\marg{Linker Winkel}\marg{Rechter Winkel}
% ~~~~~~~~\marg{Bedingung}\marg{Linker Text}\marg{Rechter Text}
% ~~~~\meta{Unterstruktogramm}
% \cs{change}
% ~~~~\meta{Unterstruktogramm}
% \cs{ifend}
% \end{quote}
% \else
% The If-Then-Else-command looks like:
% \begin{quote}\obeylines
% \cs{ifthenelse}\oarg{height}\marg{left angle}\marg{right angle}
% ~~~~~~~~\marg{condition}\marg{left text}\marg{right text}
% ~~~~\meta{structured subbox chart}
% \cs{change}
% ~~~~\meta{structured subbox chart}
% \cs{ifend}
% \end{quote}
% \fi
% \ifnum\language=\languageNGerman
% F"ur den Fall, dass das optionale Argument \meta{H"ohe} nicht angegeben
% ist, sind \meta{Linker Winkel} (\texttt{\#1}) und \meta{Rechter Winkel} 
% (\texttt{\#2}) Ziffern
% zwischen 1 und 6; diese bestimmen die Steigung der beiden Unterteilungslinien
% des If-Then-Else-Blocks (gro"ser Wert = kleine Steigung). Gr"o"sere Werte
% werden auf 6 gesetzt, kleinere auf 1. Das genaue
% Verhalten der Steigungen ist dem folgenden Bild zu entnehmen; 
% \cs{xsize@nss} ist
% dabei die Breite des aktuellen Unterstruktogrammes. Wird die \meta{H"ohe}
% vorgegeben, so bestimmt dieser Wert statt des Ausdruckes
% \(\frac{\mbox{\cs{xsize@nss}}}{\mbox{\tt \#1 + \#2}}\) die H"ohe des
% Bedingungsrechteckes.
% \else
% In the case of omitting the optional argument \meta{height} \meta{left
% angle} and \meta{right angle} are numbers from 1 to 6.
% They specify the gradient of both the partitioning lines of 
% the If-Then-Else-block (large number = small gradient). Larger values are 
% put on 6, smaller values on 1. The precise characteristics of the gradients 
% can be taken from the following picture. Thereby \cs{xsize@nss} is the width 
% of the actual structured subbox chart.
% If the \meta{height} is given, then this value determines the height of the
% conditioning rectangle instead of the expression  \(\frac{\mbox{\cs{xsize@nss}}}
% {\mbox{\tt \#1 + \#2}}\).
% \fi
% \begin{quote}
%   \unitlength 1.00mm
%   \linethickness{0.4pt}
%   \begin{picture}(100.00,20.00)
%   \put(10.00,5.00){\framebox(90.00,10.00)[cc]{}}
%   \put(50.00,18.00){\makebox(0,0)[cc]{\cs{xsize@nss}}}
%   \put(2.00,10.00){\makebox(0,0)[cc]
%   {$\frac{\mbox{\tt\char92 xsize@nss}}{\mbox{\tt \#1 + \#2}}$}}
%   \put(0.00,15.00){\line(1,0){4.00}}
%   \put(2.00,15.00){\line(0,-1){2.00}}
%   \put(0.00,5.00){\line(1,0){4.00}}
%   \put(2.00,5.00){\line(0,1){2.00}}
%   \put(10.00,4.00){\line(0,-1){4.00}}
%   \put(40.00,4.00){\line(0,-1){4.00}}
%   \put(100.00,0.00){\line(0,1){4.00}}
%   \put(70.00,2.00){\makebox(0,0)[cc]
%   {\tt \#2 $\cdot\frac{\mbox{\cs{xsize@nss}}}{\mbox{\tt \#1 + \#2}}$}}
%   \put(25.00,2.00){\makebox(0,0)[cc]
%   {\tt \#1 $\cdot\frac{\mbox{\cs{xsize@nss}}}{\mbox{\tt \#1 + \#2}}$}}
%   \put(10.00,2.00){\line(1,0){5.00}}
%   \put(35.00,2.00){\line(1,0){25.00}}
%   \put(80.00,2.00){\line(1,0){20.00}}
%   \put(10.00,16.00){\line(0,1){4.00}}
%   \put(100.00,16.00){\line(0,1){4.00}}
%   \put(10.00,18.00){\line(1,0){30.00}}
%   \put(60.00,18.00){\line(1,0){40.00}}
%   \put(10.00,15.00){\line(3,-1){30.00}}
%   \put(40.00,5.00){\line(6,1){60.00}}
%   \end{picture}
% \end{quote}
% \ifnum\language=\languageNGerman
% \meta{Bedingung}
% wird in das so gebildete obere mittlere Dreieck gesetzt; die Parameter
% \meta{Linker Text} und \meta{Rechter Text} werden in das
% linke bzw.\ rechte
% untere Dreieck gesetzt. Der Bedingungs-Text kann in seinem Dreiecks-Feld
% umgebrochen werden.  Ab Version 5.3 wird der Bedingungstext durch
% geeigneten Umbruch beliebigen Steigungen angepasst.\footnote{Diese
% Erweiterung stammt von Daniel Hagedorn, dem ich hiermit herzlich danken
% m"ochte} Die beiden anderen Texte sollten kurz sein (\zB\
% ja/nein oder true/false), da sie nicht umgebrochen werden k"onnen und
% sonst "uber ihr Dreiecks-Feld hinausragen. Um an dieser Stelle
% Einheitlichkeit zu erzielen, sollten die Makros \cs{pTrue} und \cs{pFalse}
% benutzt werden. Hinter \cs{ifthenelse}
% werden die Befehle f"ur das linke, hinter \cs{change} die f"ur das
% rechte "`Unterstruktogramm"' geschrieben. Falls diese beiden
% Struktogramme nicht gleich lang sind, wird ein Kasten mit einem $\emptyset$
% erg"anzt.\footnote{Eventuell ist ein \cs{strut} hilfreich, um
% unterschiedliche H"ohen von Texten auszugleichen.} Mit \cs{ifend} wird das
% If-Then-Else-Element beendet.
% Es folgen zwei Beispiele f"ur die Anwendung.
% \begin{verbatimwrite}{struktex.tmp}
% \begin{struktogramm}(95,32)
%     \ifthenelse[12]{1}{2}
%         {Flag f"ur Drucker-Ausgabe gesetzt ?}{\sTrue}{\sFalse}
%         \assign[15]{Ausgabe auf Drucker umleiten}
%     \change
%         \assign{Ausgabe auf den Bildschirm}
%     \ifend
% \end{struktogramm}
% \end{verbatimwrite}
% \else
% \meta{condition} is set in the upper triangle built in the above way. The
% parameters \meta{left text} and \meta{right text} are set in the left or
% right lower triangle respectively. The conditioning text can be made up 
% in its triangle box. From version 5.3 on the conditioning text \ldots
% \footnote{This extension is due to Daniel Hagedorn, whom I have to thank
% for his work.} Both the other texts should be short (e.g. yes/no or
% true/false), since they can't be made up and otherwise they stand out from 
% their triangle box. For obtaining uniformity here the macros \cs{pTrue} and 
% \cs{pFalse} should be used. Behind \cs{ifthenelse} the instructions for the 
% left "'structured subbox chart"'
% are written and behind \cs{change} the instructions for the right
% "'structured subbox chart"' are written. If these two box charts have not
% the same length, then a box with $\emptyset$ will be completioned.
% The If-Then-Else-element is finished by \cs{ifend}. In the following there
% are two examples for application.
% \begin{verbatimwrite}{struktex.tmp}
% \begin{struktogramm}(95,32)
%     \ifthenelse[12]{1}{2}
%         {Flag for Output on Printer set ?}{\sTrue}{\sFalse}
%         \assign[15]{Output directed to Printer}
%     \change
%         \assign{Output on Screen}
%     \ifend
% \end{struktogramm}
% \end{verbatimwrite}
% \fi
% \begin{tExample}
% \begin{quote}
% \verbatiminput{struktex.tmp}
% \end{quote}
% \ifnum\language=\languageNGerman
% Diese Anweisungen f"uhren zu folgendem Struktogramm:
% \else
% These instructions lead to the following structured box chart:
% \fi
% \begin{quote}
% \input{struktex.tmp}
% \end{quote}
% \end{tExample}
% \ifnum\language=\languageNGerman
% \begin{verbatimwrite}{struktex.tmp}
% \begin{struktogramm}(90,30)
%     \ifthenelse{3}{4}
%         {Flag f"ur Drucker-Ausgabe gesetzt ?}{\sTrue}{\sFalse}
%         \assign[15]{Ausgabe auf Drucker umleiten}
%     \change
%         \assign{Ausgabe auf den Bildschirm}
%     \ifend
% \end{struktogramm}
% \end{verbatimwrite}
% \else
% \begin{verbatimwrite}{struktex.tmp}
% \begin{struktogramm}(90,30)
%     \ifthenelse{3}{4}
%         {Output on Printer set ?}{\sTrue}{\sFalse}
%         \assign[15]{Output on Printer diverted}
%     \change
%         \assign{Output on Screen}
%     \ifend
% \end{struktogramm}
% \end{verbatimwrite}
% \fi
% \begin{tExample}
% \begin{quote}
% \verbatiminput{struktex.tmp}
% \end{quote}
% \ifnum\language=\languageNGerman
% Diese Anweisungen f"uhren zu folgendem Struktogramm:
% \else
% These instructions lead to the following structured box chart:
% \fi
% \begin{quote}
% \input{struktex.tmp}
% \end{quote}
% \end{tExample}
%
% \DescribeMacro{\case}
% \DescribeMacro{\switch}
% \DescribeMacro{\caseend}
% \ifnum\language=\languageNGerman
% Das Case-Konstrukt hat folgende Syntax:
% \begin{quote}\obeylines
% \cs{case}\oarg{H"ohe}\marg{Winkel}\marg{Anzahl der F"alle}\marg{Bedingung}\marg{Text des 1. Falles}
% ~~~~\meta{Unterstruktogramm}
% \cs{switch}\oarg{Position}\marg{Text des 2. Falles}
% ~~~~\meta{Unterstruktogramm}
% \dots
% \cs{switch}\oarg{Position}\marg{Text des n.\ Falles}
% ~~~~\meta{Unterstruktogramm}
% \cs{caseend}
% \end{quote}
% \else
% The Case-Construct has the following syntax:
% \begin{quote}\obeylines
% \cs{case}\oarg{height}\marg{angle}\marg{number of cases}\marg{condition}\marg{text of 1. case}|}|
% ~~~~\meta{structured subbox chart}
% \cs{switch}\oarg{position}\marg{text of 2. case}
% ~~~~\meta{structured subbox chart}
% \dots
% \cs{switch}\oarg{position}\marg{text of n.\ case}
% ~~~~\meta{structured subbox chart}
% \cs{caseend}
% \end{quote}
% \fi
% \ifnum\language=\languageNGerman
% Ist die \meta{H"ohe} nicht angegeben, so erh"alt die Unterteilungslinie
% des Case-Sinnbildes die durch \meta{Winkel} angegebene Steigung (die bei
% \cs{ifthenelse} erw"ahnten Winkelwerte).  In das obere der durch diese
% Linie entstandenen beiden Dreieck wird der Text \meta{Bedingung}
% gesetzt. Die Gr"o"senverh"altnisse ergeben sich aus der folgenden Skizze
% (\cs{xsize@nss} ist die aktuelle Breite des (Unter-)Struktogramms):
% \else
% If the \meta{height} is not given, then the partitioning line of the
% mapping convention of case gets the gradient given by \meta{angle} (those
% values mentioned at \cs{ifthenelse}).  The text \meta{condition} is set
% into the upper of the both triangles built by this line. The proportions
% are sketched below:
% \fi
% \begin{center}
% \label{case1}
% \unitlength 1.00mm
% \linethickness{0.4pt}
% \begin{picture}(64.00,40.00)
%   \put(9.00,5.00){\framebox(50.00,30.00)[cc]{}}
%   \put(9.00,36.00){\line(0,1){4.00}}
%   \put(9.00,38.00){\line(1,0){15.00}}
%   \put(34.00,38.00){\makebox(0,0)[cc]{\cs{xsize@nss}}}
%   \put(44.00,38.00){\line(1,0){15.00}}
%   \put(59.00,40.00){\line(0,-1){4.00}}
%   \put(0.00,35.00){\line(1,0){4.00}}
%   \put(2.00,35.00){\line(0,-1){10.00}}
%   \put(2.00,15.00){\line(0,-1){10.00}}
%   \put(0.00,5.00){\line(1,0){4.00}}
%   \put(2.00,20.00){\makebox(0,0)[cc]{%
%       $\frac{\mbox{\cs{xsize@nss}}}{\mbox{\tt\#1}}$}}
%   \put(9.00,35.00){\line(5,-3){50.00}}
%   \put(29.00,5.00){\line(0,1){18.00}}%   
%   \put(9.00,0.00){\line(0,1){4.00}}
%   \put(29.00,0.00){\line(0,1){4.00}}
%   \put(19.00,2.00){\makebox(0,0)[cc]{%
%       $\frac{\mbox{\cs{xsize@nss}}}{\mbox{\tt\#2}}$}}
%   \put(60.00,35.00){\line(1,0){4.00}}
%   \put(60.00,23.00){\line(1,0){4.00}}
%   \put(62.00,35.00){\line(0,-1){2.00}}
%   \put(62.00,23.00){\line(0,1){2.00}}
%   \put(62.00,29.00){\makebox(0,0)[cc]{%
%       $\frac{\mbox{\tt\#2}\cdot\mbox{\cs{xsize@nss}}}
%       {\mbox{\tt\#1}}$}}
% \end{picture}
% \end{center}
% \ifnum\language=\languageNGerman
% Der zweite Parameter \meta{Anzahl der F"alle} gibt die Anzahl der zu
% zeichnenden F"alle an; alle Unterstruktogramme der einzelnen F"alle
% erhalten die gleiche Breite. Der \meta{Text des 1. Falles} muss als
% Parameter des \cs{case}-Befehls angegeben werden, alle weiteren F"alle
% werden "uber den \cs{switch}-Befehl eingeleitet. Hinter dem Text folgen
% dann die Befehle f"ur das eigentliche Unterstruktogramm des jeweiligen
% Falles. Der letzte Fall wird mit \cs{caseend} abgeschlossen.  Ein
% Case-Sinnbild mit drei F"allen zeigt das folgende Beispiel.
% \else
% The second parameter \meta{number of cases} specifies the number of
% cases, that have to be drawn.  All structured subbox charts of the
% certain cases get the same width.  The \meta{text of 1. case} has to be
% given as a parameter of the \cs{case} instruction. All other cases are
% introduced by the \cs{switch} instruction.  Behind the text the
% instructions for the proper structured subbox chart of certain case
% follow. The last case is finished by \cs{caseend}.  A mapping convention
% of case with three cases is shown in the following example.
% \fi
%
% \ifnum\language=\languageNGerman
% \begin{tExample}
% \begin{verbatimwrite}{struktex.tmp}
% \begin{struktogramm}(95,30)
%     \case{4}{3}{Signum(x)}{-1}
%         \assign{$z \gets - \frac{1}{x}$}
%     \switch{0}
%         \assign{Ausgabe: Division durch 0}
%     \switch{1}
%         \assign{$z \gets \frac{1}{x}$}
%     \caseend
% \end{struktogramm}
% \end{verbatimwrite}
% \begin{quote}
% \verbatiminput{struktex.tmp}
% \end{quote}
% Diese Anweisungen f"uhren zu folgendem Struktogramm:
% \else
% \begin{tExample}
% \begin{verbatimwrite}{struktex.tmp}
% \begin{struktogramm}(95,30)
%     \case{4}{3}{Signum(x)}{-1}
%         \assign{$z \gets - \frac{1}{x}$}
%     \switch{0}
%         \assign{Output: Division by 0}
%     \switch{1}
%         \assign{$z \gets \frac{1}{x}$}
%     \caseend
% \end{struktogramm}
% \end{verbatimwrite}
% \begin{quote}
% \verbatiminput{struktex.tmp}
% \end{quote}
% These instructions lead to the following structured box chart:
% \fi
% \begin{quote}
% \input{struktex.tmp}
% \end{quote}
% \end{tExample}
%
% \ifnum\language=\languageNGerman
% Der optionale Parameter \oarg{H"ohe} ist nur einzusetzen, wenn die Option
% "`|curves|"', "`|emlines2|"' oder "`|pict2e|"' gesetzt ist; ist das nicht
% der Fall, k"onnen die Struktogramme durcheinander kommen.  Die
% Erweiterung des \cs{switch}-Kommandos mit \oarg{H"ohe} f"uhrt zu einer
% anderen Bedeutung von \meta{Winkel}. Ist der Wert gerade, wird wie zuvor
% eine gerade Linie zur Aufteilung des zugrundeliegenden Rechtecks
% gezeichnet; ist der Wert hingegegen ungerade, wird der letzte Fall wie im
% folgenden gezeigt als Sonderfall gezeichnet.  
% \else
% The optional parameter \oarg{height} can be used if and only if one of
% the options ``curves'', ``emlines2'' or ``pict2e'', resp. is set; if this
% is not the case, the structured chart box may be scrumbled up.  The
% extension of the \cs{switch} instruction by \oarg{height} results in the
% following shape with a different gradient of a slanted line, which now is
% fixed by the height given by the optional parameter. If the value of the
% parameter \meta{angle} is even, a straight line is drawn as before. If
% the value is odd, the last case is drawn as a special case as showed
% below.
%\fi
% \begin{center}
% \label{case2}
% \unitlength 1.00mm
% \linethickness{0.4pt}
% \begin{picture}(69.00,30.00)
%   \put(9.00,5.00){\framebox(60.00,20.00)[cc]{}}
%   \put(9.00,26.00){\line(0,1){4.00}}
%   \put(9.00,28.00){\line(1,0){20.00}}
%   \put(39.00,28.00){\makebox(0,0)[cc]{\cs{xsize@nss}}}
%   \put(49.00,28.00){\line(1,0){20.00}}
%   \put(69.00,30.00){\line(0,-1){4.00}}
%   \put(0.00,25.00){\line(1,0){4.00}}
%   \put(2.00,25.00){\line(0,-1){5.00}}
%   \put(2.00,10.00){\line(0,-1){5.00}}
%   \put(0.00,5.00){\line(1,0){4.00}}
%   \put(2.00,15.00){\makebox(0,0)[cc]{%
%       \ifnum\language=\languageNGerman\meta{H"ohe}\else\meta{height}\fi}}
%   \put(29.00,5.00){\line(0,1){13.33}}
%   \put(9.00,25.00){\line(6,-2){60.00}}
%   \put(9.00,0.00){\line(0,1){4.00}}
%   \put(29.00,0.00){\line(0,1){4.00}}
%   \put(19.00,2.00){\makebox(0,0)[cc]{$\frac{\mbox{\cs{xsize@nss}}}{\mbox{\tt\#2}}$}}
%   \put(70.00,25.00){\line(1,0){4.00}}
%   \put(70.00,18.33){\line(1,0){4.00}}
%   \put(72.00,25.00){\line(0,-1){1.00}}
%   \put(72.00,18.33){\line(0,1){1.00}}
%   \put(72.00,21.66){\makebox(0,0)[cc]{%
%       $\frac{\mbox{\ifnum\language=\languageNGerman\meta{H"ohe}\else
%       \meta{height}\fi}}{\mbox{\tt\#2}}$}}
% \end{picture}
% \vspace{5mm}
% \begin{picture}(69.00,30.00)
%   \put(9.00,5.00){\framebox(60.00,20.00)[cc]{}}
%   \put(9.00,26.00){\line(0,1){4.00}}
%   \put(9.00,28.00){\line(1,0){20.00}}
%   \put(39.00,28.00){\makebox(0,0)[cc]{\cs{xsize@nss}}}
%   \put(49.00,28.00){\line(1,0){20.00}}
%   \put(69.00,30.00){\line(0,-1){4.00}}
%   \put(0.00,25.00){\line(1,0){4.00}}
%   \put(2.00,25.00){\line(0,-1){5.00}}
%   \put(2.00,10.00){\line(0,-1){5.00}}
%   \put(0.00,5.00){\line(1,0){4.00}}
%   \put(2.00,15.00){\makebox(0,0)[cc]{%
%       \ifnum\language=\languageNGerman\meta{H"ohe}\else\meta{height}\fi}}
%   \put(29.00,5.00){\line(0,1){10.00}}
%   \put(9.00,25.00){\line(4,-2){40.00}}
%   \put(49.00,5.00){\line(2,2){20.00}}
%   \put(9.00,0.00){\line(0,1){4.00}}
%   \put(29.00,0.00){\line(0,1){4.00}}
%   \put(19.00,2.00){\makebox(0,0)[cc]{%
%       $\frac{\mbox{\cs{xsize@nss}}}{\mbox{\tt\#2}}$}}
%   \put(70.00,25.00){\line(1,0){4.00}}
%   \put(70.00,15.00){\line(1,0){4.00}}
%   \put(72.00,25.00){\line(0,-1){2.00}}
%   \put(72.00,15.00){\line(0,1){2.00}}
%   \put(72.00,20.00){\makebox(0,0)[cc]{%
%       $\displaystyle\frac{\mbox{\ifnum\language=\languageNGerman 
%             \meta{H"ohe}\else\meta{height}\fi}}{\mbox{\tt\#2}-1}$}}
% \end{picture}
% \end{center}
%
% \ifnum\language=\languageNGerman
% \begin{tExample}{}
% \begin{verbatimwrite}{struktex.tmp}
% \begin{struktogramm}(95,30)
%     \case[10]{4}{3}{Signum(x)}{-1}
%         \assign{$z \gets - \frac{1}{x}$}
%     \switch{0}
%         \assign{Ausgabe: Division durch 0}
%     \switch{1}
%         \assign{$z \gets \frac{1}{x}$}
%     \caseend
% \end{struktogramm}
% \end{verbatimwrite}
% \else
% \begin{tExample}{}
% \begin{verbatimwrite}{struktex.tmp}
% \begin{struktogramm}(95,30)
%     \case[10]{4}{3}{Signum(x)}{-1}
%         \assign{$z \gets - \frac{1}{x}$}
%     \switch{0}
%         \assign{Output: Division by 0}
%     \switch{1}
%         \assign{$z \gets \frac{1}{x}$}
%     \caseend
% \end{struktogramm}
% \end{verbatimwrite}
% \fi
% \begin{quote}
% \verbatiminput{struktex.tmp}
% \end{quote}
% \ifnum\language=\languageNGerman
% Diese Anweisungen f"uhren zu folgendem Struktogramm:
% \else
% These instructions lead to the following structured box chart:
% \fi
% \begin{quote}
% \input{struktex.tmp}
% \end{quote}
% \end{tExample}
%
% \ifnum\language=\languageNGerman
% Ist der erste Parameter hingegen ungerade, wird ein Standardzweig
% gezeichnet; der Wert f"ur den Standardfall sollte dann rechtsb"undig
% ausgerichtet werden.
% \begin{tExample}
% \begin{verbatimwrite}{struktex.tmp}
% \begin{struktogramm}(95,30)
%     \case[10]{5}{3}{Signum(x)}{-1}
%         \assign{$z \gets - \frac{1}{x}$}
%     \switch{1}
%         \assign{$z \gets \frac{1}{x}$}
%     \switch[r]{0}
%         \assign{Ausgabe: Division durch 0}
%     \caseend
% \end{struktogramm}
% \end{verbatimwrite}
% \else
% But if the first parameter is odd, then a default branch is drawn; the
% value for the default branch should be set flushed right.
% \begin{tExample}
% \begin{verbatimwrite}{struktex.tmp}
% \begin{struktogramm}(95,30)
%     \case[10]{5}{3}{Signum(x)}{-1}
%         \assign{$z \gets - \frac{1}{x}$}
%     \switch{1}
%         \assign{$z \gets \frac{1}{x}$}
%     \switch{0}
%         \assign{Output: Division by 0}
%     \caseend
% \end{struktogramm}
% \end{verbatimwrite}
% \fi
% \begin{quote}
% \verbatiminput{struktex.tmp}
% \end{quote}
% \ifnum\language=\languageNGerman
% Diese Anweisungen f"uhren zu folgendem Struktogramm:
% \else
% These instructions lead to the following structured box chart:
% \fi
% \begin{quote}
% \input{struktex.tmp}
% \end{quote}
% \end{tExample}
%
% \ifnum\language=\languageNGerman
% Das folgende Beispiel zeigt, wie mittels einfacher Verzweigung aus einer
% Endlosschleife gesprungen werden kann. Das Beispiel l"asst sich ohne
% weiteres auf eine mehrfache Verzweigung "ubertragen.
% \begin{verbatimwrite}{struktex.tmp}
% \begin{struktogramm}(95,40)
%     \forever
%         \assign{lies Zeichen}
%         \ifthenelse{3}{3}{Zeichen = 'E'?}
%                          {j}{n}
%             \exit{Sprung hinter Schleife}
%         \change
%         \ifend
%         \assign{Gib Zeichen aus}
%     \foreverend
% \end{struktogramm}
% \end{verbatimwrite}
% \else
% The following example shows, how one can exit a neverending loop by a simple
% branch. The example is transferable to a multiple branch without much effort.
% \begin{verbatimwrite}{struktex.tmp}
% \begin{struktogramm}(95,40)
%     \forever
%         \assign{read character}
%         \ifthenelse{3}{3}{character = 'E'}
%                          {y}{n}
%             \exit{Jump behind the Loop}
%         \change
%         \ifend
%         \assign{Put out Character}
%     \foreverend
% \end{struktogramm}
% \end{verbatimwrite}
% \fi
% \begin{tExample}
% \ifnum\language=\languageNGerman
% \begin{verbatimwrite}{struktex.tmp}
% \begin{struktogramm}(95,40)
%     \forever
%         \assign{lies Zeichen}
%         \ifthenelse{3}{3}{Zeichen = 'E'?}
%                          {j}{n}
%             \exit{Sprung hinter Schleife}
%         \change
%         \ifend
%         \assign{Gib Zeichen aus}
%     \foreverend
% \end{struktogramm}
% \end{verbatimwrite}
% \begin{quote}
% \verbatiminput{struktex.tmp}
% \end{quote}
% Diese Anweisungen f"uhren zu folgendem Struktogramm:
% \else
% \begin{verbatimwrite}{struktex.tmp}
% \begin{struktogramm}(95,40)
%     \forever
%         \assign{read character}
%         \ifthenelse{3}{3}{character = 'E'}
%                          {y}{n}
%             \exit{Jump behind the Loop}
%         \change
%         \ifend
%         \assign{Put out character}
%     \foreverend
% \end{struktogramm}
% \end{verbatimwrite}
% \begin{quote}
% \verbatiminput{struktex.tmp}
% \end{quote}
% These instructions lead to the following structured box chart:
% \fi
% \begin{quote}
% \input{struktex.tmp}
% \end{quote}
% \end{tExample}
%
% \DescribeEnv{centernss}
% \label{centernss}
% \ifnum\language=\languageNGerman
% Soll ein Struktogramm zentriert dargestellt werden, so wird dazu die
% Umgebung
% \else
% If a structured box chart shall be represented centered, then the environment
% \fi
% \begin{quote}\obeylines
% \envb{centernss}
% ~~~~\meta{Struktogramm}
% \enve{centernss}
% \end{quote}
% \ifnum\language=\languageNGerman
% benutzt:
% \begin{verbatimwrite}{struktex.tmp}
% \begin{centernss}
% \begin{struktogramm}(90,35)
%     \ifthenelse{2}{4}
%             {Flag f"ur Drucker-Ausgabe gesetzt?}{\sTrue}{\sFalse}%
%         \assign[20]{Ausgabe auf Drucker umleiten}
%     \change
%         \assign{Ausgabe auf den Bildschirm}
%     \ifend
% \end{struktogramm}
% \end{centernss}
% \end{verbatimwrite}
% \else
% is used:
% \begin{verbatimwrite}{struktex.tmp}
% \begin{centernss}
% \begin{struktogramm}(90,35)
%     \ifthenelse{2}{4}
%             {Is Flag for Output on Printer set?}{\sTrue}{\sFalse}%
%         \assign[20]{Output on Printer diverted}
%     \change
%         \assign{Output on Screen}
%     \ifend
% \end{struktogramm}
% \end{centernss}
% \end{verbatimwrite}
% \fi
% \begin{quote}
% \verbatiminput{struktex.tmp}
% \end{quote}
% \ifnum\language=\languageNGerman
% Das f"uhrt zu folgendem:
% \else
% This leads to the following:
% \fi
% \begin{quote}
% \input{struktex.tmp}
% \end{quote}
%
% \DescribeMacro{\CenterNssFile}
% \ifnum\language=\languageNGerman
% H"aufig gibt es den Fall, dass Struktogramme in eigenen Dateien abgelegt
% werden, damit sie f"ur sich allein auf Korrektheit getestet werden
% k"onnen oder in anderen Zusammenh"angen genutzt werden k"onnen.
% Sollen sie zentriert eingebunden werden, kann nicht mit der folgenden
% Konstruktion gearbeitet werden:
% \else
% In many cases structured box charts are recorded in particular files such, that
% they can be tested seperately, if they are correct, or that they can be used
% in other connections. If they should be included centeredly, then one can not
% use the following construction:
% \fi
% \begin{verbatimwrite}{struktex.tmp}
% \begin{center}
%     \input{...}
% \end{center}
% \end{verbatimwrite}
% \begin{quote}
% \verbatiminput{struktex.tmp}
% \end{quote}
% \ifnum\language=\languageNGerman
% da auf diese Weise der gesamte Text innerhalb des Struktogramms zentriert
% w"urde. Um diesen Fall einfach und korrekt abhandeln zu k"onnen, kann das
% Makro \cs{CenterNssFile} eingesetzt werden, das auch in der Schreibweise
% |centernssfile| definert ist. Voraussetzung ist, dass die Datei,
% die die Anweisungen f"ur das Struktogramm enth"alt, die
% Dateinamenserweiterung |.nss| hat, der Name der einzubindenden Datei
% \emph{muss} demzufolge ohne Erweiterung angegeben werden. Wenn die Datei
% |struktex-test-0.nss| das in Abschnitt~\ref{Beispiel}, Zeile 2--10 gezeigte
% Aussehen hat, so f"uhrt die Anweisung
% \else
% since this way the whole text in structured box chart would be centered.
% To deal with this case in a simple and correct way the macro \cs{CenterNssFile}
% can be used. It is also defined in the style |centernssfile|. This requires, that the
% file containing the instructions for the structured box chart has the file name
% extension |.nss|. That is why the name of the file, that has to be tied in,
% \emph{must} be stated without extension. If the file |struktex-test-0.nss| has the shape
% shown in paragraph~\ref{example}, line 2--10 the instruction
% \fi
% \begin{quote}
% |\centernssfile{struktex-test-0}|
% \end{quote}
% \ifnum\language=\languageNGerman
% zu folgendem Aussehen des formatierten Textes:
% \else
% leads to the following shape of the formatted text:
% \fi
% \bgroup\catcode`\%=14\centernssfile{struktex-test-0}\egroup
%
% \DescribeMacro{\openstrukt}
% \DescribeMacro{\closestrukt}
% \ifnum\language=\languageNGerman
% Diese beiden Makros sind nur der Kompatibilit"at zu vorherigen Versionen
% von \StrukTeX\ willen noch erhalten. Von der Bedeutung her entsprechen sie
% \cs{struktogramm} und \cs{endstruktogramm}. Die Syntax ist
% \else
% These two macros are only preserved because of compatibility reasons with
% previous versions of \StrukTeX\. Their meaning is the same as \cs{struktogramm}
% and \cs{endstruktogramm}. The syntax is
% \fi
% \begin{quote}
% \cs{openstrukt}\marg{\ifnum\language=\languageNGerman Breite \else width \fi}\marg{\ifnum\language=\languageNGerman H"ohe \else height \fi}
% \end{quote}
% \ifnum\language=\languageNGerman
% und
% \else
% and
% \fi
% \begin{quote}
% \cs{closestrukt}.
% \end{quote}
%
%
% \DescribeMacro{\assert}%
% \ifnum\language=\languageNGerman%
% Der Makro \cs{assert} wurde eingef"uhrt, um die Verifikation von
% Algorithmen zu unterst"utzen, er ist aber nur aktiv, wenn die Stil-Option
% |verification| gesetzt wurde. Er dient dazu, an ausgew"ahlten Stellen
% Zusicherungen "uber den Zustand von Variablen zu markieren, die Syntax
% entspricht dem \cs{assign}:
% \begin{quote}
%     \cs{assert}\oarg{H"ohe}\marg{Zusicherung},
% \end{quote}
% Sein Einsatz ergibt sich aus dem folgenden:
% \begin{verbatimwrite}{struktex.tmp}
% \begin{struktogramm}(70,20)[Zusicherungen in Struktogrammen]
%     \assign{\(a\gets a^2\)}
%     \assert{\(a\ge0\)}
% \end{struktogramm}
% \end{verbatimwrite}
% \begin{quote}
%     \verbatiminput{struktex.tmp}
% \end{quote}
% Das dazugeh"orige Struktogramm sieht folgenderma"sen aus:
% \begin{quote}
%     \input{struktex.tmp}
% \end{quote}%
% \else%
% The macro \cs{assert}  was introduced to support the verification of
% algorithms. It is active only if the option |verification| is set. It
% serves the purpose to assert the value of a variable at one point of the
% algorithm. The syntax corresponds to the syntax of \cs{assign}:
% \begin{quote}
%     \cs{assert}\oarg{height}\marg{assertion},
% \end{quote}
% It's usage can be seen from the following:
% \begin{verbatimwrite}{struktex.tmp}
% \begin{struktogramm}(70,20)[Assertions in structured box charts]
%     \assign{\(a\gets a^2\)}
%     \assert{\(a\ge0\)}
% \end{struktogramm}
% \sProofOff
% \end{verbatimwrite}
% \begin{quote}
%     \verbatiminput{struktex.tmp}
% \end{quote}
% The resulting structured box chart looks like
% \begin{quote}
%     \input{struktex.tmp}
% \end{quote}%
% \fi
%
%
% \section{\ifnum\language=\languageNGerman Beipieldatei zum Einbinden in die Dokumentation\label{Beispiel}
%             \else Example File for tieing in the Documentation\label{Example}
%             \fi}
%
% \ifnum\language=\languageNGerman
% Die folgenden Zeilen bilden eine Beispieldatei, die bei der Erstellung
% dieser Dokumentation ben"otigt wird.
% \else
% The following lines build up an example file, which is needed for the
% preparation of this documentation; there is only an german version.
% \fi
% \iffalse
%<*example1>
% \fi
%    \begin{macrocode}
\begin{struktogramm}(95,40)[Text]
    \case[10]{3}{3}{Signum(x)}{-1} 
         \assign{\(z \gets - \frac{1}{x}\)}
    \switch{0} 
         \assign{Ausgabe: Division durch 0} 
    \switch[r]{1} 
         \assign{\(z \gets \frac{1}{x}\)} \caseend
\end{struktogramm}
%    \end{macrocode}
% \iffalse
%</example1>
% \fi
%
% \section{\ifnum\language=\languageNGerman 
%     Verschiedene Beispieldateien
% \else 
%     Some Example Files
% \fi}
%
% \subsection[\ifnum\language=\languageNGerman Beispieldatei Nr. 1\else Example
% File No 1\fi]{\ifnum\language=\languageNGerman 
%     Beispieldatei zum Austesten der Makros des \StrukTeXSty{} ohne die
%     Benutzung optionaler Pakete
% \else 
%     Example File for Testing Purposes of the Macros of \StrukTeXSty{}
%     without any Optional Packages
% \fi}
%
% \changes{v4.1c}{95/07/24}{Eigene Datei zum Austesten der Makros integriert}
% \ifnum\language=\languageNGerman
% Die folgenden Zeilen bilden eine Musterdatei, die zum Austesten
% der Makros benutzt werden kann. Der Inhalt ist nur in Englisch 
% vorhanden.
% \else
% The following lines build up a model file, that can be used for testing 
% the macros.
% \fi
% \iffalse
%<*example2>
% \fi
%    \begin{macrocode}
\documentclass[draft]{article}
\usepackage{struktex}

\begin{document}

\begin{struktogramm}(90,137)
    \assign%
    {
      \begin{declaration}[]
          \description{\(a, b, c\)}{three variables which are to be sorted}
          \description{\(tmp\)}{temporary variable for the circular swap}
      \end{declaration}
    }
    \ifthenelse{1}{2}{\(a\le c\)}{j}{n}
    \change
    \assign{\(tmp\gets a\)}
    \assign{\(a\gets c\)}
    \assign{\(c\gets tmp\)}
    \ifend
    \ifthenelse{2}{1}{\(a\le b\)}{j}{n}
    \ifthenelse{1}{1}{\(b\le c\)}{j}{n}
    \change
    \assign{\(tmp\gets c\)}
    \assign{\(c\gets b\)}
    \assign{\(b\gets tmp\)}
    \ifend
    \change
    \assign{\(tmp\gets a\)}
    \assign{\(a\gets b\)}
    \assign{\(b\gets tmp\)}
    \ifend
\end{struktogramm}

\end{document}
%    \end{macrocode}
% \iffalse
%</example2>
% \fi
%
%
% \subsection[\ifnum\language=\languageNGerman Beispieldatei Nr. 2\else Example
% File No 2\fi]{\ifnum\language=\languageNGerman 
%     Beispieldatei zum Austesten der Makros des \StrukTeXSty{} mit dem Paket
%     \textsf{pict2e.sty}
% \else 
%     Example File for Testing Purposes of the Macros of \StrukTeXSty{}
%     with the package \textsf{pict2e.sty}
% \fi}
%%
% \changes{v4.1c}{95/07/24}{Eigene Datei zum Austesten der Makros integriert}
% \ifnum\language=\languageNGerman
% Die folgenden Zeilen bilden eine Musterdatei, die zum Austesten
% der Makros benutzt werden kann. Der Inhalt ist nur in Englisch 
% vorhanden.
% \else
% The following lines build up a template file, that can be used for testing 
% the macros.
% \fi
% \iffalse
%<*example3>
% \fi
%    \begin{macrocode}
\documentclass{article}
\usepackage[pict2e, verification]{struktex}

\begin{document}
\def\StruktBoxHeight{7}
%\sProofOn{}
\begin{struktogramm}(90,137)
    \assign%
    {
      \begin{declaration}[]
          \description{\(a, b, c\)}{three variables which are to be sorted}
          \description{\(tmp\)}{temporary variable for the circular swap}
      \end{declaration}
    }
    \assert[\StruktBoxHeight]{\sTrue}
    \ifthenelse[\StruktBoxHeight]{1}{2}{\(a\le c\)}{j}{n}
        \assert[\StruktBoxHeight]{\(a\le c\)}
    \change
        \assert[\StruktBoxHeight]{\(a>c\)}
        \assign[\StruktBoxHeight]{\(tmp\gets a\)}
        \assign[\StruktBoxHeight]{\(a\gets c\)}
        \assign[\StruktBoxHeight]{\(c\gets tmp\)}
        \assert[\StruktBoxHeight]{\(a<c\)}
    \ifend
    \assert[\StruktBoxHeight]{\(a\le c\)}
    \ifthenelse[\StruktBoxHeight]{2}{1}{\(a\le b\)}{j}{n}
        \assert[\StruktBoxHeight]{\(a\le b \wedge a\le c\)}
        \ifthenelse[\StruktBoxHeight]{1}{1}{\(b\le c\)}{j}{n}
            \assert[\StruktBoxHeight]{\(a\le b \le c\)}
        \change
            \assert[\StruktBoxHeight]{\(a \le  c<b\)}
            \assign[\StruktBoxHeight]{\(tmp\gets c\)}
            \assign[\StruktBoxHeight]{\(c\gets b\)}
            \assign[\StruktBoxHeight]{\(b\gets tmp\)}
            \assert[\StruktBoxHeight]{\(a\le b<c\)}
        \ifend
    \change
        \assert[\StruktBoxHeight]{\(b < a\le c\)}
        \assign[\StruktBoxHeight]{\(tmp\gets a\)}
        \assign[\StruktBoxHeight]{\(a\gets b\)}
        \assign[\StruktBoxHeight]{\(b\gets tmp\)}
        \assert[\StruktBoxHeight]{\(a<b\le c\)}
    \ifend
    \assert[\StruktBoxHeight]{\(a\le b \le c\)}
\end{struktogramm}

\end{document}
%    \end{macrocode}
%\iffalse
%</example3>
%\fi
%
% \subsection[\ifnum\language=\languageNGerman Beispieldatei Nr. 3\else Example
% File No 3\fi]{\ifnum\language=\languageNGerman 
%     Beispieldatei zum Austesten der Makros des \textsf{struktxp.sty}
% \else 
%     Example File for Testing the Macros of \textsf{struktxp.sty}
% \fi}
%
% \ifnum\language=\languageNGerman
% Die folgenden Zeilen bilden eine Musterdatei, die zum Austesten
% der Makros des \textsf{struktxp.sty} benutzt werden kann. Zum Testen
% sollten auch die Kommentarzeichen vor der Zeile
% |\usepackage[T1]{fontenc}| gel"oscht werden. Der Text ist nur in Englisch
% vorgegeben.
% \else
% The following lines build a model file, which can be used for testing the macros
% of \textsf{struktxp.sty}. For testing one should delete the comment characters
% before the line |\usepackage[T1]{fontenc}|.
% \fi
% \iffalse
%<*example4>
% \fi
%    \begin{macrocode}
\documentclass{article}

\usepackage{struktxp,struktxf}

\nofiles

\begin{document}

\pLanguage{Pascal}
\section*{Default values (Pascal):}

{\obeylines
Variables: \pVar{iV_g}, \sVar{zV^}, \pVariable{&i}
Keywords: \pKeyword{begin}, \pKey{while}, \sKey{__CPP__}
in math mode: \(\pVar{a}+\pVar{iV_g}\)
boolean values: \sTrue, \sFalse, \pTrue, \pFalse
}

\paragraph{After changing the boolean values with} 
\verb-\pBoolValue{yes}{no}-:

{\obeylines
\pBoolValue{yes}{no}
boolean values: \sTrue, \sFalse, \pTrue, \pFalse
}

\paragraph{after changing the fonts with} 
\verb-\pFonts{\itshape}{\sffamily\bfseries}{}-:

{\obeylines
\pFonts{\itshape}{\sffamily\bfseries}{}
Variables: \pVar{iV_g}, \sVar{zV^}, \pVariable{&i}
Keywords: \pKeyword{begin}, \pKey{while}, \sKey{__CPP__}
in math mode: \(\pVar{a}+\pVar{iV_g}\)
boolean values: \sTrue, \sFalse, \pTrue, \pFalse
}

\paragraph{after changing the fonts with} 
\verb-\pFonts{\ttfamily}{\ttfamily\bfseries}{\ttfamily\slshape}-:

{\obeylines
\pFonts{\ttfamily}{\ttfamily\bfseries}{\ttfamily\slshape}
Variables: \pVar{iV_g}, \sVar{zV^}, \pVariable{&i}
Keywords: \pKeyword{begin}, \pKey{while}, \sKey{__CPP__}
in math mode: \(\pVar{a}+\pVar{iV_g}\)
boolean values: \sTrue, \sFalse, \pTrue, \pFalse
}

\paragraph{after changing the fonts with} 
\verb-\pFonts{\itshape}{\bfseries\itshape}{}-:

{\obeylines
\pFonts{\itshape}{\bfseries\itshape}{}
Variables: \pVar{iV_g}, \sVar{zV^}, \pVariable{&i}
Keywords: \pKeyword{begin}, \pKey{while}, \sKey{__CPP__}
in math mode: \(\pVar{a}+\pVar{iV_g}\)
boolean values: \sTrue, \sFalse, \pTrue, \pFalse

\vspace{15pt}
Without \textit{italic correction}:
    M \pVar{M} M \pKey{M} M. \pVar{M}. M. \pKey{M}. M.
}

\pLanguage{C}
\pBoolValue{\texttt{WAHR}}{\texttt{FALSCH}}
\section*{Default values (C):}

{\obeylines
Variables: \pVar{iV_g}, \sVar{zV^}, \pVariable{&i}
Keywords: \pKeyword{begin}, \pKey{while}, \sKey{__CPP__}
in math mode: \(\pVar{a}+\pVar{iV_g}\)
boolean values: \sTrue, \sFalse, \pTrue, \pFalse
}

\paragraph{After changing the boolean values with} 
\verb-\pBoolValue{\texttt{yes}}{\texttt{no}}-:

{\obeylines
\pBoolValue{\texttt{yes}}{\texttt{no}}
boolean values: \sTrue, \sFalse, \pTrue, \pFalse
}

\paragraph{after changing the fonts with} 
\verb-\pFonts{\itshape}{\sffamily\bfseries}{}-:

{\obeylines
\pFonts{\itshape}{\sffamily\bfseries}{}
Variables: \pVar{iV_g}, \sVar{zV^}, \pVariable{&i}
Keywords: \pKeyword{begin}, \pKey{while}, \sKey{__CPP__}
in math mode: \(\pVar{a}+\pVar{iV_g}\)
boolean values: \sTrue, \sFalse, \pTrue, \pFalse
}

\paragraph{after changing the fonts with} 
\verb-\pFonts{\ttfamily}{\ttfamily\bfseries}{\ttfamily\slshape}-:

{\obeylines
\pFonts{\ttfamily}{\ttfamily\bfseries}{\ttfamily\slshape}
Variables: \pVar{iV_g}, \sVar{zV^}, \pVariable{&i}
Keywords: \pKeyword{begin}, \pKey{while}, \sKey{__CPP__}
in math mode: \(\pVar{a}+\pVar{iV_g}\)
boolean values: \sTrue, \sFalse, \pTrue, \pFalse
}

\paragraph{after changing the fonts with} 
\verb-\pFonts{\itshape}{\bfseries\itshape}{}-:

{\obeylines
\pFonts{\itshape}{\bfseries\itshape}{}
Variables: \pVar{iV_g}, \sVar{zV^}, \pVariable{&i}
Keywords: \pKeyword{begin}, \pKey{while}, \sKey{__CPP__}
in math mode: \(\pVar{a}+\pVar{iV_g}\)
boolean values: \sTrue, \sFalse, \pTrue, \pFalse

\vspace{15pt}
Without \textit{italic correction}:
    M \pVar{M} M \pKey{M} M. \pVar{M}. M. \pKey{M}. M.
}

\pLanguage{Java}
\pBoolValue{\texttt{WAHR}}{\texttt{FALSCH}}
\section*{Default values (Java):}

{\obeylines
Variables: \pVar{iV_g}, \sVar{zV^}, \pVariable{&i}
Keywords: \pKeyword{begin}, \pKey{while}, \sKey{__CPP__}
in math mode: \(\pVar{a}+\pVar{iV_g}\)
boolean values: \sTrue, \sFalse, \pTrue, \pFalse
}

\paragraph{After changing the boolean values with} 
\verb-\pBoolValue{\texttt{yes}}{\texttt{no}}-:

{\obeylines
\pBoolValue{\texttt{yes}}{\texttt{no}}
boolean values: \sTrue, \sFalse, \pTrue, \pFalse
}

\paragraph{after changing the fonts with} 
\verb-\pFonts{\itshape}{\sffamily\bfseries}{}-:

{\obeylines
\pFonts{\itshape}{\sffamily\bfseries}{}
Variables: \pVar{iV_g}, \sVar{zV^}, \pVariable{&i}
Keywords: \pKeyword{begin}, \pKey{while}, \sKey{__CPP__}
in math mode: \(\pVar{a}+\pVar{iV_g}\)
boolean values: \sTrue, \sFalse, \pTrue, \pFalse
}

\paragraph{after changing the fonts with} 
\verb-\pFonts{\ttfamily}{\ttfamily\bfseries}{\ttfamily\slshape}-:

{\obeylines
\pFonts{\ttfamily}{\ttfamily\bfseries}{\ttfamily\slshape}
Variables: \pVar{iV_g}, \sVar{zV^}, \pVariable{&i}
Keywords: \pKeyword{begin}, \pKey{while}, \sKey{__CPP__}
in math mode: \(\pVar{a}+\pVar{iV_g}\)
boolean values: \sTrue, \sFalse, \pTrue, \pFalse
}

\paragraph{after changing the fonts with} 
\verb-\pFonts{\itshape}{\bfseries\itshape}{}-:

{\obeylines
\pFonts{\itshape}{\bfseries\itshape}{}
Variables: \pVar{iV_g}, \sVar{zV^}, \pVariable{&i}
Keywords: \pKeyword{begin}, \pKey{while}, \sKey{__CPP__}
in math mode: \(\pVar{a}+\pVar{iV_g}\)
boolean values: \sTrue, \sFalse, \pTrue, \pFalse

\vspace{15pt}
Without \textit{italic correction}:
    M \pVar{M} M \pKey{M} M. \pVar{M}. M. \pKey{M}. M.
}

\pLanguage{Python}
\pBoolValue{\texttt{WAHR}}{\texttt{FALSCH}}
\section*{Default values (Python):}

{\obeylines
Variables: \pVar{iV_g}, \sVar{zV^}, \pVariable{&i}
Keywords: \pKeyword{begin}, \pKey{while}, \sKey{__CPP__}
in math mode: \(\pVar{a}+\pVar{iV_g}\)
boolean values: \sTrue, \sFalse, \pTrue, \pFalse
}

\paragraph{After changing the boolean values with} 
\verb-\pBoolValue{\texttt{yes}}{\texttt{no}}-:

{\obeylines
\pBoolValue{\texttt{yes}}{\texttt{no}}
boolean values: \sTrue, \sFalse, \pTrue, \pFalse
}

\paragraph{after changing the fonts with} 
\verb-\pFonts{\itshape}{\sffamily\bfseries}{}-:

{\obeylines
\pFonts{\itshape}{\sffamily\bfseries}{}
Variables: \pVar{iV_g}, \sVar{zV^}, \pVariable{&i}
Keywords: \pKeyword{begin}, \pKey{while}, \sKey{__CPP__}
in math mode: \(\pVar{a}+\pVar{iV_g}\)
boolean values: \sTrue, \sFalse, \pTrue, \pFalse
}

\paragraph{after changing the fonts with} 
\verb-\pFonts{\ttfamily}{\ttfamily\bfseries}{\ttfamily\slshape}-:

{\obeylines
\pFonts{\ttfamily}{\ttfamily\bfseries}{\ttfamily\slshape}
Variables: \pVar{iV_g}, \sVar{zV^}, \pVariable{&i}
Keywords: \pKeyword{begin}, \pKey{while}, \sKey{__CPP__}
in math mode: \(\pVar{a}+\pVar{iV_g}\)
boolean values: \sTrue, \sFalse, \pTrue, \pFalse
}

\paragraph{after changing the fonts with} 
\verb-\pFonts{\itshape}{\bfseries\itshape}{}-:

{\obeylines
\pFonts{\itshape}{\bfseries\itshape}{}
Variables: \pVar{iV_g}, \sVar{zV^}, \pVariable{&i}
Keywords: \pKeyword{begin}, \pKey{while}, \sKey{__CPP__}
in math mode: \(\pVar{a}+\pVar{iV_g}\)
boolean values: \sTrue, \sFalse, \pTrue, \pFalse

\vspace{15pt}
Without \textit{italic correction}:
    M \pVar{M} M \pKey{M} M. \pVar{M}. M. \pKey{M}. M.
}

\end{document}
%%
%% End of file `struktex-test-2.tex'.
%    \end{macrocode}
% \iffalse
%</example4>
% \fi
%
%
% \subsection[\ifnum\language=\languageNGerman Beispieldatei Nr. 4\else Example
% File No 4\fi]{\ifnum\language=\languageNGerman 
%     Beispieldatei zum Austesten der Makros des \textsf{struktxp.sty}
% \else 
%     Example File for Testing the Macros of \textsf{struktxp.sty}
% \fi}
%
% \ifnum\language=\languageNGerman
% Die folgenden Zeilen werden in einem anderen Zusammenhang benutzt,
% Java-Methoden zu dokumentieren. An dieser Stelle wird ein eigener Weg
% gew"ahlt, da das sonst "ubliche Arbeiten mit |lstinline| zu Fehlern f"uhrt. 
% \else
% \fi
% \iffalse
%<*example5>
% \fi
%    \begin{macrocode}
\documentclass{article}

\usepackage{struktxp,struktxf}

\makeatletter
\newlength{\fdesc@len}
\newcommand{\fdesc@label}[1]%
{%
    \settowidth{\fdesc@len}{{\fdesc@font #1}}%
    \advance\hsize by -2em
    \ifdim\fdesc@len>\hsize%               % term > labelwidth
        \parbox[b]{\hsize}%
        {%
            \fdesc@font #1%
        }\\%
    \else%                                      % term < labelwidth
    \ifdim\fdesc@len>\labelwidth%               % term > labelwidth
        \parbox[b]{\labelwidth}%
        {%
            \makebox[0pt][l]{{\fdesc@font #1}}\\%
        }%
    \else%                                      % term < labelwidth
        {\fdesc@font #1}%
    \fi\fi%
    \hfil\relax%
}
\newenvironment{fdescription}[1][\tt]%
{%
    \def\fdesc@font{#1}
    \begin{quote}%
    \begin{list}{}%
    {%
        \renewcommand{\makelabel}{\fdesc@label}%
        \setlength{\labelwidth}{120pt}%
        \setlength{\leftmargin}{\labelwidth}%
        \addtolength{\leftmargin}{\labelsep}%
    }%
}%
{%
    \end{list}%
    \end{quote}%
}
\makeatother

\pLanguage{Java}

\begin{document}

\begin{fdescription}
 \item[\index{Methoden>drawImage(Image img,
                                    int dx1,
                                    int dy1,
                                    int dx2,
                                    int dy2,
                                    int sx1,
                                    int sy1,
                                    int sx2,
                                    int sy2,
                                    ImageObserver observer)=%
       \Expr{\pKey{public} \pKey{abstract} \pKey{boolean} drawImage(Image img,
                                    \pKey{int} dx1,
                                    \pKey{int} dy1,
                                    \pKey{int} dx2,
                                    \pKey{int} dy2,
                                    \pKey{int} sx1,
                                    \pKey{int} sy1,
                                    \pKey{int} sx2,
                                    \pKey{int} sy2,
                                    ImageObserver observer)}}%
       \pExp{public abstract boolean drawImage(Image img, int dx1, int
         dy1, int dx1, int dy2, int sx1, int sy1, int sx2, int sy2,
         ImageObserver observer)}]%
 \ldots    
\end{fdescription}
\end{document}
%%
%% End of file `struktex-test-5.tex'.
%    \end{macrocode}
% \iffalse
%</example5>
% \fi
%
% \section{\ifnum\language=\languageNGerman 
%     Makros zur Erstellung der Dokumentation des \StrukTeXSty
% \else 
%     Macros for Generating the Documentation of the \StrukTeXSty
% \fi}
%
% \ifnum\language=\languageNGerman
% Um die Formatierung der Dokumentation ein wenig zu erleichtern, werden ein
% paar Makros benutzt, die in einer eigenen \textsf{.sty}-Datei
% zusammengefasst wurden. Ein wesentlicher Teil beruht auf einer
% Modifikation der \texttt{newtheorem}-Umgebung aus \textsf{latex.sty} zur
% Auszeichnung der Beispiele, die Implementation der Abk"urzungen wurde in
% \cite{Neubauer:MikrotypographieI} vorgeschlagen.
% \else
% For easier formatting of documentation some macros are used,
% which are collected in a particular \textsf{.sty} file. An essential part
% is based on
% a modification of the \texttt{newtheorem} environment out of \textsf{latex.sty}
% for distinguishing examples. The implementation of abbreviations has been
% proposed in \cite{Neubauer:MikrotypographieI}.
% \fi
%
% \ifnum\language=\languageNGerman
% Dazu wurden aus dem \textsf{verbatim.sty} einige Kommandos "ubernommen
% und modifiziert, damit das Schreiben und Lesen von Dateien im
% |verbatim|-Modus auch im Zusammenhang mit dem |docstrip|-Paket
% funktioniert. Schlie"slich wurde auch noch eine Idee von Tobias Oetiker
% aus seinem \textsf{layout.sty}, der im Zusammenhang mit
% \foreign{lshort2e.tex - The not so short introduction to LaTeX2e}
% entstand, zum parallelen Setzen von Quelle und formatiertem Text genutzt.
% \else
% Therefore some instructions of \textsf{verbatim.sty} have been adopted and
% modified, so that writing and reading by the |docstrip| package works.
% Finally an idea of Tobias Oetiker out of \textsf{layout.sty} also has been used,
% which has been developed in connection with \foreign{lshort2e.tex - The not
% so short introduction to LaTeX2e}.
% \fi
% \changes{v8.0e}{05/05/17}{nun wird die .pdf-Ausgabe sauber abgefangen}
%    \begin{macrocode}
%<*strukdoc>
\RequirePackage{ifpdf}
\ProvidesPackage{strukdoc}
             [\filedate\space\fileversion\space (Jobst Hoffmann)]
\newif\ifcolor \IfFileExists{color.sty}{\colortrue}{}
\ifpdf \RequirePackage[colorlinks]{hyperref}\else
    \def\href#1{\texttt}\fi
\ifcolor \RequirePackage{color}\fi
\RequirePackage{nameref}
\RequirePackage{url}
\renewcommand\ref{\protect\T@ref}
\renewcommand\pageref{\protect\T@pageref}
\@ifundefined{zB}{}{\endinput}
\providecommand\pparg[2]{%
  {\ttfamily(}\meta{#1},\meta{#2}{\ttfamily)}}
\providecommand\envb[1]{%
  {\ttfamily\char`\\begin\char`\{#1\char`\}}}
\providecommand\enve[1]{%
  {\ttfamily\char`\\end\char`\{#1\char`\}}}
\newcommand{\zBspace}{z.\,B.}
\let\zB=\zBspace
\newcommand{\dhspace}{d.\,h.}
\let\dh=\dhspace
\let\foreign=\textit
\newcommand\Abb[1]{Abbildung~\ref{#1}}
\def\newexample#1{%
  \@ifnextchar[{\@oexmpl{#1}}{\@nexmpl{#1}}}
\def\@nexmpl#1#2{%
  \@ifnextchar[{\@xnexmpl{#1}{#2}}{\@ynexmpl{#1}{#2}}}
\def\@xnexmpl#1#2[#3]{%
  \expandafter\@ifdefinable\csname #1\endcsname
    {\@definecounter{#1}\@newctr{#1}[#3]%
     \expandafter\xdef\csname the#1\endcsname{%
       \expandafter\noexpand\csname the#3\endcsname \@exmplcountersep
          \@exmplcounter{#1}}%
     \global\@namedef{#1}{\@exmpl{#1}{#2}}%
     \global\@namedef{end#1}{\@endexample}}}
\def\@ynexmpl#1#2{%
  \expandafter\@ifdefinable\csname #1\endcsname
    {\@definecounter{#1}%
     \expandafter\xdef\csname the#1\endcsname{\@exmplcounter{#1}}%
     \global\@namedef{#1}{\@exmpl{#1}{#2}}%
     \global\@namedef{end#1}{\@endexample}}}
\def\@oexmpl#1[#2]#3{%
  \@ifundefined{c@#2}{\@nocounterr{#2}}%
    {\expandafter\@ifdefinable\csname #1\endcsname
    {\global\@namedef{the#1}{\@nameuse{the#2}}%
  \global\@namedef{#1}{\@exmpl{#2}{#3}}%
  \global\@namedef{end#1}{\@endexample}}}}
\def\@exmpl#1#2{%
  \refstepcounter{#1}%
  \@ifnextchar[{\@yexmpl{#1}{#2}}{\@xexmpl{#1}{#2}}}
\def\@xexmpl#1#2{%
  \@beginexample{#2}{\csname the#1\endcsname}\ignorespaces}
\def\@yexmpl#1#2[#3]{%
  \@opargbeginexample{#2}{\csname the#1\endcsname}{#3}\ignorespaces}
\def\@exmplcounter#1{\noexpand\arabic{#1}}
\def\@exmplcountersep{.}
\def\@beginexample#1#2{%
    \@nobreaktrue\list{}{\setlength{\rightmargin}{\leftmargin}}%
    \item[{\bfseries #1\ #2}]\mbox{}\\\sf}
\def\@opargbeginexample#1#2#3{%
    \@nobreaktrue\list{}{\setlength{\rightmargin}{\leftmargin}}%
    \item[{\bfseries #1\ #2}\ (#3)]\mbox{}\\\sf}
\def\@endexample{\endlist}

\newexample{tExample}{\ifnum\language=\languageNGerman Beispiel\else Example\fi}

\newwrite\struktex@out
\newenvironment{example}%
 {\begingroup% Lets keep the changes local
  \@bsphack
  \immediate\openout \struktex@out \jobname.tmp
  \let\do\@makeother\dospecials\catcode`\^^M\active
  \def\verbatim@processline{%
    \immediate\write\struktex@out{\the\verbatim@line}}%
  \verbatim@start}%
 {\immediate\closeout\struktex@out\@esphack\endgroup%
%
% And here comes the part of Tobias Oetiker
%
  \par\small\addvspace{3ex plus 1ex}\vskip -\parskip
  \noindent
  \makebox[0.45\linewidth][l]{%
  \begin{minipage}[t]{0.45\linewidth}
    \vspace*{-2ex}
    \setlength{\parindent}{0pt}
    \setlength{\parskip}{1ex plus 0.4ex minus 0.2ex}
    \begin{trivlist}
      \item\input{\jobname.tmp}
    \end{trivlist}
  \end{minipage}}%
  \hfill%
  \makebox[0.5\linewidth][l]{%
  \begin{minipage}[t]{0.50\linewidth}
    \vspace*{-1ex}
    \verbatiminput{\jobname.tmp}
  \end{minipage}}
  \par\addvspace{3ex plus 1ex}\vskip -\parskip
}

\newtoks\verbatim@line
\def\verbatim@startline{\verbatim@line{}}
\def\verbatim@addtoline#1{%
  \verbatim@line\expandafter{\the\verbatim@line#1}}
\def\verbatim@processline{\the\verbatim@line\par}
\def\verbatim@finish{\ifcat$\the\verbatim@line$\else
  \verbatim@processline\fi}

\def\verbatimwrite#1{%
  \@bsphack
  \immediate\openout \struktex@out #1
  \let\do\@makeother\dospecials
  \catcode`\^^M\active \catcode`\^^I=12
  \def\verbatim@processline{%
    \immediate\write\struktex@out
      {\the\verbatim@line}}%
  \verbatim@start}
\def\endverbatimwrite{%
  \immediate\closeout\struktex@out
  \@esphack}

\@ifundefined{vrb@catcodes}%
  {\def\vrb@catcodes{%
     \catcode`\!12\catcode`\[12\catcode`\]12}}{}
\begingroup
 \vrb@catcodes
 \lccode`\!=`\\ \lccode`\[=`\{ \lccode`\]=`\}
 \catcode`\~=\active \lccode`\~=`\^^M
 \lccode`\C=`\C
 \lowercase{\endgroup
    \def\verbatim@start#1{%
      \verbatim@startline
      \if\noexpand#1\noexpand~%
        \let\next\verbatim@
      \else \def\next{\verbatim@#1}\fi
      \next}%
    \def\verbatim@#1~{\verbatim@@#1!end\@nil}%
    \def\verbatim@@#1!end{%
       \verbatim@addtoline{#1}%
       \futurelet\next\verbatim@@@}%
    \def\verbatim@@@#1\@nil{%
       \ifx\next\@nil
         \verbatim@processline
         \verbatim@startline
         \let\next\verbatim@
       \else
         \def\@tempa##1!end\@nil{##1}%
         \@temptokena{!end}%
         \def\next{\expandafter\verbatim@test\@tempa#1\@nil~}%
       \fi \next}%
    \def\verbatim@test#1{%
           \let\next\verbatim@test
           \if\noexpand#1\noexpand~%
             \expandafter\verbatim@addtoline
               \expandafter{\the\@temptokena}%
             \verbatim@processline
             \verbatim@startline
             \let\next\verbatim@
           \else \if\noexpand#1
             \@temptokena\expandafter{\the\@temptokena#1}%
           \else \if\noexpand#1\noexpand[%
             \let\@tempc\@empty
             \let\next\verbatim@testend
           \else
             \expandafter\verbatim@addtoline
               \expandafter{\the\@temptokena}%
             \def\next{\verbatim@#1}%
           \fi\fi\fi
           \next}%
    \def\verbatim@testend#1{%
         \if\noexpand#1\noexpand~%
           \expandafter\verbatim@addtoline
             \expandafter{\the\@temptokena[}%
           \expandafter\verbatim@addtoline
             \expandafter{\@tempc}%
           \verbatim@processline
           \verbatim@startline
           \let\next\verbatim@
         \else\if\noexpand#1\noexpand]%
           \let\next\verbatim@@testend
         \else\if\noexpand#1\noexpand!%
           \expandafter\verbatim@addtoline
             \expandafter{\the\@temptokena[}%
           \expandafter\verbatim@addtoline
             \expandafter{\@tempc}%
           \def\next{\verbatim@!}%
         \else \expandafter\def\expandafter\@tempc\expandafter
           {\@tempc#1}\fi\fi\fi
         \next}%
    \def\verbatim@@testend{%
       \ifx\@tempc\@currenvir
         \verbatim@finish
         \edef\next{\noexpand\end{\@currenvir}%
                    \noexpand\verbatim@rescan{\@currenvir}}%
       \else
         \expandafter\verbatim@addtoline
           \expandafter{\the\@temptokena[}%
           \expandafter\verbatim@addtoline
             \expandafter{\@tempc]}%
         \let\next\verbatim@
       \fi
       \next}%
    \def\verbatim@rescan#1#2~{\if\noexpand~\noexpand#2~\else
        \@warning{Characters dropped after `\string\end{#1}'}\fi}}

\newread\verbatim@in@stream
\def\verbatim@readfile#1{%
  \verbatim@startline
  \openin\verbatim@in@stream #1\relax
  \ifeof\verbatim@in@stream
    \typeout{No file #1.}%
  \else
    \@addtofilelist{#1}%
    \ProvidesFile{#1}[(verbatim)]%
    \expandafter\endlinechar\expandafter\m@ne
    \expandafter\verbatim@read@file
    \expandafter\endlinechar\the\endlinechar\relax
    \closein\verbatim@in@stream
  \fi
  \verbatim@finish
}
\def\verbatim@read@file{%
  \read\verbatim@in@stream to\next
  \ifeof\verbatim@in@stream
  \else
    \expandafter\verbatim@addtoline\expandafter{\expandafter\check@percent\next}%
    \verbatim@processline
    \verbatim@startline
    \expandafter\verbatim@read@file
  \fi
}
\def\verbatiminput{\begingroup\MacroFont
  \@ifstar{\verbatim@input\relax}%
          {\verbatim@input{\frenchspacing\@vobeyspaces}}}
\def\verbatim@input#1#2{%
   \IfFileExists {#2}{\@verbatim #1\relax
    \verbatim@readfile{\@filef@und}\endtrivlist\endgroup\@doendpe}%
   {\typeout {No file #2.}\endgroup}}
%    \end{macrocode}
% \iffalse
%</strukdoc>
% \fi
%
%
% \section[Makefile]{\ifnum\language=\languageNGerman 
%   Makefile zur automatisierten Erstellung der Dokumentation und der Tests 
%   des \StrukTeXSty
% \else 
%   Makefile for the automized generation of the documentation and the tests 
%   of the \StrukTeXSty
% \fi}
% \label{sec:Makefile}
% \changes{v8.2a}{06/01/19}{HOMETEXMF $\rightarrow$ TEXMFHOME}
% \changes{v8.0b}{04/07/14}{.pdf-Ausgabe eingef"uhrt}
%
% \ifnum\language=\languageNGerman
% Der Umgang mit \textsf{.dtx}-Paketen ist wesentlich einfacher, wenn ein
% Werkzeug f"ur die Automatisierung der wesentlichen Schritte vorliegt. F"ur
% Unix/Linux basierte Systeme ist das mit |make| und einem geeigneten
% |Makefile| einfach zu realisieren. Hier wird der |Makefile| in die
% Dokumentation integriert, die spezielle Syntax mit Tabulatorzeichen wird
% durch ein Hilfsprogramm erzeugt, das weiter unten angegeben ist. Auf die
% Benutzung des |Makefile| wird hier nicht weiter eingegangen, da der
% erfahrene Benutzer des Werkzeugs diese aus der Datei selbst entnehmen kann.
% \else
% \fi
%
% \changes{v8.0e}{05/05/17}{Tippfehler korrigiert: \$\$\$f $\rightarrow$ \$\$f}
% \changes{v8.0e}{05/05/17}{\& mit Fluchtzeichen versehen}
% \iffalse
%<*makefile>
% \fi
%    \begin{macrocode}
#-----------------------------------------------------------------------
# Purpose: generation of the documentation of the struktex package
# Notice:  this file can be used only with dmake and the option "-B";
#          this option lets dmake interpret the leading spaces as 
#          distinguishing characters for commands in the make rules.
#
# Rules:
#          - all-de:     generate all the files and the (basic) german 
#                        documentation
#          - all-en:     generate all the files and the (basic) english 
#                        documentation
#          - test:       format the examples
#          - history:    generate the documentation with revision 
#                        history
#          - develop-de: generate the german documentation with revision
#                        history and source code
#          - develop-en: generate the english documentation with 
#                        revision history and source code
#          - realclean
#          - clean
#          - clean-example
#
# Author:  Jobst Hoffmann, Fachhochschule Aachen, Abt. Juelich
# Date:    2003/04/18
#-----------------------------------------------------------------------

# The texmf-directory, where to install new stuff (see texmf.cnf)
# If you don't know what to do, search for directory texmf at /usr.
# With teTeX and linux often one of following is used:
#INSTALLTEXMF=/usr/TeX/texmf
#INSTALLTEXMF=/usr/local/TeX/texmf
#INSTALLTEXMF=/usr/share/texmf
#INSTALLTEXMF=/usr/local/share/texmf
# user tree:
#INSTALLTEXMF=$(HOME)/texmf
# Try to use user's tree known by kpsewhich:
INSTALLTEXMF=`kpsewhich --expand-var '$$TEXMFHOME'`
# Try to use the local tree known by kpsewhich:
#INSTALLTEXMF=`kpsewhich --expand-var '$$TEXMFLOCAL'`
# But you may set INSTALLTEXMF to every directory you want. 
# Use following, if you only want to test the installation:
#INSTALLTEXMF=/tmp/texmf

# If texhash must run after installation, you can invoke this:
TEXHASH=texhash

######### Edit following only, if you want to change defaults!

# The directory, where to install *.cls and *.sty
CLSDIR=$(INSTALLTEXMF)/tex/latex/jhf/$(PACKAGE)

# The directory, where to install documentation
DOCDIR=$(INSTALLTEXMF)/doc/latex/jhf/$(PACKAGE)

# The directory, where to install the sources
SRCDIR=$(INSTALLTEXMF)/source/latex/jhf/$(PACKAGE)

# The directory, where to install demo-files
# If we have some, we have to add following 2 lines to install rule:
#     $(MKDIR) $(DEMODIR); \
#     $(INSTALL) $(DEMO_FILES) $(DEMODIR); \
DEMODIR=$(DOCDIR)/demo

# We need this, because the documentation needs the classes and packages
# It's not really a good solution, but it's a working solution.
TEXINPUTS := $(PWD):$(TEXINPUTS)

# To generate the version number of the distribution from the source 
VERSION_L := latex getversion | grep '^VERSION'
VERSION_S := `latex getversion | grep '^VERSION' | sed 's+^VERSION \\(.*\\)\\.\\(.*\\) of .*+\\1_\\2+'`
########################################################################
#   End of customization section                     
########################################################################

DVIPS = dvips
LATEX = latex
PDFLATEX = pdflatex

# postscript viewer
GV = gv

COMMON_OPTIONS = \OnlyDescription\CodelineNumbered
HISTORY_OPTIONS = \RecordChanges
DEVELOPER_OPTIONS = \EnableCrossrefs\RecordChanges\AlsoImplementation\CodelineIndex

PACKAGE = struktex

all-de: $(PACKAGE).de.pdf

all-en: $(PACKAGE).en.pdf

# strip off the comments from the package
$(PACKAGE).sty $(PACKAGE)-test-*.tex: $(PACKAGE).dtx

$(PACKAGE).sty $(PACKAGE)-test-*.tex: $(PACKAGE).ins
 +$(LATEX) $<

# generate the documentation
$(PACKAGE).dvi: $(PACKAGE).sty

$(PACKAGE).de.dvi: $(PACKAGE).dtx
 +$(LATEX) "\AtBeginDocument{$(COMMON_OPTIONS)}\input{$<}"
 +$(LATEX) "\AtBeginDocument{$(COMMON_OPTIONS)}\input{$<}"
 +mv $(<:.dtx=.dvi) $(<:.dtx=.de.dvi)

$(PACKAGE).de.pdf: $(PACKAGE).dtx
 +$(PDFLATEX) "\AtBeginDocument{$(COMMON_OPTIONS)}\input{$<}"
 +$(PDFLATEX) "\AtBeginDocument{$(COMMON_OPTIONS)}\input{$<}"
 +mv $(<:.dtx=.pdf) $(<:.dtx=.de.pdf)

$(PACKAGE).en.dvi: $(PACKAGE).dtx
 +$(LATEX) "\AtBeginDocument{$(COMMON_OPTIONS)}\def\selectlanguageEnglish{}\input{$<}"
 +$(LATEX) "\AtBeginDocument{$(COMMON_OPTIONS)}\def\selectlanguageEnglish{}\input{$<}"
 +mv $(<:.dtx=.dvi) $(<:.dtx=.en.dvi)

$(PACKAGE).en.pdf: $(PACKAGE).dtx
 +$(PDFLATEX) "\AtBeginDocument{$(COMMON_OPTIONS)}\def\selectlanguageEnglish{}\input{$<}"
 +$(PDFLATEX) "\AtBeginDocument{$(COMMON_OPTIONS)}\def\selectlanguageEnglish{}\input{$<}"
 +mv $(<:.dtx=.pdf) $(<:.dtx=.en.pdf)

# generate the documentation with revision history (only german)
history: $(PACKAGE).dtx
 +$(LATEX) "\AtBeginDocument{$(COMMON_OPTIONS)$(HISTORY_OPTIONS)}\input{$<}"
 +$(LATEX) "\AtBeginDocument{$(COMMON_OPTIONS)$(HISTORY_OPTIONS)}\input{$<}"
 +makeindex -s gind.ist                 $(PACKAGE).idx
 +makeindex -s gglo.ist -o $(PACKAGE).gls -t $(PACKAGE).glg $(PACKAGE).glo
 +$(LATEX) "\AtBeginDocument{$(COMMON_OPTIONS)$(HISTORY_OPTIONS)}\input{$<}"

# generate the documentation for the developer (revision history always 
# in german)
develop-de: $(PACKAGE).dtx
 +$(LATEX) "\AtBeginDocument{$(HISTORY_OPTIONS)$(DEVELOPER_OPTIONS)}\input{$<}"
 +$(LATEX) "\AtBeginDocument{$(HISTORY_OPTIONS)$(DEVELOPER_OPTIONS)}\input{$<}"
 +makeindex -s gind.ist                 $(PACKAGE).idx
 +makeindex -s gglo.ist -o $(PACKAGE).gls -t $(PACKAGE).glg $(PACKAGE).glo
 +$(LATEX) "\AtBeginDocument{$(HISTORY_OPTIONS)$(DEVELOPER_OPTIONS)}\input{$<}"
ifneq (,$(findstring pdf,$(LATEX)))
 +mv $(<:.dtx=.pdf) $(<:.dtx=.de.pdf)
else
 +mv $(<:.dtx=.dvi) $(<:.dtx=.de.dvi)
endif

develop-en: $(PACKAGE).dtx
 +$(LATEX) "\AtBeginDocument{$(COMMON_OPTIONS)$(DEVELOPER_OPTIONS)}\def\selectlanguageEnglish{}\input{$<}"
 +$(LATEX) "\AtBeginDocument{$(COMMON_OPTIONS)$(DEVELOPER_OPTIONS)}\def\selectlanguageEnglish{}\input{$<}"
 +makeindex -s gind.ist                 $(PACKAGE).idx
 +makeindex -s gglo.ist -o $(PACKAGE).gls -t $(PACKAGE).glg $(PACKAGE).glo
 +$(LATEX) "\AtBeginDocument{$(COMMON_OPTIONS)$(DEVELOPER_OPTIONS)}\def\selectlanguageEnglish{}\input{$<}"
ifneq (,$(findstring pdf,$(LATEX)))
 +mv $(<:.dtx=.pdf) $(<:.dtx=.en.pdf)
else
 +mv $(<:.dtx=.dvi) $(<:.dtx=.en.dvi)
endif

# format the example/test files 
test:
 for i in `seq 1 3`; do \
     f=$(PACKAGE)-test-$$i; \
     echo file: $$f; \
     $(LATEX) $$f; \
     $(DVIPS) -o $$f.ps $$f.dvi; \
     $(GV) $$f.ps \&; \
 done

install: $(PACKAGE).dtx $(PACKAGE).dvi
 [ -d $(CLSDIR) ] || mkdir -p $(CLSDIR)
 [ -d $(DOCDIR) ] || mkdir -p $(DOCDIR)
 [ -d $(SRCDIR) ] || mkdir -p $(SRCDIR)
 cp $(PACKAGE).sty      $(CLSDIR)
 cp $(PACKAGE).dvi      $(DOCDIR)
 cp $(PACKAGE).ins      $(SRCDIR)
 cp $(PACKAGE).dtx      $(SRCDIR)
 cp $(PACKAGE)-test-*.tex   $(SRCDIR)
 cp LIESMICH        $(SRCDIR)
 cp README          $(SRCDIR)
 cp THIS-IS-VERSION-$(VERSION)  $(SRCDIR)

uninstall:
 rm -f  $(CLSDIR)/$(PACKAGE).sty
 rm -fr $(DOCDIR)
 rm -fr $(SRCDIR)

dist: $(PACKAGE).de.pdf $(PACKAGE).en.pdf  $(PACKAGE).dtx  $(PACKAGE).ins \
LIESMICH README
 + rm -f THIS_IS_VERSION_*
 + $(VERSION_L) > THIS_IS_VERSION_$(VERSION_S)
 + tar cfvz  $(PACKAGE)-$(VERSION_S).tgz $^ THIS_IS_VERSION_*
 + rm getversion.log

clean:
 -rm -f *.log *.aux *.brf *.idx *.ilg *.ind
 -rm -f *.glg *.glo *.gls *.lof *.lot *.out *.toc *.tmp *~
 -rm *.mk *.makemake

realclean:  clean
 -rm -f *.sty *.cls *.ps *.dvi *.pdf
 -rm -f *test* getversion.* Makefile

clean-test:
 rm $(PACKAGE)-test-*.* # this $-sign is needed for font-locking in XEmacs only
%    \end{macrocode} 
% \iffalse
%</makefile>
% \fi
%
% \ifnum\language=\languageNGerman
% Die folgende Zeile, die nach |latex struktex.ins| als Datei 
% |struktex.makemake| vorliegt, kann mit dem Kommando
% \begin{verbatim}
% sh struktex.makemake
% \end{verbatim}
% dazu benutzt werden, die obige Datei in ein Format umzusetzen, das von
% "ublichen make-Programmen wie dem GNU |make| verarbeitet werden kann.
% \else
% The following line -- stripped off as |struktex.makemake| -- can
% be used with the command
% \begin{verbatim}
% sh struktex.makemake
% \end{verbatim}
% to generate the file |Makefile|, which can be further used to
% generate the documentation with a common |make| like the GNU |make|.
% \fi
% \iffalse
%<*setup>
% \fi 
%    \begin{macrocode}
sed -e "`echo \"s/^ /@/g\" | tr '@' '\011'`" struktex.mk > Makefile 
%    \end{macrocode}
% \iffalse
%</setup>
% \fi
% \ifnum\language=\languageNGerman
% Die folgende Datei dient allein dazu, die Version des Paketes zu
% ermitteln.
% \else
% The following file only serves to get the version of the package.
% \fi
% \iffalse
%<*getversion>
% \fi 
%    \begin{macrocode}
\documentclass{ltxdoc}
\nofiles
\usepackage{struktex}
\GetFileInfo{struktex.sty}
\typeout{VERSION \fileversion\space of \filedate}
\begin{document}
\end{document}
%    \end{macrocode}
% \iffalse
%</getversion>
% \fi
%
%
% \changes{v8.3}{06/08/18}{struktex.el erweitert, so dass die Parameter
% alle Kommandos automatisch abgefragt werden.}
% \section{\ifnum\language=\languageNGerman Stil Datei zur einfachen
% Eingabe von Struktogrammen beim Arbeiten mit dem (X)emacs und AUC\TeX\label{AUCTeX}
% \else Style File for Easier Input while working with (X)emacs
% and AUC\TeX\label{AUCTeX}
% \fi}
%
% \ifnum\language=\languageNGerman%
% Der (X)emacs und das Paket AUC\TeX{}
% (\url{http://www.gnu.org/software/auctex/}) bilden ein m"achtiges Werkzeug
% beim Erstellen von \TeX/\LaTeX-Dateien.  Wenn es eine passende Stildatei
% f"ur ein \LaTeX-Paket wie das hier vorliegende \StrukTeX{} gibt,
% wird die Eingabe von Quelltext durch automatisiertes Vervollst"andigen
% und viele andere Hilfsmittel sehr erleichtert. Im folgenden wird eine
% derartige Stildatei bereitgestellt; sie muss nach ihrer Erzeugung noch an
% eine entsprechende Stelle kopiert werden.
%
% Diese Datei ist zum jetzigen Zeitpunkt noch in der Entwicklungsphase,
% d.\,h. man kann mit ihr arbeiten, aber es fehlen noch ein paar Dinge wie
% das \textit{font locking}, die Anzahl der automatisch eingefügten \cs{switch}
% Kommandos sollte nicht fest gleich eins sein, sondern von der Anzahl der
% eingegebenen Fälle abhängig sein.
% \else%
% The (X)emacs and the package AUC\TeX{}
% (\url{http://www.gnu.org/software/auctex/}) form a powerful tool for
% creating and editing of \TeX/\LaTeX{} files. If there is a suitable
% AUCTeX style file for a \LaTeX{} package like the hereby provided
% \StrukTeX{} package, then there is support for many common operations
% like creating environments and so on.  The following part provides such a
% style file; it must be copied to a place, where (X)emacs can find it
% after its creation.%
%
% This file is still in a development phase, i.\,e. one can work with it,
% but there is a couple of missing things as for example font locking or
% the automatic insertion of \cs{switch} commands according to the user's
% input.
% \fi 
% \iffalse 
%<*auctex>
% \fi
%    \begin{macrocode}
;;; struktex.el --- AUCTeX style for `struktex.sty'

;; Copyright (C) 2006 Free Software Foundation, Inc.

;; Author: J. Hoffmann <j.hoffmann@fh-aachen.de>
;; Maintainer: j.hoffmann@fh-aachen.de
;; Created: 2006/01/17
;; Keywords: tex

;;; Commentary:
;;  This file adds support for `struktex.sty'

;;; Code:
(TeX-add-style-hook
 "struktex"
 (lambda ()
   ;; Add declaration to the list of environments which have an optional
   ;; argument for each item.
   (LaTeX-add-environments
    "centernss"
    '("struktogramm" LaTeX-env-struktogramm)
    '("declaration" LaTeX-env-declaration))
   (TeX-add-symbols
    '("PositionNSS" 1)
    '("assert" [ "Height" ] "Assertion")
    '("assign" [ "Height" ] "Statement")
    "StrukTeX"
    '("case" TeX-mac-case)
    "switch" "condition"
    "caseend"
    '("declarationtitle" "Title")
    '("description" "Name" "Meaning")
    "emptyset"
    '("exit" [ "Height" ] "What" )
    '("forever" TeX-mac-forever)
    "foreverend"
    '("ifthenelse" TeX-mac-ifthenelse)
    "ifend"
    "change"
    "sProofOn"
    "sProofOff"
    '("until" TeX-mac-until)
    "untilend"
    '("while" TeX-mac-while)
    "whileend"
    '("return" [ "Height" ] "Return value")
    '("sub" [ "Height" ] "Task")
    '("CenterNssFile" TeX-arg-file)
    '("centernssfile" TeX-arg-file))
   (TeX-run-style-hooks
    "pict2e"
    "emlines2"
    "curves"
    "struktxp"
    "struktxf"
    "ifthen")
   ;; Filling
   ;; Fontification
   ))

(defun LaTeX-env-struktogramm (environment)
  "Insert ENVIRONMENT with width, height specifications and optional title."
  (let ((width (read-string "Width: "))
        (height (read-string "Height: "))
        (title (read-string "Title (optional): ")))
    (LaTeX-insert-environment environment
                              (concat
                               (format "(%s,%s)" width height)
                               (if (not (zerop (length title)))
                                   (format "[%s]" title))))))

(defun LaTeX-env-declaration (environment)
  "Insert ENVIRONMENT with an optional title."
  (let ((title (read-string "Title (optional): ")))
    (LaTeX-insert-environment environment
                               (if (not (zerop (length title)))
                                   (format "[%s]" title)))))

(defun TeX-mac-case (macro)
  "Insert \case with all arguments, the needed \switch(es) and the final \caseend.
These are optional height and the required arguments slope, number of cases,
condition, and the texts for the different cases"
  (let ((height (read-string "Height (optional): "))
        (slope (read-string "Slope: "))
        (number (read-string "Number of cases: "))
        (condition (read-string "Condition: "))
        (text (read-string "Case no. 1: "))
        (count 1)
        )
    (setq number-int (string-to-number number))
    (insert (concat (if (not (zerop (length height)))
                        (format "[%s]" height))
                    (format "{%s}{%s}{%s}{%s}"
                            slope number condition text)))
    (while (< count number-int)
      (end-of-line)
      (newline-and-indent)
      (newline-and-indent)
      (setq prompt (format "Case no. %d: " (+ 1 count)))
      (insert (format "\\switch{%s}" (read-string prompt)))
      (setq count (1+ count)))
      (end-of-line)
      (newline-and-indent)
      (newline-and-indent)
      (insert "\\caseend")))

(defun TeX-mac-forever (macro)
  "Insert \forever-block with all arguments.
This is only the optional height"
  (let ((height (read-string "Height (optional): ")))
    (insert (if (not (zerop (length height)))
                (format "[%s]" height)))
    (end-of-line)
    (newline-and-indent)
    (newline-and-indent)
    (insert "\\foreverend")))

(defun TeX-mac-ifthenelse (macro)
  "Insert \ifthenelse with all arguments.
These are optional height and the required arguments left slope, right slope,
condition, and the possible values of the condition"
  (let ((height (read-string "Height (optional): "))
        (lslope (read-string "Left slope: "))
        (rslope (read-string "Right slope: "))
        (condition (read-string "Condition: "))
        (conditionvl (read-string "Condition value left: "))
        (conditionvr (read-string "Condition value right: ")))
    (insert (concat (if (not (zerop (length height)))
                        (format "[%s]" height))
                    (format "{%s}{%s}{%s}{%s}{%s}"
                            lslope rslope condition conditionvl conditionvr)))
    (end-of-line)
    (newline-and-indent)
    (newline-and-indent)
    (insert "\\change")
    (end-of-line)
    (newline-and-indent)
    (newline-and-indent)
    (insert "\\ifend")))

(defun TeX-mac-until (macro)
  "Insert \until with all arguments.
These are the optional height and the required argument condition"
  (let ((height (read-string "Height (optional): "))
        (condition (read-string "Condition: ")))
    (insert (concat (if (not (zerop (length height)))
                        (format "[%s]" height))
                    (format "{%s}" condition)))
    (end-of-line)
    (newline-and-indent)
    (newline-and-indent)
    (insert "\\untilend")))

(defun TeX-mac-while (macro)
  "Insert \while with all arguments.
These are the optional height and the required argument condition"
  (let ((height (read-string "Height (optional): "))
        (condition (read-string "Condition: ")))
    (insert (concat (if (not (zerop (length height)))
                        (format "[%s]" height))
                    (format "{-%s-}" condition)))
    (end-of-line)
    (newline-and-indent)
    (newline-and-indent)
    (insert "\\whileend")))

(defvar LaTeX-struktex-package-options '("curves" "draft" "emlines" "final"
                                         "pict2e" "anygradient" "verification"
                                         "nofiller")
  "Package options for the struktex package.")

;;; struktex.el ends here.
%    \end{macrocode}
% \iffalse
%</auctex>
% \fi
%
%
% \StopEventually{
%     \begin{thebibliography}{MDB01}
%
%       \bibitem[Fut89]{Futschek:Programmentwicklung}
%       Gerald Futschek.
%       \newblock {\em Programmentwicklung und Verifikation}.
%       \newblock Springer Verlag, Wien -- New York, 1989.
%
%       \bibitem[GMS94]{GoossensMittelbachSamarin:Companion}
%       Michel Goossens, Frank Mittelbach and Alexander Samarin.
%       \newblock {\em The \LaTeX-Companion}.
%       \newblock Addison-Wesley Publishing Company, Reading, Massachusetts, 1994.
%
%       \bibitem[GMS04]{MittelbachGoossens:Companion2}
%       Frank Mittelbach and Michel Goossens.
%       \newblock {\em The \LaTeX-Companion}.
%       \newblock Addison-Wesley Publishing Company, Reading,
%       Massachusetts, second edition, 2004.
%
%       \bibitem[Knu86]{Knuth:TeXBook}
%       D.~E. Knuth.
%       \newblock {\em {The \TeX-Book}}.
%       \newblock Addison-Wesley, Reading, Massachusetts, 1986.
%
%       \bibitem[MDB94]{MittelbachDuchierBraams:DocStrip}
%       Frank Mittelbach, Denys Duchier and Johannes Braams.
%       \newblock {\em {The {\sf DocStrip} program}}, Dezember 1994.
%
%       \bibitem[MDB01]{MittelbachDuchierBraams:DocStrip-V2.5b}
%       Frank Mittelbach, Denys Duchier, Johannes Braams,
%       Marcin Woli\'nski and Mark Wooding
%       \newblock {\em {The {\sf DocStrip} program}}, September 2001.
%
%       \bibitem[Mit94]{FM:TheDocAndShortvrbPackages}
%       Frank Mittelbach.
%       \newblock {\em {The {\sf doc} and {\sf shortvrb} Packages}}, Oktober 1994.
%
%       \bibitem[Mit01]{FM:TheDocAndShortvrbPackages-V2.0}
%       Frank Mittelbach.
%       \newblock {\em {The {\sf doc} and {\sf shortvrb} Packages}}, September 2001.
%
%       \bibitem[Neu96]{Neubauer:MikrotypographieI}
%       Marion Neubauer.
%       \newblock {Feinheiten bei wissenschaftlichen Publikationen --
%         Mikrotypographie-Regeln, Teil I}.
%       \newblock {\em Die \TeX{}nische Kom"odie}, 8(4):23--40, Februar 1996.
%
%       \bibitem[Rah92]{Rahtz:OZ.STY}
%       Sebastian Rahtz.
%       \newblock {\em The {\sf oz} package}, 1992.
%
%     \end{thebibliography}
%
%     \ifmulticols
%     \addtocontents{toc}{\protect\end{multicols}}
%     \fi
% }   ^^A  end of \StopEventually
%
% \clearpage
%
% \section{\ifnum\language=\languageNGerman Die Implementation \else The Implementation \fi}
%
% \ifnum\language=\languageNGerman
% Der \StrukTeXSty\ stellt eine einfache Implementation der beschriebenen
% Makros dar; er sollte prinzipiell mit anderen Makropaketen vertr"aglich sein.
% Die G"ultigkeit von Makros wurde im Regelfall auf einen
% m"oglichst kleinen Bereich beschr"ankt. Um Seiteneffekte mit anderen
% \foreign{packages} so weit wie m"oglich zu vermeiden, werden alle
% intern genutzten Makros mit dem Suffix |@nss| versehen.
% \else
% The \StrukTeXSty\ shows a simple implementation of the described macros.
% On principal it should be compatible with other macro packages.
% The validity of macros has been normally reduced to a range as small as possible.
% All internally used macros are supplied by the suffix |@nss| for avoiding
% sideeffects with other \foreign{packages} as far as possible.
% \fi
%
% \subsection{\ifnum\language=\languageNGerman Allgemeines \else General \fi}
%
% \ifnum\language=\languageNGerman
% Als erstes wird getestet, ob das Paket \StrukTeXSty\ noch nicht
% geladen wurde. Wenn das der Fall ist, wird weitergearbeitet, ansonsten
% wird das Lesen sofort abgebrochen.
% \else
% First it is tested, if the package \StrukTeX\ has been loaded. In case it has been,
% it will be proceded. Otherwise reading will be interrupted.
% \fi
%    \begin{macrocode}
%<*struktex>
\@ifundefined{StrukTeX}{}{\endinput}
%    \end{macrocode}
% \ifnum\language=\languageNGerman
% Dies ist ein Paket, das f"ur \LaTeX2e entwickelt wurde, es wird daher
% eine entsprechende Fehlermeldung ausgegeben, wenn ein anderes Format
% benutzt wird,
% was nicht zu Fehlern f"uhren sollte; zus"atzlich wird das Paket
% \textsf{ifthen.sty} geladen, falls es noch nicht anderweitig angefordert
% wurde.
% \else
% This is a package, that has been developed for \LaTeX2e. Hence it will be put out
% an adequate error message, if another format is used, which should not lead to
% errors. In addition the package \textsf{ifthen.sty} will be loaded, if not already
% done.
% \fi
% \changes{v4.4b}{96/03/13}{`RequirePackage umgestellt wg. korrekter Versionsmeldung}
% \ifnum\language=\languageNGerman
% Nun wird das Einlesen des Makropakets mit der aktuellen
% Versionsnummer gemeldet.
% \else
% Now reading in of macro package with the actual number of version will
% be messaged.
% \fi
%    \begin{macrocode}
\RequirePackage{ifthen}
%    \end{macrocode}
% \ifnum\language=\languageNGerman
% StrukTeX ben"otigt zwei weitere Pakete, die zum Lieferumfang geh"oren.
% Diese werden hier geladen.
% \else
% \fi
%    \begin{macrocode}
\RequirePackage{struktxf}
\RequirePackage{struktxp}
%    \end{macrocode}
%
% \changes{v5.3a}{98/11/27}{Option \texttt{emlines} eingef"uhrt}
% \ifnum\language=\languageNGerman
% Ab der Version 5.3a kennt StrukTeX eine Option "`|emlines|"', die es
% erm"oglicht, Geraden beliebiger Steigung zu zeichnen; sp"ater kann auch
% das Paket \textsf{curves} zum Zeichnen beliebiger Steigungen eingesetzt 
% werden, ab der Version 8.0a wird auch das Paket
% \textsf{pict2e} unterst"utzt, das dazugeh"orige
% Paket wird hier geladen.
% \else
% \fi
%    \begin{macrocode}
\newboolean{curves}
\newboolean{emlines}
\newboolean{pictIIe}
\newboolean{anygradient}
\DeclareOption{curves}%
{%
    \setboolean{anygradient}{true}
    \setboolean{curves}{true}
    \setboolean{emlines}{false}
    \setboolean{pictIIe}{false}
}
\DeclareOption{emlines}%
{%
    \setboolean{anygradient}{true}
    \setboolean{curves}{false}
    \setboolean{emlines}{true}
    \setboolean{pictIIe}{false}
}
\DeclareOption{pict2e}%
{%
    \setboolean{anygradient}{true}
    \setboolean{curves}{false}
    \setboolean{emlines}{false}
    \setboolean{pictIIe}{true}
}
%    \end{macrocode}
%
% \changes{v7.0a}{04/01/05}{Option \texttt{verification} eingef"uhrt}
% \ifnum\language=\languageNGerman
% Ab der Version 7.0a kennt \StrukTeX{} eine Option "`|verification|"', die
% ein zus"atzliches Element definiert: die \cs{assert}-Box, die in
% \cite{Futschek:Programmentwicklung} eingef"uhrt wird.
% \else
% From version 7.0a on \StrukTeX{} knows the option "`|verification|"', which
% defines an additional element: the \cs{assert}-box, which is introduced
% in \cite{Futschek:Programmentwicklung}.
% \fi
%    \begin{macrocode}
\newboolean{verification}
\DeclareOption{verification}%
{%
    \setboolean{verification}{true}
}
%    \end{macrocode}
%
% \changes{v8.2a}{06/01/17}{Option \texttt{nofiller} eingef"uhrt}
% \ifnum\language=\languageNGerman
% Ab der Version 8.2a kennt \StrukTeX{} eine Option "`|nofiller|"', die
% die Darstellung von Leerraum beeinflusst: ohne diese Option wird in 
% Alternativen ein \(\emptyset\)-Zeichen ausgegeben, wenn der Platz
% ausreichend ist. Dies f"uhrt zu einer uneinheitlichen Darstellung im
% Vergleich mit dem Leerraum, der von einem \cs{case}-Block erzeugt wird,
% da hier der Leerraum nicht in entsprechende Weise angezeigt wird -- dies
% w"are nur mit einer aufwendigen Listenverwaltung m"oglich. Angabe der
% Option f"uhrt dazu, dass das \(\emptyset\)-Zeichen einheitlich weggelassen
% wird.
% \else
% From version 8.2a on \StrukTeX{} knows the option "`|nofiller|"', which
% makes the \(\emptyset\)-character vanishing in alternatives.
% \fi
%    \begin{macrocode}
\newboolean{filler}
\setboolean{filler}{true}
\DeclareOption{nofiller}%
{%
    \setboolean{filler}{false}
}
%    \end{macrocode}
%
% \changes{v8.3}{06/08/17}{Optionen \texttt{draft} und \texttt{final} eingef"uhrt}
% \ifnum\language=\languageNGerman%
% Ab der Version 8.3 kennt \StrukTeX{} die Optionen "`|draft|"' und
% "`|final|"', die zwischen dem Entwurf und der endg"ultigen Version des
% Struktogramms umschalten. Entwurfsmodus ist |\sProofOn| gesetzt, f"ur die
% endg"ultige Version wird |\sProofOff| gesetzt.%
% \else%
% From version 8.3 on \StrukTeX{} knows the options "`|draft|"' and
% "`|final|"', which differentiate between the draft (|\sProofOn|) and the
% final (|\sProofOff|) version of the structured box chart makes the
% \(\emptyset\)-character vanishing in alternatives.%
% \fi
%    \begin{macrocode}
\let\ifdraft@nss\iffalse
\let\iffinal@nss\iftrue
\DeclareOption{draft}%
{%
  \let\ifdraft@nss\iftrue
  \let\iffinal@nss\iffalse
}
\DeclareOption{final}%
{%
  \let\ifdraft@nss\iffalse
  \let\iffinal@nss\iftrue
}
%    \end{macrocode}
%
% \ifnum\language=\languageNGerman%
% Nun werden andere Pakete geladen und die Optionen verarbeitet.%
% \else%
% Now load additional packages and process the options.%
% \fi
%    \begin{macrocode}
\ProcessOptions
\ifcurves%
    \RequirePackage{curves}
\else\ifemlines
    \RequirePackage{emlines2}
\else\ifpictIIe
    \RequirePackage{pict2e}
\fi\fi\fi
%    \end{macrocode}
%
% \begin{macro}{\StrukTeX}
% \ifnum\language=\languageNGerman
% Das Logo des Paketes, anhand dessen sp"ateres erneutes Einlesen
% unterbunden wird:
% \else
% The logo of package, with which a later second reading in will be
% forestalled:
% \fi
%    \begin{macrocode}
\def\StrukTeX{S\kern-.05emt\kern-.05em\raise.5ex\hbox{r}%
              \kern-.1667emu\kern-.05em\lower.5ex\hbox{k}%
              \kern-.2emT\kern-.1667em\lower.7ex\hbox{E}\kern-.125emX}
%    \end{macrocode}
% \end{macro}
%
% \subsection{\ifnum\language=\languageNGerman Diverse Makros zur Vorbereitung
%                 \else Various Macros for Preparation
%                 \fi}
%
% \changes{v4.1c}{95/07/24}{Eigene Datei f"ur spezielle Fonts anlegen}
% \ifnum\language=\languageNGerman
% Zun"achst werden die zus"atzlich ben"otigten Fonts bereitgestellt. Da diese
% Fonts auch in anderem Zusammenhang ben"otigt werden, wird hierf"ur ein
% eigenes Paket definiert.
% \else
% First the additionally needed fonts are provided. Since these fonts are also used
% in another connection, therefore an own package is defined.
% \fi
%    \begin{macrocode}
%</struktex>
%<*struktxf>
\@ifundefined{nat}{}{\endinput}
\DeclareSymbolFont{italics}{\encodingdefault}{\rmdefault}{m}{it}%
\DeclareSymbolFont{AMSb}{U}{msb}{m}{n}
\DeclareSymbolFontAlphabet{\mathbb}{AMSb}
%    \end{macrocode}
%
% \begin{macro}{\nat}
% \begin{macro}{\integer}
% \begin{macro}{\real}
% \begin{macro}{\complex}
% \changes{v4.1b}{95/07/23}{`complex eingef"uhrt}
% \changes{v4.1a}{95/07/17}{`nat, `integer und `real eingef"uhrt}
% \ifnum\language=\languageNGerman
% Die folgenden Makros dienen dem vereinfachten Schreiben von Mengen:
% \else
% The following macros contribute to easier writing of sets:
% \fi
%    \begin{macrocode}
\def\nat{{\mathbb N}}
\def\integer{{\mathbb Z}}
\def\real{{\mathbb R}}
\def\complex{{\mathbb C}}
%    \end{macrocode}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
%
% \begin{macro}{\btt}
% \changes{v4.1a}{95/07/17}{`btt auf NFSS umgestellt}
% \changes{v8.0b}{04/07/14}{Hinweis auf Luxi Mono als Ersatz fuer cmbtt}
% \ifnum\language=\languageNGerman
% Um fetten Schreibmaschinensatz erzeugen zu k"onnen, gibt es den Font \cs{btt},
% der als Erweiterung der \textsf{cmtt}-Font-Familie definiert ist. Um
% auf diesen Font auch ohne zus"atzliches Einbinden dieses \foreign{packages}
% zugreifen zu k"onnen, kann man die entsprechenden Deklarationen in den
% Dateien |ot1cmtt.fd| bzw.\ |t1cmtt.fd| durch die folgende
% ersetzen.\footnote{Eine Alternative ist die Benutzung des Luxi Mono Fonts.}
% \else
% For generating bold face typescript there's the font \cs{btt}, that is defined as
% an extension of the \textsf{cmtt} font family. For access to these
% \foreign{packages} without supplementary tieing up one can exchange the
% adequate declaration in the files |ot1cmtt.fd| or |t1cmtt.fd|
% respectively by the following:\footnote{An alternative is using the font
% Luxi Mono.}
% \fi
%    \begin{macrocode}
\DeclareFontFamily{OT1}{cmbtt}{}
\DeclareFontShape{OT1}{cmtt}{bx}{n}{
   <-8> cmbtt8 <9> cmbtt9 <10-> cmbtt10
}{}

\def\btt%
{%
    \fontencoding{\encodingdefault}\fontfamily{cmbtt}\fontseries{bx}%
    \fontshape{n}\selectfont%
}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\MathItalics}
% \begin{macro}{\MathNormal}
% \changes{v4.1a}{95/07/17}{`MathItalics und `MathNormal eingef"uhrt}
% \ifnum\language=\languageNGerman
% Die folgenden Makros dienen dem Umschalten zwischen verschiedenen Formen
% der \foreign{italics} im Mathematik-Modus. Sie wurden aus
% \cite{Rahtz:OZ.STY} "ubernommen. Als Standard wird \cs{MathItalics}
% genommen, um eine sch"onere Darstellung von langen Variablennamen zu
% erzielen.
% \else
% The following macros contribute to the switch of the different forms of
% \foreign{italics} in math mode. They have been taken over from
% \cite{Rahtz:OZ.STY}. As a standard there will be taken \cs{MathItalics} to
% generate a nicer representation of long variable names.
% \fi
%    \begin{macrocode}
\def\@setmcodes#1#2#3{{\count0=#1 \count1=#3
    \loop \global\mathcode\count0=\count1 \ifnum \count0<#2
    \advance\count0 by1 \advance\count1 by1 \repeat}}
\def\MathItalics%
{%
    \@setmcodes{`A}{`Z}{"7\hexnumber@\symitalics41}
    \@setmcodes{`a}{`z}{"7\hexnumber@\symitalics61}
}
\def\MathNormal%
{%
    \@setmcodes{`A}{`Z}{"7141}
    \@setmcodes{`a}{`z}{"7161}
}
\MathItalics
%</struktxf>
%<*struktex>
%    \end{macrocode}
% \end{macro}
% \end{macro}
%
% \subsection[\ifnum\language=\languageNGerman Darstellung von Variablen
% etc.\else Representation of Varibles etc.\fi]{\ifnum\language=\languageNGerman 
%    Makros zur Darstellung von Variablen, 
%                 Schl"usselw"ortern und anderen programmierspezifischen 
%                 Details
% \else Macros for Representation of Variables, Keywords and 
%                 other specific Details of Programming
%             \fi}
%
% \ifnum\language=\languageNGerman
% Struktogramme enthalten manchmal direkt zu programmierenden Code.
% Um hier ein einheitliches Aussehen zu erreichen, sind die folgenden
% Makros definiert worden. Um diese Makros auch in anderem Zusammenhang
% nutzen zu k"onnen, sind sie zu einem eigenen \foreign{package}
% \textsf{struktxp.sty} zusammengefasst worden.
% \else
% Structured box charts sometimes include code, that has to be programmed
% directly. For achieving a homogenous appearance the following macros have
% been defined. They have been collected in a seperate \foreign{package}
% \textsf{struktxp.sty} to be able to use them in another connection.
% \fi
%    \begin{macrocode}
%</struktex>
%<*struktxp>
\@ifundefined{pVariable}{}{\endinput}
%    \end{macrocode}
%
% \begin{macro}{\pExpFont@nss}
% \changes{v5.4a}{99/11/16}{neu eingef"uhrt, ersetzt `pVarFont@nss}
% \begin{macro}{\pKeyFont@nss}
% \changes{v4.5a}{96/03/15}{neu eingef"uhrt}
% \begin{macro}{\pCommentFont@nss}
% \changes{v4.5a}{96/03/15}{neu eingef"uhrt}
% \ifnum\language=\languageNGerman
% Die drei Makros |\pExpFont@nss|, |\pKeyFonts@nss| und |\pCommentFont@nss|
% dienen der Vorbesetzung der Fonts zur Formatierung von Variablen,
% Schl"usselw"ortern und Kommentar. Diese kann mit dem Kommando \cs{pFonts}
% umdefiniert werden.
% \else
% The three macros |\pExpFont@nss|, |\pKeyFonts@nss| and |\pCommentFonr@nss|
% contribute to the default of fonts which serve to formatting variables,
% keywords and comments. These can be redefined by the command \cs{pFonts}.
% \fi
%    \begin{macrocode}
\newcommand{\pExpFont@nss}{\small\sffamily}
\newcommand{\pKeyFont@nss}{\small\sffamily\bfseries}
\newcommand{\pCommentFont@nss}{\small\sffamily\slshape}
%    \end{macrocode}
% \end{macro}
% \end{macro}
% \end{macro}
%
% \begin{macro}{\pFonts}
% \changes{v4.5a}{96/03/15}{neu eingef"uhrt}
% \ifnum\language=\languageNGerman
% Der Makro \cs{pFonts} dient dem Umsetzen der Vorbesetzungen der Fonts
% zum Setzen von Variablennamen, Schl"usselw"ortern und Kommentar:
% \else
% The macro \cs{pFonts} serves to the change of default of fonts for
% setting variable names, keywords and comments:
% \fi
%    \begin{macrocode}
\newcommand{\pFonts}[3]%
{%
    \def\argi@nss{#1} \def\argii@nss{#2} \def\argiii@nss{#3}
    \ifx\argi@nss\empty\else%
        \renewcommand{\pExpFont@nss}{#1}%
    \fi%
    \ifx\argii@nss\empty\else%
        \renewcommand{\pKeyFont@nss}{#2}%
    \fi%
    \ifx\argiii@nss\empty\else%
        \renewcommand{\pCommentFont@nss}{#3}%
    \fi%
}
%    \end{macrocode}
% \end{macro}
%
% Zum Setzen von Programmtexten innerhalb von Struktogrammen wird 
% unterschieden zwischen Ausdr"ucken und (Schl"ussel-)W"ortern. Ein Ausdruck
% (zu verstehen im Sinne eines Ausdrucks einer Programmiersprache) wird in 
% einem festen Font gesetzt, der durch |\pExpFont@nss| aktuell
% bestimmt wird. Dieses gilt in gleicher Weise f"ur (Schl"ussel-)W"orter,
% dabei werden aber die Schl"usselw"orter, die in einer entsprechenden 
% Liste definiert sind, fett gedruckt. Sowohl Ausdr"ucke als auch 
% (Schl"ussel-)w"orter d"urfen Sonderzeichen enthalten:
% \begin{enumerate}
%    \item der Unterstrich "`|_|"',
%    \item das Dach "`|^|"',
%    \item das kaufm"annische Und "`|&|"' und
%    \item das Doppelkreuz "`|#|"'.
% \end{enumerate}
% \begin{macro}{\pExpression}
% \changes{v5.4a}{99/11/16}{neu eingef"uhrt, ersetzt `pVariable}
% \begin{macro}{\pExp}
% \changes{v5.4a}{99/11/16}{`pExp als Abk"urzung definiert}
% \ifnum\language=\languageNGerman
% Leerzeichen werden beachtet, so dass ganze Anweisungen geschrieben werden
% k"onnen. Das Argument kann erst nach der Umdefinition der \foreign{catcodes}
% von einem internen Makro ausgewertet werden.
% \else
% Blank characters are considered, such that whole statements can be written.
% \fi
%
% \ifnum\language=\languageNGerman
% Zur Erleichterung des Schreibens wird mit \cs{let} ein alternativer Zugriff
% auf \cs{pVariable} geschaffen.
% \else
% For easier writing there is brought about an alternative access by 
% \cs{pVariable}.
% \fi
%    \begin{macrocode}
\newcommand{\pExpression}%
{%
    \bgroup%
%    \end{macrocode}
% \ifnum\language=\languageNGerman
% Zun"achst werden die ben"otigten \foreign{catcodes} auf Sonstige --
% \foreign{other} -- umgesetzt, zur Erinnerung:
% \else
% First the needed \foreign{catcodes} will be changed to \foreign{other}.
% Recall:
% \fi
%
% \ifnum\language=\languageNGerman
% \DeleteShortVerb{\|}
% \begin{tabular}{r|l}
% \foreign{catcode} & Bedeutung \\\hline
% 1 & Gruppenanfang \\
% 2 & Gruppenende \\
% 4 & Tabulatorzeichen \\
% 8 & Index \\
% 12& Sonstige \\
% \end{tabular}
% \MakeShortVerb{\|}
% \else
% \DeleteShortVerb{\|}
% \begin{tabular}{r|l}
% \foreign{catcode} &Meaning \\\hline
% 1 & Group Begin \\
% 2 & Group End \\
% 4 & Tabulator Character \\
% 8 & Index \\
% 12& Other \\
% \end{tabular}
% \MakeShortVerb{\|}
% \fi
%
% \ifnum\language=\languageNGerman
% In einer Variablen sind die folgenden Sonderzeichen erlaubt:
% \begin{enumerate}
%    \item der Unterstrich "`|_|"',
%    \item das Dach "`|^|"' und
%    \item das kaufm"annische Und "`|&|"'.
% \end{enumerate}
% \else
% In a variable the following special characters are allowed:
% \begin{enumerate}
%    \item the Underline "'|_|"',
%    \item the Hat "'|^|"' and
%    \item the Commercial And "'|&|"'.
% \end{enumerate}
% \fi
%
%    \begin{macrocode}
        \catcode`\_=12 \catcode`\^=12 \catcode`\&=12 %
        \pUseExpFont@nss%
}
\let\pExp=\pExpression
%    \end{macrocode}
% \end{macro}
% \end{macro}
%
% \begin{macro}{\pVariable}
% \changes{v5.4a}{99/11/16}{neu definiert}
% \changes{v2.0n}{94/03/31}{Neuimplementation gem"a"s `TeXnischer Kom"odie'}
% \begin{macro}{\pVar}
% \changes{v2.0c}{93/12/09}{`pVar als Abk"urzung definiert}
% \begin{macro}{\pKeyword}
% \changes{v5.4a}{99/11/16}{auf `pVariable zur"uckgef"uhrt}
% \changes{v2.0n}{94/03/31}{Neuimplementation gem"a"s `TeXnischer Kom"odie'}
% \changes{v2.0c}{93/12/09}{`pKeyword und `pKey definiert}
% \begin{macro}{\pKey}
% \changes{v5.4a}{99/11/16}{auf `pVariable zur"uckgef"uhrt}
% \changes{v2.0c}{93/12/09}{neu definiert}
% \ifnum\language=\languageNGerman
% Die Implementation von \cs{pKeyword} entspricht der von \cs{pVariable}.
% Die hier neu benutzten Fonts (cmbtt..) werden durch den
% \textsf{struktxf.sty} bereitgestellt.
% Ansonsten wird wie bei \cs{pVariable} verfahren:
% \else
% The implementation of \cs{pKeyword} coincides with the one of \cs{pVariable}.
% The hereby newly used fonts (cmbtt..) are provided by |textsf{struktxf.sty}|.
% Apart from that it will be proceded as with \cs{pVariable}:
% \fi
% Zus"atzlich werden Makros \cs{pVar} sowie \cs{pKeyword} und \cs{pKey} mit
% der gleichen Bedeutung definiert. Diese dienen allein der 
% R"uckw"artskompatibilit"at.
%    \begin{macrocode}
\newcommand{\pVariable}%
{%
    \bgroup%
        \catcode`\_=13 \let\_\textunderscore 
        \catcode`\#=12 \catcode`\^=12 \catcode`\&=12 %
        \pVariabl@%
}
\let\pVar=\pVariable
\let\pKeyword=\pVariable
\let\pKey=\pVariable
%    \end{macrocode}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
%
% \begin{macro}{\pVariabl@}
% \changes{v5.4a}{99/11/16}{neu definiert}
% \changes{v8.0d}{04/12/27}{Python-Schl"usselw"orter neu eingef"uhrt}
% Die Liste der Schl"usselw"orter wird nach den verschiedenen 
% Anwendungsgebieten unterschieden.\footnote{Die Python-Erweiterung
% erfolgte nach einem Hinweis von Ludger Humbert, Universit"at Dortmund, von
% dem auch die Liste der Schl"usselw"orter stammt, vielen Dank!}
%    \begin{macrocode}
\newcommand{\pVariabl@}[1]
{%
    \def\arg{#1}%
    \ifx\pLanguage@nss\Cee@nss%
        \CheckForKeyword@nss{auto,break,case,char,const,continue,default,do,double,%
      else,enum,extern,float,for,goto,if,int,long,register,return,%
      short,signed,sizeof,static,struct,switch,typedef,union,unsigned,%
      void,volatile,while}%
    \else\ifx\pLanguage@nss\Java@nss%
        \CheckForKeyword@nss{abstract,boolean,break,byte,case,catch,char,class,const,%
      continue,default,do,double,else,extends,final,finally,float,for,%
      goto,if,implements,import,instanceof,int,interface,long,native,%
      new,null,package,private,protected,public,return,short,static,%
      super,switch,synchronized,this,throw,throws,transient,try,void,%
      volatile,while,true,false}%
    \else\ifx\pLanguage@nss\Pascal@nss%
        \CheckForKeyword@nss{alfa,and,array,begin,boolean,byte,case,char,const,div,do,%
      downto,else,end,false,file,for,function,get,goto,if,in,integer,%
      label,maxint,mod,new,not,of,or,pack,packed,page,program,put,%
      procedure,read,readln,real,record,repeat,reset,rewrite,set,text,%
      then,to,true,type,unpack,until,var,while,with,write,writeln}%
    \else\ifx\pLanguage@nss\Python@nss%
        \CheckForKeyword@nss{and,assert,break,class,continue,def,del,elif,else,%
      except,exec,finally,for,from,global,if,import,in,is,lambda,not,or,%
      pass,print,raise,return,try,while,yield}%
    \else\ifx\pLanguage@nss\LaTeX@nss%
        \CheckForKeyword@nss{center,description,enumerate,figure,itemize,
      list,quote,tabbing,tabular,table,}%
    \else%
        \CheckForKeyword@nss{}%
    \fi\fi\fi\fi\fi%
    \egroup%
}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\pLanguage}
% \changes{v5.4a}{99/11/16}{neu definiert}
% \begin{macro}{\Cee@nss}
% \changes{v5.4a}{99/11/16}{neu definiert}
% \begin{macro}{\Java@nss}
% \changes{v5.4a}{99/11/16}{neu definiert}
% \begin{macro}{\Pascal@nss}
% \changes{v5.4a}{99/11/16}{neu definiert}
% \begin{macro}{\LaTeX@nss}
% \changes{v5.4a}{99/11/16}{neu definiert}
% \begin{macro}{\Python@nss}
% \changes{v8.0d}{04/12/27}{Python als zul"assige Sprache neu definiert}
% Die Liste der Schl"usselw"orter wird nach den verschiedenen 
% Anwendungsgebieten unterschieden.
%    \begin{macrocode}
\newcommand{\pLanguage}[1]{\gdef\pLanguage@nss{#1}}
\def\Cee@nss{C}
\def\Java@nss{Java}
\def\Pascal@nss{Pascal}
\def\LaTeX@nss{LaTeX}
\def\Python@nss{Python}
\def\OSII@nss{OS/2}
%    \end{macrocode}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
%
% \begin{macro}{\CheckForKeyword@nss}
% \changes{v5.4a}{99/11/16}{neu definiert}
% Die Liste der Schl"usselw"orter wird der Reihe nach durchlaufen und mit
% dem aktuellen Argument \cs{arg} verglichen.
%    \begin{macrocode}
\def\CheckForKeyword@nss#1%
{%
    \let\exec\pExpFont@nss%
    \def\endList{!}%
    \def\yyI##1,%
    {%
        \def\token{##1}%
        \ifx\token\endList%
            \ifmmode\else\let\mbox=\relax\fi%
            \mbox{\exec\selectfont\arg}%
        \else%
            \ifx\token\arg%
                \let\exec\pKeyFont@nss%
            \fi%
            \expandafter\yyI%
        \fi%
    }%
    \yyI#1,!,%
}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\pComment}
% \ifnum\language=\languageNGerman
% Zur Auszeichnung von Kommentar.
% \else
% For marking up comments.
% \fi
%    \begin{macrocode}
\def\pComment%
{%
    \bgroup%
        \pCommentFont@nss%
        \let\next=%
}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\pUseKeyFont@nss}
% \begin{macro}{\pUseExpFont@nss}
% \changes{v5.4a}{99/11/16}{neu eingef"uhrt, ersetzt `pUseVarFont@nss}
% \ifnum\language=\languageNGerman
% Damit Unterstriche und "ahnliche Sonderzeichen korrekt dargestellt werden
% k"onnen, ist vor der Benutzung eines bestimmten Fonts zu "uberpr"ufen,
% ob die gew"unschten Zeichen in dem betreffenden Font "uberhaupt zur
% Verf"ugung stehen.
% \else
% In order to represent underlines and similar special characters it has to be
% checked, if the wanted characters are provided in a certain font, before
% using that font.
% \fi
%
% \ifnum\language=\languageNGerman
% Es wird stets auf den Textmodus umgeschaltet, was unter Einsatz des
% \textsf{amstex}-Paketes noch besser durch das Kommando \cs{text}
% geschehen k"onnte. Es k"onnen Probleme mit dem  Zeichen 
% \texttt{\char94\char94 T}\footnote{Dies funktioniert auf einem
% Linux-System} auftreten, in diesem Fall ist das Zeichen durch 
% \texttt{\char94\char94 Y}\footnote{getestet unter OS/2}. 
% zu ersetzen
% \else
% It will be always switched to the text mode, what could be done even better
% by the command \cs{text} of the \textsf{amstex} package. There may be some 
% problems using the character \texttt{\char94\char94 T}\footnote{This one 
% works under Linux}, in this case it should be replaced by 
% \texttt{\char94\char94 Y}\footnote{tested under OS/2}.
% \fi
% \errorstopmode
%    \begin{macrocode}
{
    \catcode`\#=6%
    \gdef\pUseKeyFont@nss#1%
    {%
        \ifmmode\else\let\mbox=\relax\fi%
        \mbox{\pKeyFont@nss{#1}}\egroup%
    }
    \gdef\pUseExpFont@nss#1%
    {%
        \ifmmode\else\let\mbox=\relax\fi%
        \mbox{\pExpFont@nss{#1}}\egroup%
    }
}
%    \end{macrocode}
% \end{macro}
% \end{macro}
%
% \begin{macro}{\pTrue@nss}
% \changes{v4.5a}{96/03/15}{neu definiert}
% \begin{macro}{\pFalse@nss}
% \changes{v4.5a}{96/03/15}{neu definiert}
% \ifnum\language=\languageNGerman
% Die Vorbesetzungen der logischen Werte \cs{pTrue} und \cs{pFalse}:
% \else
% The default of the boolean values \cs{pTrue} and \cs{pFalse}:
% \fi
%    \begin{macrocode}
\newcommand{\pTrue@nss}{\texttt{WAHR}}
\newcommand{\pFalse@nss}{\texttt{FALSCH}}
%    \end{macrocode}
% \end{macro}
% \end{macro}
%
% \begin{macro}{\pTrue}
% \changes{v4.5a}{96/03/15}{neu definiert "uber `pTrue@nss}
% \changes{v3.5b}{94/01/19}{umbenannt von `true zur Vermeidung von Interferenzen}
% \changes{v3.3c}{94/09/14}{Beschreibung eingef"uhrt}
% \begin{macro}{\pFalse}
% \changes{v4.5a}{96/03/15}{neu definiert "uber `pTrue@nss}
% \changes{v3.5b}{94/01/19}{umbenannt von `false zur Vermeidung von Interferenzen}
% \changes{v3.3c}{94/09/14}{Beschreibung eingef"uhrt}
% \ifnum\language=\languageNGerman
% Um einheitliches Aussehen logischer Werte zu erzielen, werden entsprechende
% Makros mit den obigen Vorbesetzungen definiert.
% \else
% For achieving homogenous appearance of boolean values adequate macros
% with the above defaults are defined.
% \fi
%    \begin{macrocode}
\newcommand{\pTrue}{\pTrue@nss}
\newcommand{\pFalse}{\pFalse@nss}
%    \end{macrocode}
% \end{macro}
% \end{macro}
%
% \begin{macro}{\pBoolValue}
% \changes{v4.5a}{96/03/15}{neu definiert}
% \ifnum\language=\languageNGerman
% Mit \cs{pBoolValue} k"onnen die voreingestellten Werte von \cs{pTrue} und
% \cs{pFalse} ver"andert werden; \cs{sBoolValue} ist der alternative Aufruf
% zwecks Kompatibilit"at mit alten Struktogrammen.
% \else
% The default values of \cs{pTrue} and \cs{pFalse} can be changed by \cs{pBoolValue}.
% |sBoolValue| is the alternative command for compatibility reasons with old
% structured box charts.
% \fi
%    \begin{macrocode}
\newcommand{\pBoolValue}[2]%
{%
    \renewcommand{\pTrue@nss}{#1}%
    \renewcommand{\pFalse@nss}{#2}%
}
\let\sBoolValue=\pBoolValue
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\sVar}
% \changes{v3.5b}{94/01/19}{umbenannt von `Var zur Vermeidung von Interferenzen}
% \changes{v2.5}{93/09/09}{eingef"uhrt durch Jhf}
% \begin{macro}{\sKey}
% \changes{v4.1a}{95/07/17}{`btt bereits anderweitig definiert}
% \changes{v3.5b}{94/01/19}{neu eingef"uhrt}
% \begin{macro}{\sTrue}
% \begin{macro}{\sFalse}
% \ifnum\language=\languageNGerman
% Zur Darstellung von Variablen. Hier nur noch zwecks Kompatibilit"at zu
% fr"uheren Versionen des \StrukTeXSty aufgef"uhrt.
% \else
% For representation of variables. Here only mentioned for compatibility
% reasons with former versions of \StrukTeXSty.
% \fi
%    \begin{macrocode}
\let\sVar=\pVariable
\let\sKey=\pKeyword
\let\sTrue=\pTrue
\let\sFalse=\pFalse
%</struktxp>
%<*struktex>
%    \end{macrocode}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
%
% \subsection{\ifnum\language=\languageNGerman Belegung von Registern \else Reservation of Registers \fi}
%
% \begin{macro}{\savelength@nss}
% \changes{v4.0b}{95/05/02}{umbenannt von `s@velength}
% \changes{v2.5}{93/09/09}{`VarDeclWd eingef"uhrt}
% \ifnum\language=\languageNGerman
% |\savelength@nss|
% dient dazu, die vor dem Struktogramm g"ultige L"angeneinheit
% zwischenzuspeichern, um nach dem Struktogramm den alten Wert
% wiederherstellen zu k"onnen.
% \else
% |\savelength@nss| contributes to intermediate storing of the unit of length,
% which was valid before the structured box chart, for recovering the old value
% after the box chart.
% \fi
%    \begin{macrocode}
\newdimen\savelength@nss
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\gx@nss}
% \changes{v4.0b}{95/05/02}{umbenannt von `gx}
% \changes{v3.2a}{94/09/14}{Beschreibung eingef"uhrt}
% \changes{v3.2a}{94/09/14}{Beschreibung eingef"uhrt}
% \begin{macro}{\gy@nss}
% \changes{v4.0b}{95/05/02}{umbenannt von `gy}
% \begin{macro}{\gsize@nss}
% \changes{v4.0b}{95/05/02}{umbenannt von `gsize}
% \changes{v3.2a}{94/09/14}{Beschreibung eingef"uhrt}
% \ifnum\language=\languageNGerman
% |\gx@nss|, |\gy@nss| und |\gsize@nss| enthalten die \emph{globalen} Werte f"ur die
% x- und y-Koordinate und die Breite des Struktogramms;
% zur Vereinfachung der Anwendung wird in allen F"allen
% mit Z"ahlregistern gearbeitet.
% \else
% |\gx@nss|, |gy@nss| and |\gsize@nss| contain the \emph{global} values for the
% x- and y-coordinate and the width of the structured box chart. For simplification
% of the application in all cases it is worked with counter registers.
% \fi
%    \begin{macrocode}
\newcount\gx@nss \newcount\gy@nss \newcount\gsize@nss
%    \end{macrocode}
% \end{macro}
% \end{macro}
% \end{macro}
%
% \begin{macro}{\param@nss}
% \changes{v4.0b}{95/05/02}{umbenannt von `param}
% \changes{v3.2a}{94/09/14}{Beschreibung eingef"uhrt}
% \ifnum\language=\languageNGerman
% |\param@nss| enth"alt den  Wert, der als optionales Argument f"ur die Breite
% oder H"ohe eines Struktogramms angegeben wird.
% \else
% |\param@nss| contains the value, which is given as an optional argument for
% the width or the height of the structured box chart.
% \fi
%    \begin{macrocode}
\countdef\param@nss=199
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\x@nss}
% \changes{v4.0b}{95/05/02}{umbenannt von `x}
% \changes{v3.3c}{94/09/14}{Beschreibung eingef"uhrt}
% \begin{macro}{\y@nss}
% \changes{v4.0b}{95/05/02}{umbenannt von `y}
% \changes{v3.3c}{94/09/14}{Beschreibung eingef"uhrt}
% \begin{macro}{\xsize@nss}
% \changes{v4.0b}{95/05/02}{umbenannt von `xsize}
% \changes{v3.3c}{94/09/14}{Beschreibung eingef"uhrt}
% \begin{macro}{\xx@nss}
% \changes{v4.0b}{95/05/02}{umbenannt von `xx}
% \begin{macro}{\yy@nss}
% \changes{v4.0b}{95/05/02}{umbenannt von `yy}
% \begin{macro}{\tempx@nss}
% \changes{v4.0b}{95/05/02}{umbenannt von `tempx}
% \begin{macro}{\tempxx@nss}
% \changes{v4.0b}{95/05/02}{umbenannt von `tempxx }
% \begin{macro}{\tempxxx@nss}
% \changes{v7.2}{04/07/13}{eingef"uhrt f"ur die Unterst"utzung von pict2e}
% \begin{macro}{\tempy@nss}
% \changes{v4.0b}{95/05/02}{umbenannt von `tempy}
% \begin{macro}{\tempyy@nss}
% \changes{v7.2}{04/07/13}{umbenannt von `tempyy}
% \begin{macro}{\tempyyy@nss}
% \changes{v7.2}{04/07/04}{eingef"uhrt f"ur die Unterst"utzung von pict2e}
% \begin{macro}{\ydepth@nss}
% \changes{v4.0b}{95/05/02}{umbenannt von `ydepth}
% \changes{v3.2a}{94/09/14}{Beschreibung fehlt noch}
% \ifnum\language=\languageNGerman
% Es werden einige weitere Variablen ben"otigt, die alle zentral an dieser
% Stelle definiert werden: |\x@nss|, |\y@nss| und |\xsize@nss| als lokale
% Werte f"ur die $x$- und $y$-Koordinate und die Breite eines
% (Unter-)Struktogramms; |\ydepth@nss| gibt die "`Tiefe"' eines
% Struktogrammelementes an. Die Variablen |\xx@nss|, |\yy@nss|,
% |\tempx@nss|, |\tempxx@nss|, |\tempxxx@nss|, |\tempy@nss|, |\tempyy@nss|
% und |\tempyyy@nss| haben unterschiedliche tempor"are Bedeutungen, im
% Regelfall deutet ein |x| im Namen auf horizontalen und ein |y| auf
% vertikalen Zusammenhang hin.
% \else
% There are needed some more variables. All those will be defined here:
% |\x@nss|, |\y@nss| and |\xsize@nss| as local values for the $x$- and
% $y$-coordinate and for the width of a structured subbox chart.
% |\ydepth@nss| represents the "'depth"' of an element of a structured box
% chart.  The variables |\xx@nss|, |\yy@nss|, |\tempx@nss|, |\tempxx@nss|,
% |\tempy@nss|, |\tempyy@nss| have different temporary meanings. Normally
% an |x| in the name points at a horizontal connection and a |y| in the
% name at a vertical connection.
% \fi
%    \begin{macrocode}
\countdef\x@nss=220     \countdef\y@nss=221      \countdef\xsize@nss=222
\countdef\ydepth@nss=223
\countdef\xx@nss=224    \countdef\yy@nss=225
\countdef\tempx@nss=226 \countdef\tempxx@nss=227
\countdef\tempy@nss=229 \countdef\tempyy@nss=230
\ifpictIIe%
     \countdef\tempxxx@nss=228  \countdef\tempyyy@nss=231
\fi
%    \end{macrocode}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
%
% \begin{macro}{\TextBox@nss}
% \changes{v4.1a}{95/07/18}{umbenannt von `nss@Box}
% \begin{macro}{\TextBoxHt@nss}
% \changes{v4.1a}{95/07/18}{umbenannt von `nss@BoxHt}
% \changes{v3.2a}{94/09/09}{Beschreibung eingef"uhrt}
% \ifnum\language=\languageNGerman
% |\TextBox@nss| ist die Box, die den Text in einem Struktogrammblock enth"alt,
% ihre tats"achliche H"ohe, "Uberl"ange und Unterl"ange wird in |\TextBoxHt@nss|
% abgelegt.
% \else
% |\TextBox@nss| is the box, that contains the text in a structured box chart.
% Its real height, ascender and descender are distributed in |\TextBoxHt@nss|.
% \fi
%    \begin{macrocode}
\newbox\TextBox@nss \newdimen\TextBoxHt@nss
%    \end{macrocode}
% \end{macro}
% \end{macro}
%
% \subsection{\ifnum\language=\languageNGerman Die einzelnen Makros \else The single Macros \fi}
%
% \begin{macro}{\filler@nss}
% \changes{v8.2a}{06/01/17}{`ifmmode $\rightarrow$ `ensuremath}
% \changes{v4.1a}{95/07/18}{umbenannt von `filler}
% \changes{v4.1a}{95/07/17}{`emptyset wird als AMS-Schrift geladen}
% \changes{v2.5}{93/09/09}{Leerraum von `% auf `emptyset umgestellt}
% \ifnum\language=\languageNGerman
% Beim Setzen eines Struktogrammes entsteht teilweise Leerraum,
% der mit |\filler@nss| aufgef"ullt wird: "`$\emptyset$"'. Eine
% Alternative w"are "`$\mathchar"023B$"', was mit "`|\mathchar"023B|"'
% erzeugt wird. Der Leerraum wird allerdings nicht gef"ullt, wenn die Option
% |nofiller| gesetzt wird. Will man die globale Einstellung lokal umgehen,
% so kann man einfach die boolesche Variable |filler| auf |true| setzen:
% \cs{fillertrue}. 
% \else
% While setting a structured box chart there arises partly empty space, that
% will be filled up with |\filler@nss|: "'$\emptyset$"'. An alternative would be
% "'$\mathchar"023B$"', which is generated by
% "'|\mathchar"023B|"'. "'$\emptyset$"' will not be set, if the option
% |nofiller| is set. 
% \fi
%    \begin{macrocode}
\DeclareMathSymbol\varnothing{\mathord}{AMSb}{"3F}
\let\emptyset\varnothing
\def\filler@nss%
{%
    \iffiller\ensuremath{\emptyset}\fi%
}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\c@nter@nss}
% \changes{v4.0b}{95/05/02}{umbenannt von `c@nter}
% \changes{v3.1}{94/09/09}{Beschreibung eingef"uhrt}
% \ifnum\language=\languageNGerman
% Der folgende Makro setzt verschiedene Parameter, die zum Zentrieren eines
% Textes gebraucht werden.
% \else
% The following macro sets different parameters, which are used for centering
% a text.
% \fi
%    \begin{macrocode}
\def\c@nter@nss%
{%
    \leftskip=0pt plus 2em \rightskip=\leftskip \parfillskip=0pt
    \spaceskip=.333em \xspaceskip=.5em
    \pretolerance=9999 \tolerance=9999
    \hyphenpenalty=9999 \exhyphenpenalty=9999%
}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\PositionNSS}
% \changes{v4.5c}{96/05/01}{neu eingef"uhrt zur Positionierung der Struktogramme}
% \ifnum\language=\languageNGerman
% Struktogramme werden intern als |minipage| verwaltet. Das Kommando
% \cs{PositionNSS} erm"oglicht die Positionierung, es erwartet die Werte,
% die die |minipage|-Umgebung akzeptiert: |t|, |b| und keine Parameterangabe.
% Die Parameter werden nicht "uberpr"uft und gelten global ab Aufruf des
% Kommandos.
% \else
% Structured box charts are internally managed as |minipage|. The instruction
% \cs{PositionNSS} enables the positioning. It expects the values, that the |minipage|
% environment accepts: |t|, |b| and no parameter option. The parameters
% are not checked and are valid globally from the call of instruction on.
% \fi
%    \begin{macrocode}
\def\Position@nss{}%
\newcommand{\PositionNSS}[1]%
{%
    \def\Position@nss{#1}%
}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\struktogramm}
% \changes{v4.4b}{96/03/13}{Optionaler Parameter "uber `empty statt `relax getestet}
% \changes{v4.4a}{96/02/29}{`ifthenelse als internes Kommando definiert}
% \changes{v3.1a}{94/09/09}{optionaler Parameter eingef"uhrt}
% \cs{struktogramm} beginnt ein Struktogramm
%    \begin{macrocode}
\def\struktogramm(#1,#2)%
{%
%    \end{macrocode}
% \ifnum\language=\languageNGerman
% Zun"achst werden die internen Kommandos aktiviert:
% \else
% First the internal instructions are activated:
% \fi
%    \begin{macrocode}
    \let\ifthenelse=\ifthenelse@nss%
    \let\ifend=\ifend@nss%
%    \end{macrocode}
% \ifnum\language=\languageNGerman%
% Falls die Option |draft| gesetzt wurde, wird f"ur jedes Struktogramm
% grunds"atzlich auf den Entwurfsmodus umgeschaltet.
% \else%
% If the option |draft| is set we switch to the draft mode for every single
% structured box chart.
% \fi
%    \begin{macrocode}
    \ifdraft@nss\let\struktogramm@nss=\struktogramm@Proof\fi%
%    \end{macrocode}
% \ifnum\language=\languageNGerman
% Um den optionalen Parameter zu behandeln, wird in Abh"angigkeit vom
% n"achsten Zeichen ein internes Makro aufgerufen.
% \else
% An internal macro depending on the next character will be called to tread the
% optional parameter.
% \fi
%    \begin{macrocode}
    \@ifnextchar [{\struktogramm@nss(#1,#2)}{\struktogramm@nss(#1,#2)[]}%
}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\endstruktogramm}
% \ifnum\language=\languageNGerman
% \cs{endstruktogramm} beendet das Struktogramm. Offene Gruppen und Umgebungen
% werden geschlossen, lokale Definitionen globaler Werte werden r"uckg"angig
% gemacht.
% \else
% \cs{endstruktogramm} finishes the structured box chart. Open groups and
% environments will be closed, local definitions of global values will be returned.
% \fi
%    \begin{macrocode}
\def\endstruktogramm%
{%
            \endstr@kt%
        \end{picture}%
    \end{minipage}%
    \setlength{\unitlength}{\savelength@nss}%
}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\struktogramm@NoProof}
% \changes{v4.5b}{96/03/26}{Positionierung des Struktogramms "uber [t] bei der minipage}
% \changes{v4.4b}{96/03/13}{Optionaler Parameter "uber `empty statt `relax getestet}
% \changes{v4.2b}{95/10/15}{umbenannt von `struktogramm@nss}
% \changes{v4.0c}{95/05/09}{umbenannt von `nss@struktogramm}
% \changes{v3.1a}{94/09/09}{als internes Makro zur Behandlung optionaler Parameter neu}
% \changes{v3.3a}{94/09/21}{`baselineskip=0pt innerhalb von Struktogrammen korrigiert}
% \ifnum\language=\languageNGerman
% |\struktogramm@NoProof| "offnet ein Struktogramm
% \else
% |\struktogramm@NoProof| opens a structured box chart.
% \fi
%    \begin{macrocode}
\def\struktogramm@NoProof(#1,#2)[#3]%
{%
%    \end{macrocode}
% \ifnum\language=\languageNGerman
% Zun"achst wird die aktuelle \cs{unitlength} zwischengespeichert, da mit einer
% eigenen Gr"o"se gearbeitet wird.
% \else
% First the actual \cs{unitlength} will be stored intermediately, since it is worked
% with an own entity.
% \fi
%    \begin{macrocode}
    \def\next{#3}
    \setlength{\savelength@nss}{\unitlength}
    \setlength{\unitlength}{0.001mm}
%    \end{macrocode}
% \ifnum\language=\languageNGerman
% Wenn der dritte Parameter nicht \cs{relax} ist, wird die Bezeichnung
% geschrieben und es muss ein bisschen zus"atzlicher Platz geschaffen werden.
% \else
% If the third parameter is not \cs{relax}, then the name will be written and it has to
% be created some new space in addition.
% \fi
%    \begin{macrocode}
    \begin{minipage}[\Position@nss]{#1mm}
        \ifx\next\empty\else #3\\[\smallskipamount]\fi%
%    \end{macrocode}
% \ifnum\language=\languageNGerman
% Um die Verwaltung des ben"otigten Raumes m"oglichst einfach zu machen,
% wird eine \cs{picture}-Umgebung ge"offnet, in der eine weitere
% Gruppe durch den Aufruf von |\str@kt| ge"offnet wird.
% \else
% For easier management of the needed space the \cs{picture} environment will be
% opened, in which an own other group will be opened by call of |str@kt|.
% \fi
%    \begin{macrocode}
        \begin{picture}(#1000,#2000)%
            \str@kt{0}{#2000}{#1000}%
}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\struktogramm@Proof}
% \changes{v4.5b}{96/03/26}{Positionierung des Struktogramms "uber [t] bei der minipage}
% \changes{v4.4b}{96/03/13}{Optionaler Parameter "uber `empty statt `relax getestet}
% \changes{v4.2b}{95/10/15}{neu eingef"uhrt}
% \ifnum\language=\languageNGerman
% |\struktogramm@proof| "offnet ein Struktogramm im \foreign{proof}-Modus.
% Der Ablauf entspricht im wesentlichen |\struktogramm@NoProof|.
% \else
% |\struktogramm@proof| opens a structured box chart in the \foreign{proof} mode.
% Progress is essentially equivalent to |\struktogramm@NoProof|.
% \fi
%    \begin{macrocode}
\def\struktogramm@Proof(#1,#2)[#3]%
{%
    \def\next{#3}%
    \setlength{\savelength@nss}{\unitlength}%
    \setlength{\unitlength}{0.001mm}%
    \begin{minipage}[\Position@nss]{#1mm}%
        \ifx\next\empty\else #3\\[\smallskipamount]\fi%
        \begin{picture}(#1000,#2000)%
            \put(0,0){\makebox(0,0)[cc]{$\bullet$}}%
            \put(0,#2000){\makebox(0,0)[cc]{$\bullet$}}%
            \put(#1000,0){\makebox(0,0)[cc]{$\bullet$}}%
            \put(#1000,#2000){\makebox(0,0)[cc]{$\bullet$}}%
            \str@kt{0}{#2000}{#1000}%
}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\sProofOn}
% \begin{macro}{\sProofOff}
% \changes{v4.2b}{95/10/15}{neu eingef"uhrt}
% \ifnum\language=\languageNGerman
% Die Schalter zum Umschalten zwischen \foreign{proof}- und
% \foreign{non proof}-Modus. Abschlie"send wird in den \foreign{non proof}-Modus
% umgeschaltet.
% \else
% The switches for changing from \foreign{proof} to \foreign{non proof} mode and
% back. Finally it will be switched to \foreign{non proof} mode.
% \fi
%    \begin{macrocode}
\def\sProofOn%
{%
    \let\struktogramm@nss=\struktogramm@Proof%
}
\def\sProofOff%
{%
    \let\struktogramm@nss=\struktogramm@NoProof%
}
\let\struktogramm@nss=\struktogramm@NoProof%
%    \end{macrocode}
% \end{macro}
% \end{macro}
%
% \changes{v4.3a}{96/01/26}{Dokumentation verbessert und korrigiert}
% \ifnum\language=\languageNGerman
% Um Kompatibilit"at mit "alteren Versionen von Struktogrammen zu erhalten,
% sind die Makros \cs{openstrukt} und \cs{closestrukt} weiterhin in diesem
% \foreign{package} erhalten. Diese sollten aber nicht weiter benutzt werden.
% \else
% To achieve compatibility with older versions of structured box charts the
% macros \cs{openstrukt} and \cs{closestrukt} are still included in this package.
% But they should'nt be used any longer.
% \fi
% \begin{macro}{\openstrukt}
% \ifnum\language=\languageNGerman
% \cs{openstrukt} beginnt ein Struktogramm
% \else
% \cs{openstrukt} begins a structured box chart.
% \fi
%    \begin{macrocode}
\def\openstrukt#1#2%
{%
%    \end{macrocode}
% \if
% Die aktuelle \cs{unitlength} wird zwischengespeichert, da mit einer eigenen
% Gr"o"se gearbeitet wird.
% \else
% The actual \cs{unitlength} will be stored intermediately, since it is worked with
% an own entity.
% \fi
%    \begin{macrocode}
    \setlength{\savelength@nss}{\unitlength}
    \setlength{\unitlength}{0.001mm}
%    \end{macrocode}
% \ifnum\language=\languageNGerman
% Um die Verwaltung des ben"otigten Raumes m"oglichst einfach zu machen,
% wird eine \cs{picture}-Umgebung ge"offnet, in der eine eigene weitere
% Gruppe durch den Aufruf von |\str@kt| ge"offnet wird.
% \else
% For easier management of the needed space the \cs{picture} environment will be
% opened, in which an own other group will be opened by the call of |\str@kt|.
% \fi
%    \begin{macrocode}
    \begin{picture}(#1000,#2000)
        \str@kt{0}{#2000}{#1000}%
}
%    \end{macrocode}
% \end{macro}
% \ifnum\language=\languageNGerman
% Es ist zu beachten, dass es kein optionales Argument gibt.
% \else
% One has to pay attention that there's no optional argument.
% \fi
%
% \begin{macro}{\closestrukt}
% \ifnum\language=\languageNGerman
% \cs{closestrukt} beendet das Struktogramm. Offene Gruppen und Umgebungen
% werden geschlossen, lokale Definitionen globaler Werte werden r"uckg"angig
% gemacht.
% \else
% \cs{closestrukt} finishes the structured box chart. Open groups and environments
% will be closed. Local definitions of global values will be reversed.
% \fi
%    \begin{macrocode}
\def\closestrukt%
{%
        \endstr@kt
    \end{picture}
    \setlength{\unitlength}{\savelength@nss}%
}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\getoption}
% \ifnum\language=\languageNGerman
% \cs{getoption} "uberpr"uft, ob ein optionales Argument angegeben wurde. Dies
% geschieht, indem das n"achste Zeichen getestet wird.
% \else
% \cs{getoption} checks, if an optional argument is given. This happens by
% testing the next character.
% \fi
%    \begin{macrocode}
\def\getoption{\@ifnextchar [{\getnum}{\param@nss=0\next}}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\getnum}
% \ifnum\language=\languageNGerman
% \cs{getnum} weist den Parameter dem globalen Z"ahler |\param@nss| zu und ruft
% den auf \cs{next} gesetzten Makro auf.
% \else
% \cs{getnum} assigns the parameter to the global counter |\param@nss| and calls
% the macro set on \cs{next}.
% \fi
%    \begin{macrocode}
\def\getnum[#1]{\param@nss=#1\next}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\str@kt}
% \ifnum\language=\languageNGerman
% |\str@kt| setzt globale Werte: |\gx@nss| als x-Koordinate (|#1|), |\gy@nss| als
% y-Koordinate (|#2|) und |\gsize@nss| als Breite des aktuellen Struktogramms
% (|#3|).
% Gleichzeitig wird eine Gruppe ge"offnet, in der mit lokalen Kopien dieser
% Werte (|\x@nss|, |\y@nss| und |\xsize@nss|) gearbeitet werden kann.
% \else
% |\str@kt| sets global values: |\gx@nss| as x-coordinate (|#1|), |\gy@nss| as
% y-coordinate (|#2|) and |\gsize@nss| as width of the actual structured box chart
% (|#3|).
% At the same time a group will be opened, in which one can work with local
% copies of these values (|\x@nss|, |\y@nss| and |\xsize@nss|).
% \fi
%    \begin{macrocode}
\def\str@kt#1#2#3%
{%
    \global\gx@nss=#1\global\gy@nss=#2\global\gsize@nss=#3%
    \begingroup%
        \x@nss=\gx@nss\y@nss=\gy@nss\xsize@nss=\gsize@nss%
}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\endstr@kt}
% \ifnum\language=\languageNGerman
% schlie"st die oben ge"offnete Gruppe, die aktuelle $y$-Koordinate wird global
% umgesetzt, um den (weiter unten liegenden) Ansatzpunkt f"ur das n"achste
% Element des Struktogramms zu erhalten.
% \else
% closes the group above opened. The actual $y$-coordinate will be globally
% changed to get the point of attachment (which lies further down) for the next
% element of the structured box chart.
% \fi
%    \begin{macrocode}
\def\endstr@kt%
{%
        \global\gy@nss=\y@nss%
    \endgroup%
    \ydepth@nss=\gy@nss%
}
%    \end{macrocode}
% \end{macro}
%
% \changes{v7.0b}{2004/03/09}{ersetzt durch `tempxx@nss}
% \changes{v4.0b}{95/05/08}{umbenannt von `xin}
% \changes{v3.2a}{94/09/14}{Beschreibung eingef"uhrt}
% \begin{macro}{\set@nss}
%\changes{v4.0b}{95/05/08}{umbenannt von `set}
% \ifnum\language=\languageNGerman
% |\set@nss| setzt den als ersten Parameter "ubergebenen Text in eine horizontale
% Box |\TextBox@nss|. Ist die Breite dieser Box gr"o"ser als die im ersten Parameter
% "ubergebene Breite, wird der Text in eine vertikale Box
% gesetzt.
% \else
% |\set@nss| sets the text, which is given as first parameter, into a horizontal
% box |\TextBox@nss|. If the width of this box is bigger than the width
% handed over in the first parameter the text will be set into a vertical box.
% \fi
%    \begin{macrocode}
\def\set@nss#1#2%
{%
    \setbox\TextBox@nss=\hbox{#1}%
    \tempxx@nss=\xsize@nss\advance\tempxx@nss by-#2%
    \ifdim\wd\TextBox@nss>\tempxx@nss\unitlength%
        \setbox\TextBox@nss=\vbox{\hsize=\tempxx@nss\unitlength\noindent#1}%
    \fi%
}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\block@nss}
% \changes{v7.0a}{04/01/04}{umbenannt von `bl@ck}
% \ifnum\language=\languageNGerman
% |\block@nss| setzt die Box |\TextBox@nss| entsprechend dem zweiten Parameter. Ist dieser
% 1, wird eine Box mit Rahmen gesetzt, ist dieser 0, wird eine Box ohne Rahmen
% gesetzt. Bei allen anderen Werten wird nur die Gr"o"se des Struktogramms,
% gegeben durch |\y@nss|, vergr"o"sert.
% \else
% |\block@nss| sets the box |\TextBox@nss| corresponding to the second parameter.
% If this parameter is 1, the box will be set in a frame, and if it is 0, a box without
% frame will be set. In all other cases only the size of the structured box chart
% given by |\y@nss| will be changed.
% \fi
%    \begin{macrocode}
\def\block@nss#1#2%
{%
    \tempy@nss=#1\TextBoxHt@nss=\ht\TextBox@nss%
    \advance\TextBoxHt@nss by\dp\TextBox@nss%
    \advance\TextBoxHt@nss by 2mm%
    \ifdim\TextBoxHt@nss<\tempy@nss\unitlength%
        \TextBoxHt@nss=\tempy@nss\unitlength%
    \fi%
    \TextBoxHt@nss=0.00536\TextBoxHt@nss%
    \ydepth@nss=\TextBoxHt@nss\advance\y@nss by-\ydepth@nss%
    \ifx#21%
        \put(\x@nss,\y@nss)%
        {%
            \framebox(\xsize@nss,\ydepth@nss){\box\TextBox@nss}%
        }%
    \else%
        \ifx#20%
            \put(\x@nss,\y@nss)%
            {%
                \makebox(\xsize@nss,\ydepth@nss){\box\TextBox@nss}%
            }%
        \else%
            \advance\y@nss by \ydepth@nss%
        \fi%
    \fi%
}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\declarationtitle}
% \ifnum\language=\languageNGerman
% Der Makro \cs{declarationtitle} legt den Inhalt der optionalen "Uberschrift
% bei Deklarationen fest. Er kann global vorgegeben werden, um eine
% einheitliche Darstellung zu erhalten.
% \else
% The macro \cs{declarationtitle} determines the content of the optional titel of
% declarations. It can be globally given in order to receive a homogeneous
% representation.
% \fi
%    \begin{macrocode}
\def\declarationtitle{\ifnum\language=\languageNGerman Speicherplatz bereitstellen: 
                      \else providing memory space\fi}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\descriptionindent}
% \changes{v4.5a}{96/03/14}{an \LaTeX2e angepasst}
% \changes{v3.3a}{94/09/16}{neu eingef"uhrt}
% \begin{macro}{\descriptionwidth}
% \changes{v4.5a}{96/03/14}{an \LaTeX2e angepasst}
% \changes{v3.3a}{94/09/16}{neu eingef"uhrt}
% \begin{macro}{\descriptionwidth@nss}
% \changes{v4.5a}{96/03/14}{neu eingef"uhrt}
% \begin{macro}{\descriptionsep}
% \changes{v4.5a}{96/03/14}{an \LaTeX2e angepasst}
% \changes{v3.3a}{94/09/16}{neu eingef"uhrt}
% \ifnum\language=\languageNGerman
% Die folgenden Variablen (\foreign{dimen-register}) wurden eingef"uhrt,
% um das Layout der Variablenbeschreibung frei gestalten zu k"onnen.
% \else
% The following variables (\foreign{dimen-register}) have been introduced to
% be able to freely arrange the layout of variable description.
% \fi
%    \begin{macrocode}
\newlength{\descriptionindent} \setlength{\descriptionindent}{1.5em}
\newlength{\descriptionwidth}  \setlength{\descriptionwidth}{40pt}
\newlength{\descriptionsep}    \setlength{\descriptionsep}{\tabcolsep}
\newlength{\descriptionwidth@nss}
%    \end{macrocode}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
%
% \begin{macro}{\descriptionlabel@nss}
% \changes{v5.2a}{97/12/03}{Vorbesetzung des Fonts entf"allt}
% \changes{v4.5a}{96/03/14}{neu eingef"uhrt}
% \ifnum\language=\languageNGerman
% Internes Kommando nach
% \else
% internal command according to
% \fi
% \cite[Abs. 3.3.5]{GoossensMittelbachSamarin:Companion}
% \ifnum\language=\languageNGerman zur Definition
% der Marke bei der Liste der Variablenbeschreibungen
% \else
% for the definition of label on the list of variable definitions
% \fi
%    \begin{macrocode}
\newcommand{\descriptionlabel@nss}[1]%
{%
    \settowidth{\descriptionwidth@nss}{#1}%
    \ifnum\descriptionwidth@nss>\descriptionwidth%  % term > labelwidth
        \parbox[b]{\descriptionwidth}%
        {%
            \makebox[0pt][l]{#1}\\%
        }%
    \else%                                      % term < labelwidth
        #1%
    \fi%
    \hfil\relax%
}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{declaration}
% \changes{v4.5a}{96/03/14}{neu eingef"uhrt}
% \ifnum\language=\languageNGerman
% Die Beschreibung von Variablen basiert nun auf der allgemeinen
% |list|-Umgebung, die entsprechend modifiziert wurde. Insbesondere
% wurden alle Abst"ande auf 0pt gesetzt.
% \else
% Now the description of variables is based on the common |list|-environment,
% which has been modified correspondingly. Especially all distances have been set
% on 0pt.
% \fi
%    \begin{macrocode}
\newenvironment{declaration}[1][\declarationtitle]%
{%
    \def\next{#1}%
    \ifx\next\empty\else #1\\\fi
    \let\description=\description@nss
    \tempxx@nss=\xsize@nss\advance\tempxx@nss by -\tempx@nss%
    \begin{minipage}[t]{\tempxx@nss\unitlength}
    \begin{list}{}%
    {%
        \renewcommand{\makelabel}{\descriptionlabel@nss}%
        \setlength{\labelwidth}{\descriptionwidth}%
        \setlength{\itemsep}{0pt} \setlength{\topsep}{0pt}%
        \setlength{\parsep}{0pt} \setlength{\partopsep}{0pt}
        \setlength{\leftmargin}{\descriptionwidth}%
        \addtolength{\leftmargin}{\descriptionsep}%
        \addtolength{\leftmargin}{\descriptionindent}%
    }%
}%
{%
    \end{list}%
    \end{minipage}
}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\description@nss}
% \changes{v4.5a}{96/03/14}{neu eingef"uhrt}
% \ifnum\language=\languageNGerman
% Um keine Schwierigkeiten mit der |description|-Umgebung zu haben,
% wird das Kommando |\description@nss| mit der Erweiterung |@nss|
% eingef"uhrt. Seine G"ultigkeit wird
% mit einem \cs{let} auf die |declaration|-Umgebung beschr"ankt
% \else
% In order to avoid difficulties with the |description|-environment the command
% |\description@nss| with the extension |@nss| will be introduced. Its validity will be
% restricted to |declaration|-environment by a \cs{let}.
% \fi
%    \begin{macrocode}
\newcommand{\description@nss}[2]{\item[#1] \{#2\}}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\assign}
% \changes{v3.2a}{94/09/14}{Beschreibung eingef"uhrt}
% \ifnum\language=\languageNGerman
% Einfache Anweisungen werden "uber \cs{assign} geschrieben:
% \else
% Simple commands are written by \cs{assign}:
% \fi
%    \begin{macrocode}
\def\assign{\let\next=\@assign\getoption}%
\def\@assign#1%
{%
    \tempx@nss=\xsize@nss\divide\tempx@nss by 6%
    \set@nss{#1}{\tempx@nss}\tempy@nss=\number\param@nss000%
    \block@nss{\tempy@nss}{1}%
}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\sub}
% \changes{v4.5a}{96/03/14}{Beschreibung eingef"uhrt}
% \ifnum\language=\languageNGerman
% Der Aufruf eines Unterprogrammes wird mit \cs{sub} gekennzeichnet:
% \else
% The call of a subprogram is signed by \cs{sub}:
% \fi
%    \begin{macrocode}
\def\sub{\let\next=\@sub\getoption}
\def\@sub#1%
{%
    \@assign{#1}\tempx@nss=\xsize@nss\divide\tempx@nss by 20%
    \tempxx@nss=\x@nss\advance\tempxx@nss by \tempx@nss%
    \put(\tempxx@nss,\y@nss){\line(0,1){\ydepth@nss}}%
    \tempxx@nss=\x@nss\advance\tempxx@nss by \xsize@nss%
    \advance\tempxx@nss by -\tempx@nss%
    \put(\tempxx@nss,\y@nss){\line(0,1){\ydepth@nss}}%
}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\exit}
% \changes{v3.3c}{94/09/27}{Fehler mit der Breite korrigiert}
% \changes{v2.5}{93/09/09}{"Anderungen an der Darstellung}
% \changes{v2.0}{92/01/17}{Eingef"uhrt durch D. Rieger}
% Verlassen einer Schleife an einer bestimmten Stelle.
%    \begin{macrocode}
\def\exit{\let\next=\@exit\getoption}
\def\@exit#1%
{%
    \tempx@nss=\xsize@nss\divide\tempx@nss by 6%
    \set@nss{#1}{\tempx@nss}%
    \tempy@nss=\number\param@nss000%
    \block@nss{\tempy@nss}{1}%
    \divide\ydepth@nss by 2%
    \advance\y@nss by \ydepth@nss%
    \ifnum\ydepth@nss<3500%
%    \end{macrocode}
% \ifnum\language=\languageNGerman
% Eigene Gruppe bilden, um "Anderung an |\ydepth@nss| lokal zu halten
% \else
% Build of an own group to keep change of |\ydepth@nss| local
% \fi
%    \begin{macrocode}
    {%
       \multiply\ydepth@nss by 2%
       \put(\x@nss,\y@nss){\line(2,1){\ydepth@nss}}%
       \put(\x@nss,\y@nss){\line(2,-1){\ydepth@nss}}%
    }%
    \else%
       \put(\x@nss,\y@nss){\line(1,1){\ydepth@nss}}%
       \put(\x@nss,\y@nss){\line(1,-1){\ydepth@nss}}%
    \fi%
    \advance\y@nss by-\ydepth@nss%
}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\return}
% \changes{v4.5a}{96/03/14}{Beschreibung eingef"uhrt}
% \ifnum\language=\languageNGerman
% Die R"uckkkehr aus einem Unterprogramm wird mit \cs{return} gekennzeichnet:
% \else
% The return from a subprogram is signed by \cs{return}:
% \fi
%    \begin{macrocode}
\def\return{\let\next=\@return\getoption}
\def\@return#1%
{%
    \tempy@nss=\number\param@nss000%
    \ifnum\tempy@nss<7000 \tempy@nss=7000 \fi%
    \set@nss{#1}{\tempy@nss} \block@nss{\tempy@nss}{1}%
    \divide\ydepth@nss by 2%
    \advance\y@nss by \ydepth@nss%
    \put(\x@nss,\y@nss){\line(1,1){\ydepth@nss}}%
    \put(\x@nss,\y@nss){\line(1,-1){\ydepth@nss}}%
    \tempx@nss=\x@nss\advance\tempx@nss by \xsize@nss%
    \put(\tempx@nss,\y@nss){\line(-1,1){\ydepth@nss}}%
    \put(\tempx@nss,\y@nss){\line(-1,-1){\ydepth@nss}}%
    \advance\y@nss by-\ydepth@nss%
}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\condindent@nss}
% \changes{v4.1b}{95/07/19}{umbenannt von `w@rt@nss}
% \changes{v4.0b}{95/05/08}{umbenannt von `w@rt}
% \begin{macro}{\index@nss}
% \changes{v4.1b}{95/07/19}{umbenannt von `zaehler@nss}
% \changes{v4.0b}{95/05/08}{umbenannt von `zaehler}
% \begin{macro}{\anzzeilen@nss}
% \changes{v4.1b}{95/07/19}{umbenannt von `zeilen@nss}
% \changes{v4.0b}{95/05/08}{umbenannt von `zeilen}
% \changes{v3.1}{94/09/09}{Beschreibung eingef"uhrt}
% \ifnum\language=\languageNGerman
% |\index@nss|, |\anzzeilen@nss| und |\condindent@nss| werden ben"otigt, um 
% den Umbruch der Bedingung in einer \cs{if}-Abfrage geeignet durchf"uhren
% zu k"onnen:
% \begin{quote}
% \DeleteShortVerb{\|}
% \begin{tabular}{|l|p{6cm}|}\hline
% \verb-\index@nss- & ein Schleifenindex \\\hline
% \verb-\anzzeilen@nss- & die Anzahl von
% Zeilen, in die der Bedingungstext maximal zerlegt wird \\\hline
% \verb-\condindent@nss- & enth"alt den jeweiligen Wert des Einzugs, um den
% Bedingungstext an das Dreieck anzupassen \\\hline
% \end{tabular}
% \MakeShortVerb{\|}
%\end{quote}
% Die H"ohe der Zeilen wird bei der Berechnung mit 5mm angenommen.
% \else
% |\index@nss|, |\anzzeilen@nss| and |\condindent@nss| are used for suitable
% making up of \cs{if}-conditions:
% |\index@nss| is a loopindex, |\anzzeilen@nss| gives the number of lines the
% conditioning text can be analyzed at most and |\condindent@nss| consists
% the value of insertion to adapt the conditioning text to the triangle.
% In this evaluation the height of lines is 5mm.
% \fi
%    \begin{macrocode}
\countdef\condindent@nss=232 \countdef\index@nss=233%
%    \end{macrocode}
% \end{macro}
% \end{macro}
% \end{macro}
%
% \begin{macro}{\gindhelp@nss}
% \changes{v7.0ba}{04/03/09}{umbenannt von `indhelp@nss}
% \begin{macro}{\indentmeasure@nss}
% \changes{v5.3a}{98/11/27}{neu eingef"uhrt}
% \begin{macro}{\indentmeasureleft@nss}
% \changes{v5.3a}{98/11/27}{neu eingef"uhrt}
% \begin{macro}{\thisindent@nss}
% \changes{v5.3a}{98/11/27}{neu eingef"uhrt}
% \begin{macro}{\thisindentleft@nss}
% \changes{v5.3a}{98/11/27}{neu eingef"uhrt}
% \begin{macro}{\thislength@nss}
% \changes{v5.3a}{98/11/27}{neu eingef"uhrt}
% \ifnum\language=\languageNGerman
% Um die Textform (\cs{parshape}) an beliebige Steigungen anpassen zu k"onnen,
% sind einige Rechenoperationen mit Hilfsgr"o"sen erforderlich. 
% Die folgenden |dimen|-Variablen wurden eingef"uhrt, um die Textform
% (\cs{parshape}) an beliebige Steigungen anpassen zu k"onnen, die Bedeutungen
% sind im einzelnen:
% \begin{quote}
% \DeleteShortVerb{\|}
% \begin{tabular}{|l|p{6cm}|}\hline
% \verb-\indentmeasure@nss-:     & Einheit des Einzugs (links)\\\hline
% \verb-\indentmeasureright@nss-:& Einheit des Einzugs (rechts) \\\hline
% \verb-\thisindent@nss-:        & aktueller Einzug (links) \\\hline
% \verb-\thisindentright@nss-:   & aktueller Einzug (rechts) \\\hline
% \verb-\thislength@nss-:        & L"ange der aktuellen Zeile, ergibt 
%                                  sich aus der Zeilenl"ange \verb-\xsize@nss-
%                                  vermindert um \verb-\thisindent@nss- 
%                                  und \verb-\thisindentright@nss-\\\hline
% \end{tabular}
% \MakeShortVerb{\|}
%\end{quote}
% |\gindhelp@nss| ist eine einfache Hilfsvariable zur tempor"aren Speicherung
% numerischer Werte.
% \else
% |\gindhelp@nss| is a simple helper variable for storing a numerical value
% temporarily.
% \fi
%    \begin{macrocode}
\newdimen\indentmeasure@nss \newdimen\indentmeasureright@nss
\newdimen\thisindent@nss \newdimen\thisindentright@nss
\newdimen\thislength@nss
\countdef\gindhelp@nss=234
%    \end{macrocode}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
%
% \begin{macro}{\ifthenelse@nss}
% \changes{v8.0a}{04/07/13}{Paket \textsf{pict2e.sty} wird unterst"utzt}
% \changes{v4.4a}{96/02/29}{Kommando intern gemacht, um benannt von `ifthenelse}
% \changes{v4.1d}{95/10/04}{Tippfehler korrigiert}
% \changes{v4.0d}{95/04/12}{Tippfehler korrigiert}
% \changes{v3.1}{94/09/09}{Beschreibung eingef"uhrt}
% \ifnum\language=\languageNGerman
% |\ifthenelse@nss| leitet eine einfache Verzweigung ein. Um Konflikte
% mit anderen Makropaketen zu vermeiden, wird eine Schreibweise benutzt,
% die auf Grund des Klammeraffens nicht direkt aufrufbar ist. Erst ein \cs{let}
% in der Definition der Umgebung |struktogramm| macht dieses Kommando aktiv.
% \else
% |\ifthenelse@nss| introduces a simple branch. In order to avoid conflicts with
% other macro packages a style is used, which can't be directly called because
% of the at. Only a \cs{let} in the definition of environment |struktogramm|
% activates the command.
% \fi
%    \begin{macrocode}
\def\ifthenelse@nss{\let\next=\@ifthenelse@nss\getoption}
\def\@ifthenelse@nss#1#2#3#4#5%
%    \end{macrocode}
% \ifnum\language=\languageNGerman
% Die 5 Parameter sind:
% \else
% The 5 parameters are:
% \fi
% \ifnum\language=\languageNGerman
% \begin{enumerate}
%   \item Die Steigung (negativ, invers) des linken Zweiges,
%   \item die Steigung (positiv, invers) des rechten Zweiges,
%   \item die Bedingung, die getestet wird,
%   \item Fall des linken Zweiges ("ublicherweise "`ja"') und
%   \item Fall des rechten Zweiges ("ublicherweise "`nein"').
% \end{enumerate}
% \else
% \begin{enumerate}
%   \item the gradient (negative, inverse) of the left branch,
%   \item the gradient (positive, inverse) of the right branch,
%   \item the condition, that is tested,
%   \item case of the left branch (normally "`yes"') and
%   \item case of the right branch (normally "`no"').
% \end{enumerate}
% \fi
%    \begin{macrocode}
{%
%    \end{macrocode}
% \ifnum\language=\languageNGerman
% Als erstes werden die schr"agen Linien gezeichnet. |\tempx@nss| ist die
% Breite des linken Zweiges, |\tempxx@nss| die des rechten Zweiges.
% \else
% First the slanting lines are drawn. |\tempx@nss| is the width of the left branch,
% |\tempxx@nss| the width of the right branch.
% \fi
%    \begin{macrocode}
    %\ifthenelse{\boolean{anygradient}}%
    %{%
    \ifanygradient
%    \end{macrocode}
% \ifnum\language=\languageNGerman
% Wenn \cs{anygradient} nicht wahr ist, werden schr"age Linien mit \cs{line}
% erzeugt. \cs{xx@nss} ist die Anzahl von Einheiten, in die aktuelle Breite
% zerlegt wird.
% \else
% If \cs{anygradient} isn't true, the slanting lines are generated by
% \cs{line}. \cs{xx@nss} is the number of unit, into which the current
% width is divided.
% \fi
%    \begin{macrocode}
        \xx@nss=#1 \advance\xx@nss by #2%
        \ifnum\number\param@nss000>0%
%    \end{macrocode}
% \ifnum\language=\languageNGerman
% \cs{tempyy@nss} ist die H"ohe des "`Bedingungsvierecks"', \cs{tempx@nss}
% die linke und \cs{tempxx@nss} die rechte Breite.
% \else
% \cs{tempyy@nss} is the height of the box including the condition,
% \cs{tempx@nss} it's left and \cs{tempxx@nss} it's right width.
% \fi
%    \begin{macrocode}
            \tempyy@nss=\number\param@nss000%
            \tempx@nss=\xsize@nss%
            \multiply\tempx@nss by #1 \divide\tempx@nss by \xx@nss%
            \tempxx@nss=\xsize@nss%
            \multiply\tempxx@nss by #2 \divide\tempxx@nss by \xx@nss%
        \else%
            \tempyy@nss=\xsize@nss \divide\tempyy@nss by \xx@nss%
            \tempx@nss=\tempyy@nss \multiply\tempx@nss by #1%
            \tempxx@nss=\tempyy@nss \multiply\tempxx@nss by #2%
        \fi%
        \xx@nss=\tempx@nss \advance\xx@nss by \x@nss%
        \tempy@nss=\y@nss \advance\tempy@nss by -\tempyy@nss%
        \ifemlines%
            \emline{\x@nss}{\y@nss}{}{\xx@nss}{\tempy@nss}{}%
        \else\ifcurves%
            \curve(\x@nss, \y@nss, \xx@nss, \tempy@nss)%
        \else\ifpictIIe%
%    \end{macrocode}
% \ifnum\language=\languageNGerman
% Die Steigungen d"urfen jetzt fast beliebige Werte annehmen, Z"ahler und
% Nenner m"ussen jedoch im Intervall \([-1000, 1000]\) liegen, die
% Skalierung mit dem Faktor 1000 muss daher wieder r"uckg"angig gemacht werden.
% \else
% The slope arguments must lie in the intervall \([-1000, 1000]\), so scale
% them appropriately.
% \fi
%    \begin{macrocode}
            \tempyyy@nss=\tempyy@nss
            \divide\tempyyy@nss by 1000
            \tempxxx@nss=\tempx@nss
            \divide\tempxxx@nss by 1000
            \put(\x@nss,\y@nss){\line(\tempxxx@nss, -\tempyyy@nss){\tempx@nss}}
        \fi\fi\fi%
        \advance\x@nss by \xsize@nss%
        \ifemlines%
            \emline{\x@nss}{\y@nss}{}{\xx@nss}{\tempy@nss}{}%
        \else\ifcurves%
            \curve(\x@nss, \y@nss, \xx@nss, \tempy@nss)
        \else\ifpictIIe%
            \tempxxx@nss=\tempxx@nss
            \divide\tempxxx@nss by 1000
            \put(\x@nss,\y@nss){\line(-\tempxxx@nss, -\tempyyy@nss){\tempxx@nss}}
        \fi\fi\fi%
%    \end{macrocode}
% \ifnum\language=\languageNGerman
% Die Koordinaten werden auf die linke untere Ecke des
% "`Bedingungsrechteckes"' gesetzt:
% \else
% The coordinates are set on the left lower angle of the "`conditioning rectangle"':
% \fi
%    \begin{macrocode}
     \advance\x@nss by -\xsize@nss \advance\y@nss by -\tempyy@nss%
%    \end{macrocode}
% \ifnum\language=\languageNGerman
% Nun wird die Form des Bedingungstextes berechnet (vgl.
% \else
% Now the form of the conditioning text will be calculated (cf.
% \fi
% \cite[Kap.~14, S.~101--102]{Knuth:TeXBook}):
%    \begin{macrocode}
    \tempy@nss=\tempyy@nss\divide\tempy@nss by 5000%
%    \end{macrocode}
% \ifnum\language=\languageNGerman
% Wenn die H"ohe des "`Bedingungsrechteckes"' zu gering ist, muss dennoch
% eine Zeile hineingeschrieben werden, ansonsten f"uhrt \cs{parshape} zu einem
% Fehler.
% \else
% If the height of the "`conditioning rectangle"' is too low, a line has to
% be written though. Otherwise \cs{parshape} causes a mistake.
% \fi
% \changes{v8.0e}{05/05/17}{Fehlermeldung erweitert, nun auch Hinweis auf
% curves und pict2e}
%    \begin{macrocode}
    \ifnum\tempy@nss<1 \tempy@nss=1\fi%
    \indentmeasure@nss=\xsize@nss\unitlength%
    \gindhelp@nss=#1\advance\gindhelp@nss by #2%
    \divide\indentmeasure@nss by \gindhelp@nss%
    \indentmeasureright@nss = \indentmeasure@nss%
    \multiply\indentmeasure@nss by #1%
    \multiply\indentmeasureright@nss by #2%
    \divide\indentmeasure@nss by \tempyy@nss%
    \divide\indentmeasureright@nss by \tempyy@nss%
    \phantom{\vbox{\hsize=0pt\global\gindhelp@nss=\the\baselineskip}}%
    \multiply\gindhelp@nss by 360%
    \multiply\indentmeasure@nss by \gindhelp@nss%
    \multiply\indentmeasureright@nss by \gindhelp@nss%
    \xdef\shape{}\index@nss=0%
    \loop%
        \advance\index@nss by 1% %Zahl der Zeile
        \thisindent@nss=\indentmeasure@nss%
        \multiply\thisindent@nss by \index@nss%
        \advance\thisindent@nss by 0.175cm%
        \xdef\shape{\shape\the\thisindent@nss}%
        \thisindentright@nss=\indentmeasureright@nss%
        \multiply\thisindentright@nss by \index@nss%
        \advance\thisindentright@nss by 0.175cm%
        \thislength@nss=\xsize@nss\unitlength%
        \advance\thislength@nss by -\thisindent@nss
        \advance\thislength@nss by -\thisindentright@nss
        \xdef\shape{\shape\the\thislength@nss}%
        \ifnum\index@nss<\tempy@nss%
    \repeat%
    %}%
    %{%
\else
    \ifnum\number\param@nss000>0%
        \typeout{struktex warning:}%
        \typeout{[...] not supplied without curves, emlines2, or pict2e}%
    \fi%
    \tempx@nss=#1 \advance\tempx@nss by #2%
    \tempyy@nss=\xsize@nss \divide\tempyy@nss by \tempx@nss%
    \tempx@nss=\tempyy@nss \multiply\tempx@nss by #1%
    \put(\x@nss,\y@nss){\line(#1,-1){\tempx@nss}}%
    \tempxx@nss=\tempyy@nss \multiply\tempxx@nss by #2%
    \advance\x@nss by \xsize@nss%
    \put(\x@nss,\y@nss){\line(-#2,-1){\tempxx@nss}}%
    \advance\x@nss by -\xsize@nss \advance\y@nss by -\tempyy@nss%
    \tempy@nss=\tempyy@nss\divide\tempy@nss by 5000%
    \ifnum\tempy@nss<1 \tempy@nss=1\fi%
    \xdef\shape{}\index@nss=0%
    \loop%
        \advance\index@nss by 1%
        \condindent@nss=#1\multiply\condindent@nss by\index@nss%
        \multiply\condindent@nss by 5000%
        \xdef\shape{\shape\the\condindent@nss\unitlength}%
        \condindent@nss=#1\advance\condindent@nss by #2%
        \multiply\condindent@nss by\index@nss%
        \multiply\condindent@nss by -5000%
        \advance\condindent@nss by \xsize@nss%
        \xdef\shape{\shape\the\condindent@nss\unitlength}%
        \ifnum\index@nss<\tempy@nss%
    \repeat%
    %}%
    \fi
    \put(\x@nss,\y@nss)%
    {%
        \framebox(\xsize@nss,\tempyy@nss)[tl]%
        {%
            \vbox%
            {%
                \hsize=\xsize@nss\unitlength%
                \parshape=\tempy@nss \shape \c@nter@nss% 
                                                 %dies sorgt f"ur den Einzug
                \noindent\vrule width0pt height12pt \relax #3% 
                                              %hier wird der Text ausgegeben
            }%
        }%
    }%
    \divide\tempyy@nss by 2%
    \xx@nss=\xsize@nss\advance\xx@nss by-\tempx@nss%
    \advance\xx@nss by-\tempxx@nss%
    \ifodd\xx@nss\advance\tempxx@nss by 1\fi%
    \divide\xx@nss by 2\advance\tempxx@nss by \xx@nss%
    \advance\tempx@nss by \xx@nss%
    \put(\x@nss,\y@nss){\makebox(\tempx@nss,\tempyy@nss){#4}}%
    \xx@nss=\x@nss\advance\xx@nss by \tempx@nss%
    \put(\xx@nss,\y@nss){\makebox(\tempxx@nss,\tempyy@nss){#5}}%
    \str@kt{\x@nss}{\y@nss}{\tempx@nss}%
}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\change}
% \changes{v4.5b}{96/03/28}{Beschreibung eingef"uhrt}
% \ifnum\language=\languageNGerman
% \cs{change} trennt die Zweige beim |\ifthenelse@nss|
% \else
% \cs{change} seperates the branches in |\ifthenelse@nss|
% \fi
%    \begin{macrocode}
\def\change%
{%
    \endstr@kt\str@kt{\xx@nss}{\y@nss}{\tempxx@nss}%
}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\ifend@nss}
% \changes{v4.5b}{96/03/28}{Beschreibung eingef"uhrt}
% \ifnum\language=\languageNGerman
% |\ifend@nss| beendet |\ifthenelse@nss|, wird in |struktogramm| intern
% gemacht.
% \else
% |\ifend@nss| terminates |\ifthenelse@nss|, which is internally done in
% |struktogramm|.
% \fi
%    \begin{macrocode}
\def\ifend@nss%
{%
    \global\gy@nss=\y@nss\endgroup\tempy@nss=\gy@nss%
    \ifnum\tempy@nss<\ydepth@nss%
        \y@nss=\tempy@nss\advance\ydepth@nss by-\tempy@nss%
        \put(\x@nss,\y@nss)%
        {%
            \framebox(\tempx@nss,\ydepth@nss)%
            {%
                \ifnum\ydepth@nss>5000\filler@nss\fi%
            }%
        }%
    \else%
        \ifnum\tempy@nss>\ydepth@nss%
            \y@nss=\ydepth@nss\advance\tempy@nss by-\ydepth@nss%
            \put(\xx@nss,\y@nss)%
            {%
                \framebox(\tempxx@nss,\tempy@nss)%
                {%
                    \ifnum\tempy@nss>5000\filler@nss\fi%
                }%
            }%
        \else%
            \y@nss=\ydepth@nss%
        \fi%
    \fi%
}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\forever}
% \changes{v3.5a}{94/11/22}{"ubernommen von J. Dietel}
% \changes{v2.0}{92/01/17}{Eingef"uhrt durch D. Rieger}
% \begin{macro}{\foreverend}
% \changes{v3.5a}{94/11/22}{"ubernommen von J. Dietel}
% \changes{v2.0}{92/01/17}{Eingef"uhrt durch D. Rieger}
% \ifnum\language=\languageNGerman
% Beginn und Ende einer Endlosschleife.
% \else
% Begin and end of an endless loop
% \fi
%    \begin{macrocode}
\def\forever{\let\next=\@forever\getoption}
\def\@forever{
    \tempx@nss=\xsize@nss
    \divide\tempx@nss by 6
    \set@nss{\mbox{\rule{0mm}{3ex}}}{\tempx@nss}
    \tempy@nss=\number\param@nss000
    \block@nss{\tempy@nss}{2}
    \advance\x@nss by \ydepth@nss
    \advance\y@nss by -\ydepth@nss
    \tempxx@nss=\xsize@nss
    \advance\tempxx@nss by -\ydepth@nss
    \tempy@nss=\ydepth@nss
    \str@kt{\x@nss}{\y@nss}{\tempxx@nss}
}
\def\foreverend{
    \endstr@kt
    \advance\x@nss by-\tempy@nss
    \advance\ydepth@nss by -\tempy@nss
    \tempyy@nss=\ydepth@nss
    \ydepth@nss=-\ydepth@nss
    \advance\ydepth@nss by \y@nss
    \advance\ydepth@nss by \tempy@nss
    \y@nss=\tempyy@nss
    \put(\x@nss,\y@nss){\framebox(\xsize@nss,\ydepth@nss){}}
    \put(\x@nss,\y@nss){\makebox(\xsize@nss,\tempy@nss){\box\TextBox@nss}}
}
%    \end{macrocode}
% \end{macro}
% \end{macro}
%
% \begin{macro}{\dfr}
% \changes{v4.5b}{96/03/28}{Beschreibung eingef"uhrt}
% \begin{macro}{\dfrend}
% \changes{v4.5b}{96/03/28}{Beschreibung eingef"uhrt}
% \ifnum\language=\languageNGerman
% Aus Kompatibilit"atsgr"unden werden f"ur \cs{forever} und \cs{foreverend} noch
% die folgenden Abk"urzungen bereitgestellt.
% \else
% For reasons of compatibility the following abbreviations for \cs{forever} and
% \cs{foreverend} are provided.
% \fi
%    \begin{macrocode}
\let\dfr\forever
\let\dfrend\foreverend
%    \end{macrocode}
% \end{macro}
% \end{macro}
%
% \begin{macro}{\while}
% \begin{macro}{\whileend}
% \ifnum\language=\languageNGerman
% Beginn und Ende einer kopfgesteuerten Schleife.
% \else
% Begin and end of a loop withtest before.
% \fi
%    \begin{macrocode}
\def\while{\let\next=\@while\getoption}
\def\@while#1{\tempx@nss=\xsize@nss\divide\tempx@nss by 6
    \set@nss{#1\hskip\xsize@nss\unitlength}{\tempx@nss}
    \tempy@nss=\number\param@nss000 \block@nss{\tempy@nss}{0}
    \tempy@nss=\y@nss\advance\y@nss by \ydepth@nss
    \tempx@nss=\x@nss\advance\tempx@nss by \ydepth@nss
    \tempxx@nss=\xsize@nss\advance\tempxx@nss by -\ydepth@nss
    \str@kt{\tempx@nss}{\tempy@nss}{\tempxx@nss} }
\def\whileend{\endstr@kt\tempy@nss=\y@nss\advance\tempy@nss by-\ydepth@nss
    \y@nss=\ydepth@nss
    \put(\x@nss,\y@nss){\framebox(\xsize@nss,\tempy@nss){}} }
%    \end{macrocode}
% \end{macro}
% \end{macro}
%
% \begin{macro}{\until}
% \begin{macro}{\untilend}
% \ifnum\language=\languageNGerman
% Beginn und Ende einer fu"sgesteuerten Schleife.
% \else
% Begin and end of a loop with test after.
% \fi
%    \begin{macrocode}
\def\until{\let\next=\@until\getoption}
\def\@until#1{\tempx@nss=\xsize@nss\divide\tempx@nss by 6
    \set@nss{#1\hskip\xsize@nss\unitlength}{\tempx@nss}
    \tempy@nss=\number\param@nss000 \block@nss{\tempy@nss}{2}
    \advance\x@nss by \ydepth@nss\tempxx@nss=\xsize@nss
    \advance\tempxx@nss by -\ydepth@nss \tempy@nss=\ydepth@nss
    \str@kt{\x@nss}{\y@nss}{\tempxx@nss} }
\def\untilend{\endstr@kt\advance\x@nss by-\tempy@nss
    \advance\ydepth@nss by -\tempy@nss
    \tempyy@nss=\ydepth@nss\ydepth@nss=-\ydepth@nss%
    \advance\ydepth@nss by \y@nss
    \y@nss=\tempyy@nss
    \put(\x@nss,\y@nss){\framebox(\xsize@nss,\ydepth@nss){}}
    \put(\x@nss,\y@nss){\makebox(\xsize@nss,\tempy@nss)
    {\box\TextBox@nss}}}
%    \end{macrocode}
% \end{macro}
% \end{macro}
%
% \begin{macro}{\cases@nss}
% \changes{v7.0b}{2004/03/09}{ersetzt durch `tempxx@nss}
% \changes{v4.2a}{95/10/06}{neu eingef"uhrt}
% \ifnum\language=\languageNGerman
% |\cases@nss| wird ben"otigt, um die Anzahl der F"alle im linken Zweig
% des \cs{case}-Konstruktes berechnen zu k"onnen. |\cases@nss| nimmt entweder
% die Anzahl der F"alle oder die Anzahl der F"alle $-1$ an.
% \else
% |\cases@nss| is needed for calculating the number of cases in the left branch of
% the \cs{case}-construct. |\cases@nss| assumes the value either the number of cases
% or the number of cases $-1$.
% \fi
% \end{macro}
%
% \begin{macro}{\case}
% \begin{macro}{\caseend}
% \begin{macro}{\switch}
% \changes{v8.2a}{05/01/17}{Fehlerkorrektur: schr"age Linie endet nun an
% der richtigen Stelle (pict2e)}
% \changes{v8.0d}{04/12/29}{Fehlerkorrektur: senkrechte Trennlinien haben
% nun die richtige L"ange}
% \changes{v8.0a}{04/07/13}{Paket \textsf{pict2e.sty} wird unterst"utzt}
% \changes{v4.2a}{95/10/04}{um \foreign{default}-Zweig erweitert}
% \changes{v4.1d}{95/10/04}{Dokumentation verbessert}
% \changes{v3.5a}{94/11/22}{"ubernommen von J. Dietel}
% \ifnum\language=\languageNGerman
% \cs{case}, \cs{caseend} und \cs{switch} stellen eine Mehrfachverzweigung dar.
% Es sind derzeit noch die alten Versionen \cs{caseold}, \cs{caseoldend} und
% \cs{switchold} zus"atzlich enthalten, diese sollten in einer sp"ateren
% Version gestrichen werden.
% \else
% \cs{case}, \cs{caseend} and \cs{switch} represent a multiple branch. At the moment
% the old versions \cs{caseold}, \cs{caseoldend} and \cs{switchold} are included in addition.
% These should be cancelled in a later version.
% \fi
%
% \ifnum\language=\languageNGerman
% Der Makro hat vier Parameter:
% \begin{enumerate}
%   \item Die Steigung (negativ, invers) der schr"agen Linie,
%   \item die Anzahl der F"alle,
%   \item den Text der Bedingung und
%   \item den des ersten Falles
% \end{enumerate}
% Zus"atzlich gibt es einen optionalen vorangestellten Parameter, der es im
% Falle der Benutzung des \textsf{emlines2.sty} erm"oglicht, die schr"age
% Linie mit einer beliebigen Steigung zu zeichnen. Wird dieser Parameter
% genutzt, hat der erste Parameter eine ge"anderte Bedeutung: ist der
% Parameter eine gerade Zahl, wird die Schr"age gerade durchgezogen (kein
% \foreign{default}-Zweig), ansonsten wird der letzte Zweig als
% Standardfall angesehen und somit werden die Schr"agen entsprechend
% gezeichnet: die ersten $n-1$ F"alle werden im linken Zweig untergebracht,
% der $n$-te Fall wird im rechten Zweig abgehandelt, vgl. dazu auch die
% Abbildungen auf Seite~\pageref{case1} und \pageref{case2}.
% \else
% The macro has four parameters:
% \begin{enumerate}
%   \item the gradient (negative, inverse) of a slanted line,
%   \item the number of cases,
%   \item the text of the condition and
%   \item the one of the first case
% \end{enumerate}
% Additionally there is an optional parameter placed in front. In the case
% of using of one of the packages \textsf{curves.sty},
% \textsf{emlines2.sty} or\textsf{pict2e.sty} this parameter enables
% drawing the slanted line with any gradient.  If this parameter is used,
% the first parameter has a different meaning: if the parameter is an even
% number, the slanted line will be drawn upright (no \foreign{default}
% branch), otherwise the last branch is regarded as standard case and so
% the slanted lines are drawn accordingly: the first \(n-1\) cases are put
% into the left branch, the \(n\)-th case is done in the right branch. For
% a better understanding see the figures on page~\pageref{case1} and
% \pageref{case2}.
% \fi
%    \begin{macrocode}
\def\case{\let\next=\@case\getoption}
\def\@case#1#2#3#4%
{
%    \end{macrocode}
% \ifnum\language=\languageNGerman
% Merken der Anzahl der F"alle
% \else
% memo of number of cases
% \fi
%    \begin{macrocode}
    \tempxx@nss=\number#2
%    \end{macrocode}
% \ifnum\language=\languageNGerman
% Zun"achst die schr"age Linie zeichnen
% \else
% first drawing the slanted lines
% \fi
%    \begin{macrocode}
    \ifanygradient%
    %{%
%    \end{macrocode}
% \ifnum\language=\languageNGerman
% -- wenn \cs{anygradient} nicht wahr ist, werden schr"age Linien mit \cs{line}
% erzeugt,
% \else
% -- if \cs{anygradient} isn't true, the slanted lines are generated by 
% \cs{line},
% \fi
%    \begin{macrocode}
%    \end{macrocode}
% \ifnum\language=\languageNGerman
% wobei die H"ohe des Rahmens f"ur die Fallunterscheidungen aus seiner
% Breite und der vorgegebenen Steigung berechnet wird --,
% \else
% where the height of frame for the different cases is evaluated from
% the width and the given gradient --,
% \fi
%    \begin{macrocode}
        \ifnum\number\param@nss000>0
%    \end{macrocode}
% \ifnum\language=\languageNGerman
% Wenn die H"ohe des Rahmens vorgegeben ist, nimm diese, ansonsten berechne
% sie wie oben.
% \else
% If the height of the frame is given, take it, otherwise calculate it like above.
% \fi
%    \begin{macrocode}
            \tempyy@nss=\number\param@nss000%
            \ifodd\number#1
                \advance\tempxx@nss by -1
            \fi
        \else
            \tempyy@nss=\xsize@nss
            \divide\tempyy@nss by #1
        \fi
        \ifnum\number#2=\tempxx@nss
%    \end{macrocode}
% \ifnum\language=\languageNGerman
% \cs{tempxx@nss} ist unver"andert, es wird also die Diagonale (gerade
% Linie) gezeichnet. Die Berechnung der Koordinaten basiert auf:
% \begin{quote}
%     \begin{tabular}{r@{:~}l}
%         \cs{x@nss} & linke obere x-Koordinate des Kastens\\
%         \cs{y@nss} & linke obere y-Koordinate des Kastens\\
%         \cs{xsize@nss} & Breite des Kastens\\
%         \cs{tempyy@nss} & H"ohe des Kastens\\
%         \cs{tempxx@nss} & Anzahl der F"alle (evtl. reduziert um 1)\\
%     \end{tabular}
% \end{quote}
% \else
% \cs{tempxx@nss} is unchanged, therefore we draw a diagonal. The internal
% computation bases on 
% \begin{quote}
%     \begin{tabular}{r@{:~}l}
%         \cs{x@nss} & left upper x-coordinate of the case box\\
%         \cs{y@nss} & left upper y-coordinate of the case box\\
%         \cs{xsize@nss} & width of the case box\\
%         \cs{tempyy@nss} & height of the case box\\
%         \cs{tempxx@nss} & number of cases (mayve reduced by 1)\\
%     \end{tabular}
% \end{quote}
% \fi
%    \begin{macrocode}
            \xx@nss=\x@nss \advance\xx@nss by \xsize@nss
            \tempy@nss=\y@nss \advance\tempy@nss by -\tempyy@nss
            \ifemlines%
                \emline{\x@nss}{\y@nss}{}{\xx@nss}{\tempy@nss}{}%
            \else\ifcurves%
                \curve(\x@nss, \y@nss, \xx@nss, \tempy@nss)%
            \else\ifpictIIe%
                \tempxxx@nss=\xx@nss
%    \end{macrocode}
% \ifnum\language=\languageNGerman
% Die Argumente von \cs{line} f"ur die Steigung m"ussen im Intervall
% \([-1000, 1000]\) liegen, daher
% wird hier der Faktor 1000 wieder wegdividiert. Abschlie"send wird die
% L"ange der Strecke berechnet.
% \else
% The arguments of \cs{line} for the slope must be in the interval
% \([-1000, 1000]\), so divide by
% the previous introduced factor of 1000. Finally we're computing the
% length of the line.
% \fi
%    \begin{macrocode}
                \advance\tempxxx@nss by -\x@nss
                \divide\tempxxx@nss by 1000
                \tempyyy@nss=\tempy@nss
                \advance\tempyyy@nss by -\y@nss
                \divide\tempyyy@nss by 1000
                \advance\xx@nss by -\x@nss
                \put(\x@nss,\y@nss){\line(\tempxxx@nss, \tempyyy@nss){\xx@nss}}
            \fi\fi\fi%
        \else
            \tempx@nss=\xsize@nss
            \multiply\tempx@nss by \tempxx@nss \divide\tempx@nss by #2
            \xx@nss=\x@nss \advance\xx@nss by \tempx@nss
            \tempy@nss=\y@nss \advance\tempy@nss by -\tempyy@nss
            \ifemlines%
                \emline{\x@nss}{\y@nss}{}{\xx@nss}{\tempy@nss}{}%
            \else\ifcurves%
                \curve(\x@nss, \y@nss, \xx@nss, \tempy@nss)%
            \else\ifpictIIe%
%    \end{macrocode}
% \ifnum\language=\languageNGerman
% Die Berechnung der L"ange muss lokal sein, darum wird hier eine eigene
% Gruppe eingef"uhrt anstatt die letzte Subtraktion r"uckg"angig zu machen.
% \else
% The calculation of the length of the line must be local, so we're using a
% group here---instead of undoing the \cs{advance} operation.
% \fi
%    \begin{macrocode}
                \begingroup
                    \tempxxx@nss=\xx@nss
                    \advance\tempxxx@nss by -\x@nss
                    \divide\tempxxx@nss by 1000
                    \tempyyy@nss=\tempy@nss
                    \advance\tempyyy@nss by -\y@nss
                    \divide\tempyyy@nss by 1000
                    \advance\xx@nss by -\x@nss
                    \put(\x@nss,\y@nss){\line(\tempxxx@nss,
                        \tempyyy@nss){\xx@nss}}
                \endgroup
            \fi\fi\fi%
            \advance\x@nss by \xsize@nss
            \ifemlines%
                \emline{\x@nss}{\y@nss}{}{\xx@nss}{\tempy@nss}{}%
            \else\ifcurves%
                \curve(\x@nss, \y@nss, \xx@nss, \tempy@nss)%
            \else\ifpictIIe%
                \tempxxx@nss=\x@nss
                \advance\tempxxx@nss by -\xx@nss
                \divide\tempxxx@nss by 1000
                \tempyyy@nss=\tempy@nss
                \advance\tempyyy@nss by -\y@nss
                \divide\tempyyy@nss by 1000
                \xx@nss=-\xx@nss
                \advance\xx@nss by \x@nss
                \put(\x@nss,\y@nss){\line(-\tempxxx@nss, \tempyyy@nss){\xx@nss}}
            \fi\fi\fi%
            \advance\x@nss by -\xsize@nss
        \fi
    %}{
    \else% \ifanygradient
        \ifnum\number\param@nss000>0
            \typeout{struktex warning:}%
            \typeout{[...] not supplied without curves, emlines2, or pict2e}%
        \fi
        \put(\x@nss,\y@nss){\line(#1,-1){\xsize@nss}}
        \tempyy@nss=\xsize@nss
        \divide\tempyy@nss by #1
    %}
    \fi% \ifanygradient
%    \end{macrocode}
% \ifnum\language=\languageNGerman
% dann den Bedingungstext in die Mitte des rechten oberen Viertels des
% CASE-Rechtecks  schreiben,
% \else
% then the conditioning text writing into the middle of the upper quarter of
% CASE-rectangle
% \fi
% \changes{v8.0e}{05/05/17}{`tempxxx@nss umbenannt in `tempxx@nss (wir
% befinden uns nicht im Fall pictIIe)}
% \changes{v8.0f}{05/06/12}{`tempxx@nss umbenannt in `tempx@nss (die Anzahl
% der F"alle wurde versehentlich ge"andert)}
%    \begin{macrocode}
    \tempx@nss=\xsize@nss
    \divide\tempx@nss by 2
    \divide\tempyy@nss by 2
    \advance\x@nss by \tempx@nss
    \advance\y@nss by -\tempyy@nss
    \put(\x@nss,\y@nss){\makebox(\tempx@nss,\tempyy@nss){#3}}
%    \end{macrocode}
% \ifnum\language=\languageNGerman
% schlie"slich |\x@nss| und |\y@nss| auf den alten Wert zuruecksetzen und
% zur sp"ateren Verwendung merken.
% \else
% finally setting |\x@nss| and |\y@nss| on the old value and remembering for later
% use
% \fi
%    \begin{macrocode}
    \advance\x@nss by -\tempx@nss
    \advance\y@nss by \tempyy@nss
    \xx@nss=\x@nss
    \yy@nss=\y@nss
%    \end{macrocode}
% \ifnum\language=\languageNGerman
% |\tempx@nss| ist die Breite eines Zweiges, die f"ur alle Zweige gleich ist
% -- Gesamtbreite geteilt durch Anzahl der F"alle --,
% |\tempy@nss| die H"ohe des Falltextes, die von Zweig zu Zweig kleiner wird,
% |\condindent@nss| ist die Schrittweite, um die sich die H"ohe des
% Falltextes bei jedem \cs{switch} verringert. H"ohe und Schrittweite h"angen
% davon ab, ob ein \foreign{default}-Zweig eingef"uhrt wurde oder nicht, sie
% werden demzufolge durch |\tempxx@nss| gesteuert.
% \else
% |\tempx@nss| is the width of the branch, that is equal for all branches
% -- total width devided by number of cases --,
% |\tempy@nss| is the height of the text of case, that decreases from one case
% to the other, |\condindent@nss| is the step size the height of the text of
% case decreases with each \cs{switch}. Height and step size depend on wether
% or not a \foreign{default}-branch is introduced. Accordingly they are controled by
% |\tempxx@nss|.
% \fi
%    \begin{macrocode}
    \tempx@nss=\xsize@nss
    \divide\tempx@nss by #2
    \ifnum\number\param@nss000>0
        \tempy@nss=\number\param@nss000%
    \else
        \tempy@nss=\xsize@nss
        \divide\tempy@nss by #1
    \fi
    \condindent@nss=\tempy@nss
    \divide \condindent@nss by \tempxx@nss
%    \end{macrocode}
% \ifnum\language=\languageNGerman
% Links oben im linken Zweig den Text des Falles eintragen
% \else
% Entering the text of case into the left upper part of left branch
% \fi
%    \begin{macrocode}
    \advance\y@nss by -\tempy@nss
    \put(\x@nss,\y@nss)%
    {%
        \makebox(\tempx@nss,\tempy@nss)[lb]{\raise3pt\hbox{~#4}}%
    }%
    \ydepth@nss=1000000
    \str@kt{\x@nss}{\y@nss}{\tempx@nss}
}
%    \end{macrocode}
%
% \ifnum\language=\languageNGerman
% Der Makro \cs{switch} f"ur die einzelnen F"alle hat zwei Parameter:
% \begin{enumerate}
% \item einen optionalen Parameter, der angibt, wo der Text der Bedingung
% gesetzt wird: |l| oder |r| -- der Standardwert ist |l| --, und
% \item den Bedingungstext
% \end{enumerate}
% \else
% The macro \cs{switch} for the single cases has two parameters:
% \begin{enumerate}
% \item an optional parameter, which specifies, where the text of condition is set:
% |l| or |r| -- the default value is |l|, and
% \item the text of condition
% \end{enumerate}
% \fi
%    \begin{macrocode}
\def\switch%
{%
    \@ifnextchar [{\@switch}{\@switch[l]}%
}
\def\@switch[#1]#2%
{
    \global\gy@nss=\y@nss\endgroup
    \tempyy@nss=\gy@nss
    \ifnum\tempyy@nss<\ydepth@nss
        \ydepth@nss=\tempyy@nss
    \fi
%    \end{macrocode}
% \ifnum\language=\languageNGerman
% Nun in den n"achsten Zweig gehen und die Falltexth"ohe vermindern.
% \else
% Now continuing in the next branch and reducing the height of text of case.
% \fi
%    \begin{macrocode}
    \advance\x@nss by \tempx@nss
    \advance\tempy@nss by -\condindent@nss
    \put(\x@nss,\y@nss)%
            {\makebox(\tempx@nss,\tempy@nss)[#1b]{\raise3pt\hbox{~#2~}}}
    \str@kt{\x@nss}{\y@nss}{\tempx@nss}
}
\def\caseend%
{
    \global\gy@nss=\y@nss\endgroup
    \tempyy@nss=\gy@nss
    \ifnum\tempyy@nss<\ydepth@nss
        \ydepth@nss=\tempyy@nss
    \fi
    \x@nss=\xx@nss
    \y@nss=\ydepth@nss
    \tempyy@nss=\yy@nss
    \advance\tempyy@nss by -\ydepth@nss
    \put(\x@nss,\y@nss){\framebox(\xsize@nss,\tempyy@nss){}}
    \tempxx@nss=\x@nss
%    \end{macrocode}
% \ifnum\language=\languageNGerman
% Die folgende Schleife ist daf"ur zust"andig, die Trennlinien zwischen den
% Falltexten zu ziehen.
% \else
% The following loop is to draw the partitioning lines between the texts of cases.
% \fi
%    \begin{macrocode}
    \loop
        \put(\tempxx@nss,\y@nss){\line(0,1){\tempyy@nss}}
        \advance\tempyy@nss by -\condindent@nss
        \advance\tempxx@nss by \tempx@nss
%    \end{macrocode}
% \ifnum\language=\languageNGerman
% Die Bedeutung der folgenden Zeilen ist noch unklar, was soll die 100?
% \else
% So far the meaning of the following lines is unclear. What means the 100?
% \fi
%    \begin{macrocode}
        \xx@nss=\tempxx@nss
        \advance\xx@nss by -\x@nss
        \advance\xx@nss by 100
        \ifnum \xx@nss<\xsize@nss
    \repeat
}
%    \end{macrocode}
% \end{macro}
% \end{macro}
% \end{macro}
%
% \begin{macro}{\centerNss}
% \begin{macro}{\endcenterNss}
% \changes{v4.5d}{97/03/19}{`CenterBox@nss global gemacht}
% \changes{v3.3e}{94/09/09}{`centerline durch `strut`hfill ... ersetzt}
% \changes{v3.3e}{94/09/09}{`TmpBox umbenannt in `nss@CenterBox}
% \changes{v3.1a}{94/09/09}{aus \textsf{JHfMakro.STY} "ubernommen}
% \changes{v3.1b}{94/09/09}{erheblich vereinfacht}
% \ifnum\language=\languageNGerman
% Makro zur Zentrierung von Struktogrammen: da einfaches Zentrieren mit
% \cs{centering} nicht funktioniert, wird mit \cs{centerline} gearbeitet:
% \else
% Macro for centering the structured box chart: since simple centering with
% \cs{centering} does'nt work, it is worked with \cs{centerline}:
% \fi
%    \begin{macrocode}
\newbox\CenterBox@nss%
\def\centernss%
{%
    \begin{trivlist}%
    \item[] \strut%
        \setbox\CenterBox@nss=\hbox%
                              \bgroup%
}
\def\endcenternss%
{%
                              \egroup%
        \strut\hfill\box\CenterBox@nss\hfill\strut%
    \end{trivlist}%
}
%    \end{macrocode}
% \end{macro}
% \end{macro}
%
% \begin{macro}{\CenterNssFile}
% \changes{v4.5d}{97/03/19}{Belegen von `CenterBox@nss in das `item verlegt}
% \changes{v3.3e}{94/09/09}{`centerline durch `strut`hfill ... ersetzt}
% \changes{v3.3e}{94/09/09}{Auf zus"atzliche Gruppe um `trivlist verzichtet}
% \changes{v3.3e}{94/09/09}{`TmpBox umbenannt in `nss@CenterBox}
% \changes{v3.1a}{94/09/09}{aus \textsf{JHfMakro.STY} "ubernommen}
% \changes{v3.1b}{94/09/09}{erheblich vereinfacht}
% \ifnum\language=\languageNGerman
% Makro zur Zentrierung von Struktogrammen: da einfaches Zentrieren mit
% \cs{centering} nicht funktioniert, wird mit \cs{centerline} gearbeitet:
% \else
% Macro for centering the structured box charts: since simple centering with
% \cs{centering} does'nt work, it is worked with \cs{centerline}:
% \fi
%    \begin{macrocode}
\def\CenterNssFile#1%
{%
    \begin{trivlist}%
        \item[] \setbox\CenterBox@nss=\hbox{\input{#1.nss}}%
        \strut\hfill\box\CenterBox@nss\hfill\strut%
    \end{trivlist}%
}
\let\centernssfile=\CenterNssFile
%    \end{macrocode}
% \end{macro}
%
% \subsection{\ifnum\language=\languageNGerman Zus"atzliche Makros (Verifikation) \else Additional macros (verification)\fi}
%
%
% \begin{macro}{\assert}
% \changes{v7.0a}{04/01/04}{neu eingef"uhrt}
% \begin{macro}{\assert@nss}
% \changes{v7.0a}{04/01/04}{neu eingef"uhrt}
% \ifnum\language=\languageNGerman
% \cs{assert} wird wie \cs{assign} definiert, f"uhrt ohne die Option
% |verification| aber nicht zu sichtbaren Ergebnissen:
% \else
% \cs{assert} is defined just like \cs{assign}:
% \fi
%    \begin{macrocode}
  \newcommand\assert{\let\next=\assert@nss\getoption}%
  \newcommand\assert@nss[1]{}%
%    \end{macrocode}
% \end{macro}
% \end{macro}
%
% \ifnum\language=\languageNGerman
% Der folgende Code ist nur g"ultig, wenn die Option |verification| gesetzt
% wurde:
% \else
% The following code is valid only, if the option |verification| is set.
% \fi
%
%    \begin{macrocode}
\ifthenelse{\boolean{verification}}
{
%    \end{macrocode}
% \begin{macro}{\xsizeo@nss}
% \changes{v7.0a}{04/01/05}{neu eingef"uhrt}
% \begin{macro}{\ydeptho@nss}
% \changes{v7.0a}{04/01/05}{neu eingef"uhrt}
% \ifnum\language=\languageNGerman
% Da \cs{oval} einen anderen Referenzpunkt als \cs{framebox} hat, brauchen
% wir zus"atzliche Z"ahler, um den anderen Referenzpunkt ansprechen zu k"onnen.
% \else
% Since \cs{oval} has another reference point than \cs{framebox}, we need
% additional counters for the positioning of the \cs{oval}.
% \fi
%    \begin{macrocode}
    \countdef\xsizeo@nss=232%
    \countdef\ydeptho@nss=233%
%    \end{macrocode}
% \end{macro}
% \end{macro}
%
% \ifnum\language=\languageNGerman
% F"ur den Fall, dass die Option |verification| gesetzt wurde, wird der
% intern genutzte Makro \cs{assert@nss} neu definiert.
% \else
% \fi
%    \begin{macrocode}
  \renewcommand{\assert@nss}[1]%
  {%
    \tempx@nss=\xsize@nss\divide\tempx@nss by 6%
    \set@nss{#1}{\tempx@nss}\tempy@nss=\number\param@nss000%
    \assertblock@nss{\tempy@nss}{1}%
  }
%    \end{macrocode}
%%
% \begin{macro}{\assertblock@nss}
% \changes{v7.0a}{04/01/04}{neu eingef"uhrt}
% \ifnum\language=\languageNGerman
% |\assertblock@nss| setzt die Box |\TextBox@nss| entsprechend dem zweiten Parameter. Ist dieser
% 1, wird eine Box mit Rahmen gesetzt, ist dieser 0, wird eine Box ohne Rahmen
% gesetzt. Bei allen anderen Werten wird nur die Gr"o"se des Struktogramms,
% gegeben durch |\y@nss|, vergr"o"sert.
% \else
% |\assertblock@nss| sets the box |\TextBox@nss| corresponding to the second parameter.
% If this parameter is 1, the box will be set in a frame, and if it is 0, a box without
% frame will be set. In all other cases only the size of the structured box chart
% given by |\y@nss| will be changed.
% \fi
%    \begin{macrocode}
  \newcommand{\assertblock@nss}[2]%
  {%
    \tempy@nss=#1\TextBoxHt@nss=\ht\TextBox@nss%
    \advance\TextBoxHt@nss by\dp\TextBox@nss%
    \advance\TextBoxHt@nss by 2mm%
    \ifdim\TextBoxHt@nss<\tempy@nss\unitlength%
        \TextBoxHt@nss=\tempy@nss\unitlength%
    \fi%
    \TextBoxHt@nss=0.00536\TextBoxHt@nss%
    \ydepth@nss=\TextBoxHt@nss\advance\y@nss by-\ydepth@nss%
    \xsizeo@nss=\xsize@nss \tempx@nss=\x@nss
    \divide\xsizeo@nss by 2%
    \advance\tempx@nss by+\xsizeo@nss%
    \ydeptho@nss=\ydepth@nss \tempy@nss=\y@nss
    \divide\ydeptho@nss by 2%
    \advance\tempy@nss by+\ydeptho@nss%
    \ifx#21%
        \put(\x@nss,\y@nss)%
        {%
            \framebox(\xsize@nss,\ydepth@nss){\box\TextBox@nss}%
        }%
        \put(\tempx@nss,\tempy@nss){\oval(\xsize@nss,\ydepth@nss)}%
    \else%
        \ifx#20%
            \put(\x@nss,\y@nss)%
            {%
                \makebox(\xsize@nss,\ydepth@nss){\box\TextBox@nss}%
            }%
            \put(\tempx@nss,\tempy@nss){\oval(\xsize@nss,\ydeptho@nss)}%
        \else%
            \advance\y@nss by \ydepth@nss%
        \fi%
    \fi%
  }
}
{} % end of \ifthenelse{\boolean{verification}}
%    \end{macrocode}
% \end{macro}
% \iffalse
%</struktex>
% \fi
%
%
% \Finale
%
% \clearpage
% \PrintIndex
% \PrintChanges
%
\endinput
%% \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\67\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         \~}
%%
%
% end of struktex.dtx
%
% ^^A Local Variables: 
% ^^A mode: latex
% ^^A TeX-master: t
% ^^A mode: flyspell
% ^^A ispell-local-dictionary: "deutsch8"
% ^^A End:
