<html><head><meta name="color-scheme" content="light dark"></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;">%--------------------------------------------------------------------------
�
% Created by T.Birnthaler (FAU Erlangen-Nuernberg, IMMD5 (Mustererkennung))
�
%--------------------------------------------------------------------------
�
\message{Document Style Option `strukto' Version 2.0, as of 11. November 1989}
�
%
�
% Befehle zum Erzeugen von Struktogrammen:
�
%
�
% Erzeugung:
�
%   \begin{struktogramm}{Breite}{Einrueckung}
�
%     Anweisungen
�
%   \end{struktogramm}
�
%
�
% Breite:
�
%   bestimmt die vollstaendige Breite des Struktogramms
�
%
�
% Einrueckung:
�
%   bestimmt die Einrueckungsbreite des Koerpers von Schleifenkonstrukten
�
%   (der Balken neben IFx-Konstrukten wird halb so breit)
�
%
�
% Masse:             (Bedeutung:                               Defaultwert)
�
%   \struktohskip    (horiz. Abstand aller Texte zu senkr. Linien:   0.5ex)
�
%
�
% Anweisungen:   (duerfen geschachtelt werden !)
�
%   \IF[w,w,w]{Bedingung}THEN{Anweisung}ELSE{Anweisung}     (Standard:
�
%   \IF*[w,w,w]{Bedingung}THEN{Anweisung}ELSE{Anweisung}     IF, THEN, ELSE)
�
%
�
%   \IFx{Bedingung}THEN{Anweisung}ELSE{Anweisung}
�
%   \IFx*{Bedingung}THEN{Anweisung}ELSE{Anweisung}
�
%
�
%   \FOR[w]{Zaehler}DO{Anweisung}            (Standard: FOR)
�
%   \WHILE[w]{Bedingung}DO{Anweisung}        (Standard: WHILE)
�
%   \REPEAT[w]{Anweisung}UNTIL{Bedingung}    (Standard: UNTIL)
�
%   \LOOP[w]{Anweisung}                      (Standard: LOOP)
�
%
�
%   \BLOCK{elementare Anweisung}
�
%   \BLOCK*{elementare Anweisung}
�
%
�
% Bedingung, Zaehler, elementare Anweisung:
�
%   beliebiger Text mit TeX-Kommandos zum Zeilenumbruch,
�
%   Schriftartwechsel, ...
�
%   (!!! aber keine Struktogrammanweisungen !!!).
�
%
�
% w = Schluesselwort:   (optionale(r) Parameter)
�
%   ein kurzer Text wie z.B. FOR, F"UR, $\forall$, ..., ersetzt das
�
%   jeweilige Standard-Schluesselwort (darf auch leer sein).
�
%
�
% Hinweise:
�
%   -- elementare Anweisungen *muessen* in \BLOCK oder \BLOCK* eingeschachtelt
�
%      werden, damit sie richtig eingerueckt werden koennen.
�
%   -- Bei leerem ELSE-Anweisungsteil (...ELSE{}) wird der ELSE-Teil der
�
%      IF-Anweisung nicht erzeugt (er *muss* aber trotzdem angegeben werden).
�
%   -- Eine Linie nach dem Schluesselwoertern THEN und ELSE entsteht durch
�
%      eine Struktogramm- oder \BLOCK-Anweisung, aber nicht durch \BLOCK*.
�
%
�
%   -- Bei der x-Version von IF wird links vom IF-Konstrukt eine schmale
�
%      Spalte gezogen (halbe Einrueckbreite).
�
%   -- Bei der *-Version von IF und IFx wird ein senkrechter Strich
�
%      rechts vom Schluesselwoert IF auf der gleichen Hoehe wie beim
�
%      THEN- und ELSE-Teil gezogen, und die IF-, THEN- und ELSE-Teile sind
�
%      gleich breit.
�
%   -- Bei der *-Version des BLOCK-Kommandos wird links davon keine
�
%      Linie gezogen (nur in THEN- und ELSE-Teilen sinnvoll).
�
%
�
%   -- Leerzeichen ...
�
%      ... am Anfang einer Zeile werden *nicht* beachtet.
�
%      ... zwischen Argumenten werden *nicht* beachtet.
�
%      ... in Argumenten werden beachtet.
�
%
�
%   -- Die Anzahl an Verschachtelungsstufen kann *nicht* beliebig weit 
�
%      getrieben werden, da TeX irgendwann ueberlauft (die Grenze liegt
�
%      etwa bei 6-7 Stufen).
�
%-----------------------------------------------------------------------
�

�
% interne Boxen
�
\newbox\strukto@keyword@box
�
\newbox\strukto@if@box
�
\newbox\strukto@then@box
�
\newbox\strukto@else@box
�
\newbox\strukto@strut@box
�
\newbox\strukto@box
�

�
% Masse
�
\newdimen\strukto@width
�
\newdimen\strukto@indent
�
\newdimen\struktohskip
�
\newdimen\strut@height    % intern
�

�
% Linien ohne Dicke
�
\def\strukto@vrule{\vrule\hskip-0.4pt}
�
\def\strukto@hrule{\hrule\vskip-0.4pt}
�

�
% Standard-Leerraum um Schluesselworte (darf leer sein)
�
\def\strukto@keyword#1{%
�
  \hbox{\def\next{#1}%
�
        \ifx\next\empty\else
�
          \hskip\struktohskip\strut #1\hskip\struktohskip
�
        \fi
�
  }%
�
}
�

�
\newenvironment{struktogramm}[2]{%
�
% -- begin of preamble ---
�
  \bgroup
�
%
�
    \strukto@width=#1
�
    \strukto@indent=#2
�
%
�
% wegen Beruecksichtigung der Schriftgroesse hier
�
    \struktohskip=.5ex
�
    \strut@height=\ht\strutbox
�
%
�
% Ausgleich fuer Hoehe 0 von \strukto@vrule
�
    \advance\strut@height by 0.4pt
�
    \setbox\strukto@strut@box=\hbox{\vrule height \strut@height depth \dp\strutbox width 0pt}%
�
%
�
% Kommandos nur lokal gueltig
�
    \def\IF{\STRUKTO@IF}%
�
    \def\IFx{\STRUKTO@IFx}%
�
    \def\FOR{\STRUKTO@FOR}%
�
    \def\WHILE{\STRUKTO@WHILE}%
�
    \def\REPEAT{\STRUKTO@REPEAT}%
�
    \def\LOOP{\STRUKTO@LOOP}%
�
    \def\BLOCK{\STRUKTO@BLOCK}%
�
%
�
    \setbox\strukto@box\hbox to \strukto@width
�
    \bgroup 
�
      \@parboxrestore %Standardabsatz-Parameter einschalten
�
      \vtop\bgroup
�
        \strukto@hrule %oberer Rand
�
}% --- end of preamble ---
�
{% --- begin of postable ---
�
      \egroup  %vbox beenden
�
      \hskip-0.4pt\vrule
�
    \egroup    %hbox beenden
�
    \leavevmode
�
    \box\strukto@box
�
  \egroup
�
}% --- end of postamble ---
�

�

�
% Behandlung von Befehlsvarianten und optionalen Parametern
�
\def\STRUKTO@IF{\@ifstar{\STRUKTO@@IF{}{l}}%
�
                        {\STRUKTO@@IF{}{}}}
�
\def\STRUKTO@IFx{\@ifstar{\STRUKTO@@IF{x}{l}}%
�
                         {\STRUKTO@@IF{x}{}}}
�
\def\STRUKTO@@IF#1#2{\@ifnextchar[{\STRUKTO@@@IF{#1}{#2}}%
�
                                  {\STRUKTO@@@IF{#1}{#2}[IF,THEN,ELSE]}}
�

�
\def\STRUKTO@FOR{\@ifnextchar[{\STRUKTO@GENERAL}%
�
                              {\STRUKTO@GENERAL[FOR]}}
�
\def\STRUKTO@WHILE{\@ifnextchar[{\STRUKTO@GENERAL}%
�
                                {\STRUKTO@GENERAL[WHILE]}}
�

�
\def\STRUKTO@LOOP{\@ifnextchar[{\STRUKTO@@LOOP}%
�
                               {\STRUKTO@@LOOP[LOOP]}}
�
\def\STRUKTO@@LOOP[#1]{\STRUKTO@GENERAL[#1]{}DO}
�

�
\def\STRUKTO@REPEAT{\@ifnextchar[{\STRUKTO@@REPEAT}%
�
                                 {\STRUKTO@@REPEAT[UNTIL]}}
�

�
\def\STRUKTO@BLOCK{\@ifstar{\STRUKTO@@BLOCK{}}%
�
                           {\STRUKTO@@BLOCK{l}}}
�

�

�
% IF-THEN-ELSE-Konstrukt
�
%
�
% |#3 #6          
�
% ----------------
�
% |#4 #7        
�
% ----------------
�
% |#5 #8        
�
% ----------------
�
% x -&gt; Schalter x: schmaler Balken links neben Konstrukt
�
% * -&gt; Schalter l: durchgehende Linie nach IF-Schluesselwort
�
%
�
% 1.Arg: switch x
�
% 2.Arg: switch l
�
% 3.Arg: IF-keyword
�
% 4.Arg: THEN-keyword
�
% 5.Arg: ELSE-keyword
�
% 6.Arg: condition (text)
�
% 7.Arg: then-part (struktogramm)
�
% 8.Arg: else-part (struktogramm)
�
%
�
\long\def\STRUKTO@@@IF#1#2[#3,#4,#5]#6THEN#7ELSE#8{%
�
%
�
% Schluesselwortboxen erzeugen
�
  \setbox\strukto@if@box=\strukto@keyword{#3}%
�
  \setbox\strukto@then@box=\strukto@keyword{#4}%
�
  \setbox\strukto@else@box=\strukto@keyword{#5}%
�
%
�
% laengste der drei Boxen bestimmen
�
  \let\strukto@keyword@box=\strukto@if@box
�
  \ifdim\wd\strukto@then@box &gt; \wd\strukto@keyword@box
�
    \let\strukto@keyword@box=\strukto@then@box
�
  \fi
�
  \ifdim\wd\strukto@else@box &gt; \wd\strukto@keyword@box
�
    \let\strukto@keyword@box=\strukto@else@box
�
  \fi
�
%
�
  \vtop{%
�
    \hsize=\strukto@width
�
    \hbox to \strukto@width{%
�
%
�
      \def\test{#1}%
�
      \if\test x% &lt;-- IF-THEN-ELSE links mit Balken versehen ?
�
        \strukto@vrule
�
        \hskip.5 \strukto@indent
�
        \strukto@vrule
�
        \advance\strukto@width by -.5 \strukto@indent
�
      \fi
�
%
�
% IF-Teil
�
      \vtop{%
�
        \hsize=\strukto@width
�
% 
�
        \hbox to \strukto@width{%
�
          \strukto@vrule
�
          \copy\strukto@if@box 
�
          \def\test{#2}%
�
          \if\test l% &lt;-- IF-Teil wie THEN- u. ELSE-Teil einruecken ?
�
            \hfill 
�
            \strukto@vrule
�
            \advance\strukto@width by -\wd\strukto@keyword@box
�
          \else
�
            \advance\strukto@width by -\wd\strukto@if@box
�
          \fi
�
          \hskip\struktohskip   % linke Texteinr.
�
          \vtop{%
�
            \hsize=\strukto@width
�
            \advance\hsize by -\struktohskip    % linke Texteinr. beruecks.
�
            \advance\hsize by -\struktohskip    % rechte Texteinr. beruecks.
�
            \noindent\copy\strukto@strut@box #6\strut
�
          }%
�
          \hskip\struktohskip   % rechte Texteinr.
�
        }%
�
%
�
% THEN-Teil
�
        \nointerlineskip
�
        \hrule
�
        \nointerlineskip
�
        \hbox to \strukto@width{%
�
          \strukto@vrule   % linker Rand
�
          \copy\strukto@then@box
�
          \hfill 
�
          \vtop{%
�
            \def\test{#2}%
�
            \if\test l% &lt;-- THEN-Teil wie IF- u. ELSE-Teil einruecken ?
�
              \advance\strukto@width by -\wd\strukto@keyword@box
�
            \else
�
              \advance\strukto@width by -\wd\strukto@then@box
�
            \fi
�
            \hsize=\strukto@width
�
            #7%
�
          }%
�
        }%
�
%
�
% ELSE-Teil
�
        \def\test{#8}%
�
        \ifx\test\empty\else % &lt;-- ELSE-Teil vorhanden ?
�
          \nointerlineskip
�
          \hrule
�
          \nointerlineskip
�
          \hbox to \strukto@width{%
�
            \strukto@vrule   % linker Rand
�
            \copy\strukto@else@box
�
            \hfill
�
            \vtop{%
�
              \def\test{#2}%
�
              \if\test l% &lt;-- ELSE-Teil wie IF- u. THEN-Teil einruecken ?
�
                \advance\strukto@width by -\wd\strukto@keyword@box
�
              \else
�
                \advance\strukto@width by -\wd\strukto@else@box
�
              \fi
�
              \hsize=\strukto@width
�
              #8%
�
            }%
�
          }%
�
        \fi
�
      }%
�
    }%
�
    \strukto@hrule   % unterer Rand
�
  }%
�
  \nointerlineskip
�
}
�

�

�
% FOR-, WHILE-, LOOP-Konstrukt
�
%
�
% |#1  #2           
�
%     --------------
�
% |   | #3          
�
% ------------------
�
% 1.Arg: FOR-keyword
�
% 2.Arg: condition (text)
�
% 3.Arg: body      (struktogramm)
�
%
�
\long\def\STRUKTO@GENERAL[#1]#2DO#3{%
�
  \vtop{%
�
    \hsize=\strukto@width
�
%
�
% FOR-Teil
�
    \hbox to \strukto@width{%
�
      \strukto@vrule
�
      \setbox\strukto@keyword@box=\strukto@keyword{#1}%
�
      \copy\strukto@keyword@box
�
      \hskip\struktohskip   % linke Texteinr.
�
      \vtop{%
�
        \hsize=\strukto@width
�
        \advance\hsize by -\wd\strukto@keyword@box
�
        \advance\hsize by -\struktohskip    % linke Texteinr. beruecks.
�
        \advance\hsize by -\struktohskip    % rechte Texteinr. beruecks.
�
        \noindent\copy\strukto@strut@box #2\strut
�
      }%
�
      \hskip\struktohskip   % rechte Texteinr.
�
    }%
�
    \nointerlineskip
�
%
�
% Koerper
�
    \hbox to \strukto@width{%
�
      \strukto@vrule   % linker Rand
�
      \hskip\strukto@indent
�
      \strukto@vrule   % linker Rand (eigentlich ueberfluessig)
�
      \vtop{%
�
        \advance\strukto@width by -\strukto@indent
�
        \hsize=\strukto@width
�
        \nointerlineskip
�
        \hrule
�
        #3%
�
      }%
�
    }%
�
    \strukto@hrule   % unterer Rand
�
  }%
�
  \nointerlineskip
�
}
�

�
% REPEAT-UNTIL-Konstrukt
�
%
�
% |   | #2          
�
%     --------------
�
% |#1 #3            
�
% ------------------
�
% 1.Arg: UNTIL-keyword
�
% 2.Arg: body      (struktogramm)
�
% 3.Arg: condition (text)
�
%
�
\long\def\STRUKTO@@REPEAT[#1]#2UNTIL#3{%
�
  \vtop{%
�
    \hsize=\strukto@width
�
%
�
% Koerper
�
    \hbox to \strukto@width{%
�
      \strukto@vrule   % linker Rand
�
      \hskip\strukto@indent
�
      \strukto@vrule   % linker Rand (eigentlich ueberfluessig)
�
      \vtop{%
�
        \advance\strukto@width by -\strukto@indent
�
        \hsize=\strukto@width
�
        #2%
�
        \hrule
�
      }%
�
    }%
�
    \nointerlineskip
�
%
�
% UNTIL-Teil
�
    \hbox to \strukto@width{%
�
      \strukto@vrule
�
      \setbox\strukto@keyword@box=\strukto@keyword{#1}%
�
      \copy\strukto@keyword@box
�
      \hskip\struktohskip   % linke Texteinr.
�
      \vtop{%
�
        \hsize=\strukto@width
�
        \advance\hsize by -\wd\strukto@keyword@box
�
        \advance\hsize by -\struktohskip    % linke Texteinr. beruecks.
�
        \advance\hsize by -\struktohskip    % rechte Texteinr. beruecks.
�
        \noindent\copy\strukto@strut@box #3\strut
�
      }%
�
      \hskip\struktohskip   % rechte Texteinr.
�
    }%
�
    \strukto@hrule   % unterer Rand
�
  }%
�
  \nointerlineskip
�
}
�

�

�
% | #2            
�
% ----------------
�
% * -&gt; Schalter l: keine Linie links von Block
�
%
�
% 1.Arg: switch l
�
% 2.Arg: body (text)
�
%
�
\long\def\STRUKTO@@BLOCK#1#2{%
�
  \vtop{%
�
    \hsize=\strukto@width
�
    \hbox to \strukto@width{%
�
      \def\test{#1}%
�
      \if\test l% &lt;-- linken Rand ziehen ?
�
        \strukto@vrule
�
      \fi
�
      \hskip\struktohskip   % linke Texteinr.
�
      \vtop{%
�
        \hsize=\strukto@width
�
        \advance\hsize by -\struktohskip    % linke Texteinr. beruecks.
�
        \advance\hsize by -\struktohskip    % rechte Texteinr. beruecks.
�
        \noindent\copy\strukto@strut@box #2\strut
�
      }%
�
      \hskip\struktohskip   % rechte Texteinr.
�
    }%
�
    \strukto@hrule   % unterer Rand
�
  }%
�
  \nointerlineskip
�
}
�

�
</pre></body></html>