Struktogramme ermöglichen eine übersichtliche grafische Darstellung von Programmabläufen. Zur Erstellung ist jedoch ein hoher Aufwand an manuellen Tätigkeiten nötig, um eine ansprechende Darstellung zu erreichen.
Das vorliegende Programm wurde entwickelt, um diesen Aufwand zu reduzieren :
Es erzeugt formatierte Struktogramme.
Die dazu benötigten Informationen entnimmt es einer Textdatei. Vor der Beschreibung des Programms seien noch einige Leistungsmerkmale aufgezählt :
- Als Eingabedatei kann wahlweise eine Pascal-Source-Datei oder
eine spezielle Strukturdatei verwendet werden.
- Die Strukturdatei, die alle notwendigen Informationen zur Dar-
stellung des Struktogramms enthält, kann auch vom Programm
erzeugt werden.
- Die Ausgabe des Struktogramms kann wahlweise auf dem Schirm,
dem Drucker oder in eine Diskettendatei (z.B. zur Weiterverarbei-
tung mit einem Texteditor) erfolgen.
- Die erste Druckspalte und die Zeilenlänge können vom Benutzer
festgelegt werden - zur Darstellung der Struktogramme kann
zwischen Grafik- und Textzeichen gewählt werden.
- Die Druckqualität bzw. die Druckgeschwindigkeit kann bestimmt
werden.
- Die Fehlermeldungen werden in eine Fehlerdatei geschrieben.
- Die Bedienung ist menueorientiert.
════════════════
Die Grundsymbole
════════════════
Die Bilder 1a..1g zeigen die grafische Darstellung und die Schlüsselbegriffe bzw. Befehlsfolgen, mit denen die einzelnen Strukturblöcke erzeugt werden können. Dabei kann anstelle von <BLOCK> wiederum jeder beliebige Strukturblock eingetragen werden. Die IF- und CASE-Blöcke wurden gegenüber der Norm dahingehend verändert, daß die einzelnen Alternativen nicht neben-, sondern untereinander angeordnet sind.
Dies geht auf eine Anregung in (1) zurück und trägt dazu bei, den Verwaltungsaufwand des Programms in Grenzen zu halten. Gleichzeitig wird die Übersichtlichkeit der Darstellung verbessert (Geschachtelte IF-Anweisungen lassen sich, hält man sich an die Norm, nur sehr unübersichtlich darstellen). Der Unterprogrammblock wurde ebenfalls etwas abgewandelt.
Statt eines Begriffes (z.B. "WHILE") kann als Schlüsselzeichen auch nur der Anfangsbuchstabe des Begriffes (hier "W") angegeben werden. In beiden Fällen ist sowohl Groß- als auch Kleinschreibung zulässig. Das Zeichen "#" wird eingesetzt, um einen Strukturblock, der wieder andere Strukturblöcke enthalten kann, abzuschließen. Es darf nur in Verbindung mit PROGRAMM, WHILE, REPEAT, IF und CASE eingesetzt werden. Die Verwendung von "#" ist notwendig, um die Aktualisierung verschiedener Parameter (Zeilenlänge, Zeilenaufbau) zu gewährleisten.
═══════════════════════════════
Erstellung einer Struktur-Datei
═══════════════════════════════
Die Datei, welche den Aufbau des Struktogramms enthält, kann zum einen mit einem beliebigen Texteditor (z.B. Turbo-Pascal-Editor) erstellt werden, möglich ist aber auch die Verwendung einer Pascal-Quelldatei. Jede Datenzeile einer solchen Struktur-Datei hat folgenden Aufbau :
<BLOCKZEICHEN> <TEXT>
<BLOCKZEICHEN> ist ein Schlüssel für den Strukturblock und kann sowohl das Schlüsselzeichen (z.B. "C" für "CASE") als auch die Bezeichnung des Blockes sein (also "CASE"). Der Text, der in das Struktursymbol eingetragen werden soll, muß vom Blockzeichen durch mindestens ein Leerzeichen getrennt werden und darf höchstens 100 Zeichen umfassen.
Sollte sich der Text nicht in einer Ausgabezeile darstellen lassen, wird er auf mehrere Zeilen verteilt. Als "Trennstelle" wird ein Leerzeichen gesucht. Verläuft die Suche negativ, so wird eine Trennung auch mitten in einem Wort vorgenommen.
Text, der in einem OF-Zweig einer CASE-Struktur einzutragen ist, darf nicht länger als 11 Zeichen sein. Das Fragezeichen in der IF- bzw. CASE-Struktur wird vom Programm eingefügt.
Die Daten jedes einzelnen Struktogramms müssen mit der Zeile "PROGRAMM <Name>" beginnen und mit "#PROGRAMM" beendet werden. Mehrere Struktogrammbeschreibungen können so in einer Textdatei untergebracht werden, indem man nach "#PROGRAMM" mit "PROGRAMM" das nächste Struktogramm beginnt. Bild 2 zeigt die Befehlsfolge, mit der das Struktogramm aus Bild 3 erzeugt wurde.
In den Listings sind das Hauptprogramm und die Include-Files wiedergegeben. Die Include-Files müssen unter dem in der jeweils zweiten Zeile angegebenen Namen abgespeichert werden. Das Programm wurde mit Turbo-Pascal entwickelt (s.u.), sollte aber ohne großem Aufwand an andere Dialekte angepaßt werden können. Bei Turbo-Pascal unter CP/M-Systemen muß es mit der Compiler-Option "C" kompiliert werden, um ein COM-File zu erzeugen; im "Memory"-Modus ist es nicht lauffähig.
Nach dem Start erscheint ein Menue. Es bietet folgende Möglichkeiten :
- L : Eine Struktur-Datei wird geladen. Der Name der Datei wird ohne
die Extension (Dateityp) "STG" eingegeben. Laufwerksangaben
sind erlaubt.
- D : Mit diesem Befehl wird ein Struktogramm auf dem augenblick-
ausgegeben. Sollte bis zu diesem Zeitpunkt noch keine Datei
geladen worden sein, wird dies nachgeholt. Erfolgt die
Ausgabe auf den Bildschirm, so kann sie mit CTRL-S angehal-
ten werden, eine beliebige Taste startet die Ausgabe wieder.
Bei Ausgabe in eine Diskettendatei wird nach deren Fertig-
stellung eine Meldung auf dem Bildschirm ausgegeben.
- S : Diese Option startet die Abarbeitung eines Pascal-Source-
Textes. Der Name dieser Datei muß mit einer Extension ein-
gegeben werden. Diese Quelldatei muß vom Pascal-Compiler
fehlerfrei übersetzt werden können - nur dann entstehen sinn-
volle Resultate. Zusätzlich wird, falls dies im Parameter-
Menue eingestellt wurde (s.u.) der Name einer Struktur-Datei
abgefragt, in der die Strukturdaten abgespeichert werden
sollen. Dieser Name wird ohne Extension angegeben.
- P : Dieser Menue-Punkt dient dazu, einige Druckparameter einzu-
stellen. Diese Parameter werden in Form eines Menues
angeboten (s.u.).
- Q : Programmende
Im Menue wird in der Zeile "Bearbeitete Datei" der Name der Struktur-Datei eingetragen, auf die zur Zeit zugegriffen wird. Solange mit dieser Datei gearbeitet werden soll, kann man die Ausgabe des Struktogramms mit "D" veranlassen. Um diese Datei zu wechseln, muß mit dem Menuepunkt "L" ein neuer Dateiname vereinbart werden.
Bei Auswahl der "P"-Option erscheint ein weiteres Menue, mit dem die folgenden Parameter verändert werden können :
- L : Verändert den linken Rand, ab dem die Druckausgabe beginnen
soll. Der Rand kann beim Druck in den Spalten 1...50 beginnen.
Der voreingestellte Wert ist 5.
- Z : Verändert die Breite einer Druckzeile. Es sind Werte im Bereich
von 11...92 zugelassen. Voreingestellt ist der Wert 60.
- M : Mit diesem Befehl kann man bestimmen, wieviele Datensätze ei-
ner Quell-Datei zur gleichen Zeit im Speicher gehalten werden
sollen. Es ist dann sinnvoll, den Wert zu verkleinern, wenn
es beim Abarbeiten einer Datei zu einem "Stack-Overflow" kommt.
Der voreingestellte Wert beträgt 110, er kann im Bereich von
1 bis 600 verändert werden.
- S : Die Ausgabe wird auf den Bildschirm geleitet. Dies ist die
Voreinstellung.
- P : Die Ausgabe wird auf den Drucker geleitet.
- D : Die Ausgabe wird in eine Datei geleitet, deren Name eingegeben
werden muß. Der Name wird ohne Extension angegeben - es wird
standardmäßig die Extension ".PRN" ergänzt.
- O : Die Ausgabe des Struktogramms wird unterdrückt. Diese Option
ist sinnvoll, wenn aus einem Pascaltext eine Strukturdatei er-
stellt werden soll, die vor der endgültigen Erstellung des
Struktogramms noch überarbeitet werden soll.
- E : Hiermit wird bestimmt, ob eine Strukturdatei erzeugt wird oder
nicht. (Voreinstellung : "JA"). Diese Option ist nur in Zu-
sammenhang mit der Abarbeitung einer Pascaldatei sinnvoll.
- U : Schaltet den Drucker zwischen unidirektionalem und bidirek-
tionalem Druck um. Der bidirektionale Modus ist für Entwürfe
ausreichend, bei höheren Ansprüchen an das Erscheinungsbild
sollte der unidirektionale Druck gewählt werden. Diese Um-
schaltung ist nicht bei allen Druckern notwendig.
- G : Durch diesen Befehl wird bestimmt, ob das Struktogramm aus
Graphikzeichen oder aus normalen Textzeichen aufgebaut werden
soll.
- Q : Rückkehr ins Hauptmenue.
═══════════════
Fehlermeldungen
═══════════════
Fehler, welche die Daten des Struktogramms betreffen (unbekannte Schlüsselbegriffe, unzulässige Verwendung von "#" etc.) werden in einer Fehlerdatei abgelegt. Der Name ist der gleiche wie der der bearbeiteten Strukturdatei. Die Extension ist ".ERR". In der Datei wird die Fehlermeldung zusammen mit der laufenden Nummer der Zeile, in der der Fehler auftrat, abgespeichert. Die Fehlerdatei kann man sich dann zusammen mit der Strukturdatei in den Texteditor laden, um Korrekturen durchzuführen.
In diesem Zusammenhang sei nochmals darauf hingewiesen, daß STRUKTO beim Abarbeiten einer Pascaldatei voraussetzt, daß diese fehlerfrei compiliert werden kann; es führt selbst keine Plausibilitätskontrollen durch. Auftretende Fehler werden daher erst beim Ausdruck des Struktogramms erkannt. Sollten beim Erstellen des Struktogramms Fehler auftreten, so wird nach Fertigstellung des Struktogramms eine entsprechende Meldung auf dem Bildschirm ausgegeben. Bei einem Fehler, der Ein-/Ausgabeoperationen betrifft, wird auf dem Bildschirm eine Meldung ausgegeben, welche die Fehlernummer des Turbo-Pascal-Systems enthält. Diese Meldung muß mit <ESC> bestätigt werden.
════════════════════════════
Auswerten von Pascal-Dateien
════════════════════════════
Das Programm wertet eine Pascal-Source-Datei nach folgenden Grundsätzen aus :
- Zeichenfolgen hinter den Schlüsselwörtern PROGRAM, PROCEDURE, FUNCTION werden als Namen abgelegt.
- Ineinander geschachtelte Prozeduren werden, mit der innersten beginnend, nacheinander dargestellt.
- FORWARD- oder EXTERNAL-deklarierte Prozeduren werden überlesen.
- Alle auf diese Schlüsselwörter folgenden TYPE-, CONST-, VAR-, LABEL-Vereinbarungen werden überlesen.
- In Kommentarzeichen eingeschlossene Zeichenfolgen werden überlesen. Dies gilt auch für Compiler-Anweisungen.
- FOR-Schleifen, für die es in der Norm kein Symbol gibt, werden als WHILE-Schleife nachgebildet :
FOR i := anfang TO ende do ...
wird dargestellt als
A i := anfang - 1
W i < ende
A i := i + 1
.....
#W
- Die WITH-Anweisung wird überlesen.
- Eine Zeichenfolge, die kein Schlüsselwort enthält, wird als Anweisung dargestellt, falls sie ein ":=" enthält, ansonsten wird sie als Unterprogrammaufruf behandelt.
- Ein GOTO-Befehl wird als Anweisung mit dem Eintrag "GOTO label" ausgegeben. Das Label wird an der entsprechenden Stelle in den Strukturblock eingetragen.
════════════════════════════════════
Weiterverarbeitung der Struktogramme
════════════════════════════════════
Nachdem ein Struktogramm in eine Diskettendatei ausgegeben wurd (D-Option in der Parameterauswahl), kann es mit einem Texteditor weiterverarbeitet werden. Es ist z.B. denkbar, das Struktogramm in eine Dokumentation einzubauen. Dies ist unter CP/M nur dann problemlos möglich, wenn man die Textzeichen anstatt der Graphikzeichen zur Erstellung des Struktogramms einsetzt. Die Graphikzeichen werden von Wordstar und dem Turbo-Pascal-Editor nicht erkannt, da das Bit 7 ausgeblendet wird.
══════════════
Systemumgebung
══════════════
Das Programm wurd mit Turbo-Pascal 3.0 entwickelt. Es enthält nur wenige systemabhängige Variable, die nachstehend erläutert werden sollen.
Die Druckersteuerzeichen sind speziell an den EPSON-RX80 angepaßt.
Dieser Drucker kann einen EPSON-spezifischen Graphikzeichensatz ausdrucken (2). Diese Fähigkeit wird vom Programm ausgenutzt. Für IBM-kompatible Geräte können stattdessen in der Prozedur "INIT-GRAPHIK" die Werte gemäß Bild 4 eingesetzt werden. Beim Einsatz eines Druckers, der Graphikzeichen zur Verfügung stellt, sollte man in der Prozedur "INIT" der Variabeln "ZEICHENSATZ" den Wert "GRAPHIK" zuweisen und den Prozeduraufruf "INIT-TEXT" durch "INIT-GRAPHIK" ersetzen.
┌──────────────────────────────────────────────┐
│ │
│ Variable Zeichen Apple IBM Textzeichen │
│ ------------------------------------------- │
│ Kreuz ┼ 128 197 + │
│ Kreuzoben ┬ 130 194 + │
│ Kreuzunten ┴ 129 193 + │
│ Kreuzrechts ┤ 131 180 + │
│ Kreuzlinks ├ 132 195 + │
│ Waagerecht ─ 133 196 - │
│ Senkrecht │ 134 179 I │
│ Obenlinks ┌ 135 218 + │
│ Obenrechts ┐ 136 191 + │
│ Untenlinks └ 137 192 + │
│ Untenrechts ┘ 138 217 + │
│ │
│ Abb. 4 │
└──────────────────────────────────────────────┘
Weitere Druckbefehle werden in der Prozedur DRUCKER-STEUERUNG eingesetzt. Ihre Funktionen sind in Kommentaren angegeben, um die Anpassung an andere Drucker zu erleichtern.
Unter CP/M und Turbo-Pascal 2.0 funktioniert die Prozedur RELEASE nicht korrekt. Stattdessen muß - einem Vorschlag der Fa. Heimsoeth folgend - die Ersatzprozedur RELEASE implementiert werden (Bild 5).