1 Programmbeschreibung
Eine genaue Beschreibung der Bedienung und Arbeitsweise des Programms ist aus dem Handbuch zum Listengenerator zu entnehmen.
Identifikation einer Liste
Jede Liste wird über eine 15-stellige alphanumerische Listennummer identifiziert. Mit dieser Nummer werden je Listendefinition mehrere Datensätze unterschiedlichen Typs in der Datei LISTGEN.DAT abgelegt. Eine genaue Beschreibung der Satzarten und des Aufbaus folgt weiter unten.
Bei der Anwahl einer Listendefinition wird derzeit zu jedem dieser Datensätze eine Kopie angelegt, so dass z.B. nach größeren Änderungen immer noch das Original verfügbar ist. (Da das allerdings relativ zeitaufwendig ist, sollte evtl. später nur dann eine Kopie eines Satzes angelegt werden, wenn irgendwelche Änderungen daran gemacht wurden)
Weiterhin erhält jede Liste eine interne Nummer. Diese Nummer wird für die zu generierenden MAS-, MTB- und MDD-Dateien verwendet. Sie wird in der Regel spätestens bei der ersten Generierung vergeben - kann allerdings jederzeit geändert werden (Auswahl 'Zusätze'). Die interne Nummer muss ebenfalls eindeutig sein (wird vom System geprüft). Zu Problemen kann es kommen, wenn Listendefinitionen auf einen anderen Datenbestand übertragen werden.
Listen ausliefern
Neben der zuvor genannten Problematik (interne Nummer) tritt bei der Auslieferung evtl. ein weiteres Problem auf. Listen, die Dateikoppelungen verwenden, müssen zusammen mit den zugehörigen Koppel-Informationen ausgeliefert werden (sofern es sich nicht um Standardkoppelungen handelt, die eh jeder hat). Eine Koppelinformation ist ein Datensatz in der LISTGEN.DAT, der eine Koppelung zwischen zwei Dateien beschreibt. Ist nun beim Kunden ebenfalls eine derartige Koppelinformation vorhanden (gleicher Schlüssel), ist die Koppelung inhaltlich jedoch abweichend (z.B. andere Koppelfelder), so kann es passieren, dass nach der Installation unserer Koppelinformation eine Liste des Kunden nicht mehr richtig funktioniert, wenn Sie die zuvor überschriebene Koppelinformation benötigte. Das Problem lässt sich durch ein intelligentes Installationsverfahren ändern -> siehe dazu den beiliegenden Text). Das Programm SIBT01 ist bereits auf eine derartige Installation vorbereitet, es fehlt lediglich ein Programm, mit dem die notwendigen SIBIS-Steuerdateien korrekt erstellt werden.
Dateikoppelungen
Der Listengenerator ist prinzipiell von den Koppelinformationen aus dem DataDictionary unabhängig. Bei der Installation (bzw. bei der ersten Anwahl des Listengenerators) werden alle Relationen aus dem DD in die LISTGEN.DAT übertragen und als sog. Koppelinformation abgestellt. Der Aufbau einer Koppelinformation wird beim Aufbau der Satzarten beschrieben. Eine Koppelinformation ist ein Datensatz von Typ 'DK'. In jeder Liste, die eine bestimmte Koppelinfo verwendet ist ein Verweis auf den entspr. DK-Satz hinterlegt. Fehlt der DK-Satz, so ist die Koppelung einer Liste fehlerhaft. Dies wird vom Programm T02 und T01 erkannt und gemeldet. Im Programm T01 kann die fehlende Koppelinformation nacherfasst werden, wenn die betroffene Liste angewählt wird und die Auswahl 'K'=Koppelungen aufgerufen wird.
MRX-Bausteine und DataDictionary
Die Felddefinitionen der LISTGEN.DAT sind so umfangreich, dass sich nicht mit dem INFRA/2-DD zu verwalten sind. Deshalb existiert ein Pseudo-MRX-Baustein LISTGEN.MRX, in dem das MRX-Array lgd%() so versorgt wird, als wenn es aus dem DD geladen würde. Da der Aufbau dieser NRX-Datei sehr unübersichtlich und kompliziert ist, existiert ein Programm, mit dessen Hilfe aus der Beschreibungsdatei LISTGEN.DD die Datei LISTGEN.MRX erzeugt werden kann. Ein Ausdruck der Datei LISTGEN.DD ist beigefügt. Sie enthält den Aufbau der LISTGEN.DAT in lesbarer Form und ist so wichtig wie die DDFDF-Datei von INFRA.
Das Programm zur Generierung der LISTGEN.MRX-Datei heißt DDDOKU und wird mit 'DDDOKU listgen.dd' gestartet.
Das Programm prüft die Datei LISTGEN.DD auf Fehler und Inkonsistenzen und generiert zusätzlich die Dateien DIMLGD.MRX und DIMSLGD.MRX.
Nach dem Start des Programms müssen diverse Angaben gemacht werden. Vor allem muss die MRX-Datei 'LISTGEN' und der Name der MRX-Variablen 'lgd' (ohne %) angegeben werden.
Overlays
Aus Speicherplatzgründen arbeitet der Listengenerator mit Overlays. Overlays sind Link-Bausteine, die nur bei Bedarf in den Speicher geladen werden. Wird ein Overlay nicht mehr benötigt, so wird es zur Laufzeit gegen ein anderes ausgetauscht. Es ist immer nur ein Overlay im Hauptspeicher. Overlays entstehen dadurch, dass beim Linken unter DOS um die Link-Bausteine runde Klammern gesetzt werden, die zu Overlays werden sollen. Ansonsten ist ein Overlay ein ganz normaler Link-Baustein.
Overlays werden i.d.R. bei Bedarf zur Laufzeit von der Platte nachgeladen. Wird allerdings im DOS-System ein EMM-Treiber verwendet (z.B. EMM386), so werden die Overlays im Extended Memory verwaltet -> Performancesteigerung. Unter Windows kann das allerdings hin und wieder zu Problemen führen (Absturz mit Fehlermeldung 'EMS corrupt'), wenn irgendwelche Windows-Applikationen den EMS-Speicher nicht ordentlich zurücklassen (z.B. PageMaker 4.0).
MTB-Buffer
Aus Platzgründen existieren nur 3 Buffer für Eingabetabellen (je Level eine). Die Buffer werden bei Bedarf kurz vor Gebrauch mit der Routine mtb.laden gefüllt.
Programmsteuerung
Das Verhalten des Programms wird im wesentlichen über zwei Arrays gesteuert. Ein Array (prgpkt%) stellt je Programmpunkt die zu ladende Maske und MTB, die aktuelle Check-Tabelle, den Eingabelevel und die Art des Programmpunktes zur Verfügung (genauer Aufbau siehe Quelle SIBT01.BAS). Das zweite Array (n.prgpkt%) steuert die Programmpunktwechsel. Es enthält jeweils Vorgänger und Nachfolger des akt. Programmpunktes. Der Vorgänger wird in der Regel durch F6 und der Nachfolger durch F9 aufgerufen. Weitere Arrays stellen die auszugebenden Meldungen je Programmpunkt zur Verfügung.
Eine einzige Schleife wertet die Steuer-Arrays aus und aktiviert den jeweils aktuellen Programmpunkt. Alle Vorbereitungs- und Verarbeitungsroutinen sind Programmpunkt- (teilweise Checktabellen-)abhängig. Die wichtigsten Steuervariablen sind in der Quelle erläutert.
Der Zugang zu einem Programmpunkt geschieht i.d.R. über das Listengeneratormenü. Ein String (menuewahl$) enthält die Zahlen und Buchstaben, mit denen die Menüpunkte angewählt werden können. Ihre Position im String entspricht dem Programmpunkt, der durch diese Auswahl aufgerufen werden muss. Alles andere ist in den zuvor genannten Arrays gespeichert.
Wichtig ist auch, das alle steuernden Rollbereichsdaten in Steuerarrays verwaltet werden. Diese Arrays werden immer dann ausgewertet, wenn der jeweils angesprochene Programmpunkt ein Rollbereich ist.
