home *** CD-ROM | disk | FTP | other *** search
Text File | 1992-08-12 | 496.7 KB | 7,320 lines |
-
-
- ╔══════════════════════════════════════════════════════════════════════╗
- ║ Bibliothek FORSUB / FORSUBA / FORSUB7 für Microsoft-FORTRAN-77 ║
- ║ ║
- ║ Version 8/92 ║
- ║ ║
- ╟──────────────────────────────────────────────────────────────────────╢
- ║ ║
- ║ Inhaltsverzeichnis ║
- ╟──────────────────────────────────────────────────────────────────────╢
- ║ ║
- ║ Allgemeine Informationen zur Bibliothek . . . . . Seite 1 ║
- ║ ║
- ║ Zeilenweise Ein- und Ausgabe am Bildschirm . . . . . Seite 5 ║
- ║ ║
- ║ Blockweise Ein- und Ausgabe am Bildschirm . . . . . Seite 39 ║
- ║ ║
- ║ Menüsteuerung . . . . . . . . . . . . . . . Seite 49 ║
- ║ ║
- ║ Bildschirmmasken . . . . . . . . . . . . . . Seite 65 ║
- ║ ║
- ║ Fenstertechnik . . . . . . . . . . . . . . Seite 75 ║
- ║ ║
- ║ Schriftengeneratoren . . . . . . . . . . . . Seite 113 ║
- ║ ║
- ║ Zeit- und Akustiksteuerung . . . . . . . . . . Seite 123 ║
- ║ ║
- ║ Transformationen . . . . . . . . . . . . . . Seite 131 ║
- ║ ║
- ║ Zufallszahlen und Sortierungen . . . . . . . . . Seite 147 ║
- ║ ║
- ║ Stringmanipulationen . . . . . . . . . . . . Seite 159 ║
- ║ ║
- ║ Laufwerks-, Verzeichnis- und Dateimanipulationen . . . Seite 193 ║
- ║ ║
- ║ Zugriff auf Speicherinhalte . . . . . . . . . . Seite 221 ║
- ║ ║
- ║ Virituelle Speicherverwaltung . . . . . . . . . Seite 233 ║
- ║ ║
- ║ Childprozess und Interruptaufruf . . . . . . . . Seite 249 ║
- ║ ║
- ║ Verschiedene Routinen . . . . . . . . . . . . Seite 259 ║
- ║ ║
- ║ ASCII-Code-Tabelle . . . . . . . . . . . . . Seite 293 ║
- ║ ║
- ║ Farbcode-Tabelle . . . . . . . . . . . . . . Seite 295 ║
- ║ ║
- ║ ║
- ║ ║
- ║ ║
- ║ ║
- ║ ║
- ║ ║
- ║ ║
- ║ ║
- ╚══════════════════════════════════════════════════════════════════════╝
-
-
-
-
-
-
-
-
-
-
- Seite 1
-
-
- BIBLIOTHEK FORSUB.LIB FÜR MICROSOFT-FORTRAN-77
-
-
- Copyright
-
- (c) Copyright 1991/92 Fa. C. Killet Software, Postfach 400258, 4152
- Kempen. Die hier beschriebene Software ist urheberrechtlich geschützt.
- Sie darf ohne Zustimmung der Fa. C. Killet nicht verändert, verkauft
- oder weitergegeben werden. Als Sharewareversion gekennzeichnete
- Produkte dürfen ausdrücklich uneingeschränkt kostenlos weitergegeben
- werden. Der in dieser Dokumentation verwendete Begriff MICROSOFT ist ein
- eingetragenes Warenzeichen der Microsoft Cooperation.
-
-
- Haftung und Garantie
-
- Die Fa. C. Killet übernimmt die Garantie für die Lesbarkeit des direkt
- bei ihr erworbenen Datenträgers und für die Verwendbarkeit der bei ihr
- erworbenen Software in Höhe des Kaufpreises. Darüber hinaus gibt die
- Fa. C. Killet keine Garantien irgendeiner Art. Unter keinen Umständen
- ist die Fa. C. Killet haftbar für jedwede Folgeschäden, Verluste und
- entgangene Gewinne, die durch den Gebrauch oder die Nichtverwendbarkeit
- der Software entstehen. Die Kopier- und Versandgebühr für Shareware-
- produkte gilt dabei nicht als Kaufpreis.
-
-
- Unterschied der Sharewareversion zur Originalbibliothek
-
- Bitte beachten Sie diesen Abschnitt nur, wenn Sie die Sharewareversion
- erworben haben. Die Sharewarebibliothek entspricht den Bestimmungen der
- "Association of Shareware Professionals" (ASP). In Übereinstimmung mit
- den ASP-Richtlinien ist sie in keiner Weise eingeschränkt. Nach dem
- Aufruf eines mit der Sharewarebibliothek gelinkten Programms wird in
- bestimmten Zeitabständen ein Hinweisbildschirm ausgegeben. Der
- Hinweisbildschirm hat keinen Einfluß auf das Programm. Nach dem
- Ausblenden des Hinweises wird der ursprüngliche Bildschirminhalt
- wiederhergestellt. In der Sharewareversion steht die Bibliothek in der
- Emulator- und der 8087-Version des "Large"-Memory-Model zur Verfügung.
- In der Originalversion kann zusätzlich die AltMath-Version erworben
- werden. Die Ausführungsgeschwindigkeit damit gelinkter Programme ist
- etwas geringer, der von den exekutiven Programmen benötigte
- Speicherplatz ist etwas höher als bei mit der Originalversion gelinkten
- Programmen. Sollte die Bibliothek Ihren Anforderungen entsprechen, so
- benutzen Sie das Registrierungsformular aus der Datei "REGFOR.DOC" für
- die Registrierung. Aus dem Hinweisbildschirm des Programms "ZEISATZ"
- kann das Formular gedruckt werden. Registrierte Anwender erhalten ein
- gedrucktes Benutzerhandbuch und die Originalsoftware mit einer
- absetzbaren Rechnung. Mit Hilfe der Sharewareversion erstellte
- Programme sind nach dem Linken mit der Originalbibliothek voll
- gebrauchsfähig. Es müssen keine Änderungen in den Quelltexten
- vorgenommen werden!
-
-
-
-
- Seite 2
-
-
- UPDATE-Service
-
- Registrierte Anwender können gegen eine Gebühr von DM 20.- jederzeit
- die neuste Version der Bibliothek bei der Fa. C. Killet bestellen.
- UPDATES bleiben zu der bisher benutzten Version voll kompatibel. Die
- Bibliothek wird jedoch ständig mit neuen Routinen ergänzt und
- verbessert.
-
-
- Demonstrations-Programm
-
- Viele Subroutinen der Bibliothek werden in einem Demonstrations-Programm
- vorgestellt. Der Quelltext des Demonstrations-Programms ist in der
- Datei "DEMO.FOR" zu finden. Er enthält die beispielhafte Programmierung
- vieler Subroutinen als Hilfe bei der Programmentwicklung. Das
- compilierte und mit "FORSUB.LIB" gelinkte Programm steht in der
- Datei "DEMO.EXE" zur Verfügung. Beim testweisen Linken des Programms ist
- zu beachten, daß die Option /SE:256 verwendet wird. Bitte benutzen Sie
- die folgende Syntax:
- FL /FPi /AL /c DEMO.FOR
- LINK DEMO,DEMO,NUL,LLIBFORE FORSUB,NUL /NOD /SE:256
-
-
- Einsatz der Bibliothek
-
- Die Bibliothek FORSUB.LIB enthält ca. 180 Subroutinen zum Einsatz mit
- dem MICROSOFT-FORTRAN-Compiler ab der Version 4.0. Die Bibliothek ist
- in Versionen lieferbar, die zusammen mit den zu MICROSOFT-FORTRAN-77
- gehörenden Standardlibraries LLIBFORE.LIB, LLIBFORA.LIB oder
- LLIBFOR7.LIB verwendet werden können. Dabei wird das "Large"-Menory-
- Model wahlweise in der Emulator, Altmath oder 8087-Version unterstützt.
- Alle Subroutinen in FORSUB.LIB sind bezüglich ihres Laufzeitverhaltens
- optimiert. Die Subroutinen der Library können mit MICROSOFT-FORTRAN
- Objektmodulen und Objektmodulen aus anderen MICROSOFT-Compilern
- zusammengelinkt werden. FORSUB.LIB funktioniert auf allen
- IBM-compatiblen XT- und AT-Personal-Computern mit dem Betriebssystem
- MS-DOS oder PC-DOS. Die Bibliothek ist auch mit anderen,
- MICROSOFT-kompatiblen Compilern lauffähig.
-
-
- Geschwindigkeit und Speicherbedarf
-
- FORSUB.LIB erweitert die Möglichkeiten der Programiersprache FORTRAN-77
- erheblich, da als Ergänzung zur Standardbibliothek eine große Anzahl von
- nicht-FORTRAN-spezifischen Funktionen zur Verfügung gestellt werden.
- Ein Teil der in der Bibliothek enthaltenen Subroutinen sind in ASSEMBLER
- programmiert. Das führt zu der hohen Geschwindigkeit und zum geringen
- Speicherbedarf der in FORSUB.LIB enthaltenen Subroutinen.
-
-
-
-
- Seite 3
-
-
- Inhalt der Bibliothek
-
- Neben der zeilenweisen und blockweisen positionierten Ein- und Ausgabe
- aller gängigen Datentypen am Bildschirm werden ein- und mehrfache
- Auswahlen durch Menütechnik und die Dateneingabe per Bildschirmmaske zur
- Verfügung gestellt. Besondere Aufmerksamkeit verdienen die zahlreichen
- Subroutinen zur hirachischen Fenstertechnik mit deren Hilfe Menüs, Texte
- und Datenfelder erzeugt, verwaltet und im Arbeitspeicher abgelegt werden
- können. Die Benutzung vorgegebener oder selbsterzeugter Schrifttypen
- unterschiedlicher Größe ist genauso möglich, wie die Verwendung
- übergroßer Blockschriften. Weitere Komponenten der Bibliothek sind
- Routinen zur Zeitsteuerung und Akustik, das Erzeugen von Zufallszahlen
- und Sortierungen von Datenfeldern. Daneben können Format- und
- Attributtransformationen, zahlreiche Routinen für verschiedene
- Stringmanipulationen und viele Datei-, Verzeichnis- und Laufwerks-
- funktionen verwendet werden. Wichtig ist auch die Möglichkeit, direkt
- auf Maschinenadressen zu schreiben oder Daten aus Maschinenadressen
- auszulesen. Bereiche des Arbeitspeichers können zum Zweck der
- Datenablage allokiert und verwaltet werden. Der Aufruf eines
- Subprogramms oder einer DOS-Aplikation ist mit Subroutinen aus der
- Bibliothek FORSUB.LIB genauso möglich, wie ein Interruptaufruf aus einem
- FORTRAN-Programm. Außerdem wird die Steuerung einer MICROSOFT-
- kompatiblen Maus von der Bibliothek unterstützt. Neben den hier
- beschriebenen Anwendungsbereichen gibt es noch viele Subroutinen für
- verschiedene Anwendungen.
-
-
- Farbige Bildschirm- Ein- und Ausgabe
-
- Wenn eine Farbgraphikkarte und ein Farbbildschirm vorhanden sind, können
- Bildschirm- Ein- und Ausgaben durch die Verwendung von Farbattributen in
- beliebigen Vorder- und Hintergrundfarben dargestellt werden. Wenn durch
- die Konfiguration des verwendeten Bildschirms und der Graphikarte nur
- eine monochrome Darstellung möglich ist, wird dieser Umstand von den
- Subroutinen aus FORSUB.LIB erkannt, und die Farbattribute werden
- automatisch der monochromen Ausgabe angepasst. Eine Liste aller
- möglichen Farbattribute befindet sich im Anhang des Benutzerhandbuchs.
-
-
- Aufbau des Handbuchs
-
- Die Subroutinen der FORTRAN-Bibliothek FORSUB.LIB sind im Handbuch nach
- Sachgebietsgruppen geordnet zusammengestellt. Zu jeder
- Sachgebietsgruppe gibt es eine Zusammenstellung der zu ihr gehörenden
- Subroutinen und eine globale Erläuterung zum Sachgebiet. Zu jeder
- Subroutine korrespondiert mit einem separaten Kennblatt.
-
-
- Kennblatt zur Subroutine
-
- Zu jeder Subroutine gehört ein separates Kennblatt. Im ersten Teil des
- Kennblatts wird der Zweck der Subroutine und die beim Aufruf erfolgenden
- Aktionen beschrieben. Alle Besonderheiten der Subroutine werden hier
- erläutert. Darauf folgt eine Auflistung der benötigten Parameter mit
- der genauen Typbeschreibung, einer Kurzerläuterung und eventuellen
-
-
- Seite 4
-
-
- Beschränkungen in der Reihenfolge der Übergabe. Beschränkungen und
- Größenangaben sind dabei in [ ] angegeben. In der Subroutine verwendete
- externe Routinen aus der Bibliothek FORSUB.LIB sind in der Rubrik
- "Subroutinen" gesondert aufgeführt. Zum Schluß wird die Verwendung der
- jeweiligen Subroutine anhand eines oder mehrerer Programmierbeispiele
- veranschaulicht. Dabei handelt es sich nicht um vollständige Programme,
- sondern um Programmausschnitte. Die Verwendung vieler Subroutinen kann
- zusätzlich im Quelltext des zur Bibliothek gehörenden Demonstrations-
- programms "DEMO.FOR" nachgelesen werden.
-
-
- Parameterübergabe
-
- In der Bibliothek FORSUB.LIB sind ausschließlich SUBROUTINES zu finden.
- Auf die Auslegung einzelner Routinen als FUNCTIONS wurde absichtlich
- verzichtet, da selten nur ein einzelnes Parameter an das rufende
- Programm zurückgegeben wird. Alle Parameter des Typs INTEGER, REAL und
- LOGICAL werden im 4-Byte-Format übergeben. Das entspricht den in
- MICROSOFT-FORTRAN üblichen Formaten, die ohne explizite Größenangabe
- benutzt werden können. CHARACTERS benutzen das übliche 1-Byte-Format,
- Character-Strings erhalten die mit "*(n)" definierte Größe.
-
-
- Utillities
-
- Zur FORTRAN-Bibliothek FORSUB.LIB gehören drei Programme. Mit dem
- Programm DIRECT können Dateien, die mit einem Texteditor erzeugt worden
- sind, direct organisiert werden. Direct organisierte Dateien werden von
- den Subroutinen MENTXT, MASTXT und TXTFEN benötigt. Das Programm
- benötigt beim Aufruf zwei Parameter. Im ersten Parameter wird der Name
- der zu organisierenden Datei übergeben, im zweiten Parameter steht die
- benötigte Recordlänge in Byte.
- Aufruf: DIRECT [Laufwerk:\Pfad\]Datei Recordlänge
-
- Mit Hilfe des Programms ZEISATZ kann ein User-Zeichensatz erzeugt oder
- korrigiert werden. User-Zeichensätze können mit der Subroutine SCRIPT
- aktiviert werden. Beim Aufruf des Programms ist als Parameter der Name
- einer vorhandenen oder neu anzulegenden Datei erforderlich. Alle
- anderen erforderlichen Eingaben werden im Dialog erfragt.
- Aufruf: ZEISATZ Datei
-
- Das Programm KEY schreibt die Tastaturcodes und -flags beim Betätigen
- der Tastatur in dezimaler Schreibweise auf den Bildschirm.
- Aufruf: KEY
- Beenden : Ctrl C
-
-
- Tabellen
-
- Im Anhang des Benutzerhandbuchs sind eine ASCII-Codetabelle und eine
- Farbcodetabelle enthalten.
-
-
-
-
- Seite 5
-
-
- Compilieren und Linken mit FORSUB.LIB
-
- Um Routinen aus der Bibliothek FORSUB.LIB in Programme einzubinden,
- können die folgenden FL-Kommandos (siehe User's Guide des
- MICROSOFT-FORTRAN-Compilers) eingegeben werden:
-
- Compilieren: FL /c /AL /FPi myfile.for
- Linken: LINK myfile,myfile,NUL,LLIBFORE FORSUB,NUL /NOD
- FORSUB.LIB ist die Tools-Library für das Large-Model in der
- Emulatorversion.
- LLIBFORE.LIB ist die zu zum FORTRAN-Compiler gehörende
- Standardbibliothek für das Large-Model in der Emulatorversion.
-
- oder:
- Compilieren: FL /c /AL /FPa myfile.for
- Linken: LINK myfile,myfile,NUL,LLIBFORA FORSUBA,NUL /NOD
- FORSUBA.LIB ist die Tools-Library für das Large-Model in der
- Altmath-Version.
- LLIBFORA.LIB ist die zu zum FORTRAN-Compiler gehörende
- Standardbibliothek für das Large-Model in der Altmath-Version.
-
- oder:
- Compilieren: FL /c /AL /FPi87 myfile.for
- Linken: LINK myfile,myfile,NUL,LLIBFOR7 FORSUB7,NUL /NOD
- FORSUB7.LIB ist die Tools-Library für das Large-Model in der
- 8087-Version.
- LLIBFOR7.LIB ist die zu zum FORTRAN-Compiler gehörende
- Standardbibliothek für das Large-Model in der 0887-Version.
-
-
- Seite 6
-
-
- Zeilenweise Ein- und Ausgabe am Bildschirm
-
- Unter zeilenweiser Ein- und Ausgabe am Bildschirm wird die Eingabe
- einzelner oder mehrerer numerischer oder alphanumerischer Zeichen von
- der Tastatur aus mit dem entsprechenden Echo am Bildschirm, sowie die
- Ausgabe einzelner oder mehrerer numerischer oder alphanumerischer
- Zeichen zum Bildschirm verstanden. Selbstverständlich ist die
- positionierte Darstellung am Bildschirm durch die Angabe der
- Ausgabezeile und -spalte möglich. Die Farbe des Hinter- und
- Vordergrunds der Bildschirmausgabe kann mit Hilfe eines Farbattributs
- ausgewählt werden. Eine Liste mit allen möglichen Farbattributen
- befindet sich im Anhang des Benutzerhandbuchs. Das Beenden von
- Leseroutinen mit Hilfe frei zu wählender Abschlußtasten ist ebenso
- möglich, wie das Mitführen der relativen Cursorposition. Dadurch können
- einfache Editoren und Bildschirmmasken programmiert werden.
-
-
- Subroutinen zur zeilenweisen Ein- und Ausgabe am Bildschirm
-
- AREAD a) String positioniert einlesen
- b) String positioniert korrigieren; Zeichen werden überschrieben
- oder übernommen.
- c) String positioniert korrigieren; Vorgabe wird beim Schreiben
- des ersten Zeichens gelöscht, sonst übernommen.
- AREADP a) String positioniert einlesen, Cursorposition bestimmen
- b) String positioniert korrigieren; Zeichen werden überschrieben
- oder übernommen; Cursorposition bestimmen.
- c) String positioniert korrigieren; Vorgabe wird beim Schreiben
- des ersten Zeichens gelöscht, sonst übernommen; Cursor-
- position bestimmen.
- AREADZ a) String gefiltert positioniert einlesen
- b) String gefiltert positioniert korrigieren; Zeichen werden
- überschrieben oder übernommen.
- c) String gefiltert positioniert korrigieren; Vorgabe wird beim
- Schreiben des ersten Zeichens gelöscht, sonst übernommen.
- AREADM a) String zentriert positioniert einlesen
- b) String zentriert positioniert korrigieren; Zeichen werden
- überschrieben oder übernommen.
- c) String zentriert positioniert korrigieren; Vorgabe wird beim
- Schreiben des ersten Zeichens gelöscht, sonst übernommen.
- AWRI a) String positioniert ausgeben
- AWRIM a) String zentriert positioniert ausgeben
- IREAD a) Integerwert positioniert einlesen
- b) Integerwert positioniert korrigieren; Ziffern werden
- überschrieben oder übernommen.
- c) Integerwert positioniert korrigieren; Vorgabe wird beim
- Schreiben der ersten Ziffer gelöscht, sonst übernommen.
- IWRI a) Integerwert positioniert mit führenden Nullen ausgeben
- IWRIB a) Integerwert positioniert mit führenden Blanks ausgeben
- RREAD a) Realwert positioniert einlesen
- b) Real positioniert korrigieren; Ziffern werden überschrieben
- oder übernommen.
- c) Real positioniert korrigieren; Vorgabe wird beim Schreiben
- der ersten Ziffer gelöscht, sonst übernommen.
- RWRI a) Realwert positioniert mit führenden Nullen ausgeben
-
-
- Seite 7
-
-
- RWRIB a) Realwert positioniert mit führenden Blanks ausgeben
- DREAD a) Datumsformat positioniert einlesen
- b) Datumsformat positioniert korrigieren
- DWRI a) Datumsformat positioniert ausgeben
- FMEL a) Fehlermeldung positioniert ausgeben
- TAST a) Zeichen im Wartestatus von der Tastatur einlesen
- b) Zeichen nicht wartend aus dem Tastaturbuffer lesen
-
-
- Seite 8
-
-
- ╔══════════════════════════════════════════════════════════════════════╗
- ║Beschreibung der Subroutine AREAD (TEXT,LAN,ZEI,SP,COL,SON,ART) ║
- ║Die Subroutine ermöglicht das Lesen oder die Korrektur eines ║
- ║Textstrings von der Tastatur aus. Die Tasten des Cursorblocks können ║
- ║dabei mitbenutzt werden. Der Text wird positioniert in einem farb- ║
- ║inversen Feld, nach dem Betätigen einer Abschlußtaste in einem ║
- ║farbnormalen Feld am Bildschirm dargestellt. In der selben Zeile ║
- ║hinter dem Textfeld positionierte Texte (z. B. aus der Subroutine ║
- ║FMEL) können bis zum Ende der Zeile gelöscht werden. Außer der ║
- ║<Return>-Taste können weitere Tasten zum Abschluß der Routine benutzt ║
- ║werden, die als Bitmuster übergeben werden. Das Bitmuster der zum ║
- ║Abschluß verwendeten Taste wird an das rufende Programm zurückgegeben.║
- ║Ob der in der Textvariablen bei der Übergabe vorhandene Text ║
- ║korrigiert werden soll oder ob ein neuer Text eingelesen werden soll ║
- ║ergibt sich aus dem Flag, das im letzten Parameter übergeben wird. ║
- ║In dem Flag wird zurückgegeben, ob der gelesene bzw. korrigierte Text ║
- ║nur aus Blanks besteht oder nicht. ║
- ╟──────────────────────────────────────────────────────────────────────╢
- ║Parameter: ║
- ║CHARACTERSTRING Zu lesenden oder zu korrigierender Text. ║
- ║ Return: gelesener oder korrigierter Text. ║
- ║INTEGER Maximale Anzahl der zu bearbeitenden Zeichen ║
- ║ 1 bis 80). ║
- ║INTEGER Bildschirmzeile in die der zu bearbeitende Text ║
- ║ angezeigt werden soll (1 bis 25). ║
- ║INTEGER Bildschirmspalte in die der zu bearbeitende Text ║
- ║ angezeigt werden soll (1 bis 80) ║
- ║INTEGER Farbattribut; Siehe Anhang: "Farbattribute". Wenn ein║
- ║ Monochrome-Monitor erkannt wird, erfolgt die Ausgabe ║
- ║ im Schwarz/weiß-Modus. ║
- ║ Bit 0 - 2: Vordergrundfarbe ║
- ║ Bit 3 : Intensität der Vordergundfarbe ║
- ║ Bit 4 - 6: Hintergrundfarbe ║
- ║ Bit 7 : blinken ║
- ║INTEGER Bitmuster für Abschlußtasten und Sonderfunktion ║
- ║ 1: Text hinter Korrekturfeld löschen ║
- ║ 2: <Cursor rechts>-Taste ║
- ║ 4: <Cursor links>-Taste ║
- ║ 8: <Cursor aufwärts>-Taste ║
- ║ 16: <Cursor abwärts>-Taste ║
- ║ 32: <Bild aufwärts>-Taste ║
- ║ 64: <Bild abwärts>-Taste ║
- ║ 128: <Tabulator rechts>-Taste ║
- ║ 256: <Tabulator links>-Taste ║
- ║ 512: <Escape>-Taste ║
- ║ 1024: <F1>-Taste ║
- ║ 2048: <F2>-Taste ║
- ║ 4096: <F3>-Taste ║
- ║ 8192: <F4>-Taste ║
- ║ 16384: <F5>-Taste ║
- ║ 32768: <F6>-Taste ║
- ║ 65536: <F7>-Taste ║
- ║ 131072: <F8>-Taste ║
- ║ 262144: <F9>-Taste ║
- ║ 524288: <F10>-Taste ║
-
-
- Seite 9
-
-
- ║ Die Funktionen können durch Addition miteinander ║
- ║ verknüpft werden. ║
- ║ Return: Bitmuster der Abschlußtaste ( <Return> = 1 ) ║
- ║INTEGER Flag, das aussagt, ob neuer Text eingelesen werden ║
- ║ soll oder ob vorhandener Text korrigiert werden soll.║
- ║ 0: Neuen Text einlesen ║
- ║ 1: Vorhandenen Text korrigieren. Vorhandene Zeichen ║
- ║ werden überschrieben oder werden übernommen. ║
- ║ 2: Vorhandenen Text erhalten, bis das erste Zeichen ║
- ║ geschrieben wird. ║
- ║ Return: Flag, das anzeigt, ob der Text nur aus Blanks║
- ║ und Nullcharacters besteht oder nicht. ║
- ║ 0: Text besteht nur aus Blanks oder Nullcharacters ║
- ║ 1: Text besteht aus Zeichen ║
- ╟──────────────────────────────────────────────────────────────────────╢
- ║Subroutinen: ATTCOL,CTBUF ║
- ╟──────────────────────────────────────────────────────────────────────╢
- ║Beispiele: CALL AREAD (TEXTVA,20,10,20,23,0,0) ║
- ║ CALL AREAD (TESTVA,20,10,20,23,31,1) ║
- ║ In der ersten Programmzeile wird das Einlesen, in der║
- ║ zweiten die Korrektur des Textes im Characterstring ║
- ║ TESTVA vorgenommen. Die Bildschirmausgabe erfolgt ║
- ║ jeweils in der 10. Zeile und ab der 20. Bildschirm- ║
- ║ spalte in hellgrauer Farbe auf blauem Hintergrund. ║
- ║ Der hinter dem Textfeld positionierte Text bleibt im ║
- ║ ersten Fall erhalten, im zweiten Beispiel wird er ║
- ║ gelöscht. Außerdem ist der Abschluß der Textkorrektur║
- ║ im zweiten Beispiel durch alle Cursortasten möglich. ║
- ╚══════════════════════════════════════════════════════════════════════╝
-
-
- Seite 10
-
-
- ╔=═════════════════════════════════════════════════════════════════════╗
- ║Beschreibung der Subroutine ║
- ║AREADZ (TEXT,LAN,ZULZ,LANZ,ZEI,SP,COL,SON,ART) ║
- ║Die Subroutine ermöglicht das Lesen oder die Korrektur eines ║
- ║Textstrings von der Tastatur aus. Die Tasten des Cursorblocks können ║
- ║dabei mitbenutzt werden. Der Text wird positioniert in einem farb- ║
- ║inversen Feld, nach dem Betätigen einer Abschlußtaste in einem ║
- ║farbnormalen Feld am Bildschirm dargestellt. In der selben Zeile ║
- ║hinter dem Textfeld positionierte Texte (z. B. aus der Subroutine ║
- ║FMEL) können bis zum Ende der Zeile gelöscht werden. Außer der ║
- ║<Return>-Taste können weitere Tasten zum Abschluß der Routine benutzt ║
- ║werden, die als Bitmuster übergeben werden. Das Bitmuster der zum ║
- ║Abschluß verwendeten Taste wird an das rufende Programm zurückgegeben.║
- ║Ob der in der Textvariablen bei der Übergabe vorhandene Text ║
- ║korrigiert werden soll oder ob ein neuer Text eingelesen werden soll ║
- ║ergibt sich aus dem Flag, das im letzten Parameter übergeben wird. ║
- ║In dem Flag wird zurückgegeben, ob der gelesene bzw. korrigierte Text ║
- ║nur aus Blanks besteht oder nicht. Im zweiten Parameter werden die ║
- ║zur Korrektur oder zum Lesen zugelassenen Zeichen als String ║
- ║an die Routine übergeben. ║
- ╟──────────────────────────────────────────────────────────────────────╢
- ║Parameter: ║
- ║CHARACTERSTRING Zu lesenden oder zu korrigierender Text. ║
- ║ Return: gelesener oder korrigierter Text. ║
- ║INTEGER Maximale Anzahl der zu bearbeitenden Zeichen ║
- ║ 1 bis 80). ║
- ║CHARACTERSTRING Zum Lesen oder Korrigieren zugelassene Zeichen. ║
- ║INTEGER Anzahl der zugelassenen Zeichen. ║
- ║INTEGER Bildschirmzeile in die der zu bearbeitende Text ║
- ║ angezeigt werden soll (1 bis 25). ║
- ║INTEGER Bildschirmspalte in die der zu bearbeitende Text ║
- ║ angezeigt werden soll (1 bis 80) ║
- ║INTEGER Farbattribut; Siehe Anhang: "Farbattribute". Wenn ein║
- ║ Monochrome-Monitor erkannt wird, erfolgt die Ausgabe ║
- ║ im Schwarz/weiß-Modus. ║
- ║ Bit 0 - 2: Vordergrundfarbe ║
- ║ Bit 3 : Intensität der Vordergundfarbe ║
- ║ Bit 4 - 6: Hintergrundfarbe ║
- ║ Bit 7 : blinken ║
- ║INTEGER Bitmuster für Abschlußtasten und Sonderfunktion ║
- ║ 1: Text hinter Korrekturfeld löschen ║
- ║ 2: <Cursor rechts>-Taste ║
- ║ 4: <Cursor links>-Taste ║
- ║ 8: <Cursor aufwärts>-Taste ║
- ║ 16: <Cursor abwärts>-Taste ║
- ║ 32: <Bild aufwärts>-Taste ║
- ║ 64: <Bild abwärts>-Taste ║
- ║ 128: <Tabulator rechts>-Taste ║
- ║ 256: <Tabulator links>-Taste ║
- ║ 512: <Escape>-Taste ║
- ║ 1024: <F1>-Taste ║
- ║ 2048: <F2>-Taste ║
- ║ 4096: <F3>-Taste ║
- ║ 8192: <F4>-Taste ║
- ║ 16384: <F5>-Taste ║
-
-
- Seite 11
-
-
- ║ 32768: <F6>-Taste ║
- ║ 65536: <F7>-Taste ║
- ║ 131072: <F8>-Taste ║
- ║ 262144: <F9>-Taste ║
- ║ 524288: <F10>-Taste ║
- ║ Die Funktionen können durch Addition miteinander ║
- ║ verknüpft werden. ║
- ║ Return: Bitmuster der Abschlußtaste ( <Return> = 1 ) ║
- ║INTEGER Flag, das aussagt, ob neuer Text eingelesen werden ║
- ║ soll oder ob vorhandener Text korrigiert werden soll.║
- ║ 0: Neuen Text einlesen ║
- ║ 1: Vorhandenen Text korrigieren. Vorhandene Zeichen ║
- ║ werden überschrieben oder werden übernommen. ║
- ║ 2: Vorhandenen Text erhalten, bis das erste Zeichen ║
- ║ geschrieben wird. ║
- ║ Return: Flag, das anzeigt, ob der Text nur aus Blanks║
- ║ und Nullcharacters besteht oder nicht. ║
- ║ 0: Text besteht nur aus Blanks oder Nullcharacters ║
- ║ 1: Text besteht aus Zeichen ║
- ╟──────────────────────────────────────────────────────────────────────╢
- ║Subroutinen: ATTCOL,CTBUF ║
- ╟──────────────────────────────────────────────────────────────────────╢
- ║Beispiele: CALL AREADZ (TEXTVA,20,'1234567890',13,10,20,23,0,0) ║
- ║ CALL AREADZ (TESTVA,20,'ABC',3,10,20,23,31,1) ║
- ║ In der ersten Programmzeile wird das Einlesen, in der║
- ║ zweiten die Korrektur des Textes im Characterstring ║
- ║ TESTVA vorgenommen. Die Bildschirmausgabe erfolgt ║
- ║ jeweils in der 10. Zeile und ab der 20. Bildschirm- ║
- ║ spalte in hellgrauer Farbe auf blauem Hintergrund. ║
- ║ Der hinter dem Textfeld positionierte Text bleibt im ║
- ║ ersten Fall erhalten, im zweiten Beispiel wird er ║
- ║ gelöscht. Außerdem ist der Abschluß der Textkorrektur║
- ║ im zweiten Beispiel durch alle Cursortasten möglich. ║
- ║ Im ersten Beispiel sind nur numerische Zeichen ║
- ║ zugelassen, im zweiten Beispiel nur die Zeichen ABC. ║
- ╚══════════════════════════════════════════════════════════════════════╝
-
-
- Seite 12
-
-
- ╔==════════════════════════════════════════════════════════════════════╗
- ║Beschreibung der Subroutine AREADP (TEXT,LAN,ZEI,SP,POS,COL,SON,ART) ║
- ║Die Subroutine ermöglicht das Lesen oder die Korrektur eines ║
- ║Textstrings von der Tastatur aus. Die Tasten des Cursorblocks können ║
- ║dabei mitbenutzt werden. Der Text wird positioniert in einem farb- ║
- ║inversen Feld, nach dem Betätigen einer Abschlußtaste in einem ║
- ║farbnormalen Feld am Bildschirm dargestellt. In der selben Zeile ║
- ║hinter dem Textfeld positionierte Texte (z. B. aus der Subroutine ║
- ║FMEL) können bis zum Ende der Zeile gelöscht werden. Außer der ║
- ║<Return>-Taste können weitere Tasten zum Abschluß der Routine benutzt ║
- ║werden, die als Bitmuster übergeben werden. Das Bitmuster der zum ║
- ║Abschluß verwendeten Taste wird an das rufende Programm zurückgegeben.║
- ║Ob der in der Textvariablen bei der Übergabe vorhandene Text ║
- ║korrigiert werden soll oder ob ein neuer Text eingelesen werden soll ║
- ║ergibt sich aus dem Flag, das im letzten Parameter übergeben wird. ║
- ║In dem Flag wird zurückgegeben, ob der gelesene bzw. korrigierte Text ║
- ║nur aus Blanks besteht oder nicht. Die relative Startposition des ║
- ║Cursors wird der Subroutine in der Variablen POS mitgeteilt. Nach ║
- ║dem Abschluß der Subroutine steht darin die aktuelle relative Position║
- ║des Cursors. ║
- ╟──────────────────────────────────────────────────────────────────────╢
- ║Parameter: ║
- ║CHARACTERSTRING Zu lesenden oder zu korrigierender Text. ║
- ║ Return: gelesener oder korrigierter Text. ║
- ║INTEGER Maximale Anzahl der zu bearbeitenden Zeichen ║
- ║ 1 bis 80). ║
- ║INTEGER Bildschirmzeile in die der zu bearbeitende Text ║
- ║ angezeigt werden soll (1 bis 25). ║
- ║INTEGER Bildschirmspalte in die der zu bearbeitende Text ║
- ║ angezeigt werden soll (1 bis 80) ║
- ║INTEGER Relative Startposition des Cursors. ║
- ║ Return: aktuelle relative Position des Cursors. ║
- ║INTEGER Farbattribut; Siehe Anhang: "Farbattribute". Wenn ein║
- ║ Monochrome-Monitor erkannt wird, erfolgt die Ausgabe ║
- ║ im Schwarz/weiß-Modus. ║
- ║ Bit 0 - 2: Vordergrundfarbe ║
- ║ Bit 3 : Intensität der Vordergundfarbe ║
- ║ Bit 4 - 6: Hintergrundfarbe ║
- ║ Bit 7 : blinken ║
- ║INTEGER Bitmuster für Abschlußtasten und Sonderfunktion ║
- ║ 1: Text hinter Korrekturfeld löschen ║
- ║ 2: <Cursor rechts>-Taste ║
- ║ 4: <Cursor links>-Taste ║
- ║ 8: <Cursor aufwärts>-Taste ║
- ║ 16: <Cursor abwärts>-Taste ║
- ║ 32: <Bild aufwärts>-Taste ║
- ║ 64: <Bild abwärts>-Taste ║
- ║ 128: <Tabulator rechts>-Taste ║
- ║ 256: <Tabulator links>-Taste ║
- ║ 512: <Escape>-Taste ║
- ║ 1024: <F1>-Taste ║
- ║ 2048: <F2>-Taste ║
- ║ 4096: <F3>-Taste ║
- ║ 8192: <F4>-Taste ║
- ║ 16384: <F5>-Taste ║
-
-
- Seite 13
-
-
- ║ 32768: <F6>-Taste ║
- ║ 65536: <F7>-Taste ║
- ║ 131072: <F8>-Taste ║
- ║ 262144: <F9>-Taste ║
- ║ 524288: <F10>-Taste ║
- ║ Die Funktionen können durch Addition miteinander ║
- ║ verknüpft werden. ║
- ║ Return: Bitmuster der Abschlußtaste ( <Return> = 1 ) ║
- ║INTEGER Flag, das aussagt, ob neuer Text eingelesen werden ║
- ║ soll oder ob vorhandener Text korrigiert werden soll.║
- ║ 0: Neuen Text einlesen ║
- ║ 1: Vorhandenen Text korrigieren. Vorhandene Zeichen ║
- ║ werden überschrieben oder werden übernommen. ║
- ║ 2: Vorhandenen Text erhalten, bis das erste Zeichen ║
- ║ geschrieben wird. ║
- ║ Return: Flag, das anzeigt, ob der Text nur aus Blanks║
- ║ und Nullcharacters besteht oder nicht. ║
- ║ 0: Text besteht nur aus Blanks oder Nullcharacters ║
- ║ 1: Text besteht aus Zeichen ║
- ╟──────────────────────────────────────────────────────────────────────╢
- ║Subroutinen: ATTCOL,CTBUF ║
- ╟──────────────────────────────────────────────────────────────────────╢
- ║Beispiele: CALL AREADP (TEXTVA,20,10,20,5,23,0,0) ║
- ║ CALL AREADP (TESTVA,20,10,20,5,23,31,1) ║
- ║ In der ersten Programmzeile wird das Einlesen, in der║
- ║ zweiten die Korrektur des Textes im Characterstring ║
- ║ TESTVA vorgenommen. Die Bildschirmausgabe erfolgt ║
- ║ jeweils in der 10. Zeile und ab der 20. Bildschirm- ║
- ║ spalte in hellgrauer Farbe auf blauem Hintergrund. ║
- ║ Der hinter dem Textfeld positionierte Text bleibt im ║
- ║ ersten Fall erhalten, im zweiten Beispiel wird er ║
- ║ gelöscht. Außerdem ist der Abschluß der Textkorrektur║
- ║ im zweiten Beispiel durch alle Cursortasten möglich. ║
- ║ In beiden Beispielen steht der Cursor anfangs auf dem║
- ║ 5. Zeichen relativ zum Anfang des Textfeldes. ║
- ╚══════════════════════════════════════════════════════════════════════╝
-
-
- Seite 14
-
-
- ╔===═══════════════════════════════════════════════════════════════════╗
- ║Beschreibung der Subroutine AREADM (TEXT,LAN,ZEI,COL,SON,ART) ║
- ║Die Subroutine ermöglicht das Lesen oder die Korrektur eines ║
- ║Textstrings von der Tastatur aus. Die Tasten des Cursorblocks können ║
- ║dabei mitbenutzt werden. Der Text wird positioniert in einem farb- ║
- ║inversen Feld, nach dem Betätigen einer Abschlußtaste in einem ║
- ║farbnormalen Feld am Bildschirm dargestellt. In der selben Zeile ║
- ║hinter dem Textfeld positionierte Texte (z. B. aus der Subroutine ║
- ║FMEL) können bis zum Ende der Zeile gelöscht werden. Außer der ║
- ║<Return>-Taste können weitere Tasten zum Abschluß der Routine benutzt ║
- ║werden, die als Bitmuster übergeben werden. Das Bitmuster der zum ║
- ║Abschluß verwendeten Taste wird an das rufende Programm zurückgegeben.║
- ║Ob der in der Textvariablen bei der Übergabe vorhandene Text ║
- ║korrigiert werden soll oder ob ein neuer Text eingelesen werden soll ║
- ║ergibt sich aus dem Flag, das im letzten Parameter übergeben wird. ║
- ║In dem Flag wird zurückgegeben, ob der gelesene bzw. korrigierte Text ║
- ║nur aus Blanks besteht oder nicht. Das Lesefeld wird mittenzentriert ║
- ║in der Bildschirmzeile dargestellt. ║
- ╟──────────────────────────────────────────────────────────────────────╢
- ║Parameter: ║
- ║CHARACTERSTRING Zu lesenden oder zu korrigierender Text. ║
- ║ Return: gelesener oder korrigierter Text. ║
- ║INTEGER Maximale Anzahl der zu bearbeitenden Zeichen ║
- ║ 1 bis 80). ║
- ║INTEGER Bildschirmzeile in die der zu bearbeitende Text ║
- ║ angezeigt werden soll (1 bis 25). ║
- ║INTEGER Farbattribut; Siehe Anhang: "Farbattribute". Wenn ein║
- ║ Monochrome-Monitor erkannt wird, erfolgt die Ausgabe ║
- ║ im Schwarz/weiß-Modus. ║
- ║ Bit 0 - 2: Vordergrundfarbe ║
- ║ Bit 3 : Intensität der Vordergundfarbe ║
- ║ Bit 4 - 6: Hintergrundfarbe ║
- ║ Bit 7 : blinken ║
- ║INTEGER Bitmuster für Abschlußtasten und Sonderfunktion ║
- ║ 1: Text hinter Korrekturfeld löschen ║
- ║ 2: <Cursor rechts>-Taste ║
- ║ 4: <Cursor links>-Taste ║
- ║ 8: <Cursor aufwärts>-Taste ║
- ║ 16: <Cursor abwärts>-Taste ║
- ║ 32: <Bild aufwärts>-Taste ║
- ║ 64: <Bild abwärts>-Taste ║
- ║ 128: <Tabulator rechts>-Taste ║
- ║ 256: <Tabulator links>-Taste ║
- ║ 512: <Escape>-Taste ║
- ║ 1024: <F1>-Taste ║
- ║ 2048: <F2>-Taste ║
- ║ 4096: <F3>-Taste ║
- ║ 8192: <F4>-Taste ║
- ║ 16384: <F5>-Taste ║
- ║ 32768: <F6>-Taste ║
- ║ 65536: <F7>-Taste ║
- ║ 131072: <F8>-Taste ║
- ║ 262144: <F9>-Taste ║
- ║ 524288: <F10>-Taste ║
- ║ Die Funktionen können durch Addition miteinander ║
-
-
- Seite 15
-
-
- ║ verknüpft werden. ║
- ║ Return: Bitmuster der Abschlußtaste ( <Return> = 1 ) ║
- ║INTEGER Flag, das aussagt, ob neuer Text eingelesen werden ║
- ║ soll oder ob vorhandener Text korrigiert werden soll.║
- ║ 0: Neuen Text einlesen ║
- ║ 1: Vorhandenen Text korrigieren. Vorhandene Zeichen ║
- ║ werden überschrieben oder werden übernommen. ║
- ║ 2: Vorhandenen Text erhalten, bis das erste Zeichen ║
- ║ geschrieben wird. ║
- ║ Return: Flag, das anzeigt, ob der Text nur aus Blanks║
- ║ und Nullcharacters besteht oder nicht. ║
- ║ 0: Text besteht nur aus Blanks oder Nullcharacters ║
- ║ 1: Text besteht aus Zeichen ║
- ╟──────────────────────────────────────────────────────────────────────╢
- ║Subroutinen: ATTCOL,CTBUF ║
- ╟──────────────────────────────────────────────────────────────────────╢
- ║Beispiele: CALL AREADM (TEXTVA,20,10,23,0,0) ║
- ║ CALL AREADM (TESTVA,20,10,23,31,1) ║
- ║ In der ersten Programmzeile wird das Einlesen, in der║
- ║ zweiten die Korrektur des Textes im Characterstring ║
- ║ TESTVA vorgenommen. Die Bildschirmausgabe erfolgt ║
- ║ jeweils in der 10. Zeile mittenzentriert in hell- ║
- ║ grauer Farbe auf blauem Hintergrund. Der hinter dem ║
- ║ Textfeld positionierte Text bleibt im ersten Fall ║
- ║ erhalten, im zweiten Beispiel wird er gelöscht. ║
- ║ Außerdem ist der Abschluß der Textkorrektur im ║
- ║ zweiten Beispiel durch alle Cursortasten möglich. ║
- ╚══════════════════════════════════════════════════════════════════════╝
-
-
- Seite 16
-
-
- ╔══════════════════════════════════════════════════════════════════════╗
- ║Beschreibung der Subroutine AWRI (TEXT,ANZ,ZEI,SP,COL) ║
- ║Die Subroutine ermöglicht das positionierte Schreiben eines Text- ║
- ║strings auf den Bildschirm. ║
- ╟──────────────────────────────────────────────────────────────────────╢
- ║Parameter: ║
- ║CHARACTERSTRING zu schreibender Text; hinter dem letzten zu ║
- ║ zu schreibenden Zeichen kann ein Null-Character ║
- ║ als Terminator angefügt werden. ║
- ║INTEGER Anzahl der zu schreibenden Zeichen; es werden soviele║
- ║ Zeichen geschrieben bis entweder die Anzahl erreicht ║
- ║ ist oder ein Null-Character gefunden wurde oder die ║
- ║ Bildschirmspalte 80 beschrieben worden ist. ║
- ║INTEGER Zeile in die geschrieben werden soll. Der Wert darf ║
- ║ zwischen 1 und 25 liegen. ║
- ║INTEGER Spalte ab geschrieben werden soll; Der Wert darf ║
- ║ zwischen 1 und 80 liegen. ║
- ║INTEGER Farbattribut; Siehe Anhang: "Farbattribute". Wenn ein║
- ║ Monochrome-Monitor erkannt wird, erfolgt die Ausgabe ║
- ║ im Schwarz/weiß-Modus. ║
- ║ Bit 0 - 2: Vordergrundfarbe ║
- ║ Bit 3 : Intensität der Vordergundfarbe ║
- ║ Bit 4 - 6: Hintergrundfarbe ║
- ║ Bit 7 : blinken ║
- ╟──────────────────────────────────────────────────────────────────────╢
- ║Subroutinen: ATTCOL ║
- ╟──────────────────────────────────────────────────────────────────────╢
- ║Beispiele: CALL AWRI ('Testtext'//CHAR(0),80,10,20,23) ║
- ║ CALL AWRI ('Testtext',8,10,20,23) ║
- ║ Beide Programmzeilen veranlassen die Ausgabe des ║
- ║ Wortes Testtext in der 10. Zeile des Bildschirms. ║
- ║ Die Ausgabe erfolgt ab der 20. Bildschirmspalte in ║
- ║ hellgrauer Farbe auf blauem Hintergrund. ║
- ╚══════════════════════════════════════════════════════════════════════╝
-
-
- Seite 17
-
-
- ╔=═════════════════════════════════════════════════════════════════════╗
- ║Beschreibung der Subroutine AWRIM (TEXT,ANZ,ZEI,COL) ║
- ║Die Subroutine ermöglicht das positionierte mittenzentrierte Schreiben║
- ║eines Textstrings auf den Bildschirm. ║
- ╟──────────────────────────────────────────────────────────────────────╢
- ║Parameter: ║
- ║CHARACTERSTRING zu schreibender Text; hinter dem letzten zu ║
- ║ zu schreibenden Zeichen kann ein Null-Character ║
- ║ als Terminator angefügt werden. ║
- ║INTEGER Anzahl der zu schreibenden Zeichen; es werden soviele║
- ║ Zeichen geschrieben bis entweder die Anzahl erreicht ║
- ║ ist oder ein Null-Character gefunden wurde oder die ║
- ║ Bildschirmspalte 80 beschrieben worden ist. ║
- ║INTEGER Zeile in die geschrieben werden soll. Der Wert darf ║
- ║ zwischen 1 und 25 liegen. ║
- ║INTEGER Farbattribut; Siehe Anhang: "Farbattribute". Wenn ein║
- ║ Monochrome-Monitor erkannt wird, erfolgt die Ausgabe ║
- ║ im Schwarz/weiß-Modus. ║
- ║ Bit 0 - 2: Vordergrundfarbe ║
- ║ Bit 3 : Intensität der Vordergundfarbe ║
- ║ Bit 4 - 6: Hintergrundfarbe ║
- ║ Bit 7 : blinken ║
- ╟──────────────────────────────────────────────────────────────────────╢
- ║Subroutinen: ATTCOL ║
- ╟──────────────────────────────────────────────────────────────────────╢
- ║Beispiele: CALL AWRIM ('Testtext'//CHAR(0),80,10,23) ║
- ║ CALL AWRIM ('Testtext',8,10,23) ║
- ║ Beide Programmzeilen veranlassen die Ausgabe des ║
- ║ Wortes Testtext in der 10. Zeile des Bildschirms. ║
- ║ Die Ausgabe erfolgt mittenzentriert in hellgrauer ║
- ║ Farbe auf blauem Hintergrund. ║
- ╚══════════════════════════════════════════════════════════════════════╝
-
-
- Seite 18
-
-
- ╔═════════════════════════════════════════════════════════════════════╗
- ║Beschreibung der Subroutine IREAD (INT,FOR,ZEI,SP,COL,SON,ART) ║
- ║Die Subroutine ermöglicht die Korrektur oder das Lesen eines Integer-║
- ║wertes vom Bildschirm. Die Tasten des Cursorblocks können dazu ║
- ║mitbenutzt werden. Die Darstellung erfolgt mit führenden Nullen. Wenn║
- ║der Integerwert zu groß für das Darstellungsfeld ist, wird es mit dem║
- ║Zeichen "#" gefüllt. Der Wert wird während der Korrektur farbinvers, ║
- ║nach der Korrektur farbnormal dargestellt. In der selben Zeile hinter║
- ║dem Korrekturfeld positionierte Texte (z. B. aus der Subroutine FMEL)║
- ║können bis zum Ende der Zeile überschrieben werden. Neben der ║
- ║<Return>-Tasten können weitere Tasten zum Abschluß der Routine ║
- ║bestimmt werden. Ob der bei der Übergabe vorhandene Wert korrigiert ║
- ║werden soll, oder ob ein neuer Wert einzulesen ist, ergibt sich aus ║
- ║dem Flag, das im letzten Parameter übergeben wird. Im dem Flag wird ║
- ║zurückgegeben, ob sich bei der Übergabe ein Integerwert im Lese/ ║
- ║Korrekturfeld befindet oder nicht. ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Parameter: ║
- ║INTEGER Zu korrigierender Integerwert. ║
- ║INTEGER Anzahl der auszuschreibenden Ziffern des ║
- ║ Integerwertes (1 bis 11). ║
- ║INTEGER Bildschirmzeile in der der Integerwert korrigiert ║
- ║ werden soll (1 bis 25). ║
- ║INTEGER Bildschirmspalte ab der der Integerwert korrigiert ║
- ║ werden soll (1 bis 80). ║
- ║INTEGER Farbattribut; Siehe Anhang: "Farbattribute". Wenn ║
- ║ ein Monochrome-Monitor erkannt wird, erfolgt die ║
- ║ Ausgabe im Schwarz/weiß-Modus. ║
- ║ Bit 0 - 2: Vordergrundfarbe ║
- ║ Bit 3 : Intensität der Vordergundfarbe ║
- ║ Bit 4 - 6: Hintergrundfarbe ║
- ║ Bit 7 : blinken ║
- ║INTEGER Bitmuster für Abschlußtasten und Sonderfunktion ║
- ║ 1: Text hinter Korrekturfeld löschen ║
- ║ 2: <Cursor rechts>-Taste ║
- ║ 4: <Cursor links>-Taste ║
- ║ 8: <Cursor aufwärts>-Taste ║
- ║ 16: <Cursor abwärts>-Taste ║
- ║ 32: <Bild aufwärts>-Taste ║
- ║ 64: <Bild abwärts>-Taste ║
- ║ 128: <Tabulator rechts>-Taste ║
- ║ 256: <Tabulator links>-Taste ║
- ║ 512: <Escape>-Taste ║
- ║ 1024: <F1>-Taste ║
- ║ 2048: <F2>-Taste ║
- ║ 4096: <F3>-Taste ║
- ║ 8192: <F4>-Taste ║
- ║ 16384: <F5>-Taste ║
- ║ 32768: <F6>-Taste ║
- ║ 65536: <F7>-Taste ║
- ║ 131072: <F8>-Taste ║
- ║ 262144: <F9>-Taste ║
- ║ 524288: <F10>-Taste ║
- ║ Die Funktionen können durch Addition miteinander ║
- ║ verknüpft werden. ║
-
-
- Seite 19
-
-
- ║ Return: Bitmuster der Abschlußtaste ( <Return> = 1 )║
- ║INTEGER Flag, das aussagt, ob neuer Wert eingelesen werden ║
- ║ soll oder ob vorhandener Wert korrigiert werden ║
- ║ soll. ║
- ║ 0: Neuen Wert einlesen ║
- ║ 1: Vorhandenen Wert korrigieren. Vorhandene Ziffern ║
- ║ werden überschrieben oder werden übernommen. ║
- ║ 2: Vorhandenen Wert erhalten, bis die erste Zifer ║
- ║ geschrieben wird. ║
- ║ Return: Flag, das anzeigt, ob der Wert im Lese/ ║
- ║ Korrekturfeld vorhanden war oder nicht. ║
- ║ 0: Wert war vorhanden ║
- ║ 1: Es waren keinen Ziffern im Wertefeld ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Subroutinen: AREAD, AWRI ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Beispiel: CALL IREAD (IWERT,6,10,20,23,1,1) ║
- ║ Die Programmzeile veranlaßt die Korrektur eines in ║
- ║ der Integervariablen IWERT enthaltenen Wertes. Die ║
- ║ Darstellung erfolgt sechsstellig mit führenden ║
- ║ Nullen in der 10. Zeile ab Spalte 20 in hellgrauer ║
- ║ Farbe auf blauem Hintergrund. Hinter dem ║
- ║ Korrekturfeld positionierter Text wird mit Blanks ║
- ║ überschrieben. ║
- ╚═════════════════════════════════════════════════════════════════════╝
-
-
- Seite 20
-
-
- ╔═════════════════════════════════════════════════════════════════════╗
- ║Beschreibung der Subroutine IWRI (INT,ANZ,ZEI,SP,COL) ║
- ║Die Subroutine ermöglicht das positionierte Schreiben eines ║
- ║Integerwertes auf den Bildschirm. Die Darstellung erfolgt mit ║
- ║führenden Nullen. Wenn der Integerwert zu groß für das Darstellungs- ║
- ║feld ist, wird es mit dem Zeichen "#" gefüllt. ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Parameter: ║
- ║INTEGER Zu schreibender Integerwert. ║
- ║INTEGER Anzahl der auszuschreibenden Ziffern des ║
- ║ Integerwertes (1 bis 12). ║
- ║INTEGER Bildschirmzeile in die der Integerwert geschrieben ║
- ║ werden soll (1 bis 25). ║
- ║INTEGER Bildschirmspalte ab der der Integerwert geschrieben ║
- ║ werden soll (1 bis 80). ║
- ║INTEGER Farbattribut; Siehe Anhang: "Farbattribute". Wenn ║
- ║ ein Monochrome-Monitor erkannt wird, erfolgt die ║
- ║ Ausgabe im Schwarz/weiß-Modus. ║
- ║ Bit 0 - 2: Vordergrundfarbe ║
- ║ Bit 3 : Intensität der Vordergundfarbe ║
- ║ Bit 4 - 6: Hintergrundfarbe ║
- ║ Bit 7 : blinken ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Subroutinen: AWRI ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Beispiel: CALL IWRI (IWERT,6,10,20,23) ║
- ║ Die Programmzeile veranlaßt das Ausschreiben des ║
- ║ in der Integerwariablen IWERT enthaltenen Wertes ║
- ║ sechsstellig, gegebenenfalls mit führenden Nullen. ║
- ║ Die Bildschirmausgabe erfolgt in der 10. Zeile ab ║
- ║ der 20. Spalte in hellgrauer Farbe auf blauem ║
- ║ Hintergrund. ║
- ╚═════════════════════════════════════════════════════════════════════╝
-
-
- Seite 21
-
-
- ╔═════════════════════════════════════════════════════════════════════╗
- ║Beschreibung der Subroutine IWRIB (INT,ANZ,ZEI,SP,COL) ║
- ║Die Subroutine ermöglicht das positionierte Schreiben eines ║
- ║Integerwertes auf den Bildschirm. Die Darstellung erfolgt mit ║
- ║führenden Blanks. Wenn der Integerwert zu groß für das Darstellungs- ║
- ║feld ist, wird es mit dem Zeichen "#" gefüllt. ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Parameter: ║
- ║INTEGER Zu schreibender Integerwert. ║
- ║INTEGER Anzahl der auszuschreibenden Ziffern des ║
- ║ Integerwertes (1 bis 12). ║
- ║INTEGER Bildschirmzeile in die der Integerwert geschrieben ║
- ║ werden soll (1 bis 25). ║
- ║INTEGER Bildschirmspalte ab der der Integerwert geschrieben ║
- ║ werden soll (1 bis 80). ║
- ║INTEGER Farbattribut; Siehe Anhang: "Farbattribute". Wenn ║
- ║ ein Monochrome-Monitor erkannt wird, erfolgt die ║
- ║ Ausgabe im Schwarz/weiß-Modus. ║
- ║ Bit 0 - 2: Vordergrundfarbe ║
- ║ Bit 3 : Intensität der Vordergundfarbe ║
- ║ Bit 4 - 6: Hintergrundfarbe ║
- ║ Bit 7 : blinken ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Subroutinen: AWRI ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Beispiel: CALL IWRIB (IWERT,6,10,20,23) ║
- ║ Die Programmzeile veranlaßt das Ausschreiben des ║
- ║ in der Integerwariablen IWERT enthaltenen Wertes ║
- ║ sechsstellig, gegebenenfalls mit führenden Blanks. ║
- ║ Die Bildschirmausgabe erfolgt in der 10. Zeile ab ║
- ║ der 20. Spalte in hellgrauer Farbe auf blauem ║
- ║ Hintergrund. ║
- ╚═════════════════════════════════════════════════════════════════════╝
-
-
- Seite 22
-
-
- ╔═════════════════════════════════════════════════════════════════════╗
- ║Beschreibung der Subroutine RREAD (REAL,FOR,ZEI,SP,COL,SON,ART) ║
- ║Die Subroutine ermöglicht die Korrektur oder das Lesen eines Real- ║
- ║wertes am Bildschirm. Die Tasten des Cursorblocks können dazu ║
- ║mitbenutzt werden. Die Darstellung erfolgt mit führenden Nullen. Wenn║
- ║der Realwert zu groß für das Wertefeld ist, wird es mit dem Zeichen ║
- ║"#" gefüllt. Der Wert wird während der Bearbeitung farbinvers, danach║
- ║farbnormal am Bildschirm dargestellt. In der selben Zeile hinter dem ║
- ║Wertefeld positionierte Texte (z. B. aus der Subroutine FMEL) können ║
- ║bis zum Ende der Zeile überschrieben werden. Der Dezimalpunkt ist im ║
- ║Wertefeld dem übergebenen Fortran-Format entsprechend gesetzt, er ║
- ║kann jedoch bei der Korrektur überschrieben werden. Die Verwendung ║
- ║eines Kommas anstelle des Dezimalpunktes ist erlaubt. Ungültige ║
- ║Fortran-Formate werden korrigiert zurückgegeben. Neben der <Return>- ║
- ║Taste können weitere Tasten zum Abschluß der Routine bestimmt werden.║
- ║Ob der bei der Übergabe vorhandene Realwert korrigiert werden soll, ║
- ║oder ob ein neuer Wert einzulesen ist, ergibt sich aus dem Flag, das ║
- ║im letzten Parameter übergeben wird. Im dem Flag wird zurückgegeben, ║
- ║ob sich bei der Übergabe ein Realwert im Lese/Korrekturfeld befindet ║
- ║oder nicht. ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Parameter: ║
- ║REAL zu korrigierender oder zu lesender Realwert. ║
- ║REAL Fortran-Format für die Darstellung des Realwertes ║
- ║ (bis 20.9 -10 Vorkommastellen, 9 Nachkommastellen-).║
- ║ Return: korrigiertes Fortran-Format ║
- ║INTEGER Bildschirmzeile in der der Realwert bearbeitet ║
- ║ werden soll (1 bis 25). ║
- ║INTEGER Bildschirmspalte ab der der Realwert bearbeitet ║
- ║ werden soll (1 bis 80). ║
- ║INTEGER Farbattribut; Siehe Anhang: "Farbattribute". Wenn ║
- ║ ein Monochrome-Monitor erkannt wird, erfolgt die ║
- ║ Ausgabe im Schwarz/weiß-Modus. ║
- ║ Bit 0 - 2: Vordergrundfarbe ║
- ║ Bit 3 : Intensität der Vordergundfarbe ║
- ║ Bit 4 - 6: Hintergrundfarbe ║
- ║ Bit 7 : blinken ║
- ║INTEGER Bitmuster für Abschlußtasten und Sonderfunktion ║
- ║ 1: Text hinter Korrekturfeld löschen ║
- ║ 2: <Cursor rechts>-Taste ║
- ║ 4: <Cursor links>-Taste ║
- ║ 8: <Cursor aufwärts>-Taste ║
- ║ 16: <Cursor abwärts>-Taste ║
- ║ 32: <Bild aufwärts>-Taste ║
- ║ 64: <Bild abwärts>-Taste ║
- ║ 128: <Tabulator rechts>-Taste ║
- ║ 256: <Tabulator links>-Taste ║
- ║ 512: <Escape>-Taste ║
- ║ 1024: <F1>-Taste ║
- ║ 2048: <F2>-Taste ║
- ║ 4096: <F3>-Taste ║
- ║ 8192: <F4>-Taste ║
- ║ 16384: <F5>-Taste ║
- ║ 32768: <F6>-Taste ║
- ║ 65536: <F7>-Taste ║
-
-
- Seite 23
-
-
- ║ 131072: <F8>-Taste ║
- ║ 262144: <F9>-Taste ║
- ║ 524288: <F10>-Taste ║
- ║ Die Funktionen können durch Addition miteinander ║
- ║ verknüpft werden. ║
- ║ Return: Bitmuster der Abschlußtaste ( <Return> = 1 )║
- ║INTEGER Flag, das aussagt, ob neuer Wert eingelesen werden ║
- ║ soll oder ob vorhandener Wert korrigiert werden ║
- ║ soll. ║
- ║ 0: Neuen Wert einlesen ║
- ║ 1: Vorhandenen Wert korrigieren. Vorhandene Ziffern ║
- ║ werden überschrieben oder werden übernommen. ║
- ║ 2: Vorhandenen Wert erhalten, bis die erste Zifer ║
- ║ geschrieben wird. ║
- ║ Return: Flag, das anzeigt, ob der Wert im Lese/ ║
- ║ Korrekturfeld vorhanden war oder nicht. ║
- ║ 0: Wert war vorhanden ║
- ║ 1: Es waren keinen Ziffern im Wertefeld ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Subroutinen: AREAD, AWRI, CHAWAL ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Beispiel: CALL AREAD (RWERT,6.2,10,20,23,0,1) ║
- ║ Die Programmzeile veranlaßt die Korrektur eines in ║
- ║ der Realvariablen RWERT enthaltenen Wertes. Die ║
- ║ Darstellung erfolgt mit drei Vorkommastellen und ║
- ║ zwei Nachkommastellen eventuell mit führenden Nullen║
- ║ in der 10. Zeile ab Spalte 20 in hellgrauer Farbe ║
- ║ auf blauem Hintergrund. Hinter dem Korrekturfeld ║
- ║ positionierter Text wird mit Blanks überschrieben. ║
- ╚═════════════════════════════════════════════════════════════════════╝
-
-
- Seite 24
-
-
- ╔═════════════════════════════════════════════════════════════════════╗
- ║Beschreibung der Subroutine RWRI (REAL,FOR,ZEI,SP,COL) ║
- ║Die Subroutine ermöglicht das positionierte Schreiben eines ║
- ║Realwertes auf den Bildschirm. Die Darstellung erfolgt mit führenden ║
- ║Nullen und Dezimalpunkt im angegebenen Fortran-Format. Wenn der ║
- ║Realwert zu groß für das Darstellungsfeld ist, wird es mit dem ║
- ║Zeichen "#" gefüllt. Die letzte Nachkommastelle wird gerundet. Wenn ║
- ║ein ungültiges Fortran-Format übergeben wurde, wird es korrigiert ║
- ║zurückgegeben. ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Parameter: ║
- ║REAL Zu schreibender Realwert. ║
- ║REAL Fortran-Format des zu schreibenden Realwertes ║
- ║ (bis 22.9 -12 Vorkommastellen, 9 Nachkommastellen-).║
- ║ Return: korrigiertes Fortran-Format. ║
- ║INTEGER Bildschirmzeile in die der Realwert geschrieben ║
- ║ werden soll (1 bis 25). ║
- ║INTEGER Bildschirmspalte ab der der Realwert geschrieben ║
- ║ werden soll (1 bis 80). ║
- ║INTEGER Farbattribut; Siehe Anhang: "Farbattribute". Wenn ║
- ║ ein Monochrome-Monitor erkannt wird, erfolgt die ║
- ║ Ausgabe im Schwarz/weiß-Modus. ║
- ║ Bit 0 - 2: Vordergrundfarbe ║
- ║ Bit 3 : Intensität der Vordergundfarbe ║
- ║ Bit 4 - 6: Hintergrundfarbe ║
- ║ Bit 7 : blinken ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Subroutinen: AWRI ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Beispiel: CALL RWRI (RWERT,6.2,10,20,23) ║
- ║ Die Programmzeile veranlaßt das Ausschreiben des ║
- ║ in der Realvariablen RWERT enthaltenen Wertes ║
- ║ mit drei Vorkommastellen und zwei Nachkommastellen. ║
- ║ Die Bildschirmausgabe erfolgt in der 10. Zeile ab ║
- ║ der 20. Spalte in hellgrauer Farbe auf blauem ║
- ║ Hintergrund. ║
- ╚═════════════════════════════════════════════════════════════════════╝
-
-
- Seite 25
-
-
- ╔═════════════════════════════════════════════════════════════════════╗
- ║Beschreibung der Subroutine RWRIB (REAL,FOR,ZEI,SP,COL) ║
- ║Die Subroutine ermöglicht das positionierte Schreiben eines ║
- ║Realwertes auf den Bildschirm. Die Darstellung erfolgt mit führenden ║
- ║Blanks und Dezimalpunkt im angegebenen Fortran-Format. Wenn der ║
- ║Realwert zu groß für das Darstellungsfeld ist, wird es mit dem ║
- ║Zeichen "#" gefüllt. Die letzte Nachkommastelle wird gerundet. Wenn ║
- ║ein ungültiges Fortran-Format übergeben wurde, wird es korrigiert ║
- ║zurückgegeben. ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Parameter: ║
- ║REAL Zu schreibender Realwert. ║
- ║REAL Fortran-Format des zu schreibenden Realwertes ║
- ║ (bis 22.9 -12 Vorkommastellen, 9 Nachkommastellen-).║
- ║ Return: korrigiertes Fortran-Format. ║
- ║INTEGER Bildschirmzeile in die der Realwert geschrieben ║
- ║ werden soll (1 bis 25). ║
- ║INTEGER Bildschirmspalte ab der der Realwert geschrieben ║
- ║ werden soll (1 bis 80). ║
- ║INTEGER Farbattribut; Siehe Anhang: "Farbattribute". Wenn ║
- ║ ein Monochrome-Monitor erkannt wird, erfolgt die ║
- ║ Ausgabe im Schwarz/weiß-Modus. ║
- ║ Bit 0 - 2: Vordergrundfarbe ║
- ║ Bit 3 : Intensität der Vordergundfarbe ║
- ║ Bit 4 - 6: Hintergrundfarbe ║
- ║ Bit 7 : blinken ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Subroutinen: AWRI ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Beispiel: CALL RWRIB (RWERT,6.2,10,20,23) ║
- ║ Die Programmzeile veranlaßt das Ausschreiben des ║
- ║ in der Realvariablen RWERT enthaltenen Wertes ║
- ║ mit drei Vorkommastellen und zwei Nachkommastellen. ║
- ║ Die Bildschirmausgabe erfolgt in der 10. Zeile ab ║
- ║ der 20. Spalte in hellgrauer Farbe auf blauem ║
- ║ Hintergrund. ║
- ╚═════════════════════════════════════════════════════════════════════╝
-
-
- Seite 26
-
-
- ╔══════════════════════════════════════════════════════════════════════╗
- ║Beschreibung der Subroutine DREAD (DATUM,ZEI,SP,COL,SON,ART) ║
- ║Die Subroutine ermöglicht das Lesen oder die Korrektur eines ║
- ║Datumsstrings von der Tastatur aus. Die Tasten des Cursorblocks können║
- ║dabei mitbenutzt werden. Das Datum wird positioniert in einem ║
- ║farbinversen Feld, nach dem Betätigen einer Abschlußtaste in einem ║
- ║farbnormalen Feld am Bildschirm dargestellt. In der selben Zeile ║
- ║hinter dem Datumsfeld positionierte Texte (z. B. aus der Subroutine ║
- ║FMEL) können bis zum Ende der Zeile gelöscht werden. Außer der ║
- ║<Return>-Taste können weitere Tasten zum Abschluß der Routine benutzt ║
- ║werden, die als Bitmuster übergeben werden. Das Bitmuster der zum ║
- ║Abschluß verwendeten Taste wird an das rufende Programm zurückgegeben.║
- ║Während der Eingabe wird eine Plausibilitätsprüfung durchgeführt. ║
- ║Erkannte Eingabefehler werden durch einen 880-Hertz-Ton angezeigt. Die║
- ║Übernahme vom und die Rückgabe zum rufenden Programm erfolgt in der ║
- ║Form JJJJMMTT, die Darstellung am Bildschirm erfolgt in der Form ║
- ║TT.MM.JJJJ. Ob das vom Programm übergebene Datum korrigiert werden ║
- ║soll oder ob ein neues Datum einzulesen ist, ergibt sich aus dem Flag,║
- ║das im letzten Parameter übergeben wird. In dem Flag wird zurück- ║
- ║gegeben, ob das gelesene bzw. korrigierte Datum Null ist oder nicht. ║
- ╟──────────────────────────────────────────────────────────────────────╢
- ║Parameter: ║
- ║INTEGER Datum in der Form JJJJMMTT. ║
- ║ Return: Gelesenes oder korrigiertes Datum in der Form║
- ║ JJJJMMTT. (J = Jahr, M = Monat, T = Tag) ║
- ║INTEGER Bildschirmzeile, in der das zu lesende oder zu ║
- ║ korrigierende Datum angezeigt werden soll (1 bis 25).║
- ║INTEGER Bildschirmspalte, ab der das zu zu lesende oder zu ║
- ║ korrigierende Datum angezeigt werden soll (1 bis 71).║
- ║INTEGER Farbattribut; Siehe Anhang: "Farbattribute". Wenn ein║
- ║ Monochrome-Monitor erkannt wird, erfolgt die Ausgabe ║
- ║ im Schwarz/Weiß-Modus. ║
- ║ Bit 0 - 2: Vordergrundfarbe ║
- ║ Bit 3 : Intensität der Vordergrundfarbe ║
- ║ Bit 4 - 6: Hintergrundfarbe ║
- ║ Bit 7 : blinken ║
- ║INTEGER Bitmuster für Abschlußtasten und Sonderfunktion ║
- ║ 1: Text hinter Korrekturfeld löschen ║
- ║ 2: <Cursor rechts>-Taste ║
- ║ 4: <Cursor links>-Taste ║
- ║ 8: <Cursor aufwärts>-Taste ║
- ║ 16: <Cursor abwärts>-Taste ║
- ║ 32: <Bild aufwärts>-Taste ║
- ║ 64: <Bild abwärts>-Taste ║
- ║ 128: <Tabulator rechts>-Taste ║
- ║ 256: <Tabulator links>-Taste ║
- ║ 512: <Escape>-Taste ║
- ║ 1024: <F1>-Taste ║
- ║ 2048: <F2>-Taste ║
- ║ 4096: <F3>-Taste ║
- ║ 8192: <F4>-Taste ║
- ║ 16384: <F5>-Taste ║
- ║ 32768: <F6>-Taste ║
- ║ 65536: <F7>-Taste ║
- ║ 131072: <F8>-Taste ║
-
-
- Seite 27
-
-
- ║ 262144: <F9>-Taste ║
- ║ 524288: <F10>-Taste ║
- ║ Die Funktionen können durch Addition miteinander ║
- ║ verknüpft werden. ║
- ║ Return: Bitmuster der Abschlußtaste ( <Return> = 1 ) ║
- ║INTEGER Flag, das aussagt, ob ein neues Datum eingelesen ║
- ║ werden soll oder ob ein vorhandenes Datum korrigiert ║
- ║ werden soll. ║
- ║ 0: neues Datum einlesen ║
- ║ 1: vorhandenes Datum korrigieren ║
- ║ Return: Flag, das anzeigt, ob das gelesene oder ║
- ║ korrigierte Datum Null ist oder nicht. ║
- ║ 0: Datum ist Null ║
- ║ 1: Datum ist nicht Null ║
- ╟──────────────────────────────────────────────────────────────────────╢
- ║Subroutinen: ATTCOL,CTBUF ║
- ╟──────────────────────────────────────────────────────────────────────╢
- ║Beispiele: CALL DREAD (DATUM,10,20,23,0,0) ║
- ║ CALL DREAD (DATUM,10,20,23,255,1) ║
- ║ Die erste Programmzeile veranlaßt das Einlesen, die ║
- ║ zweite die Korrektur eines Datums. Die Bildschirm- ║
- ║ ausgabe erfolgt in der 10. Zeile und ab der 20. ║
- ║ Spalte in hellgrauer Farbe auf blauem Hintergrund. ║
- ║ Der hinter dem Datumsfeld positionierte Text bleibt ║
- ║ im ersten Fall erhalten, im zweiten Beispiel wird er ║
- ║ gelöscht. Außerdem ist der Abschluß im zweiten ║
- ║ Beispiel durch alle Cursortasten möglich. ║
- ╚══════════════════════════════════════════════════════════════════════╝
-
-
- Seite 28
-
-
- ╔══════════════════════════════════════════════════════════════════════╗
- ║Beschreibung der Subroutine DWRI (DATUM,ZEI,SP,COL) ║
- ║Die Subroutine ermöglicht das positionierte Schreiben eines ║
- ║Datumstrings auf den Bildschirm. Das Datum wird als Integervariable ║
- ║der Form JJJJMMTT eingelesen. Die Ausgabe erfolgt in der Form ║
- ║TT.MM.JJJJ. ║
- ╟──────────────────────────────────────────────────────────────────────╢
- ║Parameter: ║
- ║INTEGER Datum in der Form JJJJMMTT. ║
- ║ (J = Jahr, M = Monat, T = Tag) ║
- ║INTEGER Bildschirmzeile, in die das Datum geschrieben werden ║
- ║ soll (1 bis 25). ║
- ║INTEGER Bildschirmspalte, ab der das Datum geschrieben werden║
- ║ soll (1 bis 71). ║
- ║INTEGER Farbattribut; Siehe Anhang: "Farbattribute". Wenn ein║
- ║ Monochrome-Monitor erkannt wird, erfolgt die Ausgabe ║
- ║ im Schwarz/Weiß-Modus. ║
- ║ Bit 0 - 2: Vordergrundfarbe ║
- ║ Bit 3 : Intensität der Vordergrundfarbe ║
- ║ Bit 4 - 6: Hintergrundfarbe ║
- ║ Bit 7 : blinken ║
- ╟──────────────────────────────────────────────────────────────────────╢
- ║Subroutinen: ATTCOL ║
- ╟──────────────────────────────────────────────────────────────────────╢
- ║Beispiel: CALL DWRI (19890730,10,20,23) ║
- ║ Die Programmzeile veranlaßt das Schreiben des Strings║
- ║ "30.07.1989" auf den Bildschirm. Die Ausgabe ║
- ║ erfolgt in der 10. Zeile und ab der 20. Spalte in ║
- ║ hellgrauer Farbe auf blauem Hintergrund. ║
- ╚══════════════════════════════════════════════════════════════════════╝
-
-
- Seite 29
-
-
- ╔═════════════════════════════════════════════════════════════════════╗
- ║Beschreibung der Subroutine FMEL (TEXT,ANZ,FNR,ZEI,SP,COL) ║
- ║Die Subroutine schreibt eine Fehlermeldung positioniert auf den ║
- ║Bildschirm. Wenn "FNR" eins ist, wird die in "TEXT" übergebene ║
- ║Fehlermeldung an der Position "ZEI","SP" auf den Bildschirm ║
- ║geschrieben. Wenn in "FNR" eine zwei steht, erfolgt die Ausgabe ║
- ║um 16 Stellen nach rechts versetzt (z. B. wenn schon eine Fehler- ║
- ║meldung vorhanden ist). Wenn in "FNR" eine drei steht, wird der ║
- ║Standardfehlertext "Wert fehlerhaft" um 16 Stellen nach rechts ║
- ║versetzt ausgegeben. ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Parameter: ║
- ║CHARACTERSTRING Fehlermeldung [max. 15 Zeichen ]; hinter dem letzten║
- ║ zu schreibenden Zeichen kann ein Null-Character als ║
- ║ Terminator angefügt werden. ║
- ║INTEGER Anzahl der zu schreibenden Zeichen. Es werden ║
- ║ soviele Zeichen geschrieben, bis entweder die Anzahl║
- ║ erreicht ist oder ein Null-Character gefunden wird ║
- ║ oder das 15. Zeichen geschrieben wurde. ║
- ║INTEGER Fehlernummer [1 bis 3]. ║
- ║ 1: Ausgabe an der angegebenen Position. ║
- ║ 2: Ausgabe um 16 Stellen nach rechts versetzt. ║
- ║ 3: Ausgabe der Standardfehlermeldung um 16 Stellen ║
- ║ nach rechts versetzt. ║
- ║INTEGER Zeile in die die Fehlermeldung geschrieben werden ║
- ║ soll. Der Wert darf zwischen 1 und 25 liegen. ║
- ║INTEGER Spalte ab der die Fehlermeldung geschrieben werden ║
- ║ soll (eventuell um 16 Stellen nach rechts versetzt).║
- ║ Der Wert darf zwischen 1 und 80 liegen. ║
- ║INTEGER Farbattribut; siehe Anhang: "Farbattribute". Wenn ║
- ║ ein Monochrome-Monitor erkannt wird, erfolgt die ║
- ║ Ausgabe im Schwarz/Weiß-Modus. ║
- ║ Bit 0 - 2: Vordergrundfarbe ║
- ║ Bit 3 : Intensität der Vordergrundfarbe ║
- ║ Bit 4 - 6: Hintergrundfarbe ║
- ║ Bit 7 : blinken ║
- ║ Die Darstellung erfolgt mit dem inversierten ║
- ║ Farbattribut. ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Subroutinen: ATTRIB,AWRI ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Beispiel: CALL FMEL ('Wert zu groß!',13,1,10,20,23) ║
- ║ Die Fehlermeldung erscheint in der 10. Zeile ab ║
- ║ Spalte 20 in blauer Farbe auf hellgrauem ║
- ║ Hintergrund. ║
- ╚═════════════════════════════════════════════════════════════════════╝
-
-
- Seite 30
-
-
- ╔══════════════════════════════════════════════════════════════════════╗
- ║Beschreibung der Subroutine TAST (ZEICHEN,FLAG) ║
- ║Die Subroutine liest ein Zeichen aus der Tastatur und gibt den Code ║
- ║des Zeichens und ein Flag über die Art des Zeichens an das rufende ║
- ║Programm zurück. Die Subroutine kann dabei im Wartestatus oder im ║
- ║Nichtwartestatus betrieben werden. Im Wartestatus wird die Ausführung ║
- ║des Programms unterbrochen, bis ein Zeichen aus dem Tastaturbuffer ║
- ║gelesen werden kann. Im Nichtwartestatus wird das Programm ║
- ║weitergeführt, wenn kein Zeichen im Tastaturbuffer vorhanden ist. ║
- ║Dabei werden die übergebenen Parameter nicht verändert, damit die ║
- ║Subroutine in einer Schleife betrieben werden kann. ║
- ╟──────────────────────────────────────────────────────────────────────╢
- ║Parameter: ║
- ║INTEGER Return: Code des gelesenen Zeichens. ║
- ║INTEGER Flag für den Wartestatus: ║
- ║ 0: Nichtwartestatus ║
- ║ ungleich 0: Wartestatus ║
- ║ Return: Flag für die Art des gelesenen Zeichens: ║
- ║ 1: Zeichen 'A' - 'Z' und Ä, Ö, Ü ║
- ║ 2: Zeichen 'a' - 'z' und ä, ö, ü, ß ║
- ║ 3: Zeichen '0' - '9', '+', '-' oder '.' ║
- ║ 4: Restliche ASCII-Zeichen ║
- ║ 5: Return- oder Entertaste ║
- ║ 6: CTRL-C-Taste ║
- ║ 7: Steuercodes 0 - 31 ║
- ║ 10: Curser-Steuertasten ║
- ║ 11: Funktionstasten 1 - 40 ║
- ║ 12: ALT-Taste und numerisches oder alphanumerisches ║
- ║ Zeichen ║
- ║ 13: CTRL-Taste und Curser-Steuertaste ║
- ╟──────────────────────────────────────────────────────────────────────╢
- ║Beispiel: J=1 ║
- ║ CALL TAST (I,J) ║
- ║ Die Routine wartet, bis ein Zeichen aus dem ║
- ║ Tastaturbuffer gelesen werden kann. in I wird der ║
- ║ Code des Zeichens, in J ein Flag über die Art des ║
- ║ Zeichens übergeben. ║
- ╚══════════════════════════════════════════════════════════════════════╝
-
-
- Seite 31
-
-
- Blockweise Ein- und Ausgabe am Bildschirm
-
- Unter blockweiser Ein- und Ausgabe am Bildschirm ist die lesende oder
- schreibende Bearbeitung eines Bildschirmausschnitts oder des ganzen
- Bildschirms gemeint. Bildschirmausschnitte können dabei durch
- Positions- und Größenangaben positioniert und dimensioniert werden. Die
- Farbe des Hinter- und Vordergrunds des Bildschirmausschnitts kann durch
- die Wahl eines Farbattributs bestimmt werden. Eine Liste mit allen
- möglichen Farbattributen befindet sich im Anhang des Benutzerhandbuchs.
-
-
- Subroutinen zur blockweisen Ein- und Ausgabe am Bildschirm
-
- LOES a) Bildschirmausschnitt mit Hintergrundfarbe löschen
- b) Bildschirmausschnitt mit Zeichen beschreiben
- RAHM a) Bildschirmausschnitt umrahmen
- SCREEN a) Text eines Bildschirmausschnitts in ein Feld einlesen
- b) Attribute eines Bildschirmausschnitts in ein Feld einlesen
- c) Inhalt eines Characterfeldes in einem Bildschirmausschnitt
- ausgeben
- d) Inhalt eines Characterfeldes als Farbattribute eines
- Bildschirmausschnitts ausgeben
- e) Text und Attribute eines Bildschirmausschnitts in ein Feld
- einlesen
- f) Text und Attribute aus einem Characterfeld in einen
- Bildschirmausschnitt schreiben
- WIND a) Bildschirmausschnitt aufwärts scrollen
- b) Bildschirmausschnitt abwärts scrollen
-
-
- Seite 32
-
-
- ╔═════════════════════════════════════════════════════════════════════╗
- ║Beschreibung der Subroutine LOES (H,B,ZEI,SP,ZEICH,COL,ART) ║
- ║Die Subroutine löscht einen Bildschirmausschnitt bzw. überschreibt ║
- ║ihn mit dem in "ZEICH" angegebenen Zeichen und dem in "COL" ║
- ║angegebenen Farbattribut. Das Farbattribut kann dem Inhalt von "ART" ║
- ║entsprechend variiert werden. ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Parameter: ║
- ║INTEGER Höhe des zu löschenden Bildschirmausschnittes in ║
- ║ Zeilen [1 BIS 43]. ║
- ║INTEGER Breite des zu löschenden Bildschirmausschnittes in ║
- ║ Spalten [1 bis 80]. ║
- ║INTEGER Zeile von der an gelöscht werden soll [1 bis 43]. ║
- ║INTEGER Spalte von der an gelöscht werden soll [1 bis 80]. ║
- ║INTEGER ASCII-Code des Zeichens, mit dem gelöscht werden ║
- ║ soll [0 bis 255]. ║
- ║INTEGER Farbattribut; siehe Anhang: "Farbattribute". Wenn ║
- ║ ein Monochrome-Monitor erkannt wird, erfolgt die ║
- ║ Ausgabe im Schwarz/Weiß-Modus. ║
- ║ Bit 0 - 2: Vordergrundfarbe ║
- ║ Bit 3 : Intensität der Vordergrundfarbe ║
- ║ Bit 4 - 6: Hintergrundfarbe ║
- ║ Bit 7 : blinken ║
- ║INTEGER Art der Darstellung: ║
- ║ 0: Farbattribut normal ║
- ║ 1: Farbattribut inverse ║
- ║ 2: Farbattribut intensiv ║
- ║ 3: Farbattribut blinkend ║
- ║ 4: Farbattribut intensiv/inverse ║
- ║ 5: Farbattribut normal im 40 Zeichen/Zeile-Modus ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Subroutinen: ATTRIB,POKE,SCPRF ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Beispiel: CALL LOES (10,10,10,20,32,23,0) ║
- ║ Ab der 10. Zeile und der 20. Spalte wird ein ║
- ║ Bildschirmfenster von 10 mal 10 Zeichen Größe mit ║
- ║ Blanks überschrieben. Das gelöschte Feld hat eine ║
- ║ blaue Farbe. ║
- ╚═════════════════════════════════════════════════════════════════════╝
-
-
- Seite 33
-
-
- ╔═════════════════════════════════════════════════════════════════════╗
- ║Beschreibung der Subroutine RAHM (H,B,ZEI,SP,FORM,COL,ART) ║
- ║Die Subroutine zeichnet einen Rahmen mit der in "FORM" angegebenen ║
- ║Form positioniert auf den Bildschirm. Der Rahmen wird mit dem in ║
- ║"COL" angegebenen Farbattribut dargestellt. Das Farbattribut kann ║
- ║dem Inhalt von "ART" entsprechend variiert werden. ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Parameter: ║
- ║INTEGER Höhe des Rahmens in Zeilen [3 bis 43]. ║
- ║INTEGER Breite des Rahmens in Spalten [3 bis 80]. ║
- ║INTEGER Zeile von der an der Rahmen gezeichnet werden soll ║
- ║ [1 bis 42]. ║
- ║INTEGER Spalte von der an der Rahmen gezeichnet werden soll ║
- ║ [1 bis 79]. ║
- ║INTEGER Kennung für die Rahmenform: ║
- ║ 0: ╔ ║
- ║ 1: ┌ ║
- ║ 2: █ ║
- ║ 3: * ║
- ║ 4: Blank ║
- ║INTEGER Farbattribut; siehe Anhang: "Farbattribute". Wenn ║
- ║ ein Monochrome-Monitor erkannt wird, erfolgt die ║
- ║ Ausgabe im Schwarz/Weiß-Modus. ║
- ║ Bit 0 - 2: Vordergrundfarbe ║
- ║ Bit 3 : Intensität der Vordergrundfarbe ║
- ║ Bit 4 - 6: Hintergrundfarbe ║
- ║ Bit 7 : blinken ║
- ║INTEGER Art der Darstellung: ║
- ║ 0: Farbattribut normal ║
- ║ 1: Farbattribut inverse ║
- ║ 2: Farbattribut intensiv ║
- ║ 3: Farbattribut blinkend ║
- ║ 4: Farbattribut intensiv/inverse ║
- ║ 5: Farbattribut normal im 40 Zeichen/Zeile-Modus ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Subroutinen: ATTRIB,POKE,SCPRF ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Beispiel: CALL RAHM (10,10,10,20,0,23,0) ║
- ║ Ab der 10. Zeile und der 20. Spalte wird ein ║
- ║ Doppelrahmen von 10 mal 10 Zeichen Größe in ║
- ║ hellgrauer Farbe auf blauem Hintergrund gezeichnet. ║
- ╚═════════════════════════════════════════════════════════════════════╝
-
-
- Seite 34
-
-
- ╔═════════════════════════════════════════════════════════════════════╗
- ║Beschreibung der Subroutine SCREEN (ART,FELD,H,B,ZEI,SP) ║
- ║Die Subroutine ermöglicht das positionierte Schreiben oder Lesen ║
- ║eines Textblocks oder Farbattributblocks oder eines Text/Attribut- ║
- ║Blocks vom bzw. zum Bildschirm. ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Parameter: ║
- ║INTEGER Art der Bearbeitung: ║
- ║ 00: Textblock vom Bildschirm lesen ║
- ║ 01: Block mit Farbattributen vom Bildschirm lesen ║
- ║ 10: Textblock zum Bildschirm schreiben ║
- ║ 11: Block mit Bildschirmattributen schreiben ║
- ║ 100: Text und Attribute zum Bildschirm schreiben ║
- ║ 101: Text und Attribute vom Bildschirm lesen ║
- ║CHARACTERFELD Feld der Form [ FELD(H)*B ] mit Text oder mit ║
- ║ Farbattributen, das zum Bildschirm geschrieben ║
- ║ werden soll; ║
- ║ oder Return: Feld der Form [ FELD(H)*B ] in das Text║
- ║ oder Farbattribute vom Bildschirm geschrieben werden║
- ║ soll. ║
- ║INTEGER Höhe des Text- oder Attributfeldes in Zeilen. ║
- ║INTEGER Breite des Text- oder Attributfeldes in Spalten. ║
- ║INTEGER Zeile in der Text- oder Attributfeld beginnt. ║
- ║INTEGER Spalte in der Text- oder Attributfeld beginnt. ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Subroutinen: PEEKS,PEEK,POKES,POKE,SCPRF ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Beispiel: CHARACTER FELD(10)*60 ║
- ║ CALL SCREEN (0,FELD,10,60,5,8) ║
- ║ Der Text der der sich in den Zeilen 5 bis 10 und den║
- ║ Spalten 8 bis 68 auf dem Bildschirm befindet, wird ║
- ║ in das Characterfeld FELD eingelesen und steht dort ║
- ║ für die spätere Weiterverarbeitung zur Verfügung. ║
- ╚═════════════════════════════════════════════════════════════════════╝
-
-
- Seite 35
-
-
- ╔══════════════════════════════════════════════════════════════════════╗
- ║Beschreibung der Subroutine WIND (ART,ANZ,ZEIOL,SPOL,ZEIUR,SPUR,COL) ║
- ║Die Subroutine scrollt ein mit den Diagonalkoordinaten definiertes ║
- ║Textfenster auf dem Bildschirm ANZ Zeilen auf- oder abwärts. ║
- ╟──────────────────────────────────────────────────────────────────────╢
- ║Parameter: ║
- ║INTEGER Flag für die Art des Scrollens: ║
- ║ 0: aufwärts scrollen ║
- ║ 1: abwärts scrollen ║
- ║INTEGER Anzahl der zu scrollenden Zeilen. ║
- ║INTEGER Zeile der linken oberen Ecke des Textfensters ║
- ║INTEGER Spalte der linken oberen Ecke des Textfensters ║
- ║INTEGER Zeile der rechten unteren Ecke des Textfensters ║
- ║INTEGER Spalte der rechten unteren Ecke des Textfensters ║
- ║INTEGER Farbattribut; Siehe Anhang: "Farbattribute". Wenn ein║
- ║ Monochrome-Monitor erkannt wird, erfolgt die Ausgabe ║
- ║ im Schwarz/weiß-Modus. ║
- ║ Bit 0 - 2: Vordergrundfarbe ║
- ║ Bit 3 : Intensität der Vordergundfarbe ║
- ║ Bit 4 - 6: Hintergrundfarbe ║
- ║ Bit 7 : blinken ║
- ╟──────────────────────────────────────────────────────────────────────╢
- ║Subroutinen: ATTCOL ║
- ╟──────────────────────────────────────────────────────────────────────╢
- ║Beispiel: CALL WIND (0,1,5,10,15,70,23) ║
- ║ Das Textfenster mit den Diagonalkoordinaten Zeile 5, ║
- ║ Spalte 10 und Zeile 15, Spalte 70 wird um eine Zeile ║
- ║ nach oben gescrollt. Die nachrückende Zeile hat eine ║
- ║ blaue Hintergrundfarbe. ║
- ╚══════════════════════════════════════════════════════════════════════╝
-
-
- Seite 36
-
-
- Menüsteuerung
-
- Die Menüsteuerung ermöglicht das menügeführte Verzweigen innerhalb eines
- Programms. Prinzipiell sind einfache und mehrfache Menüauswahlen sowie
- einfache Abfragen möglich. Die einfache Auswahl stellt aus einer Anzahl
- Optionen eine einzige Option zur Verfügung. Das Programm verzweigt in
- die durch die Option vorgegebene Richtung. Eine mehrfache Auswahl wird
- notwendig, wenn mehrere Optionen während des Programmablaufs
- berücksichtigt werden sollen. Einfache und mehrfache Auswahlen sind
- entweder cursorgesteuert oder durch die Eingabe von Kennbuchstaben
- möglich. Neben den Menüauswahlen ist die Verzweigung innerhalb eines
- Programms durch Abfragen sinnvoll. Abfragen erwarten als Antworten
- vorgegebene Zeichen wie z.B. "Ja" oder "Nein" oder eine Ziffer.
-
-
- Subroutinen zur Menüsteuerung
-
- MENTXT a) Text aus einer direct organisierten Datei in Form eines ein-
- oder mehrspaltigen Menüs auf dem Bildschirm positionieren
- VARTXT a) Text aus einem Characterfeld in Form eines ein- oder
- mehrspaltigen Menüs auf dem Bildschirm positionieren
- MENAKT a) einfache cursorgesteuerte Menüauswahl
- b) mehrfache cursorgesteuerte Menüauswahl
- c) mehrfache cursorgesteuerte Menüauswahl unter Berücksichtigung
- vorher ausgewählter Menüpunkte
- d) mehrfache cursorgesteuerte Menüauswahl unter Berücksichtigung
- der Auswahlreihenfolge
- MEAAKT a) einfache cursorgesteuerte Menüauswahl mit Abschlußtasten
- b) mehrfache cursorgesteuerte Menüauswahl mit Abschlußtasten
- c) mehrfache cursorgesteuerte Menüauswahl mit Abschlußtasten
- unter Berücksichtigung vorher ausgewählter Menüpunkte
- d) mehrfache cursorgesteuerte Menüauswahl mit Abschlußtasten
- unter Berücksichtigung der Auswahlreihenfolge
- OPTION a) einfache oder mehrfache Menüauswahl mit Kennbuchstaben
- FRAG a) Abfrage für die Antworten "J", "N", "j" oder "n"
- ZIFRAG a) Abrage für die Antwort mit den Ziffern "0" bis "9"
-
-
- Seite 37
-
-
- ╔═════════════════════════════════════════════════════════════════════╗
- ║Beschreibung der Subroutine MENTXT (ANZ,LAN,SPZ,ZEI,SP,UNIT,SNR,COL) ║
- ║Die Subroutine liest aus einer direkt organisierten Datei Texte und ║
- ║bringt diese in der Form eines Menüfeldes auf den Bildschirm. Das ║
- ║Menüfeld wird mit einen Rahmen umgeben. Die Subroutine dient zur ║
- ║Vorbereitung der Menütexte für die Subroutine MENAKT. ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Parameter: ║
- ║INTEGER Anzahl der zur Verfügung stehenden Menütexte ║
- ║ [1 bis 200]. ║
- ║INTEGER Länge jedes dargestellten Menütextes [1 bis 80] ║
- ║INTEGER Anzahl der pro Zeile dargestellten Menütexte ║
- ║ [1 bis 40]. ║
- ║INTEGER Zeile in der das Menüfeld beginnt (Rahmen) ║
- ║INTEGER Spalte in der das Menüfeld beginnt [1 bis 78] oder ║
- ║ 100 für automatische Mittenzentrierung des ║
- ║ Menüfeldes (Rahmen) oder 200 für automatische ║
- ║ Mittenzentrierung und Ausgleich einer ungeraden ║
- ║ Darstellungsbreite (Rahmen). ║
- ║INTEGER Unit der direkt organisierten Datei, aus der die ║
- ║ Menütexte gelesen werden sollen. ║
- ║INTEGER Satznummer des ersten Menütextes in der direkt ║
- ║ organisierten Datei. ║
- ║INTEGER Farbattribut; siehe Anhang: "Farbattribute". Wenn ║
- ║ ein Monochrome-Monitor erkannt wird, erfolgt die ║
- ║ Ausgabe im Schwarz/Weiß-Modus. ║
- ║ Bit 0 - 2: Vordergrundfarbe ║
- ║ Bit 3 : Intensität der Vordergrundfarbe ║
- ║ Bit 4 - 6: Hintergrundfarbe ║
- ║ Bit 7 : blinken ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Subroutinen: AWRI,RAHM ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Beispiel: CALL MENTXT (6,20,2,10,100,10,200,23) ║
- ║ Die Subroutine liest aus der Datei mit dem Unit 10 ║
- ║ sechs Zeilen Menütext ab der Recordnummer 200. ║
- ║ Innerhalb eines Rahmens, der ab der 10. Zeile ║
- ║ mittenzentriert auf den Bildschirm gebracht wird, ║
- ║ werden die sechs Texte zweispaltig dargestellt. Die ║
- ║ Texte sind dabei 20 Zeichen lang. Die Farbe des ║
- ║ Rahmens und der Texte ist hellgrau auf blauem ║
- ║ Hintergrund. ║
- ╚═════════════════════════════════════════════════════════════════════╝
-
-
- Seite 38
-
-
- ╔═════════════════════════════════════════════════════════════════════╗
- ║Beschreibung der Subroutine VARTXT (ANZ,LAN,SPZ,ZEI,SP,FELD,COL) ║
- ║Die Subroutine liest aus einem Characterfeld Menütexte und ║
- ║bringt diese in der Form eines Menüfeldes auf den Bildschirm. Das ║
- ║Menüfeld wird mit einen Rahmen umgeben. Die Subroutine dient zur ║
- ║Vorbereitung der Menütexte für die Subroutine MENAKT. ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Parameter: ║
- ║INTEGER Anzahl der zur Verfügung stehenden Menütexte ║
- ║ [1 bis 200]. ║
- ║INTEGER Länge jedes dargestellten Menütextes [1 bis 80] ║
- ║INTEGER Anzahl der pro Zeile dargestellten Menütexte ║
- ║ [1 bis 40]. ║
- ║INTEGER Zeile in der das Menüfeld beginnt (Rahmen) ║
- ║INTEGER Spalte in der das Menüfeld beginnt [1 bis 78] oder ║
- ║ 100 für automatische Mittenzentrierung des ║
- ║ Menüfeldes (Rahmen) oder 200 für automatische ║
- ║ Mittenzentrierung und Ausgleich einer ungeraden ║
- ║ Darstellungsbreite (Rahmen). ║
- ║CHARACTERFELD Feld, aus dem die Menütexte verwendet werden sollen.║
- ║ [FELD(ANZ)*LAN] ║
- ║INTEGER Farbattribut; siehe Anhang: "Farbattribute". Wenn ║
- ║ ein Monochrome-Monitor erkannt wird, erfolgt die ║
- ║ Ausgabe im Schwarz/Weiß-Modus. ║
- ║ Bit 0 - 2: Vordergrundfarbe ║
- ║ Bit 3 : Intensität der Vordergrundfarbe ║
- ║ Bit 4 - 6: Hintergrundfarbe ║
- ║ Bit 7 : blinken ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Subroutinen: AWRI,RAHM ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Beispiel: CALL VARTXT (6,20,2,10,100,FELD,23) ║
- ║ Die Subroutine liest aus dem Feld 6 Mmenütexte ein. ║
- ║ Innerhalb eines Rahmens, der ab der 10. Zeile ║
- ║ mittenzentriert auf den Bildschirm gebracht wird, ║
- ║ werden die sechs Texte zweispaltig dargestellt. Die ║
- ║ Texte sind dabei 20 Zeichen lang. Die Farbe des ║
- ║ Rahmens und der Texte ist hellgrau auf blauem ║
- ║ Hintergrund. ║
- ╚═════════════════════════════════════════════════════════════════════╝
-
-
- Seite 39
-
-
- ╔═════════════════════════════════════════════════════════════════════╗
- ║Beschreibung der Subroutine ║
- ║MENAKT (ANZ,LAN,SPZ,ZEI,SP,ART,FELD,MZEI,MSP,COL) ║
- ║Die Subroutine ermöglicht die cursorgesteuerte Auswahl einer oder ║
- ║mehrerer Optionen aus einem Menüfeld des Bildschirms. Die Texte im ║
- ║Menüfeld müssen schon vorhanden sein (z.B. Subroutine MENTXT). Die ║
- ║Routine gibt die ausgewählten Optionen in einem Feld zurück. In der ║
- ║Zeile "MZEI" ab derSpalte "MSP" kann eine Meldung über die aktiven ║
- ║Tasten und deren Aktionen angezeigt werden. Die Meldung ist bei ║
- ║mehrfacher Auswahl 39 Zeichen, bei einfacher Auswahl nur 16 Zeichen. ║
- ║Die jeweils aktuelle Option wird mit intensivierter Farbe gezeigt, ║
- ║ausgewählte Optionen werden inverse dargestellt. ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Parameter: ║
- ║INTEGER Anzahl der zur Verfügung stehenden Optionen ║
- ║ [1 bis 200]. ║
- ║INTEGER Länge jedes dargestellten Menütextes [1 bis 80] ║
- ║INTEGER Anzahl der pro Zeile dargestellten Menütexte ║
- ║ [1 bis 40]. ║
- ║INTEGER Zeile in der das Menüfeld beginnt (Rahmen aus ║
- ║ Subroutine MENTXT) [1 bis 23]. ║
- ║INTEGER Spalte in der das Menüfeld beginnt [1 bis 78] oder ║
- ║ 100 für automatische Mittenzentrierung des ║
- ║ Menüfeldes. ║
- ║INTEGER Art der Optionsausionswahl ║
- ║ -5: Mehrere Optionen können additiv ausgewählt ║
- ║ werden, im Feld vorhandene Auswahlen werden ║
- ║ gelöscht. Das Feld wird in der Reihenfolge der ║
- ║ Auswahl aufsteigend mit den Ziffern der ║
- ║ gewählten Optionsfelder belegt. Das nächste ║
- ║ Textfeld wird automatisch aktuell. ║
- ║ -4: Mehrere Optionen können additiv ausgewählt ║
- ║ werden, im Feld vorhandene Auswahlen bleiben ║
- ║ erhalten. Das nächste Textfeld wird automatisch ║
- ║ aktuell. ║
- ║ -3: Mehrere Optionen können additiv ausgewählt ║
- ║ werden. Im Feld vorhandene Auswahlen werden ║
- ║ gelöscht. Das nächste Textfeld wird automatisch ║
- ║ aktuell. ║
- ║ -2: Mehrere Optionen können additiv ausgewählt ║
- ║ werden, im Feld vorhandene Auswahlen werden ║
- ║ gelöscht. Das Feld wird in der Reihenfolge der ║
- ║ Auswahl aufsteigend mit den Ziffern der ║
- ║ gewählten Optionsfelder belegt. Das momentane ║
- ║ Textfeld bleibt aktuell. ║
- ║ -1: Mehrere Optionen können additiv ausgewählt ║
- ║ werden, im Feld vorhandene Auswahlen bleiben ║
- ║ erhalten. Das momentane Textfeld bleibt aktuell.║
- ║ 0: Mehrere Optionen können additiv ausgewählt ║
- ║ werden. Im Feld vorhandene Auswahlen werden ║
- ║ gelöscht. Das momentane Textfeld bleibt aktuell.║
- ║ 1: Nur eine Option kann ausgewählt werden, im Feld ║
- ║ vorhandene Auswahlen werden nicht dargestellt. ║
- ║ 2: Nur eine Option kann ausgewählt werden, die ║
- ║ erste im Feld vorhandene Auswahl wird dem ║
-
-
- Seite 40
-
-
- ║ Benutzer intensiv unterlegt angeboten. ║
- ║INTEGERFELD Return: Optionen. Ausgewählte Optionen werden mit ║
- ║ der Nummer des Optionsfeldes belegt, nicht gewählte ║
- ║ Optionen werden Null gesetzt [ FELD(ANZ) ]. ║
- ║INTEGER Zeile in der eine Meldung über die aktiven Tasten ║
- ║ und deren Aktionen ausgegeben wird oder Null, wenn ║
- ║ keine Meldung ausgegeben werden soll oder 100, wenn ║
- ║ in der Zeile unter dem Menüfeld ausgegeben werden ║
- ║ soll. ║
- ║INTEGER Spalte ab der eine Meldung über die aktiven Tasten ║
- ║ und deren Aktionen ausgegeben wird oder Null, wenn ║
- ║ keine Meldung ausgegeben werden soll oder 100, wenn ║
- ║ mittenzentriert ausgegeben werden soll. ║
- ║INTEGER Farbattribut; siehe Anhang: "Farbattribute". Wenn ║
- ║ ein Monochrome-Monitor erkannt wird, erfolgt die ║
- ║ Ausgabe im Schwarz/Weiß-Modus. ║
- ║ Bit 0 - 2: Vordergrundfarbe ║
- ║ Bit 3 : Intensität der Vordergrundfarbe ║
- ║ Bit 4 - 6: Hintergrundfarbe ║
- ║ Bit 7 : blinken ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Subroutinen: ATTRIB,AWRI,CTBUF,LOES,SCREEN,TAST ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Beispiel: INTEGER FELD(6) ║
- ║ CALL MENAKT (6,20,2,10,100,1,FELD,24,34,23) ║
- ║ Die Menütexte müssen schon am Bildschirm vorhanden ║
- ║ sein (z. B. aus der Subroutine MENTXT). ║
- ║ Ab der 10. Zeile wird ein zweispaltiges Menüfeld ║
- ║ mit 6 Elementen mittenzentriert über die Menütexte ║
- ║ gelegt. Mit Hilfe der Cursortasten kann aus sechs ║
- ║ Optionen eine ausgewählt werden, deren Äquivalent ║
- ║ in FELD ungleich Null gesetzt wird. Das Menüfeld ║
- ║ hat einen blauen Hintergrund. In Zeile 24 werden ║
- ║ Informationen über die aktiven Tasten geschrieben. ║
- ╚═════════════════════════════════════════════════════════════════════╝
-
-
- Seite 41
-
-
- ╔═════════════════════════════════════════════════════════════════════╗
- ║Beschreibung der Subroutine ║
- ║MEAAKT (ANZ,LAN,SPZ,ZEI,SP,ART,FELD,COL,ABT) ║
- ║Die Subroutine ermöglicht die cursorgesteuerte Auswahl einer oder ║
- ║mehrerer Optionen aus einem Menüfeld des Bildschirms. Die Texte im ║
- ║Menüfeld müssen schon vorhanden sein (z.B. Subroutine MENTXT). Die ║
- ║Routine gibt die ausgewählten Optionen in einem Feld zurück. ║
- ║Die jeweils aktuelle Option wird mit intensivierter Farbe gezeigt, ║
- ║ausgewählte Optionen werden inverse dargestellt. Die zur Beendigung ║
- ║der Auswahl zugelassenen Tasten werden in ABT als Bitmuster ║
- ║übergeben. ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Parameter: ║
- ║INTEGER Anzahl der zur Verfügung stehenden Optionen ║
- ║ [1 bis 200]. ║
- ║INTEGER Länge jedes dargestellten Menütextes [1 bis 80] ║
- ║INTEGER Anzahl der pro Zeile dargestellten Menütexte ║
- ║ [1 bis 40]. ║
- ║INTEGER Zeile in der das Menüfeld beginnt (Rahmen aus ║
- ║ Subroutine MENTXT) [1 bis 23]. ║
- ║INTEGER Spalte in der das Menüfeld beginnt [1 bis 78] oder ║
- ║ 100 für automatische Mittenzentrierung des ║
- ║ Menüfeldes. ║
- ║INTEGER Art der Optionsausionswahl ║
- ║ -5: Mehrere Optionen können additiv ausgewählt ║
- ║ werden, im Feld vorhandene Auswahlen werden ║
- ║ gelöscht. Das Feld wird in der Reihenfolge der ║
- ║ Auswahl aufsteigend mit den Ziffern der ║
- ║ gewählten Optionsfelder belegt. Das nächste ║
- ║ Textfeld wird automatisch aktuell. ║
- ║ -4: Mehrere Optionen können additiv ausgewählt ║
- ║ werden, im Feld vorhandene Auswahlen bleiben ║
- ║ erhalten. Das nächste Textfeld wird automatisch ║
- ║ aktuell. ║
- ║ -3: Mehrere Optionen können additiv ausgewählt ║
- ║ werden. Im Feld vorhandene Auswahlen werden ║
- ║ gelöscht. Das nächste Textfeld wird automatisch ║
- ║ aktuell. ║
- ║ -2: Mehrere Optionen können additiv ausgewählt ║
- ║ werden, im Feld vorhandene Auswahlen werden ║
- ║ gelöscht. Das Feld wird in der Reihenfolge der ║
- ║ Auswahl aufsteigend mit den Ziffern der ║
- ║ gewählten Optionsfelder belegt. Das momentane ║
- ║ Textfeld bleibt aktuell. ║
- ║ -1: Mehrere Optionen können additiv ausgewählt ║
- ║ werden, im Feld vorhandene Auswahlen bleiben ║
- ║ erhalten. Das momentane Textfeld bleibt aktuell.║
- ║ 0: Mehrere Optionen können additiv ausgewählt ║
- ║ werden. Im Feld vorhandene Auswahlen werden ║
- ║ gelöscht. Das momentane Textfeld bleibt aktuell.║
- ║ 1: Nur eine Option kann ausgewählt werden, im Feld ║
- ║ vorhandene Auswahlen werden nicht dargestellt. ║
- ║ 2: Nur eine Option kann ausgewählt werden, die ║
- ║ erste im Feld vorhandene Auswahl wird dem ║
- ║ Benutzer intensiv unterlegt angeboten. ║
-
-
- Seite 42
-
-
- ║INTEGERFELD Return: Optionen. Ausgewählte Optionen werden mit ║
- ║ der Nummer des Optionsfeldes belegt, nicht gewählte ║
- ║ Optionen werden Null gesetzt [ FELD(ANZ) ]. ║
- ║INTEGER Farbattribut; siehe Anhang: "Farbattribute". Wenn ║
- ║ ein Monochrome-Monitor erkannt wird, erfolgt die ║
- ║ Ausgabe im Schwarz/Weiß-Modus. ║
- ║ Bit 0 - 2: Vordergrundfarbe ║
- ║ Bit 3 : Intensität der Vordergrundfarbe ║
- ║ Bit 4 - 6: Hintergrundfarbe ║
- ║ Bit 7 : blinken ║
- ║INTEGER Bitmuster für Abschlußtasten zum Beenden der ║
- ║ mehrfachen Auswahl: ║
- ║ 1: <Return>-Taste ║
- ║ 32: <Bild-aufwärts>-Taste ║
- ║ 64: <Bild-abwärts>-Taste ║
- ║ 128: <Tabulator rechts>-Taste ║
- ║ 256: <Tabulator links>-Taste ║
- ║ 512: <Escape>-Taste ║
- ║ 1024: <F1>-Taste ║
- ║ 2048: <F2>-Taste ║
- ║ 4096: <F3>-Taste ║
- ║ 8192: <F4>-Taste ║
- ║ 16384: <F5>-Taste ║
- ║ 32768: <F6>-Taste ║
- ║ 65536: <F7>-Taste ║
- ║ 131072: <F8>-Taste ║
- ║ 262144: <F9>-Taste ║
- ║ 524288: <F10>-Taste ║
- ║ Die Abschlußtasten können durch Addition miteinander║
- ║ verknüpft werden. ║
- ║ Return: Bitmuster der Abschlußtaste ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Subroutinen: ATTRIB,AWRI,CTBUF,LOES,SCREEN,TAST ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Beispiel: INTEGER FELD(6) ║
- ║ CALL MEAAKT (6,20,2,10,100,1,FELD,23,513) ║
- ║ Die Menütexte müssen schon am Bildschirm vorhanden ║
- ║ sein (z. B. aus der Subroutine MENTXT). ║
- ║ Ab der 10. Zeile wird ein zweispaltiges Menüfeld ║
- ║ mit 6 Elementen mittenzentriert über die Menütexte ║
- ║ gelegt. Mit Hilfe der Cursortasten kann aus sechs ║
- ║ Optionen eine ausgewählt werden, deren Äquivalent ║
- ║ in FELD ungleich Null gesetzt wird. Das Menüfeld ║
- ║ hat einen blauen Hintergrund. Zum Abschluß sind die ║
- ║ Tasten RETURN und ESCAPE zugelassen. ║
- ╚═════════════════════════════════════════════════════════════════════╝
-
-
- Seite 43
-
-
- ╔═════════════════════════════════════════════════════════════════════╗
- ║Beschreibung der Subroutine OPTION (STRING,ANZ,MZEI,MSP,RSP,COL) ║
- ║Die Subroutine liest in einen String ein oder mehrere der ANZ ersten ║
- ║Zeichen des Alphabets als zugelassene Antworten ein. Der zu den ║
- ║Zeichen gehörende Text muß sich schon auf dem Bildschirm befinden. ║
- ║Hinter dem Text "Bitte Optionen auswählen", der in Zeile MZEI und ab ║
- ║Spalte MSP auf dem Bildschirm ausgegeben wird, werden die gewählten ║
- ║Zeichen ab Spalte RSP eingelesen. Die gewählten Zeichen werden in ║
- ║Großbuchstaben konvertiert. ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Parameter: ║
- ║CHARACTERSTRING Return: String, in den die gewählten Zeichen ║
- ║ eingelesen werden [bis zu ANZ Characters]. ║
- ║INTEGER Anzahl der maximal auszuwählenden Optionen ║
- ║ [1 bis 26]. ║
- ║INTEGER Zeile für den Hinweistext und für den Antwortstring ║
- ║ [1 bis 25]. ║
- ║INTEGER Spalte, in der der Hinweistext beginnt [1 bis 50]. ║
- ║INTEGER Spalte, ab der die Antwortzeichen gelesen werden ║
- ║ [30 bis 79]. ║
- ║INTEGER Farbattribut; siehe Anhang: "Farbattribute". Wenn ║
- ║ ein Monochrome-Monitor erkannt wird, erfolgt die ║
- ║ Darstellung im Schwarz/Weiß-Modus. ║
- ║ Bit 0 - 2: Vordergrundfarbe ║
- ║ Bit 3 : Intensität der Vordergrundfarbe ║
- ║ Bit 4 - 6: Hintergrundfarbe ║
- ║ Bit 7 : blinken ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Subroutinen: AREADZ,AWRI,UPCASE ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Beispiel: CHARACTER STRING*10 ║
- ║ CALL OPTION (STRING,8,10,15,70,23) ║
- ║ In den String können die Zeichen "A" bis "I" oder ║
- ║ "a" bis "i" als Auswahlkriterien für 8 bereits am ║
- ║ Bildschirm vorhandene Optionstexte angegeben werden.║
- ║ Der Hinweistext wird in Zeile 10 ab Spalte 15 in ║
- ║ hellgrauer Farbe auf blauem Hintergrund ausgegeben. ║
- ║ In der gleichen Zeile ab Spalte 70 werden die ║
- ║ Auswahlkriterien eingelesen. ║
- ╚═════════════════════════════════════════════════════════════════════╝
-
-
- Seite 44
-
-
- ╔═════════════════════════════════════════════════════════════════════╗
- ║Beschreibung der Subroutine FRAG (ANT,TEXT,ANZ,ZEI,SP,RSP,COL) ║
- ║Die Subroutine schreibt eine Frage positioniert auf den Bildschirm ║
- ║und ließt die Antwort "j" oder "n" bzw. "J" oder "N" in eine ║
- ║Antwortvariable "ANT" ein. Der String " <J/N>" wird an den Fragetext║
- ║angehängt. ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Parameter: ║
- ║CHARACTER Antwortvariable [1 Zeichen]; Es sind die Zeichen ║
- ║ "J", "N", "j", und "n" zugelassen. ║
- ║CHARACTERSTRING Fragetext [max. 72 Zeichen ]; hinter dem letzten ║
- ║ zu schreibenden Zeichen kann ein Null-Character als ║
- ║ Terminator angefügt werden. ║
- ║INTEGER Anzahl der zu schreibenden Zeichen. Es werden ║
- ║ soviele Zeichen geschrieben, bis entweder die Anzahl║
- ║ erreicht ist oder ein Null-Character gefunden wird ║
- ║ oder die 79. Spalte beschrieben wurde. ║
- ║INTEGER Zeile in die die Frage geschrieben werden soll. Der ║
- ║ Wert darf zwischen 1 und 25 liegen. ║
- ║INTEGER Spalte ab der die Frage geschrieben werden soll. Der║
- ║ Wert darf zwischen 1 und 79 liegen. ║
- ║INTEGER Spalte aus der die Antwort gelesen werden soll. Der ║
- ║ Wert darf zwischen 1 und 79 liegen. ║
- ║INTEGER Farbattribut; siehe Anhang: "Farbattribute". Wenn ║
- ║ ein Monochrome-Monitor erkannt wird, erfolgt die ║
- ║ Ausgabe im Schwarz/Weiß-Modus. ║
- ║ Bit 0 - 2: Vordergrundfarbe ║
- ║ Bit 3 : Intensität der Vordergrundfarbe ║
- ║ Bit 4 - 6: Hintergrundfarbe ║
- ║ Bit 7 : blinken ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Subroutinen: AREADZ,AWRI,LAENGE,UPCASE ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Beispiel: CHARACTER ANT*1 ║
- ║ CALL FRAG (ANT,'Noch einmal?',12,10,20,50,23) ║
- ║ Die Frage wird in der 10. Zeile ab der 20. Spalte ║
- ║ mit hellgrauer Farbe auf blauem Hintergrund auf den ║
- ║ Bildschirm geschrieben. Die Antwort wird aus der 50.║
- ║ Spalte in die Variable "ANT" gelesen. ║
- ╚═════════════════════════════════════════════════════════════════════╝
-
-
- Seite 45
-
-
- ╔═════════════════════════════════════════════════════════════════════╗
- ║Beschreibung der Subroutine ZIFRAG (ANT,TEXT,ANZ,ZEI,SP,RSP,COL) ║
- ║Die Subroutine gibt einen Fragetext der Länge ANZ positioniert auf ║
- ║den Bildschirm aus und liest in eine Integervariable eine der ║
- ║zugelassenen Ziffern 0 bis 9 als Antwort ein. ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Parameter: ║
- ║INTEGER Return: Eine der Ziffern 0 bis 9 als Antwort. ║
- ║CHARACTERSTRING Fragetext [1 bis 80 Characters]. ║
- ║INTEGER Anzahl der Zeichen im Fragetext. ║
- ║INTEGER Zeile in der der Fragetext geschrieben werden soll ║
- ║ und aus der die Antwort gelesen werden soll ║
- ║ [1 bis 25]. ║
- ║INTEGER Spalte, ab der der Fragetext geschrieben werden ║
- ║ soll [1 bis 79]. ║
- ║INTEGER Spalte, aus der die Antwort gelesen werden soll ║
- ║ [1 bis 79]. ║
- ║INTEGER Farbattribut; siehe Anhang: "Farbattribute". Wenn ║
- ║ ein Monochrome-Monitor erkannt wird, erfolgt die ║
- ║ Ausgabe im Schwarz/Weiß-Modus. ║
- ║ Bit 0 - 2: Vordergrundfarbe ║
- ║ Bit 3 : Intensität der Vordergrundfarbe ║
- ║ Bit 4 - 6: Hintergrundfarbe ║
- ║ Bit 7 : blinken ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Subroutinen: AWRI,IREAD ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Beispiel: CALL ZIFRAG (I,'Anzahl?',7,10,20,40,23) ║
- ║ Der Fragetext wird in hellgrauer Farbe auf blauem ║
- ║ Hintergrund in der 10. Zeile ab Spalte 20 ║
- ║ geschrieben. Die Antwortziffer wird aus Spalte 40 ║
- ║ gelesen. ║
- ╚═════════════════════════════════════════════════════════════════════╝
-
-
- Seite 46
-
-
- Bildschirmmasken
-
- Bildschirmmasken ermöglichen das Einlesen von Daten beliebigen Formats
- in einer vorgegebenen Form. Die Datenfelder einer Bildschirmmaske
- werden gewöhnlich in der im Formular vorgegebenen Reihenfolge und Form
- auf dem Bildschirm angeordnet. Dabei kann die Form des Formulars mit
- Hilfe der Maske am Bildschirm mehr oder weniger originalgetreu
- nachgebildet werden. Es besteht die Möglichkeit, die Datentypen
- INTEGER, REAL und CHARACTER sowie ein spezielles Datumsformat in der
- Bildschirmmaske zu verwenden. Selbstverständlich werden die
- entsprechenden Plausibilitätskontrollen direkt während der Dateneingabe
- vorgenommen. Innerhalb der Bildschirmmaske ist das Springen zwischen
- den Datenfeldern mit den Tasten des Cursorblocks möglich. Eine Maske
- wird mit der <Escape>-Taste abgeschlossen. In Verbindung mit
- Subroutinen aus dem Kapitel "Fenstertechnik" ist sogar das Vorwärts- und
- Rückwärtsblättern zwischen den mit Hilfe von Bildschirmmasken
- ausgefüllten elektronisch gespeicherten Seiten möglich.
-
-
- Subroutinen zur Maskengenerierung
-
- MASTXT a) Text aus einer direct organisierten Datei in Form einer
- Bildschirmmaske auf dem Bildschirm positionieren
- MASK a) Bildschirmmaske zum Einlesen von Strings, Integerwerten,
- Realwerten und Datumsformaten generieren
- b) Bildschirmmaske zum Korrigieren von Strings, Integerwerten,
- Realwerten und Datumsformaten generieren
- TXMASK a) Bildschirmmaske zum Einlesen von Strings generieren
- b) Bildschirmmaske zum Korrigieren von Strings generieren
-
-
- Seite 47
-
-
- ╔═════════════════════════════════════════════════════════════════════╗
- ║Beschreibung der Subroutine MASTXT (ANZ,LAN,ZEI,SP,UNIT,SNR,COL) ║
- ║Die Subroutine liest aus einer direkt organisierten Datei Texte und ║
- ║bringt diese positioniert auf den Bildschirm. Die Routine dient ║
- ║zur Vorbereitung des Maskenfeldes für die Subroutine MASK. ║
- ║Löschfenster und Rahmen müssen, falls erforderlich, bereits vorhanden║
- ║sein. ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Parameter: ║
- ║INTEGER Anzahl der zur benötigten Maskentexte. ║
- ║INTEGER Feld mit Längen der zu schreibenden Maskentexte ║
- ║ [1 bis 78]. ║
- ║INTEGER Feld mit Zeilen in denen die Maskentexte geschrieben║
- ║ geschrieben werden sollen [1 bis 25] ║
- ║INTEGER Feld mit Spalten, in denen die Maskentexte beginnen ║
- ║ sollen [1 bis 79] ║
- ║INTEGER Unit der direkt organisierten Datei, aus der die ║
- ║ Maskentexte gelesen werden sollen. ║
- ║INTEGER Satznummer des ersten Maskentextes in der direkt ║
- ║ organisierten Datei. ║
- ║INTEGER Farbattribut; siehe Anhang: "Farbattribute". Wenn ║
- ║ ein Monochrome-Monitor erkannt wird, erfolgt die ║
- ║ Ausgabe im Schwarz/Weiß-Modus. ║
- ║ Bit 0 - 2: Vordergrundfarbe ║
- ║ Bit 3 : Intensität der Vordergrundfarbe ║
- ║ Bit 4 - 6: Hintergrundfarbe ║
- ║ Bit 7 : blinken ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Subroutinen: AWRI ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Beispiel: INTEGER LAN(6),ZEI(6),SP(6) ║
- ║ DATA ZEI /3,5,7,9,11,13/, SP /4,9,35,2,4,40/ ║
- ║ DATA LAN /10,15,18,9,25,60/ ║
- ║Beispiel: CALL MASTXT (6,LAN,ZEI,SP,10,200,23) ║
- ║ Die Subroutine liest aus der Datei mit dem Unit 10 ║
- ║ sechs Zeilen Text ab der Recordnummer 200. ║
- ║ Die Texte werden mit den Zeilen- und Spaltenangaben ║
- ║ aus den Feldern ZEI und SP positioniert auf den ║
- ║ Bildschirm gebracht. Die Farbe der Texte ist ║
- ║ hellgrau auf blauem Hintergrund. ║
- ╚═════════════════════════════════════════════════════════════════════╝
-
-
- Seite 48
-
-
- ╔═════════════════════════════════════════════════════════════════════╗
- ║Beschreibung der Subroutine ║
- ║MASK (ART,ADDR,FORM,ZEI,SP,AUF,AB,KON,ANZ,MZEI,MSP,COL,FLAG) ║
- ║Die Subroutine stellt auf dem Bildschirm positionierte Felder der ║
- ║verschiedenen Datentypen in Form einer Maske zur Verfügung. Es ist ║
- ║möglich Texte, Integer- und Realwerte und Datumsformate einzulesen ║
- ║und/oder cursorgesteuert zu ändern. Mit Hilfe der Cursor- und ║
- ║Tabulatortasten und der Bild-aufwärts und Bild-abwärts-Tasten wird ║
- ║das Springen zwischen den Feldern der Maske möglich. Zum Beenden der ║
- ║Maskeneingabe können wahlweise die Tasten Bild-aufwärts und Bild- ║
- ║abwärts, die Escape-Taste oder die Funktionstasten 1 bis 10 gewählt ║
- ║werden. In der "MZEI" ab der Spalte "MSP" werden dem Benutzer die zur║
- ║Verfügung stehenden Tasten erklärt. Zum Beschreiben und Ändern der ║
- ║Maskenfelder können alle Tasten des Cursorblocks benutzt werden. ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Parameter: ║
- ║INTEGERFELD Feld mit Kennziffern für das Datenformat der zur ║
- ║ Verwendung kommenden Maskenfelder [ ART(ANZ) ]. ║
- ║ 1: Integer ║
- ║ 2: Real ║
- ║ 3: Characterstring ║
- ║ 4: Datumsformat ║
- ║ Beim Datumsformat wird ein Datum als Integervariable║
- ║ der Form JJJJMMTT übergeben und zurückgegeben. Die ║
- ║ Bildschirmdarstellung erfolgt in der Form ║
- ║ TT.MM.JJJJ. Es werden nur plausible Daten ║
- ║ übernommen. Integer- und Realwerte werden am ║
- ║ Bildschirm mit führenden Nullen dargestellt. Der ║
- ║ Dezimalpunkt in der Realdarstellung dient zur ║
- ║ Kennzeichnug des Real-Formates. ║
- ║INTEGERFELD Feld mit Maschinenadressen der zu den Maskenfeldern ║
- ║ gehörenden Variablen [ ADDR(ANZ) ]. ║
- ║ Die Adressen werden mit der Integer-Funktion LOC ║
- ║ ermittelt [ z.B.: ADDR(1)=LOC(Variable) ]. ║
- ║INTEGERFELD Feld mit Formatangaben der aus den Maskenfeldern ║
- ║ zu lesenden oder zu korrigierenden Werte ║
- ║ [ FORM(ANZ) ]. ║
- ║ Integer: 1 bis 11 ║
- ║ Real: 10 bis 209 ║
- ║ (Fortran-Format mit 10 multipliziert, ║
- ║ z.B. 104 entspricht 5 Vorkommastellen ║
- ║ - und 4 Nachkommastellen). ║
- ║ Character: 1 bis 79 ║
- ║ Datum: Wert ohne Bedeutung, da die Feldlänge ║
- ║ automatisch immer 10 ist. ║
- ║INTEGERFELD Feld mit Zeilen, in denen sich die jeweiligen ║
- ║ Maskenfelder befinden [ ZEI(ANZ) ]. ║
- ║ Die Zeilennummern dürfen zwischen 1 und 24 liegen, ║
- ║ es ist aber zu beachten, daß in Zeile 24 der ║
- ║ Hinweistext über die Tastenbelegung erscheint. ║
- ║INTEGERFELD Feld mit Spalten, in denen die jeweiligen Masken- ║
- ║ felder beginnen [ SP(ANZ) ]. ║
- ║ Die Spaltennummern dürfen zwischen 1 und 79 liegen. ║
- ║INTEGERFELD Feld mit Nummern der Maskenfelder, die angesprungen ║
- ║ werden, wenn das Maskenfeld mit der Cursor-aufwärts-║
-
-
- Seite 49
-
-
- ║ Taste verlassen wird. [ AUF(ANZ) ]. ║
- ║INTEGERFELD Feld mit Nummern der Maskenfelder, die angesprungen ║
- ║ werden, wenn das Maskenfeld mit der Cursor-abwärts- ║
- ║ Taste verlassen wird. [ AB(ANZ) ]. ║
- ║INTEGERFELD Feld mit Flags, die angeben, ob ein Wert neu ║
- ║ eingelesen oder korrigiert werden soll. ║
- ║ 0: Wert einlesen ║
- ║ 1: Wert korrigieren ║
- ║ Return: Feld mit Flags, die angeben, ob das Werte- ║
- ║ feld leer ist, oder ob ein Wert übernommen wurde. ║
- ║ 0: kein Wert im Wertefeld ║
- ║ 1: Wert übernommen ║
- ║INTEGER Anzahl der Maskenfelder. ║
- ║INTEGER Zeile in der die Tastenbelegung für die Beendigung ║
- ║ der Maske beschrieben wird oder Null, wenn keine ║
- ║ Meldung ausgegeben werden soll. Die Meldung ist 54 ║
- ║ Zeichen lang, wenn "FLAG" größer/gleich 1024 ist, ║
- ║ sonst nur 49 Zeichen. ║
- ║INTEGER Spalte ab der die Tastenbelegung für die Beendigung ║
- ║ der Maske beschrieben wird oder Null, wenn keine ║
- ║ Meldung ausgegeben werden soll oder 100, wenn die ║
- ║ Meldung mittenzentriert ausgegeben werden soll. Die ║
- ║ Meldung ist 54 Zeichen lang, wenn "FLAG" größer/ ║
- ║ gleich 1024 ist, sonst nur 49 Zeichen. ║
- ║INTEGER Farbattribut; Siehe Anhang: "Farbattribute". Wenn ║
- ║ ein Monochrome-Monitor erkannt wird, erfolgt die ║
- ║ Ausgabe im Schwarz/weiß-Modus. ║
- ║ Bit 0 - 2: Vordergrundfarbe ║
- ║ Bit 3 : Intensität der Vordergundfarbe ║
- ║ Bit 4 - 6: Hintergrundfarbe ║
- ║ Bit 7 : blinken ║
- ║INTEGER Bitmuster für Abschlußtasten zum Beenden der ║
- ║ Eingabe bzw. Korrektur in einer Maske: ║
- ║ 32: <Bild-aufwärts>-Taste ║
- ║ 64: <Bild-abwärts>-Taste ║
- ║ 512: <Escape>-Taste ║
- ║ 1024: <F1>-Taste ║
- ║ 2048: <F2>-Taste ║
- ║ 4096: <F3>-Taste ║
- ║ 8192: <F4>-Taste ║
- ║ 16384: <F5>-Taste ║
- ║ 32768: <F6>-Taste ║
- ║ 65536: <F7>-Taste ║
- ║ 131072: <F8>-Taste ║
- ║ 262144: <F9>-Taste ║
- ║ 524288: <F10>-Taste ║
- ║ Die Abschlußtasten können durch Addition miteinander║
- ║ verknüpft werden. Wenn die Bild-aufwärts- und ║
- ║ Bild-abwärts-Tasten nicht gewählt sind, wird bei ║
- ║ deren Benutzung zum ersten bzw. letzten Maskenfeld ║
- ║ gesprungen. ║
- ║ Return: Bitmuster der Abschlußtaste ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Subroutinen: ADRESS,AREAD,AWRI,DREAD,IREAD,LAENGE,PEEK,POKE,RREAD║
- ╟─────────────────────────────────────────────────────────────────────╢
-
-
- Seite 50
-
-
- ║Beispiel: INTEGER ADDR(4),ART(4),FORM(4),ZEI(4),SP(4),AUF(4), ║
- ║ -AB(4),KON(4),IWERT,DATUM ║
- ║ REAL RWERT ║
- ║ CHARACTER TEXT*30 ║
- ║ DATA ART /1,2,3,4/, FORM /5,84,30,0/ ║
- ║ DATA ZEI /3,3,4,4/, SP /5,40,5,40/ ║
- ║ DATA AUF /0,3,1,2/, AB /3,4,2,0/ ║
- ║ DATA KON /0,0,0,0/ ║
- ║ ADDR(1)=LOC(IWERT) ║
- ║ ADDR(2)=LOC(RWERT) ║
- ║ ADDR(3)=LOC(TEXT) ║
- ║ ADDR(4)=LOC(DATUM) ║
- ║ CALL MASK ║
- ║ -(ART,ADDR,FORM,ZEI,SP,AUF,AB,KON,4,24,15,23,608) ║
- ║ In den Zeilen 3 und 4 wird eine Bildschirmmaske ║
- ║ zur Verfügung gestellt, die es ermöglicht je einen ║
- ║ Integer- und Realwert, einen Text und einen Datums- ║
- ║ string zu bearbeiten. In Zeile 24 werden die zur ║
- ║ Verfügung stehenden Tasten erklärt. Die Maske kann ║
- ║ durch die Escapetaste und durch die Bild-aufwärts- ║
- ║ und Bild-abwärts-Tasten abgeschlossen werden. Die ║
- ║ eingegebenen Werte werden mit hellgrauer Farbe auf ║
- ║ blauem Hintergrund dargestellt. ║
- ╚═════════════════════════════════════════════════════════════════════╝
-
-
- Seite 51
-
-
- ╔═════════════════════════════════════════════════════════════════════╗
- ║Beschreibung der Subroutine ║
- ║TXMASK (FELD,LAN,ZEI,SP,AUF,AB,KON,ANZ,MZEI,MSP,COL,FLAG) ║
- ║Die Subroutine stellt auf dem Bildschirm positionierte Felder des ║
- ║Datentyps CHARACTER in Form einer Maske zur Verfügung. Es ist ║
- ║möglich, Texte einzulesen und/oder cursorgesteuert zu ändern. Mit ║
- ║Hilfe der Cursor- und Tabulatortasten und der Bild-aufwärts und ║
- ║Bild-abwärts-Tasten wird das Springen zwischen den Feldern der Maske ║
- ║möglich. Zum Beenden der Maskeneingabe können wahlweise die Tasten ║
- ║Bild-aufwärts und Bild-abwärts, die Escape-Taste oder die ║
- ║Funktionstasten 1 bis 5 gewählt werden. In der Zeile "MZEI" ab der ║
- ║Spalte "MSP" werden dem Benutzer die zur Verfügung stehenden Tastenn ║
- ║erklärt. Zum Beschreiben und Ändern der Maskenfelder können alle ║
- ║Tasten des Cursorblocks benutzt werden. ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Parameter: ║
- ║CHARACTERFELD Feld für einzulesende oder zu ändernde Texte. ║
- ║ Return: Eingelesene bzw. geänderte Texte. ║
- ║ [ FELD(ANZ)*(*) ]. ║
- ║INTEGERFELD Feld mit Längenangaben der aus den Maskenfeldern ║
- ║ zu lesenden oder zu korrigierenden Texte. ║
- ║ [ LAN(ANZ) ] (1 bis 79) ║
- ║INTEGERFELD Feld mit Zeilen, in denen sich die jeweiligen ║
- ║ Maskenfelder befinden [ ZEI(ANZ) ]. ║
- ║ Die Zeilennummern dürfen zwischen 1 und 24 liegen, ║
- ║ es ist aber zu beachten, daß in Zeile 24 der ║
- ║ Hinweistext über die Tastenbelegung erscheint. ║
- ║INTEGERFELD Feld mit Spalten, in denen die jeweiligen Masken- ║
- ║ felder beginnen [ SP(ANZ) ]. ║
- ║ Die Spaltennummern dürfen zwischen 1 und 79 liegen. ║
- ║INTEGERFELD Feld mit Nummern der Maskenfelder, die angesprungen ║
- ║ werden, wenn das Maskenfeld mit der Cursor-aufwärts-║
- ║ Taste verlassen wird. [ AUF(ANZ) ]. ║
- ║INTEGERFELD Feld mit Nummern der Maskenfelder, die angesprungen ║
- ║ werden, wenn das Maskenfeld mit der Cursor-abwärts- ║
- ║ Taste verlassen wird. [ AB(ANZ) ]. ║
- ║INTEGERFELD Feld mit Flags, die angeben, ob ein Text neu ║
- ║ eingelesen oder korrigiert werden soll. ║
- ║ 0: Text einlesen ║
- ║ 1: Text korrigieren ║
- ║ Return: Feld mit Flags, die angeben, ob das Masken- ║
- ║ feld leer ist, oder ob ein Text übernommen wurde. ║
- ║ 0: kein Wert im Maskenfeld ║
- ║ 1: Text übernommen ║
- ║INTEGER Anzahl der Maskenfelder. ║
- ║INTEGER Zeile in der die Tastenbelegung für die Beendigung ║
- ║ der Maske beschrieben wird oder Null, wenn keine ║
- ║ Meldung ausgegeben werden soll. Die Meldung ist 54 ║
- ║ Zeichen lang, wenn "FLAG" größer/gleich 1024 ist, ║
- ║ sonst nur 49 Zeichen. ║
- ║INTEGER Spalte ab der die Tastenbelegung für die Beendigung ║
- ║ der Maske beschrieben wird oder Null, wenn keine ║
- ║ Meldung ausgegeben werden soll oder 100, wenn die ║
- ║ Meldung mittenzentriert ausgegeben werden soll. Die ║
- ║ Meldung ist 54 Zeichen lang, wenn "FLAG" größer/ ║
-
-
- Seite 52
-
-
- ║ gleich 1024 ist, sonst nur 49 Zeichen. ║
- ║INTEGER Farbattribut; Siehe Anhang: "Farbattribute". Wenn ║
- ║ ein Monochrome-Monitor erkannt wird, erfolgt die ║
- ║ Ausgabe im Schwarz/weiß-Modus. ║
- ║ Bit 0 - 2: Vordergrundfarbe ║
- ║ Bit 3 : Intensität der Vordergundfarbe ║
- ║ Bit 4 - 6: Hintergrundfarbe ║
- ║ Bit 7 : blinken ║
- ║INTEGER Bitmuster für Abschlußtasten zum Beenden der ║
- ║ Eingabe bzw. Korrektur in einer Maske: ║
- ║ 32: <Bild-aufwärts>-Taste ║
- ║ 64: <Bild-abwärts>-Taste ║
- ║ 512: <Escape>-Taste ║
- ║ 1024: <F1>-Taste ║
- ║ 2048: <F2>-Taste ║
- ║ 4096: <F3>-Taste ║
- ║ 8192: <F4>-Taste ║
- ║ 16384: <F5>-Taste ║
- ║ Die Abschlußtasten können durch Addition miteinander║
- ║ verknüpft werden. Wenn die Bild-aufwärts- und ║
- ║ Bild-abwärts-Tasten nicht gewählt sind, wird bei ║
- ║ deren Benutzung zum ersten bzw. letzten Maskenfeld ║
- ║ gesprungen. ║
- ║ Return: Bitmuster der Abschlußtaste ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Subroutinen: AREAD,AWRI,LAENGE ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Beispiel: INTEGER LAN(4),ZEI(4),SP(4),AUF(4),AB(4),KON(4) ║
- ║ CHARACTER TEXT(4)*30 ║
- ║ DATA LAN /30,20,8,10/, ZEI /3,3,4,4/, SP /5,40,5,40/║
- ║ DATA AUF /0,3,1,2/, AB /3,4,2,0/, KON /4*0/ ║
- ║ CALL TXMASK ║
- ║ -(TEXT,LAN,ZEI,SP,AUF,AB,KON,4,24,15,23,608) ║
- ║ In den Zeilen 3 und 4 wird eine Bildschirmmaske ║
- ║ zur Verfügung gestellt, die das Einlesen von vier ║
- ║ Textstrings erlaubt. In Zeile 24 werden die zur ║
- ║ Verfügung stehenden Tasten erklärt. Die Maske kann ║
- ║ durch die Escapetaste und durch die Bild-aufwärts- ║
- ║ und Bild-abwärts-Tasten abgeschlossen werden. Die ║
- ║ eingegebenen Werte werden mit hellgrauer Farbe auf ║
- ║ blauem Hintergrund dargestellt. ║
- ╚═════════════════════════════════════════════════════════════════════╝
-
-
- Seite 53
-
-
- Fenstertechnik
-
- Mit Fenstertechnik wird ein Verfahren bezeichnet, das es ermöglicht,
- Aktionen am Bildschirm mit Hilfe verschiedener Fenster durchzuführen,
- die im Arbeitspeicher vorgehalten werden können und so für spätere
- Aktionen zur Verfügung stehen. Mit den in FORSUB.LIB enthaltenen
- Subroutinen zur hirachischen Fenstertechnik können Menüs, Texte und
- Datenfelder erzeugt, verwaltet und gespeichert werden.
-
- Die Subroutinen allokieren automatisch den für die Fenster benötigten
- Speicherbereich im Arbeitspeicher. Wenn im Arbeitsspeicher nicht mehr
- genügend Speicherplatz vorhanden ist, wird eine temporäre, direct
- organisierte Datei eröffnet. Die dort abgelegten Fenster stehen
- unabhängig von der Größe des noch freien Arbeitsspeichers zur Verfügung.
-
- Jeweils bis zu dreißig Bildschirmfenster können mit Hilfe eines
- Verwaltungsfeldes verwaltet werden. Jede Fensterroutine benötigt eine
- Nummer zwischen eins und dreißig für das Fenster und die Adresse des
- Verwaltungsfeldes. Die Adresse des Verwaltungsfeldes wird automatisch
- ermittelt, wenn beim Ablegen eines Bildschirmfensters in den
- Arbeitsspeicher noch keine Adresse für das Verwaltungsfeld vorhanden
- ist. Es wird von den Fensterroutinen jeweils aktualisiert. Der
- Programmierer muß sich nicht mit dem Verwaltungsfeld aufhalten, da alle
- Aktualisierungen absolut im Hintergrund ablaufen. Selbstverständlich
- ist es möglich, mehrere Verwaltungsfelder zu erzeugen und so mehr als
- dreißig Bildschirmfenster zu speichern.
-
- Die Nummer des Bildschirmfensters gibt die Priorität an, mit der es am
- Bildschirm dargestellt wird. Fenster mit höheren Fensternummern
- überdecken Fenster mit niedrigeren Fensternummern. Viele Subroutinen
- stellen das gerade zu bearbeitende Fenster vorübergehend mit der
- höchsten Priorität am Bildschirm dar, um es nach Abschluß der
- Bearbeitung an die ursprüngliche Position zurückzustellen.
-
-
- Subroutinen zur Fenstertechnik
-
- PUTFEN a) Bildschirmausschnitt als Fenster im Arbeitsspeicher ablegen
- MAKFEN a) Characterfeld als Fenster im Arbeitsspeicher ablegen
- TEXFEN a) Text aus einer direct organisierten Datei als Fenster im
- Arbeitsspeicher ablegen
- b) Text aus einer direct organisierten Datei mehrspaltig in
- einem Fenster ablegen
- GETFEN a) Fenster aus dem Arbeitsspeicher holen und auf dem Bildschirm
- positionieren
- PRIFEN a) Priorität zweier Bildschirmfenster austauschen
- MOVFEN a) Fenster mit Hilfe der Cursortasten über den Bildschirm
- bewegen
- MOPFEN a) Position eines Fensters auf dem Bildschirm verändern
- GROFEN a) Größe eines Fensters mit Hilfe der Cursortasten verändern
- GRPFEN a) Größe eines Fensters auf dem Bildschirm verändern
- LOSFEN a) Inhalt eines Fensters löschen
- RAMFEN a) Fenster umrahmen und im oberen und unteren Rahmenteil mit
- Meldungen versehen
- WRIFEN a) Fenster von der Tastatur aus mit Text beschreiben
-
-
- Seite 54
-
-
- ME1FEN a) Einfache Menüauswahl in einem Fenster
- MEMFEN a) Mehrfache Menüauswahl in einem Fenster
- VERFEN a) Mehrere Fenster mit Hilfe eines Verwaltungsfensters am
- Bildschirm verwalten
- CLOFEN a) Fenster vom Bildschirm entfernen
- FREFEN a) Fenster aus dem Arbeitsspeicher entfernen
- INFFEN a) Informationen über ein Fenster abfragen
-
-
- Seite 55
-
-
- ╔═════════════════════════════════════════════════════════════════════╗
- ║Beschreibung der Subroutine PUTFEN (NR,H,B,ZEI,SP,VSEG,FLAG) ║
- ║Die Subroutine kopiert ein definiertes Fenster vom Bildschirm in die ║
- ║Memory. Wenn keine Memory mehr verfügbar ist, wird das Bildschirm- ║
- ║fenster in einer temporären Datei abgelegt. Informationen über die ║
- ║Ausmaße des Bildschirmfensters und über die Adresse an der es ║
- ║gespeichert ist, werden automatisch in einem Verwaltungsfeld, das ║
- ║sich ebenfalls in der Memory befindet, abgelegt. Das Verwaltungsfeld ║
- ║wird angelegt, wenn in der Variablen "VSEG" eine Null an die ║
- ║Subroutine übergeben wird. In "VSEG" wird die Adresse des ║
- ║Verwaltungsfeldes an das rufende Programm zurückgegeben. Sie wird ║
- ║für alle zukünftigen Zugriffe auf Fenster mit Hilfe der Fenster- ║
- ║routinen benötigt. Die Nummer des abzulegenden Bildschirmfensters ║
- ║wird in der Variablen "NR" übergeben. Sie kann zum Aufbau einer ║
- ║hirarchischen Struktur der Bildschirmfenster benutzt werden. Es ║
- ║können mehrere Verwaltungsfelder nebeneinander benutzt werden, so daß║
- ║insgesamt mehr als 30 Bildschirmfenster in der Memory bzw. in einem ║
- ║temporären File abgelegt werden können. Wenn diese Subroutine von ║
- ║einem Programm genutzt wird, darf keine Datei mit dem Unit 100 ║
- ║eröffnet werden, da das Unit für die temporäre Datei benötigt wird. ║
- ║Bei erfolgreicher Beendigung der Subroutine steht in "FLAG" eine ║
- ║Null, sonst eine Eins. ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Parameter: ║
- ║INTEGER Nummer des in der Memory abzulegenden Bildschirm- ║
- ║ fensters [ 1 bis 30 ]. Wenn die Nummer schon ║
- ║ durch ein anderes Bildschirmfenster belegt ist, ║
- ║ wird die Routine mit "FLAG" gleich Eins abgebrochen.║
- ║ Durch die Nummer wird die Hirarchie der Bildschirm- ║
- ║ fenster festgelegt. ║
- ║INTEGER Höhe des Bildschirmfensters in Zeilen [ 1 bis 25 ]. ║
- ║INTEGER Breite des Bildschirmfensters in Spalten ║
- ║ [ 1 bis 80 ]. ║
- ║INTEGER Zeile in der das Bildschirmfenster beginnt ║
- ║ [ 1 bis 25 ]. ║
- ║INTEGER Spalte, in der das Bildschirmfenster beginnt ║
- ║ [ 1 bis 80 ]. ║
- ║INTEGER Zum Anlegen des Verwaltungsfeldes wird eine Null ║
- ║ an die Routine übergeben. ║
- ║ Return: Adresse des Verwaltungsfeldes. Sie ist ║
- ║ positiv, wenn das Verwaltungsfeld in der Memory ║
- ║ abgelegt ist und negativ, wenn es in einer ║
- ║ temporären Datei abgelegt ist. ║
- ║INTEGER Return: Fehlerflag ║
- ║ 0: Subroutine erfolgreich abgeschlossen. ║
- ║ 1: Ein Fehler ist aufgetreten. ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Subroutinen: CREMEM,GETMEM,PUTMEM,SCREEN ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Beispiel: INTEGER H,B,ZEI,SP,VSEG,COL ║
- ║ DATA H/10/,B/20/,ZEI/1/,SP/1/,VSEG/0/,COL/23/ ║
- ║ CALL LOES (H,B,ZEI,SP,32,COL,0) ║
- ║ CALL RAHM (H,B,ZEI,SP,0,COL,0) ║
- ║ CALL PUTFEN (3,H,B,ZEI,SP,VSEG,I) ║
- ║ IF (I .NE. 0) GOTO 1 ║
-
-
- Seite 56
-
-
- ║ CALL GETFEN (3,11,40,VSEG,I) ║
- ║ IF (I .NE. 0) GOTO 1 ║
- ║ CALL CLOFEN (3,VSEG,COL,I) ║
- ║ IF (I .NE. 0) GOTO 1 ║
- ║ CALL FREFEN (3,VSEG,I) ║
- ║ IF (I .NE. 0) GOTO 1 ║
- ║ RETURN ║
- ║ 1 WRITE(*,'(1X,A)') 'Fehler!' ║
- ║ Mit den Subroutinen "LOES" und "RAHM" wird ein ║
- ║ Bildschirmfenster aufgebaut, das mit der Subroutine ║
- ║ "PUTFEN" in die Memory bzw. in einen temporären ║
- ║ File ausgelagert wird. Mit der Subrouteine "GETFEN" ║
- ║ wird das gespeicherte Fenster an eine andere ║
- ║ Position des Bildschirms zurückgeschrieben. Die ║
- ║ Subroutine "CLOFEN" löscht den das Fenster ║
- ║ einnehmenden Bildschirmbereich mit dem Farbattribut ║
- ║ "COL" bzw stellt dort vorhandene Fenster wieder her.║
- ║ Die Subroutine "FREFEN" gibt den für das Fenster ║
- ║ allokierten Speicherbereich bzw. Filebereich wieder ║
- ║ frei. Beim Auftreten eines Fehlers wird eine ║
- ║ Meldung ausgegeben. ║
- ╚═════════════════════════════════════════════════════════════════════╝
-
-
- Seite 57
-
-
- ╔═════════════════════════════════════════════════════════════════════╗
- ║Beschreibung der Subroutine MAKFEN (NR,FELD,H,B,VSEG,COL,FLAG) ║
- ║Die Subroutine kopiert ein in einem zweidimensionalen Characterfeld ║
- ║angelegtes Bildschirmfenster mit der Hintergrundfarbe "COL" in die ║
- ║Memory. Wenn keine Memory mehr verfügbar ist, wird das Bildschirm- ║
- ║fenster in einer temporären Datei abgelegt. Informationen über die ║
- ║Ausmaße des Bildschirmfensters und über die Adresse an der es ║
- ║gespeichert ist, werden automatisch in einem Verwaltungsfeld, das ║
- ║sich ebenfalls in der Memory befindet, abgelegt. Das Verwaltungsfeld ║
- ║wird angelegt, wenn in der Variablen "VSEG" eine Null an die ║
- ║Subroutine übergeben wird. In "VSEG" wird die Adresse des ║
- ║Verwaltungsfeldes an das rufende Programm zurückgegeben. Sie wird ║
- ║für alle zukünftigen Zugriffe auf bis zu 30 im Verwaltungsfeld ║
- ║definierte Fenster durch Fensterroutinen benötigt. Die Nummer des ║
- ║abzulegenden Fensters wird in der Variablen "NR" übergeben. Sie kann ║
- ║zum Aufbau einer hirarchischen Struktur der Bildschirmfenster benutzt║
- ║werden. Es können mehrere Verwaltungsfelder nebeneinander benutzt ║
- ║werden, so daß insgesamt mehr als 30 Bildschirmfenster in der Memory ║
- ║bzw. temporären File abgelegt werden können. Wenn diese Subroutine ║
- ║von einem Programm genutzt wird, darf keine Datei mit dem Unit 100 ║
- ║eröffnet werden, da das Unit für die temporäre Datei benötigt wird. ║
- ║Bei erfolgreicher Beendigung der Subroutine steht in "FLAG" eine ║
- ║Null, sonst eine Eins. ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Parameter: ║
- ║INTEGER Nummer des in der Memory abzulegenden Bildschirm- ║
- ║ fensters [ 1 bis 30 ]. Wenn die Nummer schon ║
- ║ durch ein anderes Bildschirmfenster belegt ist, ║
- ║ wird die Routine mit "FLAG" gleich Eins abgebrochen.║
- ║ Durch die Nummer wird die Hirarchie der Bildschirm- ║
- ║ fenster festgelegt. ║
- ║CHARACTERFELD Characterfeld dessen Inhalt als Bildschirmfenster ║
- ║ abgelegt werden soll. [ FELD(H)*B ]. ║
- ║INTEGER Höhe des Bildschirmfensters in Zeilen [ 1 bis 25 ]. ║
- ║INTEGER Breite des Bildschirmfensters in Spalten ║
- ║ [ 1 bis 80 ]. ║
- ║INTEGER Zum Anlegen des Verwaltungsfeldes wird eine Null ║
- ║ an die Routine übergeben. ║
- ║ Return: Adresse des Verwaltungsfeldes. Sie ist ║
- ║ positiv, wenn das Verwaltungsfeld in der Memory ║
- ║ abgelegt ist und negativ, wenn es in einer ║
- ║ temporären Datei abgelegt ist. ║
- ║INTEGER Farbattribut; siehe Anhang: "Farbattribute". Wenn ║
- ║ ein Monochrome-Monitor erkannt wird, erfolgt die ║
- ║ Ausgabe im Schwarz/Weiß-Modus. ║
- ║ Bit 0 - 2: Vordergrundfarbe ║
- ║ Bit 3 : Intensität der Vordergrundfarbe ║
- ║ Bit 4 - 6: Hintergrundfarbe ║
- ║ Bit 7 : blinken ║
- ║INTEGER Return: Fehlerflag ║
- ║ 0: Subroutine erfolgreich abgeschlossen. ║
- ║ 1: Ein Fehler ist aufgetreten. ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Subroutinen: ATTRIB,CREMEM,GETMEM,PUTMEM ║
- ╟─────────────────────────────────────────────────────────────────────╢
-
-
- Seite 58
-
-
- ║Beispiel: INTEGER H,B,ZEI,SP,VSEG,COL ║
- ║ CHARACTER FELD(2)*30 ║
- ║ DATA H/2/,B/30/,ZEI/11/,SP/40/,VSEG/0/,COL/23/ ║
- ║ FELD(1)='TESTTEXT FÜR DIE' ║
- ║ FELD(2)='SUBROUTINE MAKFEN' ║
- ║ CALL MAKFEN (3,FELD,H,B,COL,VSEG,I) ║
- ║ IF (I .NE. 0) GOTO 1 ║
- ║ CALL GETFEN (3,11,40,VSEG,I) ║
- ║ IF (I .NE. 0) GOTO 1 ║
- ║ CALL CLOFEN (3,VSEG,COL,I) ║
- ║ IF (I .NE. 0) GOTO 1 ║
- ║ CALL FREFEN (3,VSEG,I) ║
- ║ IF (I .NE. 0) GOTO 1 ║
- ║ RETURN ║
- ║ 1 WRITE(*,'(1X,A)') 'Fehler!' ║
- ║ Mit der Subroutine "MAKFEN" wird ein in "FELD" ║
- ║ abgelegter Text mit dem Farbattribut "COL" als ║
- ║ Bildschirmfenster in die Memory bzw. in einen ║
- ║ temporären File ausgelagert. Mit der Subrouteine ║
- ║ "GETFEN" wird das gespeicherte Fenster anschließend ║
- ║ positioniert auf den Bildschirms geschrieben. Die ║
- ║ Subroutine "CLOFEN" löscht den das Fenster ║
- ║ einnehmenden Bildschirmbereich mit dem Farbattribut ║
- ║ "COL" bzw stellt dort vorhandene Fenster wieder her.║
- ║ Die Subroutine "FREFEN" gibt den für das Fenster ║
- ║ allokierten Speicherbereich bzw. Filebereich wieder ║
- ║ frei. Beim Auftreten eines Fehlers wird eine ║
- ║ Meldung ausgegeben. ║
- ╚═════════════════════════════════════════════════════════════════════╝
-
-
- Seite 59
-
-
- ╔═════════════════════════════════════════════════════════════════════╗
- ║Beschreibung der Subroutine ║
- ║TEXFEN (NR,ANZ,SPZ,LANG,UNIT,SNR,COL,VSEG,FLAG) ║
- ║Die Subroutine liest aus einer direct organisierten Datei mit dem ║
- ║Unit "UNIT" ab der Satznummer "SNR" eine Anzahl "ANZ" Characterstings║
- ║ein. Die Characterstrings werden "SPZ"-spaltig mit der jeweiligen ║
- ║Länge "LAN" und dem Farbattribut "COL" einem Fenster mit der Nummer ║
- ║"NR" zugeordnet. Die Ausmaße des Fensters werden automatisch ║
- ║ermittelt. Das Fenster darf noch nicht vorhanden sein. Die Subroutine║
- ║eignet sich als Vorbereitung für die Routinen "ME1FEN" und "MENFEN". ║
- ║Informationen über die Ausmaße des Bildschirmfensters und über die ║
- ║Adresse an der es gespeichert ist, werden automatisch in einem ║
- ║Verwaltungsfeld, das sich ebenfalls in der Memory befindet, abgelegt.║
- ║Die Adresse des Verwaltungsfeldes wird in "VSEG" übergeben. Um ein ║
- ║neues Verwaltungsfeld anzulegen, muß in "VSEG" eine Null übergeben ║
- ║werden. Die Adresse wird für alle Zugriffe auf bis zu 30 im ║
- ║Verwaltungsfeld definierte Fenster benötigt. Die Nummer des mit Text ║
- ║zu belegenden Bildschirmfensters stellt die Priorität gegenüber ║
- ║anderen Fensters dar. Sie wird in der Variablen "NR" übergeben. ║
- ║Wenn diese Subroutine benutzt wird, darf das Dateiunit 100 vom ║
- ║rufenden Programm nicht verwendet werden. Bei erfolgreicher ║
- ║Beendigung der Routine steht in "FLAG" eine Null, sonst eine Eins. ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Parameter: ║
- ║INTEGER Nummer des mit Texten zu beschreibenden Bildschirm- ║
- ║ fensters [ 1 bis 30 ]. Wenn die Nummer bereits ║
- ║ durch ein Bildschirmfenster belegt ist, wird die ║
- ║ Routine mit "FLAG" gleich Eins abgebrochen. ║
- ║ Durch die Nummer ist die Hirarchie der Bildschirm- ║
- ║ fenster festgelegt. ║
- ║INTEGER Anzahl der gewünschten Textfelder. ║
- ║INTEGER Anzahl der nebeneinander angeordneten Textfelder im ║
- ║ Bildschirmfenster. ║
- ║INTEGER Länge der im Fenster abzulegenden Texte. ║
- ║INTEGER Unitnummer der direct organisierten Datei, aus der ║
- ║ die Texte gelesen werden sollen. ║
- ║INTEGER Satznummer in der direct organisierten Datei, ab der║
- ║ der Text abgelegt ist. ║
- ║INTEGER Farbattribut; siehe Anhang: "Farbattribute". Wenn ║
- ║ ein Monochrome-Monitor erkannt wird, erfolgt die ║
- ║ Ausgabe im Schwarz/Weiß-Modus. ║
- ║ Bit 0 - 2: Vordergrundfarbe ║
- ║ Bit 3 : Intensität der Vordergrundfarbe ║
- ║ Bit 4 - 6: Hintergrundfarbe ║
- ║ Bit 7 : blinken ║
- ║INTEGER Adresse des Verwaltungsfeldes oder 0 zum Anlegen ║
- ║ eines neuen Verwaltungsfeldes. ║
- ║ Return: bei Eingabe einer 0: Adresse des ║
- ║ Verwaltungsfeldes. ║
- ║INTEGER Return: Fehlerflag ║
- ║ 0: Subroutine erfolgreich abgeschlossen. ║
- ║ 1: Ein Fehler ist aufgetreten. ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Subroutinen: ATTRIB,CREMEM,GETMEM,PUTMEM ║
- ╟─────────────────────────────────────────────────────────────────────╢
-
-
- Seite 60
-
-
- ║Beispiel: INTEGER FELD(12),VSEG ║
- ║ OPEN (1,FILE='TEST',ACCESS='DIRECT', ║
- ║ -FORM='FORMATTED',RECL=72,STATUS='OLD') ║
- ║ CALL TEXFEN (2,12,3,20,1,1,23,VSEG,I) ║
- ║ IF (I .NE. 0) GOTO 1 ║
- ║ CALL RAMFEN (2,1,0,'Auswählen: <Esc>','NUM',VSEG,I) ║
- ║ IF (I .NE. 0) GOTO 1 ║
- ║ CALL GETFEN (2,5,10,VSEG,I) ║
- ║ IF (I .NE. 0) GOTO 1 ║
- ║ CALL ME1FEN (2,12,3,FELD,VSEG,I) ║
- ║ IF (I .NE. 0) GOTO 1 ║
- ║ RETURN ║
- ║ 1 WRITE(*,'(1X,A)') 'FEHLER' ║
- ║ Aus einer direct orgsanisierten Datei mit dem Unit 1║
- ║ werden mit Hilfe der Subroutine "TEXFEN" 12 Menü- ║
- ║ texte dreispaltig mit einer jeweiligen Länge von ║
- ║ 20 Characters und dem Farbattribut 23 im Fenster ║
- ║ Nummer 2 abgelegt. ║
- ║ Die Subroutine "RAMFEN" umgibt das Menüfeld im ║
- ║ Fenster mit einen einfachen Rahmen und schreibt in ║
- ║ die erste Zeile des Fensters eine Meldung. In die ║
- ║ letzte Zeile des Fensters wird außerdem die Nummer ║
- ║ des Fensters eingeblendet. Rahmen und Texte werden ║
- ║ in der vorhandenen Farbe dargestellt. ║
- ║ Die Subroutine "GETFEN" öffnet das Fenster mit dem ║
- ║ Menütext am Bildschirm ab der 5. Zeile und der 10. ║
- ║ Spalte. ║
- ║ "ME1FEN" ermöglicht die Auswahl eines einzelnen ║
- ║ Menüpunktes mit Hilfe der Cursortasten und der ║
- ║ <Escape>-Taste. Das der Auswahl entsprechende ║
- ║ Äquivalent in "FELD" wird dadurch ungleich Null ║
- ║ gesetzt. Es ist zu beachten, daß die Anzahl der ║
- ║ Menüpunkte und die Menüspaltenzahl in den Routinen ║
- ║ "TEXFEN" und "ME1FEN" übereinstimmen. ║
- ║ Wenn in einer Subroutine ein Fehler auftritt, wird ║
- ║ eine Fehlermeldung ausgegeben. ║
- ╚═════════════════════════════════════════════════════════════════════╝
-
-
- Seite 61
-
-
- ╔═════════════════════════════════════════════════════════════════════╗
- ║Beschreibung der Subroutine GETFEN (NR,ZEI,SP,VSEG,FLAG) ║
- ║Die Subroutine kopiert ein in der Memory oder in einem temporären ║
- ║File abgelegtes Bildschirmfenster an die durch "ZEI" und "SP" ║
- ║definierte Position auf den Bildschirm. Informationen über die ║
- ║Ausmaße des Bildschirmfensters und über die Adresse an der es ║
- ║gespeichert ist, werden automatisch aus einem Verwaltungsfeld, das ║
- ║sich ebenfalls in der Memory befindet, gelesen. In "VSEG" wird die ║
- ║Adresse des Verwaltungsfeldes, das vorher mit Hilfe anderer Fenster- ║
- ║routinen angelegt worden ist, übergeben. Die Adresse wird für alle ║
- ║zukünftigen Zugriffe auf bis zu 30 im Verwaltungsfeld definierte ║
- ║Fenster benötigt. Die Nummer des darzustellenden Bildschirmfensters ║
- ║stellt die Priorität gegenüber anderen Fensters dar. Sie wird in der ║
- ║Variablen "NR" übergeben. Die Position des auf dem Bildschirm ║
- ║dargestellten Fensters wird im Verwaltungsfeld aktualisiert. Auf dem ║
- ║Bildschirm vorhandene Fenster werden von der Routine ihrer in "NR" ║
- ║vergebenen Priorität entsprechend berücksichtigt. Bei erfolgreicher ║
- ║Beendigung der Subroutine ist in "FLAG" eine Null, sonst eine Eins. ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Parameter: ║
- ║INTEGER Nummer des aus der Memory auszulesenden Bildschirm- ║
- ║ fensters [ 1 bis 30 ]. Wenn die Nummer noch nicht ║
- ║ durch ein Bildschirmfenster belegt ist, wird die ║
- ║ Routine mit "FLAG" gleich Eins abgebrochen. ║
- ║ Durch die Nummer ist die Hirarchie der Bildschirm- ║
- ║ fenster festgelegt. ║
- ║INTEGER Zeile ab der das Bildschirmfenster dargestellt ║
- ║ werden soll [ 1 bis 25 ]. ║
- ║INTEGER Spalte, ab der das Bildschirmfenster dargestellt ║
- ║ werden soll [ 1 bis 80 ]. ║
- ║INTEGER Adresse des Verwaltungsfeldes. ║
- ║INTEGER Return: Fehlerflag ║
- ║ 0: Subroutine erfolgreich abgeschlossen. ║
- ║ 1: Ein Fehler ist aufgetreten. ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Subroutinen: GETMEM,PUTMEM,SCREEN ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Beispiel: INTEGER H,B,ZEI,SP,VSEG,COL ║
- ║ DATA H/10/,B/20/,ZEI/1/,SP/1/,VSEG/0/,COL/23/ ║
- ║ CALL LOES (H,B,ZEI,SP,32,COL,0) ║
- ║ CALL RAHM (H,B,ZEI,SP,0,COL,0) ║
- ║ CALL PUTFEN (3,H,B,ZEI,SP,VSEG,I) ║
- ║ IF (I .NE. 0) GOTO 1 ║
- ║ CALL GETFEN (3,11,40,VSEG,I) ║
- ║ IF (I .NE. 0) GOTO 1 ║
- ║ CALL CLOFEN (3,VSEG,COL,I) ║
- ║ IF (I .NE. 0) GOTO 1 ║
- ║ CALL FREFEN (3,VSEG,I) ║
- ║ IF (I .NE. 0) GOTO 1 ║
- ║ RETURN ║
- ║ 1 WRITE(*,'(1X,A)') 'Fehler!' ║
- ║ Mit den Subroutinen "LOES" und "RAHM" wird ein ║
- ║ Bildschirmfenster aufgebaut, das mit der Subroutine ║
- ║ "PUTFEN" in die Memory bzw. in einen temporären ║
- ║ File ausgelagert wird. Mit der Subroutine "GETFEN" ║
-
-
- Seite 62
-
-
- ║ wird das gespeicherte Fenster an eine andere ║
- ║ Position des Bildschirms zurückgeschrieben. Die ║
- ║ Subroutine "CLOFEN" löscht den das Fenster ║
- ║ einnehmenden Bildschirmbereich mit dem Farbattribut ║
- ║ "COL" bzw stellt dort vorhandene Fenster wieder her.║
- ║ Die Subroutine "FREFEN" gibt den für das Fenster ║
- ║ allokierten Speicherbereich bzw. Filebereich wieder ║
- ║ frei. Beim Auftreten eines Fehlers wird eine ║
- ║ Meldung ausgegeben. ║
- ╚═════════════════════════════════════════════════════════════════════╝
-
-
- Seite 63
-
-
- ╔═════════════════════════════════════════════════════════════════════╗
- ║Beschreibung der Subroutine PRIFEN (NR1,NR2,VSEG,COL,FLAG) ║
- ║Die Subroutine tauscht die Priorität zweier Bildschirmfenster mit den║
- ║Fensternummern "NR1" und "NR2" untereinander aus. Wenn ein oder beide║
- ║Fenster am Bildschirm vorhanden sind, erfolgt die Darstellung mit der║
- ║jeweils neuen Priorität. Wenn die Fenster nicht am Bildschirm ║
- ║vorhanden sind, werden die erforderlichen Werte im Verwaltungsfeld ║
- ║geändert. Dabei ist es nicht erforderlich, daß beide Fenster im Ver- ║
- ║waltungsfeld vorhanden sind. Der frei werdende Hintergrund wird mit ║
- ║dem in "COL" übergebenen Farbattribut gelöscht oder mit dem Inhalt ║
- ║des Bildschirmfensters Nummer 1 beschrieben. Informationen über ║
- ║die Ausmaße des Bildschirmfensters und über die Adresse an der es ║
- ║gespeichert ist, werden automatisch aus einem Verwaltungsfeld, das ║
- ║sich ebenfalls in der Memory befindet, gelesen. In "VSEG" wird die ║
- ║Adresse des Verwaltungsfeldes übergeben. Die Adresse wird für alle ║
- ║Zugriffe auf Fensterroutinen benötigt. Die Nummern der zu ändernden ║
- ║Fenster stellen die Priorität gegenüber anderen Fenstern dar. Sie ║
- ║werden in der Variablen "NR1" und "NR2" übergeben. Die neuen ║
- ║Prioritäten der Fensters werden im Verwaltungsfeld aktualisiert. ║
- ║Andere auf dem Bildschirm vorhandene Fenster werden von der Routine ║
- ║ihrer eigenen Priorität entsprechend berücksichtigt. Bei erfolg- ║
- ║reicher Beendigung der Subroutine wird in "FLAG" eine Null zurück- ║
- ║gegeben, sonst eine Eins. ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Parameter: ║
- ║INTEGER Nummer mit der Priorität des ersten Fensters ║
- ║ [ 1 bis 30 ]. ║
- ║ Durch die Nummer ist die Hirarchie der Bildschirm- ║
- ║ fenster festgelegt. ║
- ║INTEGER Nummer mit der Priorität des zweiten Fensters ║
- ║ [ 1 bis 30 ]. ║
- ║ Durch die Nummer ist die Hirarchie der Bildschirm- ║
- ║ fenster festgelegt. ║
- ║INTEGER Adresse des Verwaltungsfeldes. ║
- ║INTEGER Farbattribut; siehe Anhang: "Farbattribute". Wenn ║
- ║ ein Monochrome-Monitor erkannt wird, erfolgt die ║
- ║ Ausgabe im Schwarz/Weiß-Modus. ║
- ║ Bit 0 - 2: Vordergrundfarbe ║
- ║ Bit 3 : Intensität der Vordergrundfarbe ║
- ║ Bit 4 - 6: Hintergrundfarbe ║
- ║ Bit 7 : blinken ║
- ║ oder: 0 zum Beschreiben des Hintergrundes mit dem ║
- ║ Inhalt des unter der Nummer 1 abgelegten Fensters. ║
- ║INTEGER Return: Fehlerflag ║
- ║ 0: Subroutine erfolgreich abgeschlossen. ║
- ║ 1: Ein Fehler ist aufgetreten. ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Subroutinen: CLOFEN,GETFEN,GETMEM,PUTMEM ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Beispiel: INTEGER VSEG,COL ║
- ║ DATA VSEG/0/,COL/23/ ║
- ║ CALL LOES (10,10,5,5,32,COL,0) ║
- ║ CALL RAHM (10,10,5,5,0,COL,0) ║
- ║ CALL PUTFEN (3,10,10,5,5,VSEG,I) ║
- ║ IF (I .NE. 0) GOTO 1 ║
-
-
- Seite 64
-
-
- ║ CALL LOES (11,11,9,9,32,COL,0) ║
- ║ CALL RAHM (11,11,9,9,0,COL,0) ║
- ║ CALL PUTFEN (5,11,11,9,9,VSEG,I) ║
- ║ IF (I .NE. 0) GOTO 1 ║
- ║ CALL PRIFEN (3,5,VSEG,COL,I) ║
- ║ IF (I .NE. 0) GOTO 1 ║
- ║ RETURN ║
- ║ 1 WRITE(*,'(1X,A)') 'Fehler!' ║
- ║ Mit den Subroutinen "LOES" und "RAHM" und "PUTFEN" ║
- ║ werden zwei Bildschirmfenster mit den Nummern 3 und ║
- ║ 5 angelegt und mit der entsprechenden Priorität am ║
- ║ Bildschirm dargestellt. "PRIFEN" wechselt im ║
- ║ Verwaltungsfeld die Nummern untereinander aus und ║
- ║ ändert die Bildschirmdarstellung der neuen ║
- ║ Priorität entsprechend um. Eventuell freiwerdender ║
- ║ Hintergrund wird mit dem Farbattribut "COL" ║
- ║ beschrieben. Beim Auftreten eines Fehlers wird eine ║
- ║ Meldung ausgegeben. ║
- ╚═════════════════════════════════════════════════════════════════════╝
-
-
- Seite 65
-
-
- ╔═════════════════════════════════════════════════════════════════════╗
- ║Beschreibung der Subroutine MOVFEN (NR,VSEG,COL,FLAG) ║
- ║Die Subroutine bewegt ein am Bildschirm vorhandenes Fenster mit Hilfe║
- ║der Cursortasten über den Bildschirm. Informationen über die ║
- ║Ausmaße des Bildschirmfensters und über die Adresse an der es ║
- ║gespeichert ist, werden automatisch aus einem Verwaltungsfeld, das ║
- ║sich ebenfalls in der Memory befindet, gelesen. In "VSEG" wird die ║
- ║Adresse des Verwaltungsfeldes, das vorher mit einer anderen Fenster- ║
- ║routine angelegt worden ist, übergeben. Die Adresse wird für alle ║
- ║Zugriffe auf bis zu 30 im Verwaltungsfeld definierte Fenster durch ║
- ║Fensterroutinen benötigt. Die Nummer des zu bewegenden Fensters ║
- ║stellt die Priorität gegenüber anderen Fensters dar. Sie wird in der ║
- ║Variablen "NR" übergeben. Die Position des über den Bildschirm ║
- ║bewegten Fensters wird im Verwaltungsfeld aktualisiert. Auf dem ║
- ║Bildschirm vorhandene Fenster werden von der Routine ihrer in "NR" ║
- ║vergebenen Priorität entsprechend berücksichtigt. Der Hintergrund ║
- ║kann entweder mit dem im Verwaltungsfeld unter der Nummer 1 ║
- ║abgelegten Fensterinhalt oder mit einer Hintergrundfarbe "COL" ║
- ║beschrieben werden. Die Funktion wird mit der "Escape"- oder mit der ║
- ║"Return"-Taste beendet. Bei erfolgreicher Beendigung der Subroutine ║
- ║ist in "FLAG" eine Null, sonst eine Eins. ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Parameter: ║
- ║INTEGER Nummer des über den Bildschirm zu bewegenden ║
- ║ Fensters [ 1 bis 30 ]. Wenn die Nummer noch nicht ║
- ║ durch ein Bildschirmfenster belegt ist, wird die ║
- ║ Routine mit "FLAG" gleich Eins abgebrochen. ║
- ║ Durch die Nummer ist die Hirarchie der Bildschirm- ║
- ║ fenster festgelegt. ║
- ║INTEGER Adresse des Verwaltungsfeldes. ║
- ║INTEGER Farbattribut; siehe Anhang: "Farbattribute". Wenn ║
- ║ ein Monochrome-Monitor erkannt wird, erfolgt die ║
- ║ Ausgabe im Schwarz/Weiß-Modus. ║
- ║ Bit 0 - 2: Vordergrundfarbe ║
- ║ Bit 3 : Intensität der Vordergrundfarbe ║
- ║ Bit 4 - 6: Hintergrundfarbe ║
- ║ Bit 7 : blinken ║
- ║ oder: 0 zum Beschreiben des Hintergrundes mit dem ║
- ║ Inhalt des unter der Nummer 1 abgelegten Fensters. ║
- ║INTEGER Return: Fehlerflag ║
- ║ 0: Subroutine erfolgreich abgeschlossen. ║
- ║ 1: Ein Fehler ist aufgetreten. ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Subroutinen: ATTRIB,GETMEM,PUTMEM,SCREEN ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Beispiel: INTEGER H,B,ZEI,SP,VSEG,COL ║
- ║ DATA H/10/,B/20/,ZEI/1/,SP/1/,VSEG/0/,COL/23/ ║
- ║ CALL LOES (H,B,ZEI,SP,32,COL,0) ║
- ║ CALL RAHM (H,B,ZEI,SP,0,COL,0) ║
- ║ CALL PUTFEN (3,H,B,ZEI,SP,VSEG,I) ║
- ║ IF (I .NE. 0) GOTO 1 ║
- ║ CALL GETFEN (3,11,40,VSEG,I) ║
- ║ IF (I .NE. 0) GOTO 1 ║
- ║ CALL MOVFEN (3,VSEG,COL,I) ║
- ║ IF (I .NE. 0) GOTO 1 ║
-
-
- Seite 66
-
-
- ║ CALL CLOFEN (3,VSEG,COL,I) ║
- ║ IF (I .NE. 0) GOTO 1 ║
- ║ CALL FREFEN (3,VSEG,I) ║
- ║ IF (I .NE. 0) GOTO 1 ║
- ║ RETURN ║
- ║ 1 WRITE(*,'(1X,A)') 'Fehler!' ║
- ║ Mit den Subroutinen "LOES" und "RAHM" wird ein ║
- ║ Bildschirmfenster aufgebaut, das mit der Subroutine ║
- ║ "PUTFEN" in die Memory bzw. in einen temporären ║
- ║ File ausgelagert wird. Mit der Subroutine "GETFEN" ║
- ║ wird das gespeicherte Fenster an eine andere ║
- ║ Position des Bildschirms zurückgeschrieben. Die ║
- ║ Subroutine "MOVFEN" bewegt das Fenster mit Hilfe der║
- ║ Cursortasten über den gesamten Bildschirm. Die ║
- ║ Subroutine "CLOFEN" löscht den das Fenster ║
- ║ einnehmenden Bildschirmbereich mit dem Farbattribut ║
- ║ "COL" bzw stellt dort vorhandene Fenster wieder her.║
- ║ Die Subroutine "FREFEN" gibt den für das Fenster ║
- ║ allokierten Speicherbereich bzw. Filebereich wieder ║
- ║ frei. Beim Auftreten eines Fehlers wird eine ║
- ║ Meldung ausgegeben. ║
- ╚═════════════════════════════════════════════════════════════════════╝
-
-
- Seite 67
-
-
- ╔═════════════════════════════════════════════════════════════════════╗
- ║Beschreibung der Subroutine MOPFEN (NR,ZEI,SP,VSEG,COL,FLAG) ║
- ║Die Subroutine verändert die Position eines geöffneten Fensters oder ║
- ║die im Verwaltungsfeld vorhandenen Werte für die Position. Dabei wird║
- ║in "ZEI" die Anfangszeile und in "SP" die Anfangsspalte des ║
- ║Bildschirmfensters übergeben. Der frei werdende Hintergrund wird mit ║
- ║dem in "COL" übergebenen Farbattribut gelöscht oder mit dem Inhalt ║
- ║des Bildschirmfensters Nummer 1 beschrieben. Informationen über ║
- ║die Ausmaße des Bildschirmfensters und über die Adresse an der es ║
- ║gespeichert ist, werden automatisch aus einem Verwaltungsfeld, das ║
- ║sich ebenfalls in der Memory befindet, gelesen. In "VSEG" wird die ║
- ║Adresse des Verwaltungsfeldes übergeben. Die Adresse wird für alle ║
- ║Zugriffe auf Fensterroutinen benötigt. Die Nummer des zu ändernden ║
- ║Fensters stellt die Priorität gegenüber anderen Fenstern dar. Sie ║
- ║wird in der Variablen "NR" übergeben. Die neuen Positionsangaben ║
- ║des Fensters werden im Verwaltungsfeld aktualisiert. Auf dem ║
- ║Bildschirm vorhandene Fenster werden von der Routine ihrer in "NR" ║
- ║vergebenen Priorität entsprechend berücksichtigt. Bei erfolgreicher ║
- ║Beendigung der Subroutine wird in "FLAG" eine Null zurückgegeben, ║
- ║sonst eine Eins. ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Parameter: ║
- ║INTEGER Nummer des in der Größe zu ändernden Fensters ║
- ║ [ 1 bis 30 ]. Wenn die Nummer noch nicht durch ein ║
- ║ Bildschirmfenster belegt ist, wird die Routine mit ║
- ║ "FLAG" gleich Eins abgebrochen. ║
- ║ Durch die Nummer ist die Hirarchie der Bildschirm- ║
- ║ fenster festgelegt. ║
- ║INTEGER Neue Anfangszeile des Bildschirmfensters. ║
- ║ Ungültige Angaben werden von der Routine automatisch║
- ║ korrigiert. ║
- ║INTEGER Neue Anfangsspalte des Bildschirmfensters. ║
- ║ Ungültige Angaben werden von der Routine automatisch║
- ║ korrigiert. ║
- ║INTEGER Adresse des Verwaltungsfeldes. ║
- ║INTEGER Farbattribut; siehe Anhang: "Farbattribute". Wenn ║
- ║ ein Monochrome-Monitor erkannt wird, erfolgt die ║
- ║ Ausgabe im Schwarz/Weiß-Modus. ║
- ║ Bit 0 - 2: Vordergrundfarbe ║
- ║ Bit 3 : Intensität der Vordergrundfarbe ║
- ║ Bit 4 - 6: Hintergrundfarbe ║
- ║ Bit 7 : blinken ║
- ║ oder: 0 zum Beschreiben des Hintergrundes mit dem ║
- ║ Inhalt des unter der Nummer 1 abgelegten Fensters. ║
- ║INTEGER Return: Fehlerflag ║
- ║ 0: Subroutine erfolgreich abgeschlossen. ║
- ║ 1: Ein Fehler ist aufgetreten. ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Subroutinen: CLOFEN,GETFEN,GETMEM,PUTMEM ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Beispiel: INTEGER H,B,ZEI,SP,VSEG,COL ║
- ║ DATA H/10/,B/20/,ZEI/1/,SP/1/,VSEG/0/,COL/23/ ║
- ║ CALL LOES (H,B,ZEI,SP,32,COL,0) ║
- ║ CALL RAHM (H,B,ZEI,SP,0,COL,0) ║
- ║ CALL PUTFEN (3,H,B,ZEI,SP,VSEG,I) ║
-
-
- Seite 68
-
-
- ║ IF (I .NE. 0) GOTO 1 ║
- ║ CALL GETFEN (3,11,40,VSEG,I) ║
- ║ IF (I .NE. 0) GOTO 1 ║
- ║ CALL MOPFEN (3,15,15,VSEG,COL,I) ║
- ║ IF (I .NE. 0) GOTO 1 ║
- ║ CALL CLOFEN (3,VSEG,COL,I) ║
- ║ IF (I .NE. 0) GOTO 1 ║
- ║ CALL FREFEN (3,VSEG,I) ║
- ║ IF (I .NE. 0) GOTO 1 ║
- ║ RETURN ║
- ║ 1 WRITE(*,'(1X,A)') 'Fehler!' ║
- ║ Mit den Subroutinen "LOES" und "RAHM" wird ein ║
- ║ Bildschirmfenster aufgebaut, das mit der Subroutine ║
- ║ "PUTFEN" in die Memory bzw. in einen temporären ║
- ║ File ausgelagert wird. Mit der Subroutine "GETFEN" ║
- ║ wird das gespeicherte Fenster an eine andere ║
- ║ Position des Bildschirms zurückgeschrieben. Die ║
- ║ Subroutine "MOPFEN" ermöglicht das Verändern der ║
- ║ aktuellen Position des Bildschirmfensters. ║
- ║ Die Subroutine "CLOFEN" löscht den das Fenster ║
- ║ einnehmenden Bildschirmbereich mit dem Farbattribut ║
- ║ "COL" bzw stellt dort vorhandene Fenster wieder her.║
- ║ Die Subroutine "FREFEN" gibt den für das Fenster ║
- ║ allokierten Speicherbereich bzw. Filebereich wieder ║
- ║ frei. Beim Auftreten eines Fehlers wird eine ║
- ║ Meldung ausgegeben. ║
- ╚═════════════════════════════════════════════════════════════════════╝
-
-
- Seite 69
-
-
- ╔═════════════════════════════════════════════════════════════════════╗
- ║Beschreibung der Subroutine GROFEN (NR,VSEG,COL,FLAG) ║
- ║Die Subroutine verändert die Größe eines am Bildschirm vorhandenen ║
- ║Fensters mit Hilfe der Cursortasten. Dazu wird das Fenster ║
- ║vorübergehend mit der höchsten Priorität dargestellt. Der vergrößerte║
- ║Bereich des Fensters wird mit der Hintergrundfarbe "COL" beschrieben ║
- ║oder mit der Farbe des Fensters, wenn "COL" Null ist. Der vergrößerte║
- ║Bereich wird vorübergehend mit Zeichen "░" beschrieben, die zum ║
- ║Schluß der Subroutine gegen Blanks getauscht werden. Informationen ║
- ║über die Ausmaße des Bildschirmfensters und über die Adresse an der ║
- ║es gespeichert ist, werden automatisch aus einem Verwaltungsfeld, das║
- ║sich ebenfalls in der Memory befindet, gelesen. In "VSEG" wird die ║
- ║Adresse des Verwaltungsfeldes übergeben. Die Adresse wird für alle ║
- ║Zugriffe auf Fensterroutinen benötigt. Die Nummer des zu ändernden ║
- ║Fensters stellt die Priorität gegenüber anderen Fenstern dar. Sie ║
- ║wird in der Variablen "NR" übergeben. Die Größe des am Bildschirm ║
- ║geänderten Fensters wird im Verwaltungsfeld aktualisiert. Auf dem ║
- ║Bildschirm vorhandene Fenster werden von der Routine ihrer in "NR" ║
- ║vergebenen Priorität entsprechend berücksichtigt. Die Subroutine wird║
- ║mit der "Escape"- oder mit der "Return"-Taste beendet. Bei ║
- ║erfolgreicher Beendigung der Subroutine ist in "FLAG" eine Null, ║
- ║sonst eine Eins. ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Parameter: ║
- ║INTEGER Nummer des am Bildschirm in der Größe zu ändernden ║
- ║ Fensters [ 1 bis 30 ]. Wenn die Nummer noch nicht ║
- ║ durch ein Bildschirmfenster belegt ist, wird die ║
- ║ Routine mit "FLAG" gleich Eins abgebrochen. ║
- ║ Durch die Nummer ist die Hirarchie der Bildschirm- ║
- ║ fenster festgelegt. ║
- ║INTEGER Adresse des Verwaltungsfeldes. ║
- ║INTEGER Farbattribut; siehe Anhang: "Farbattribute". Wenn ║
- ║ ein Monochrome-Monitor erkannt wird, erfolgt die ║
- ║ Ausgabe im Schwarz/Weiß-Modus. ║
- ║ Bit 0 - 2: Vordergrundfarbe ║
- ║ Bit 3 : Intensität der Vordergrundfarbe ║
- ║ Bit 4 - 6: Hintergrundfarbe ║
- ║ Bit 7 : blinken ║
- ║ oder: 0 zum Beschreiben des Hintergrundes mit der ║
- ║ aktuellen Hintergrundfarbe des Fensters. ║
- ║INTEGER Return: Fehlerflag ║
- ║ 0: Subroutine erfolgreich abgeschlossen. ║
- ║ 1: Ein Fehler ist aufgetreten. ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Subroutinen: ATTRIB,FREFEN,GETFEN,GETMEM,PUTFEN,PUTMEM,SCREEN, ║
- ║ TAST ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Beispiel: INTEGER H,B,ZEI,SP,VSEG,COL ║
- ║ DATA H/10/,B/20/,ZEI/1/,SP/1/,VSEG/0/,COL/23/ ║
- ║ CALL LOES (H,B,ZEI,SP,32,COL,0) ║
- ║ CALL RAHM (H,B,ZEI,SP,0,COL,0) ║
- ║ CALL PUTFEN (3,H,B,ZEI,SP,VSEG,I) ║
- ║ IF (I .NE. 0) GOTO 1 ║
- ║ CALL GETFEN (3,11,40,VSEG,I) ║
- ║ IF (I .NE. 0) GOTO 1 ║
-
-
- Seite 70
-
-
- ║ CALL GROFEN (3,VSEG,COL,I) ║
- ║ IF (I .NE. 0) GOTO 1 ║
- ║ CALL CLOFEN (3,VSEG,COL,I) ║
- ║ IF (I .NE. 0) GOTO 1 ║
- ║ CALL FREFEN (3,VSEG,I) ║
- ║ IF (I .NE. 0) GOTO 1 ║
- ║ RETURN ║
- ║ 1 WRITE(*,'(1X,A)') 'Fehler!' ║
- ║ Mit den Subroutinen "LOES" und "RAHM" wird ein ║
- ║ Bildschirmfenster aufgebaut, das mit der Subroutine ║
- ║ "PUTFEN" in die Memory bzw. in einen temporären ║
- ║ File ausgelagert wird. Mit der Subroutine "GETFEN" ║
- ║ wird das gespeicherte Fenster an eine andere ║
- ║ Position des Bildschirms zurückgeschrieben. Die ║
- ║ Subroutine "GROFEN" ermöglicht das Verkleinern oder ║
- ║ Vergrößern des Fensters auf dem Bildschirm. Die ║
- ║ Subroutine "CLOFEN" löscht den das Fenster ║
- ║ einnehmenden Bildschirmbereich mit dem Farbattribut ║
- ║ "COL" bzw stellt dort vorhandene Fenster wieder her.║
- ║ Die Subroutine "FREFEN" gibt den für das Fenster ║
- ║ allokierten Speicherbereich bzw. Filebereich wieder ║
- ║ frei. Beim Auftreten eines Fehlers wird eine ║
- ║ Meldung ausgegeben. ║
- ╚═════════════════════════════════════════════════════════════════════╝
-
-
- Seite 71
-
-
- ╔═════════════════════════════════════════════════════════════════════╗
- ║Beschreibung der Subroutine GRPFEN (NR,H,B,VSEG,COL,FLAG) ║
- ║Die Subroutine verändert die Größe eines geöffneten oder ║
- ║geschlossenen Bildschirmfensters. Dabei wird in den Parametern "H" ║
- ║die neue Höhe und in "B" die neue Breite übergeben. Der vergrößerte ║
- ║Bereich des Fensters wird mit der Hintergrundfarbe "COL" beschrieben ║
- ║oder mit der Farbe des Fensters, wenn "COL" Null ist. Informationen ║
- ║über die Ausmaße des Bildschirmfensters und über die Adresse an der ║
- ║es gespeichert ist, werden automatisch aus einem Verwaltungsfeld, das║
- ║sich ebenfalls in der Memory befindet, gelesen. In "VSEG" wird die ║
- ║Adresse des Verwaltungsfeldes übergeben. Die Adresse wird für alle ║
- ║Zugriffe auf Fensterroutinen benötigt. Die Nummer des zu ändernden ║
- ║Fensters stellt die Priorität gegenüber anderen Fenstern dar. Sie ║
- ║wird in der Variablen "NR" übergeben. Die Größe des am Bildschirm ║
- ║geänderten Fensters wird im Verwaltungsfeld aktualisiert. Auf dem ║
- ║Bildschirm vorhandene Fenster werden von der Routine ihrer in "NR" ║
- ║vergebenen Priorität entsprechend berücksichtigt. Bei erfolgreicher ║
- ║Beendigung der Subroutine ist in "FLAG" eine Null, sonst eine Eins. ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Parameter: ║
- ║INTEGER Nummer des in der Größe zu ändernden Fensters ║
- ║ [ 1 bis 30 ]. Wenn die Nummer noch nicht durch ein ║
- ║ Bildschirmfenster belegt ist, wird die Routine mit ║
- ║ "FLAG" gleich Eins abgebrochen. ║
- ║ Durch die Nummer ist die Hirarchie der Bildschirm- ║
- ║ fenster festgelegt. ║
- ║INTEGER Neue Höhe des Bildschirmfensters in Zeilen. ║
- ║ Ungültige Angaben werden von der Routine automatisch║
- ║ korrigiert. ║
- ║INTEGER Neue Breite des Bildschirmfensters in Spalten. ║
- ║ Ungültige Angaben werden von der Routine automatisch║
- ║ korrigiert. ║
- ║INTEGER Adresse des Verwaltungsfeldes. ║
- ║INTEGER Farbattribut; siehe Anhang: "Farbattribute". Wenn ║
- ║ ein Monochrome-Monitor erkannt wird, erfolgt die ║
- ║ Ausgabe im Schwarz/Weiß-Modus. ║
- ║ Bit 0 - 2: Vordergrundfarbe ║
- ║ Bit 3 : Intensität der Vordergrundfarbe ║
- ║ Bit 4 - 6: Hintergrundfarbe ║
- ║ Bit 7 : blinken ║
- ║ oder: 0 zum Beschreiben des Hintergrundes mit der ║
- ║ aktuellen Fensterfarbe. ║
- ║INTEGER Return: Fehlerflag ║
- ║ 0: Subroutine erfolgreich abgeschlossen. ║
- ║ 1: Ein Fehler ist aufgetreten. ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Subroutinen: ATTRIB,CLOFEN,CREMEM,FREMEM,GETFEN,GETMEM,PUTMEM, ║
- ║ SCREEN ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Beispiel: INTEGER H,B,ZEI,SP,VSEG,COL ║
- ║ DATA H/10/,B/20/,ZEI/1/,SP/1/,VSEG/0/,COL/23/ ║
- ║ CALL LOES (H,B,ZEI,SP,32,COL,0) ║
- ║ CALL RAHM (H,B,ZEI,SP,0,COL,0) ║
- ║ CALL PUTFEN (3,H,B,ZEI,SP,VSEG,I) ║
- ║ IF (I .NE. 0) GOTO 1 ║
-
-
- Seite 72
-
-
- ║ CALL GETFEN (3,11,40,VSEG,I) ║
- ║ IF (I .NE. 0) GOTO 1 ║
- ║ CALL GRPFEN (3,15,15,VSEG,COL,I) ║
- ║ IF (I .NE. 0) GOTO 1 ║
- ║ CALL CLOFEN (3,VSEG,COL,I) ║
- ║ IF (I .NE. 0) GOTO 1 ║
- ║ CALL FREFEN (3,VSEG,I) ║
- ║ IF (I .NE. 0) GOTO 1 ║
- ║ RETURN ║
- ║ 1 WRITE(*,'(1X,A)') 'Fehler!' ║
- ║ Mit den Subroutinen "LOES" und "RAHM" wird ein ║
- ║ Bildschirmfenster aufgebaut, das mit der Subroutine ║
- ║ "PUTFEN" in die Memory bzw. in einen temporären ║
- ║ File ausgelagert wird. Mit der Subroutine "GETFEN" ║
- ║ wird das gespeicherte Fenster an eine andere ║
- ║ Position des Bildschirms zurückgeschrieben. Die ║
- ║ Subroutine "GRPFEN" ermöglicht das Verkleinern oder ║
- ║ Vergrößern des Fensters auf 15 Zeilen und Spalten. ║
- ║ Die Subroutine "CLOFEN" löscht den das Fenster ║
- ║ einnehmenden Bildschirmbereich mit dem Farbattribut ║
- ║ "COL" bzw stellt dort vorhandene Fenster wieder her.║
- ║ Die Subroutine "FREFEN" gibt den für das Fenster ║
- ║ allokierten Speicherbereich bzw. Filebereich wieder ║
- ║ frei. Beim Auftreten eines Fehlers wird eine ║
- ║ Meldung ausgegeben. ║
- ╚═════════════════════════════════════════════════════════════════════╝
-
-
- Seite 73
-
-
- ╔═════════════════════════════════════════════════════════════════════╗
- ║Beschreibung der Subroutine LOSFEN (NR,ZEICH,COL,VSEG,FLAG) ║
- ║Die Subroutine überschreibt das Bildschirmfenster mit der Nummer "NR"║
- ║mit dem in "ZEICH" übergebenen Zeichen. Hintergrund- und Vordergrund-║
- ║farben werden mit "COL" gesetzt, oder es werden die aktuellen Farben ║
- ║benutzt, wenn "COL" Null ist. Informationen über die Fensterform ║
- ║und die Adresse an der es gespeichert ist, werden automatisch im ║
- ║Verwaltungsfeld, das sich ebenfalls in der Memory befindet, abgelegt.║
- ║Die Adresse des Verwaltungsfeldes wird in "VSEG" übergeben. Die ║
- ║Adresse wird für alle Zugriffe auf bis zu 30 im Verwaltungsfeld ║
- ║definierte Fenster benötigt. Die Nummer des zu umrahmenden ║
- ║Bildschirmfensters stellt die Priorität gegenüber anderen Fenstern ║
- ║dar. Sie wird in der Variablen "NR" übergeben. Das zu überschreibende║
- ║Bildschirmfenster muß bereits in der Memory vorhanden sein. Es muß ║
- ║sich aber nicht auf dem Bildschirm befinden. Bei erfolgreicher ║
- ║Beendigung der Routine ist in "FLAG" eine Null, sonst eine Eins. ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Parameter: ║
- ║INTEGER Nummer des zu umrahmenden Bildschirmfensters ║
- ║ [ 1 bis 30 ]. Wenn die Nummer noch nicht durch ein ║
- ║ Bildschirmfenster belegt ist, wird die Routine mit ║
- ║ "FLAG" gleich Eins abgebrochen. ║
- ║ Durch die Nummer ist die Hirarchie der Bildschirm- ║
- ║ fenster festgelegt. ║
- ║INTEGER ASCII-Code des Zeichens, mit dem überschrieben ║
- ║ werden soll [0 bis 255]. ║
- ║INTEGER Farbattribut für Vorder- und Hintergrundfarben. ║
- ║ siehe Anhang: "Farbattribute". Wenn ein Monochrome- ║
- ║ Monitor erkannt wird, erfolgt die Ausgabe im ║
- ║ Schwarz/Weiß-Modus. ║
- ║ Bit 0 - 2: Vordergrundfarbe ║
- ║ Bit 3 : Intensität der Vordergrundfarbe ║
- ║ Bit 4 - 6: Hintergrundfarbe ║
- ║ Bit 7 : blinken ║
- ║ oder 0: es wird das vorhandene Attribut des Fensters║
- ║ verwendet. ║
- ║INTEGER Adresse des Verwaltungsfeldes. ║
- ║INTEGER Return: Fehlerflag ║
- ║ 0: Subroutine erfolgreich abgeschlossen. ║
- ║ 1: Ein Fehler ist aufgetreten. ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Subroutinen: ATTRIB,GETFEN,GETMEM,PUTMEM ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Beispiel: INTEGER FELD(12),VSEG ║
- ║ OPEN (1,FILE='TEST',ACCESS='DIRECT', ║
- ║ -FORM='FORMATTED',RECL=72,STATUS='OLD') ║
- ║ CALL TEXFEN (2,12,3,20,1,1,23,VSEG,I) ║
- ║ IF (I .NE. 0) GOTO 1 ║
- ║ CALL RAMFEN (2,1,0,'Auswählen: <Esc>','NUM',VSEG,I) ║
- ║ IF (I .NE. 0) GOTO 1 ║
- ║ CALL GETFEN (2,5,10,VSEG,I) ║
- ║ IF (I .NE. 0) GOTO 1 ║
- ║ CALL ME1FEN (2,12,3,FELD,VSEG,I) ║
- ║ IF (I .NE. 0) GOTO 1 ║
- ║ CALL LOSFEN (2,32,23,VSEG,I) ║
-
-
- Seite 74
-
-
- ║ IF (I .NE. 0) GOTO 1 ║
- ║ RETURN ║
- ║ 1 WRITE(*,'(1X,A)') 'FEHLER' ║
- ║ Aus einer direct orgsanisierten Datei mit dem Unit 1║
- ║ werden mit Hilfe der Subroutine "TEXFEN" 12 Menü- ║
- ║ texte dreispaltig mit einer jeweiligen Länge von ║
- ║ 20 Characters und dem Farbattribut 23 im Fenster ║
- ║ Nummer 2 abgelegt. ║
- ║ Die Subroutine "RAMFEN" umgibt das Menüfeld im ║
- ║ Fenster mit einen einfachen Rahmen und schreibt in ║
- ║ die erste Zeile des Fensters eine Meldung. In die ║
- ║ letzte Zeile des Fensters wird außerdem die Nummer ║
- ║ des Fensters eingeblendet. Rahmen und Texte werden ║
- ║ in der vorhandenen Farbe dargestellt. ║
- ║ Die Subroutine "GETFEN" öffnet das Fenster mit dem ║
- ║ Menütext am Bildschirm ab der 5. Zeile und der 10. ║
- ║ Spalte. ║
- ║ "ME1FEN" ermöglicht die Auswahl eines einzelnen ║
- ║ Menüpunktes mit Hilfe der Cursortasten und der ║
- ║ <Escape>-Taste. ║
- ║ "LOSFEN" überschreibt anschließend das Bildschirm- ║
- ║ fenster mit Blancs. Der Hintergrund wird dabei blau ║
- ║ gesetzt. ║
- ║ Wenn in einer Subroutine ein Fehler auftritt, wird ║
- ║ eine Fehlermeldung ausgegeben. ║
- ╚═════════════════════════════════════════════════════════════════════╝
-
-
- Seite 75
-
-
- ╔═════════════════════════════════════════════════════════════════════╗
- ║Beschreibung der Subroutine RAMFEN (NR,ART,COL,TEXTO,TEXTU,VSEG,FLAG)║
- ║Die Subroutine unschließt das Bildschirmfenster mit der Nummer "NR" ║
- ║mit einen Rahmen, dessen Form in "ART" übergeben wird. In dem ║
- ║Characterstring "TEXTO" kann eine Meldung für die erste Zeile, in ║
- ║"TEXTU" für die letzte Zeile des Bildschirmfensters übergeben werden.║
- ║Es ist möglich, in der letzten Zeile die Nummer des Fensters ║
- ║einzublenden oder auf die Meldungen zu verzichten. Mit Hilfe der ║
- ║Variablen "COL" kann eine neue Farbe oder das im Fenster vorhandene ║
- ║Farbattribut gewählt werden. Informationen über die Form des Fensters║
- ║und die Adresse an der es gespeichert ist, werden automatisch im ║
- ║Verwaltungsfeld, das sich ebenfalls in der Memory befindet, abgelegt.║
- ║Die Adresse des Verwaltungsfeldes wird in "VSEG" übergeben. Die ║
- ║Adresse wird für alle Zugriffe auf bis zu 30 im Verwaltungsfeld ║
- ║definierte Fenster benötigt. Die Nummer des zu umrahmenden ║
- ║Bildschirmfensters stellt die Priorität gegenüber anderen Fenstern ║
- ║dar. Sie wird in der Variablen "NR" übergeben. Das zu umrahmende ║
- ║Bildschirmfenster muß bereits in der Memory vorhanden sein. Es muß ║
- ║sich aber nicht auf dem Bildschirm befinden. Bei erfolgreicher ║
- ║Beendigung der Routine ist in "FLAG" eine Null, sonst eine Eins. ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Parameter: ║
- ║INTEGER Nummer des zu umrahmenden Bildschirmfensters ║
- ║ [ 1 bis 30 ]. Wenn die Nummer noch nicht durch ein ║
- ║ Bildschirmfenster belegt ist, wird die Routine mit ║
- ║ "FLAG" gleich Eins abgebrochen. ║
- ║ Durch die Nummer ist die Hirarchie der Bildschirm- ║
- ║ fenster festgelegt. ║
- ║INTEGER Art der Rahmenzeichnung: ║
- ║ 0: keinen Rahmen zeichnen ║
- ║ 1: ┌─────── ║
- ║ 2: ╔═══════ ║
- ║ 3: ████████ ║
- ║ 4: ******** ║
- ║INTEGER Farbattribut für den Rahmen und die Texte; ║
- ║ siehe Anhang: "Farbattribute". Wenn ein Monochrome- ║
- ║ Monitor erkannt wird, erfolgt die Ausgabe im ║
- ║ Schwarz/Weiß-Modus. ║
- ║ Bit 0 - 2: Vordergrundfarbe ║
- ║ Bit 3 : Intensität der Vordergrundfarbe ║
- ║ Bit 4 - 6: Hintergrundfarbe ║
- ║ Bit 7 : blinken ║
- ║CHARACTERSTRING Text, der zentriert in die obere Fensterzeile ║
- ║ geschrieben werden soll, oder CHAR(0) wenn kein Text║
- ║ in die obere Fensterzeile geschrieben werden soll. ║
- ║CHARACTERSTRING Text, der zentriert in die untere Fensterzeile ║
- ║ geschrieben werden soll, oder CHAR(0) wenn kein Text║
- ║ in die untere Fensterzeile geschrieben werden soll, ║
- ║ oder 'NUM' zum Schreiben der Fensternummer in die ║
- ║ untere Fensterzeile. ║
- ║INTEGER Adresse des Verwaltungsfeldes. ║
- ║INTEGER Return: Fehlerflag ║
- ║ 0: Subroutine erfolgreich abgeschlossen. ║
- ║ 1: Ein Fehler ist aufgetreten. ║
- ╟─────────────────────────────────────────────────────────────────────╢
-
-
- Seite 76
-
-
- ║Subroutinen: ATTRIB,GETFEN,GETMEM,LAENGE,PUTMEM,UPCASE ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Beispiel: INTEGER FELD(12),VSEG ║
- ║ OPEN (1,FILE='TEST',ACCESS='DIRECT', ║
- ║ -FORM='FORMATTED',RECL=72,STATUS='OLD') ║
- ║ CALL TEXFEN (2,12,3,20,1,1,23,VSEG,I) ║
- ║ IF (I .NE. 0) GOTO 1 ║
- ║ CALL RAMFEN (2,1,0,'Auswählen: <Esc>','NUM',VSEG,I) ║
- ║ IF (I .NE. 0) GOTO 1 ║
- ║ CALL GETFEN (2,5,10,VSEG,I) ║
- ║ IF (I .NE. 0) GOTO 1 ║
- ║ CALL ME1FEN (2,12,3,FELD,VSEG,I) ║
- ║ IF (I .NE. 0) GOTO 1 ║
- ║ RETURN ║
- ║ 1 WRITE(*,'(1X,A)') 'FEHLER' ║
- ║ Aus einer direct orgsanisierten Datei mit dem Unit 1║
- ║ werden mit Hilfe der Subroutine "TEXFEN" 12 Menü- ║
- ║ texte dreispaltig mit einer jeweiligen Länge von ║
- ║ 20 Characters und dem Farbattribut 23 im Fenster ║
- ║ Nummer 2 abgelegt. ║
- ║ Die Subroutine "RAMFEN" umgibt das Menüfeld im ║
- ║ Fenster mit einen einfachen Rahmen und schreibt in ║
- ║ die erste Zeile des Fensters eine Meldung. In die ║
- ║ letzte Zeile des Fensters wird außerdem die Nummer ║
- ║ des Fensters eingeblendet. Rahmen und Texte werden ║
- ║ in der vorhandenen Farbe dargestellt. ║
- ║ Die Subroutine "GETFEN" öffnet das Fenster mit dem ║
- ║ Menütext am Bildschirm ab der 5. Zeile und der 10. ║
- ║ Spalte. ║
- ║ "ME1FEN" ermöglicht die Auswahl eines einzelnen ║
- ║ Menüpunktes mit Hilfe der Cursortasten und der ║
- ║ <Escape>-Taste. Das der Auswahl entsprechende ║
- ║ Äquivalent in "FELD" wird dadurch ungleich Null ║
- ║ gesetzt. Es ist zu beachten, daß die Anzahl der ║
- ║ Menüpunkte und die Menüspaltenzahl in den Routinen ║
- ║ "TEXFEN" und "ME1FEN" übereinstimmen. ║
- ║ Wenn in einer Subroutine ein Fehler auftritt, wird ║
- ║ eine Fehlermeldung ausgegeben. ║
- ╚═════════════════════════════════════════════════════════════════════╝
-
-
- Seite 77
-
-
- ╔═════════════════════════════════════════════════════════════════════╗
- ║Beschreibung der Subroutine WRIFEN (NR,VSEG,FLAG) ║
- ║Die Subroutine schreibt ein am Bildschirm vorhandenes Fenster ║
- ║vorübergehend mit höchster Priorität an der gleichen Position auf den║
- ║Bildschirm. Das Fenster kann mit beliebigem Text beschrieben werden. ║
- ║Der Text wird mit Hilfe des Cursorblocks im Fenster positioniert. ║
- ║Nachdem das Beschreiben des Fensters mit der <Escape>-Taste beendet ║
- ║worden ist, wird das Fenster mit der ursprünglichen Priorität ║
- ║zwischen den restlichen offenen Fenstern eingeordnet. Informationen ║
- ║über die Ausmaße des Bildschirmfensters und über die Adresse an der ║
- ║es gespeichert ist, werden automatisch aus einem Verwaltungsfeld, das║
- ║sich ebenfalls in der Memory befindet, gelesen. In "VSEG" wird die ║
- ║Adresse des Verwaltungsfeldes übergeben. Die Adresse wird für alle ║
- ║Zugriffe auf bis zu 30 im Verwaltungsfeld definierte Fenster ║
- ║benötigt. Die Nummer des darzustellenden Bildschirmfensters stellt ║
- ║die Priorität gegenüber anderen Fensters dar. Sie wird in der ║
- ║Variablen "NR" übergeben. Ein vorhandener Bildschirmrahmen wird nicht║
- ║überschrieben. Bei erfolgreicher Beendigung der Routine ist in "Flag"║
- ║eine Null, sonst eine Eins. ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Parameter: ║
- ║INTEGER Nummer des mit Text zu beschreibenden Bildschirm- ║
- ║ fensters [ 1 bis 30 ]. Wenn die Nummer noch nicht ║
- ║ durch ein Bildschirmfenster belegt ist, wird die ║
- ║ Routine mit "FLAG" gleich Eins abgebrochen. ║
- ║ Durch die Nummer ist die Hirarchie der Bildschirm- ║
- ║ fenster festgelegt. ║
- ║INTEGER Adresse des Verwaltungsfeldes. ║
- ║INTEGER Return: Fehlerflag ║
- ║ 0: Subroutine erfolgreich abgeschlossen. ║
- ║ 1: Ein Fehler ist aufgetreten. ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Subroutinen: AREAD,FREFEN,GETFEN,GETMEM,PUTFEN,PUTMEM,SCREEN ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Beispiel: INTEGER H,B,ZEI,SP,VSEG,COL ║
- ║ DATA H/10/,B/20/,ZEI/1/,SP/1/,VSEG/0/,COL/23/ ║
- ║ CALL LOES (H,B,ZEI,SP,32,COL,0) ║
- ║ CALL RAHM (H,B,ZEI,SP,0,COL,0) ║
- ║ CALL PUTFEN (3,H,B,ZEI,SP,VSEG,I) ║
- ║ IF (I .NE. 0) GOTO 1 ║
- ║ CALL WRIFEN (3,VSEG,I) ║
- ║ IF (I .NE. 0) GOTO 1 ║
- ║ CALL CLOFEN (3,VSEG,COL,I) ║
- ║ IF (I .NE. 0) GOTO 1 ║
- ║ CALL FREFEN (3,VSEG,I) ║
- ║ IF (I .NE. 0) GOTO 1 ║
- ║ RETURN ║
- ║ 1 WRITE(*,'(1X,A)') 'Fehler!' ║
- ║ Mit den Subroutinen "LOES" und "RAHM" wird ein ║
- ║ Bildschirmfenster aufgebaut, das mit der Subroutine ║
- ║ "PUTFEN" in die Memory bzw. in einen temporären ║
- ║ File ausgelagert wird. Mit der Subroutine "WRIFEN" ║
- ║ wird das gespeicherte Fenster am Bildschirm mit Text║
- ║ beschrieben und in die Memory zurückgeschrieben. Die║
- ║ Subroutine "CLOFEN" löscht den das Fenster ║
-
-
- Seite 78
-
-
- ║ einnehmenden Bildschirmbereich mit dem Farbattribut ║
- ║ "COL" bzw stellt dort vorhandene Fenster wieder her.║
- ║ Die Subroutine "FREFEN" gibt den für das Fenster ║
- ║ allokierten Speicherbereich bzw. Filebereich wieder ║
- ║ frei. Beim Auftreten eines Fehlers wird eine ║
- ║ Meldung ausgegeben. ║
- ╚═════════════════════════════════════════════════════════════════════╝
-
-
- Seite 79
-
-
- ╔═════════════════════════════════════════════════════════════════════╗
- ║Beschreibung der Subroutine ME1FEN (NR,ANZ,SPZ,FELD,VSEG,COL,FLAG) ║
- ║Die Subroutine schreibt ein schon vorher geöffnetes Fenster ║
- ║vorübergehend mit höchster Priorität an der gleichen Position auf den║
- ║Bildschirm. Mit den Cursortasten kann ein Menüfeld angefahren und mit║
- ║der <Escape>- oder <Return>-Taste ausgewählt werden. In "COL" wird ║
- ║das Farbattribut für die Menüfelder übergeben. Wenn "COL" eine Null ║
- ║enthält, wird die aktuelle Farbe aus dem ersten Menüfeld übernommen. ║
- ║Mit einer Eins wird die Farbe des Rahmens übernommen. Das jeweils ║
- ║aktuelle Menüfeld wird mit intensivierter Farbe angezeigt. Das dem ║
- ║gewähltem Menüfeld entsprechende Element des Feldes "FELD" wird ║
- ║gesetzt, alle anderen Feldelemente enthalten eine Null. Die Anzahl ║
- ║der Menüfelder wird mit "ANZ" bestimmt. Die Subroutine vermindert die║
- ║Anzahl der berücksichtigten Feldelemente automatisch, wenn die ║
- ║Ausmaße des Fensters nicht ausreichen. In "SPZ" wird die Anzahl der ║
- ║Menüspalten festgelegt. Der Menütext muß vor dem Aufruf der Routine ║
- ║bereits im Fenster vorhanden sein. Dafür eignet sich die Routine ║
- ║"TEXFEN", die Texte aus einer Datei in einem Fenster positioniert. ║
- ║Nachdem die Auswahl eines Menüpunktes <Escape> oder <Return> beendet ║
- ║worden ist, wird das Fenster mit der ursprünglichen Priorität ║
- ║zwischen den restlichen offenen Fenstern eingeordnet. Informationen ║
- ║über die Ausmaße des Bildschirmfensters und über die Adresse an der ║
- ║es gespeichert ist, werden automatisch aus einem Verwaltungsfeld, das║
- ║sich ebenfalls in der Memory befindet, gelesen. In "VSEG" wird die ║
- ║Adresse des Verwaltungsfeldes, das vorher mit Hilfe anderer Fenster- ║
- ║routinen angelegt worden ist, übergeben. Die Adresse wird für alle ║
- ║Zugriffe auf bis zu 30 im Verwaltungsfeld definierte Fenster ║
- ║benötigt. Die Nummer des darzustellenden Bildschirmfensters stellt ║
- ║die Priorität gegenüber anderen Fensters dar. Sie wird in der ║
- ║Variablen "NR" übergeben. Bei erfolgreicher Beendigung der Routine ║
- ║ist in "FLAG" eine Null, sonst eine Eins. ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Parameter: ║
- ║INTEGER Nummer des zur Menüauswahl bestimmten Bildschirm- ║
- ║ fensters [ 1 bis 30 ]. Wenn die Nummer noch nicht ║
- ║ durch ein Bildschirmfenster belegt ist, wird die ║
- ║ Routine mit "FLAG" gleich Eins abgebrochen. ║
- ║ Durch die Nummer ist die Hirarchie der Bildschirm- ║
- ║ fenster festgelegt. ║
- ║INTEGER Anzahl der gewünschten Mneüfelder. ║
- ║ Return: Anzahl der tatsächlichen Menüfelder, wenn ║
- ║ die Größe des Menüfensters nicht ausreicht. ║
- ║INTEGER Anzahl der nebeneinander angeordneten Menüfelder im ║
- ║ Bildschirmfenster. ║
- ║INTEGERFELD Return: Feld der Form [ FELD(ANZ) ] ║
- ║ Das Feldelement des äquivalenten Menüfeldes, das mit║
- ║ <Escape> oder <Return> ausgewählt wurde, entspricht ║
- ║ der Nummer des Menüfeldes, die restlichen ║
- ║ Feldelemente werden Null gesetzt. ║
- ║INTEGER Adresse des Verwaltungsfeldes ║
- ║INTEGER Farbattribut; Siehe Anhang: "Farbattribute". Wenn ║
- ║ ein Monochrome-Monitor erkannt wird, erfolgt die ║
- ║ Ausgabe im Schwarz/weiß-Modus. ║
- ║ Bit 0 - 2: Vordergrundfarbe ║
- ║ Bit 3 : Intensität der Vordergundfarbe ║
-
-
- Seite 80
-
-
- ║ Bit 4 - 6: Hintergrundfarbe ║
- ║ Bit 7 : blinken ║
- ║ oder: ║
- ║ 0: Übernahme der Farbe aus dem ersten Menüfeld ║
- ║ oder: ║
- ║ 1: Übernahme der Rahmenfarbe für die Menüfelder ║
- ║INTEGER Return: Fehlerflag ║
- ║ 0: Subroutine erfolgreich abgeschlossen. ║
- ║ 1: Ein Fehler ist aufgetreten. ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Subroutinen: ATTRIB,CTBUF,GETFEN,GETMEM,PUTMEM,SCREEN,TAST ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Beispiel: INTEGER FELD(12),VSEG ║
- ║ OPEN (1,FILE='TEST',ACCESS='DIRECT', ║
- ║ -FORM='FORMATTED',RECL=72,STATUS='OLD') ║
- ║ CALL TEXFEN (2,12,3,20,1,1,23,VSEG,I) ║
- ║ IF (I .NE. 0) GOTO 1 ║
- ║ CALL RAMFEN (2,1,0,'Auswählen: <Esc>',VSEG,I) ║
- ║ IF (I .NE. 0) GOTO 1 ║
- ║ CALL GETFEN (2,5,10,VSEG,I) ║
- ║ IF (I .NE. 0) GOTO 1 ║
- ║ CALL ME1FEN (2,12,3,FELD,VSEG,I) ║
- ║ IF (I .NE. 0) GOTO 1 ║
- ║ RETURN ║
- ║ 1 WRITE(*,'(1X,A)') 'FEHLER' ║
- ║ Aus einer direct orgsanisierten Datei mit dem Unit 1║
- ║ werden mit Hilfe der Subroutine "TEXFEN" 12 Menü- ║
- ║ texte dreispaltig mit einer jeweiligen Länge von ║
- ║ 20 Characters und dem Farbattribut 23 im Fenster ║
- ║ Nummer 2 abgelegt. ║
- ║ Die Subroutine "RAMFEN" umgibt das Menüfeld im ║
- ║ Fenster mit einen einfachen Rahmen und schreibt in ║
- ║ die erste Zeile des Fensters eine Meldung. Dazu wird║
- ║ das vorhandene Farbattribut benutzt. ║
- ║ Die Subroutine "GETFEN" öffnet das Fenster mit dem ║
- ║ Menütext am Bildschirm ab der 5. Zeile und der 10. ║
- ║ Spalte. ║
- ║ "ME1FEN" ermöglicht die Auswahl eines einzelnen ║
- ║ Menüpunktes mit Hilfe der Cursortasten und der ║
- ║ <Escape>-Taste. Das der Auswahl entsprechende ║
- ║ Äquivalent in "FELD" wird dadurch ungleich Null ║
- ║ gesetzt. Es ist zu beachten, daß die Anzahl der ║
- ║ Menüpunkte und die Menüspaltenzahl in den Routinen ║
- ║ "TEXFEN" und "ME1FEN" übereinstimmen. ║
- ║ Wenn in einer Subroutine ein Fehler auftritt, wird ║
- ║ eine Fehlermeldung ausgegeben. ║
- ╚═════════════════════════════════════════════════════════════════════╝
-
-
- Seite 81
-
-
- ╔═════════════════════════════════════════════════════════════════════╗
- ║Beschreibung der Subroutine MENFEN (NR,ANZ,SPZ,FELD,VSEG,COL,FLAG) ║
- ║Die Subroutine schreibt ein schon vorher geöffnetes Fenster ║
- ║vorübergehend mit höchster Priorität an der gleichen Position auf den║
- ║Bildschirm. Mit Hilfe der Cursortasten kann zwischen den Menüpunkten ║
- ║gewechselt werden. In "COL" wird das Farbattribut für die Menüfelder ║
- ║übergeben. Wenn "COL" eine Null enthält, wird die aktuelle Farbe aus ║
- ║dem ersten Menüfeld übernommen. Mit einer Eins wird die Farbe des ║
- ║Rahmens übernommen. Der jeweils aktuelle Menüpunkt wird mit ║
- ║intensivierter Farbe angezeigt. Die <F1>-Taste ermöglicht die Auswahl║
- ║eines oder mehrerer Menüpunkte. Ausgewählte Menüpunkte werden inverse║
- ║auf dem Bildschirm dargestellt. Mit der <F2>-Taste ist es möglich, ║
- ║bereits gewählte Menüpunkte wieder rückgängig zu machen. Mit <Escape>║
- ║oder <Return> wird die Subroutine beendet. Die den gewählten ║
- ║Menüpunkten entsprechenden Feldelemente des Feldes "FELD" werden ║
- ║gesetzt, alle anderen Feldelemente enthalten eine Null. Die Anzahl ║
- ║der Menüpunkte wird mit "ANZ" bestimmt. Die Subroutine vermindert die║
- ║Anzahl der berücksichtigten Feldelemente automatisch, wenn die ║
- ║Ausmaße des Fensters nicht ausreichen. In "SPZ" wird die Anzahl der ║
- ║Menüspalten festgelegt. Der Menütext muß vor dem Aufruf der Routine ║
- ║bereits im Fenster vorhanden sein. Dafür eignet sich die Routine ║
- ║"TEXFEN", die Texte aus einer Datei in einem Fenster positioniert. ║
- ║Nachdem die Auswahl eines Menüpunktes mit <Escape> oder <Return> ║
- ║beendet worden ist, wird das Fenster mit der ursprünglichen Priorität║
- ║zwischen den restlichen offenen Fenstern eingeordnet. Informationen ║
- ║über die Ausmaße des Bildschirmfensters und über die Adresse an der ║
- ║es gespeichert ist, werden automatisch aus einem Verwaltungsfeld, das║
- ║sich ebenfalls in der Memory befindet, gelesen. In "VSEG" wird die ║
- ║Adresse des Verwaltungsfeldes, das vorher mit Hilfe anderer Fenster- ║
- ║routinen angelegt worden ist, übergeben. Die Adresse wird für alle ║
- ║Zugriffe auf bis zu 30 im Verwaltungsfeld definierte Fenster ║
- ║benötigt. Die Nummer des darzustellenden Bildschirmfensters stellt ║
- ║die Priorität gegenüber anderen Fensters dar. Sie wird in der ║
- ║Variablen "NR" übergeben. Bei erfolgreicher Beendigung der Routine ║
- ║ist in "FLAG" eine Null, sonst eine Eins. ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Parameter: ║
- ║INTEGER Nummer des zur Menüauswahl bestimmten Bildschirm- ║
- ║ fensters [ 1 bis 30 ]. Wenn die Nummer noch nicht ║
- ║ durch ein Bildschirmfenster belegt ist, wird die ║
- ║ Routine mit "FLAG" gleich Eins abgebrochen. ║
- ║ Durch die Nummer ist die Hirarchie der Bildschirm- ║
- ║ fenster festgelegt. ║
- ║INTEGER Anzahl der gewünschten Mneüfelder. ║
- ║ Return: Anzahl der tatsächlichen Menüfelder, wenn ║
- ║ die Größe des Menüfensters nicht ausreicht. ║
- ║INTEGER Anzahl der nebeneinander angeordneten Menüfelder im ║
- ║ Bildschirmfenster. ║
- ║INTEGERFELD Return: Feld der Form [ FELD(ANZ) ] ║
- ║ Die Feldelemente der äquivalenten Menüfelder, die ║
- ║ mit der <F1>-Taste ausgewählt wurden, entsprechen ║
- ║ den Nummern der Menüfelder, die restlichen ║
- ║ Feldelemente werden Null gesetzt. ║
- ║INTEGER Adresse des Verwaltungsfeldes ║
- ║INTEGER Farbattribut; Siehe Anhang: "Farbattribute". Wenn ║
-
-
- Seite 82
-
-
- ║ ein Monochrome-Monitor erkannt wird, erfolgt die ║
- ║ Ausgabe im Schwarz/weiß-Modus. ║
- ║ Bit 0 - 2: Vordergrundfarbe ║
- ║ Bit 3 : Intensität der Vordergundfarbe ║
- ║ Bit 4 - 6: Hintergrundfarbe ║
- ║ Bit 7 : blinken ║
- ║ oder: ║
- ║ 0: Übernahme der Farbe aus dem ersten Menüfeld ║
- ║ oder: ║
- ║ 1: Übernahme der Rahmenfarbe für die Menüfelder ║
- ║INTEGER Return: Fehlerflag ║
- ║ 0: Subroutine erfolgreich abgeschlossen. ║
- ║ 1: Ein Fehler ist aufgetreten. ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Subroutinen: ATTRIB,CTBUF,GETFEN,GETMEM,PUTMEM,SCREEN,TAST ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Beispiel: INTEGER FELD(12),VSEG ║
- ║ OPEN (1,FILE='TEST',ACCESS='DIRECT', ║
- ║ -FORM='FORMATTED',RECL=72,STATUS='OLD') ║
- ║ CALL TEXFEN (2,12,3,20,1,1,23,VSEG,I) ║
- ║ IF (I .NE. 0) GOTO 1 ║
- ║ CALL RAMFEN (2,1,0,'Auswählen: <Esc>',VSEG,I) ║
- ║ IF (I .NE. 0) GOTO 1 ║
- ║ CALL GETFEN (2,5,10,VSEG,I) ║
- ║ IF (I .NE. 0) GOTO 1 ║
- ║ CALL MENFEN (2,12,3,FELD,VSEG,I) ║
- ║ IF (I .NE. 0) GOTO 1 ║
- ║ RETURN ║
- ║ 1 WRITE(*,'(1X,A)') 'FEHLER' ║
- ║ Aus einer direct orgsanisierten Datei mit dem Unit 1║
- ║ werden mit Hilfe der Subroutine "TEXFEN" 12 Menü- ║
- ║ texte dreispaltig mit einer jeweiligen Länge von ║
- ║ 20 Characters und dem Farbattribut 23 im Fenster ║
- ║ Nummer 2 abgelegt. ║
- ║ Die Subroutine "RAMFEN" umgibt das Menüfeld im ║
- ║ Fenster mit einen einfachen Rahmen und schreibt in ║
- ║ die erste Zeile des Fensters eine Meldung. Dazu wird║
- ║ das vorhandene Farbattribut benutzt. ║
- ║ Die Subroutine "GETFEN" öffnet das Fenster mit dem ║
- ║ Menütext am Bildschirm ab der 5. Zeile und der 10. ║
- ║ Spalte. ║
- ║ "MENFEN" ermöglicht die Auswahl eines oder mehrerer ║
- ║ Menüpunkte mit Hilfe der Cursor-, F1-, F2- <Return>-║
- ║ und <Escape>-Tasten. Die der Auswahl entsprechenden ║
- ║ Äquivalente in "FELD" werden dadurch ungleich Null ║
- ║ gesetzt. Es ist zu beachten, daß die Anzahl der ║
- ║ Menüpunkte und die Menüspaltenzahl in den Routinen ║
- ║ "TEXFEN" und "MENFEN" übereinstimmen. ║
- ║ Wenn in einer Subroutine ein Fehler auftritt, wird ║
- ║ eine Fehlermeldung ausgegeben. ║
- ╚═════════════════════════════════════════════════════════════════════╝
-
-
- Seite 83
-
-
- ╔═════════════════════════════════════════════════════════════════════╗
- ║Beschreibung der Subroutine VERFEN (VSEG,COL,FLAG) ║
- ║Die Subroutine eröffnet ein Verwaltungsfenster am Bildschirm, mit ║
- ║dessen Hilfe bis zu 28 existierende Fenster cursorgesteuert am Bild- ║
- ║schirm verwaltet werden können. Es wird ein Fenster mit dem aktuellen║
- ║Bildschirminhalt in der niedrigsten Prioritätsstufe angelegt. Die ║
- ║höchste Prioritätsstufe erhält das Verwaltungsfenster. Nach dem ║
- ║Beenden der Subroutine wird das Verwaltungsfenster geschlossen. Die ║
- ║Fenster mit den Nummern 1 und 30 dürfen nicht existieren; zu ║
- ║verwaltende Fenster müssen bereits existieren. Es können Fenster ║
- ║mitverwaltet werden, die bereits vor dem Aufruf der Subroutine auf ║
- ║dem Bildschirm vorhanden sind. Wegen möglicher Farbdiskrepanzen wird ║
- ║aber empfohlen, alle geöffneten Fenster vorher zu schließen. In ║
- ║"COL" wird ein Farbattribut für eventuell freiwerdenden Hintergrund ║
- ║und für zu beschreibenden Vordergrund an die Routine übergeben. ║
- ║"VSEG" enthält die Adresse des Verwaltungsfeldes, in dem sich alle ║
- ║aktuellen Informationen über die existierenden Fenster befinden. ║
- ║Es können die folgenden Verwaltungsarten durchführt werden: ║
- ║1. Öffnen eines Fensters ║
- ║2. Bewegen eines Fensters ║
- ║3. Beschreiben eines Fensters mit Text ║
- ║4. Inhalt eines Fensters löschen ║
- ║5. Umrahmen eines Fensters und Ausgabe der Fensternummer ║
- ║6. Vergrößern oder verkleinern eines Fensters ║
- ║7. Schließen eines Fensters ║
- ║8. Freigeben eines Fensters ║
- ║Fenstermanipulationen, die nicht möglich sind, werden akustisch ║
- ║angezeigt. Nach dem Abschluß der Fensterverwaltung bleibt die ║
- ║aktuelle Konfiguration zur weiteren Bearbeitung am Bildschirm ║
- ║vorhanden. Bei erfolgreicher Beendigung der Subroutine steht in ║
- ║"FLAG" eine Null, sonst eine Eins. ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Parameter: ║
- ║INTEGER Adresse des Verwaltungsfeldes. ║
- ║INTEGER Farbattribut; siehe Anhang: "Farbattribute". Wenn ║
- ║ ein Monochrome-Monitor erkannt wird, erfolgt die ║
- ║ Ausgabe im Schwarz/Weiß-Modus. ║
- ║ Bit 0 - 2: Vordergrundfarbe ║
- ║ Bit 3 : Intensität der Vordergrundfarbe ║
- ║ Bit 4 - 6: Hintergrundfarbe ║
- ║ Bit 7 : blinken ║
- ║INTEGER Return: Fehlerflag ║
- ║ 0: Subroutine erfolgreich abgeschlossen. ║
- ║ 1: Ein Fehler ist aufgetreten. ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Subroutinen: CLOFEN,FREFEN,GETFEN,GETMEM,IREAD,MAKFEN,MOVFEN, ║
- ║ PIEPS,PUTFEN,RAMFEN,WRIFEN ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Beispiel: INTEGER H,B,ZEI,SP,VSEG,COL ║
- ║ DATA VSEG/0/,COL/23/ ║
- ║ DO 1 I=2,29 ║
- ║ CALL LOES (5,I+2,5,5,32,COL+I,0) ║
- ║ CALL PUTFEN (I,5,I+2,5,5,VSEG,J) ║
- ║ IF (J .NE. 0) GOTO 1 ║
- ║ 1 CONTINUE ║
-
-
- Seite 84
-
-
- ║ CALL VERFEN (VSEG,COL,I) ║
- ║ IF (I .NE. 0) GOTO 1 ║
- ║ RETURN ║
- ║ 1 WRITE(*,'(1X,A)') 'Fehler!' ║
- ║ Mit den Subroutinen "LOES" und "PUTFEN" werden ║
- ║ 28 Fenster verschiedener Größe und mit verschiedenen║
- ║ Farben erzeugt. ║
- ║ Die Subroutine "VERFEN" ermöglicht die Verwaltung ║
- ║ der 28 Fenster. Wenn die Subroutine beendet wird, ║
- ║ bleibt der aktuelle Zustand am Bildschirm erhalten. ║
- ║ Beim Auftreten eines Fehlers wird eine Meldung ║
- ║ ausgegeben. ║
- ╚═════════════════════════════════════════════════════════════════════╝
-
-
- Seite 85
-
-
- ╔═════════════════════════════════════════════════════════════════════╗
- ║Beschreibung der Subroutine CLOFEN (NR,VSEG,COL,FLAG) ║
- ║Die Subroutine schließt ein Fenster am Bildschirm und stellt die ║
- ║vorhandenen Bildschirmfenster wieder her. Das Fenster kann mit Hilfe ║
- ║der Subroutine "GETFEN" jederzeit wieder auf den Bildschirm gebracht ║
- ║werden. Größen, Positionen und Adressen der vorhandenen Fenster und ║
- ║des zu schließenden Fensters werden automatisch aus einem ║
- ║Verwaltungsfeld, das sich ebenfalls in der Memory befindet, gelesen. ║
- ║In "VSEG" wird die Adresse des Verwaltungsfeldes übergeben. Die ║
- ║Adresse wird für alle Zugriffe auf bis zu 30 im Verwaltungsfeld ║
- ║definierte Fenster durch Fensterroutinen benötigt. Die Nummer des zu ║
- ║schließenden Fensters wird in der Variablen "NR" übergeben. Sie ║
- ║stellt die Priorität des Bildschirmfensters gegenüber anderen ║
- ║Fenstern dar. Auf dem Bildschirm vorhandene Fenster werden ihrer ║
- ║Priorität entsprechend berücksichtigt. Der Hintergrund kann ║
- ║entweder mit dem im Verwaltungsfeld unter der Nummer 1 abgelegten ║
- ║Fensterinhalt oder mit einer Hintergrundfarbe "COL" beschrieben ║
- ║werden. Bei erfolgreicher Beendigung der Subroutine ist in "FLAG" ║
- ║eine Null, sonst eine Eins. ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Parameter: ║
- ║INTEGER Nummer des am Bildschirm zu schließenden Fensters. ║
- ║ [ 1 bis 30 ]. Wenn die Nummer noch nicht durch ein ║
- ║ Bildschirmfenster belegt ist, wird die Routine mit ║
- ║ "FLAG" gleich Eins abgebrochen. ║
- ║ Durch die Nummer ist die Hirarchie der Bildschirm- ║
- ║ fenster festgelegt. ║
- ║INTEGER Adresse des Verwaltungsfeldes. ║
- ║INTEGER Farbattribut; siehe Anhang: "Farbattribute". Wenn ║
- ║ ein Monochrome-Monitor erkannt wird, erfolgt die ║
- ║ Ausgabe im Schwarz/Weiß-Modus. ║
- ║ Bit 0 - 2: Vordergrundfarbe ║
- ║ Bit 3 : Intensität der Vordergrundfarbe ║
- ║ Bit 4 - 6: Hintergrundfarbe ║
- ║ Bit 7 : blinken ║
- ║ oder: 0 zum Beschreiben des Hintergrundes mit dem ║
- ║ Inhalt des unter der Nummer 1 abgelegten Fensters. ║
- ║INTEGER Return: Fehlerflag ║
- ║ 0: Subroutine erfolgreich abgeschlossen. ║
- ║ 1: Ein Fehler ist aufgetreten. ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Subroutinen: ATTRIB,GETMEM,PUTMEM,SCREEN ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Beispiel: INTEGER H,B,ZEI,SP,VSEG,COL ║
- ║ DATA H/10/,B/20/,ZEI/1/,SP/1/,VSEG/0/,COL/23/ ║
- ║ CALL LOES (H,B,ZEI,SP,32,COL,0) ║
- ║ CALL RAHM (H,B,ZEI,SP,0,COL,0) ║
- ║ CALL PUTFEN (3,H,B,ZEI,SP,VSEG,I) ║
- ║ IF (I .NE. 0) GOTO 1 ║
- ║ CALL GETFEN (3,11,40,VSEG,I) ║
- ║ IF (I .NE. 0) GOTO 1 ║
- ║ CALL CLOFEN (3,VSEG,COL,I) ║
- ║ IF (I .NE. 0) GOTO 1 ║
- ║ CALL FREFEN (3,VSEG,I) ║
- ║ IF (I .NE. 0) GOTO 1 ║
-
-
- Seite 86
-
-
- ║ RETURN ║
- ║ 1 WRITE(*,'(1X,A)') 'Fehler!' ║
- ║ Mit den Subroutinen "LOES" und "RAHM" wird ein ║
- ║ Bildschirmfenster aufgebaut, das mit der Subroutine ║
- ║ "PUTFEN" in die Memory bzw. in einen temporären ║
- ║ File ausgelagert wird. Mit der Subroutine "GETFEN" ║
- ║ wird das gespeicherte Fenster an eine andere ║
- ║ Position des Bildschirms zurückgeschrieben. Die ║
- ║ Subroutine "CLOFEN" löscht den das Fenster ║
- ║ einnehmenden Bildschirmbereich mit dem Farbattribut ║
- ║ "COL" bzw stellt dort vorhandene Fenster wieder her.║
- ║ Die Subroutine "FREFEN" gibt den für das Fenster ║
- ║ allokierten Speicherbereich bzw. Filebereich wieder ║
- ║ frei. Beim Auftreten eines Fehlers wird eine ║
- ║ Meldung ausgegeben. ║
- ╚═════════════════════════════════════════════════════════════════════╝
-
-
- Seite 87
-
-
- ╔═════════════════════════════════════════════════════════════════════╗
- ║Beschreibung der Subroutine FREFEN (NR,VSEG,FLAG) ║
- ║Die Subroutine gibt den durch ein Bildschirmfenster belegten ║
- ║Speicherplatz in der Memory bzw. in einem temporären File wieder frei║
- ║und entfernt alle Informationen über das Bildschirmfenster aus dem ║
- ║Verwaltungsfeld. In "VSEG" wird die Adresse dieses Verwaltungsfeldes ║
- ║übergeben. Sie wird für alle Zugriffe auf bis zu 30 im Verwaltungs- ║
- ║feld definierte Fenster durch Fensterroutinen benötigt. Die Nummer ║
- ║des zu löschenden Bildschirmfensters wird in der Variablen "NR" ║
- ║übergeben. Bei erfolgreicher Beendigung der Subroutine ist in "FLAG" ║
- ║eine Null, sonst eine Eins. ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Parameter: ║
- ║INTEGER Nummer des aus der Memory zu entfernenden Bild- ║
- ║ schirmfensters [ 1 bis 30 ]. ║
- ║ Die Nummer steht für ein neu anzulegendes Bild- ║
- ║ schirmfensters wieder zur Verfügung. ║
- ║INTEGER Adresse des Verwaltungsfeldes. ║
- ║INTEGER Return: Fehlerflag ║
- ║ 0: Subroutine erfolgreich abgeschlossen. ║
- ║ 1: Ein Fehler ist aufgetreten. ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Subroutinen: FREMEM,GETMEM,PUTMEM ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Beispiel: INTEGER H,B,ZEI,SP,VSEG,COL ║
- ║ DATA H/10/,B/20/,ZEI/1/,SP/1/,VSEG/0/,COL/23/ ║
- ║ CALL LOES (H,B,ZEI,SP,32,COL,0) ║
- ║ CALL RAHM (H,B,ZEI,SP,0,COL,0) ║
- ║ CALL PUTFEN (3,H,B,ZEI,SP,VSEG,I) ║
- ║ IF (I .NE. 0) GOTO 1 ║
- ║ CALL GETFEN (3,11,40,VSEG,I) ║
- ║ IF (I .NE. 0) GOTO 1 ║
- ║ CALL CLOFEN (3,VSEG,COL,I) ║
- ║ IF (I .NE. 0) GOTO 1 ║
- ║ CALL FREFEN (3,VSEG,I) ║
- ║ IF (I .NE. 0) GOTO 1 ║
- ║ RETURN ║
- ║ 1 WRITE(*,'(1X,A)') 'Fehler!' ║
- ║ Mit den Subroutinen "LOES" und "RAHM" wird ein ║
- ║ Bildschirmfenster aufgebaut, das mit der Subroutine ║
- ║ "PUTFEN" in die Memory bzw. in einen temporären ║
- ║ File ausgelagert wird. Mit der Subrouteine "GETFEN" ║
- ║ wird das gespeicherte Fenster an eine andere ║
- ║ Position des Bildschirms zurückgeschrieben. Die ║
- ║ Subroutine "CLOFEN" löscht den das Fenster ║
- ║ einnehmenden Bildschirmbereich mit dem Farbattribut ║
- ║ "COL" bzw stellt dort vorhandene Fenster wieder her.║
- ║ Die Subroutine "FREFEN" gibt den für das Fenster ║
- ║ allokierten Speicherbereich bzw. Filebereich wieder ║
- ║ frei. Beim Auftreten eines Fehlers wird eine ║
- ║ Meldung ausgegeben. ║
- ╚═════════════════════════════════════════════════════════════════════╝
-
-
- Seite 88
-
-
- ╔═════════════════════════════════════════════════════════════════════╗
- ║Beschreibung der Subroutine INFFEN (NR,H,B,ZEI,SP,OP,SEG,VSEG,FLAG) ║
- ║Die Subroutine gibt die aktuellen Parameter eines Fensters mit der ║
- ║Nummer "NR" an das rufende Programm zurück. Die Informationen werden ║
- ║aus einem Verwaltungsfeld gelesen, das sich in der Memory befindet. ║
- ║In "H" und "B" werden die Höhe und die Breite des Fensters zurück- ║
- ║gegeben. "ZEI" und "SP" bezeichnen die Zeile und Spalte in der das ║
- ║Fenster bei der Bildschirmdarstellung beginnt. "OP" ist ein Indikator║
- ║für das Vorhandensein eines Fensters am Bildschirm. Wenn "OP" Null ║
- ║ist, ist das betreffende Fenster geschlossen. In "SEG" steht die ║
- ║Adresse, an der der Fensterinhalt gespeichert ist. Wenn "SEG" ║
- ║positiv ist, handelt es sich um eine Segmentadresse in der Memory. ║
- ║Eine negative Zahl bezeichnet die Satznummer in einer direct ║
- ║organisierten temporären Datei mit dem Unit 100, wenn in der Memory ║
- ║kein Speicherplatz für den Fensterinhalt zur Verfügung stand. Wenn ║
- ║das Fenster noch nicht existiert, steht in "SEG" eine Null. "VSEG" ║
- ║beinhaltet die Adresse des Verwaltungsfeldes, in dem aktuelle ║
- ║Informationen für bis zu 30 Bildschirmfenster gespeichert sind. In ║
- ║der Variablen "FLAG" wird bei erfolgreicher Beendigung der Subroutine║
- ║eine Null übergeben, sonst eine Eins. ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Parameter: ║
- ║INTEGER Nummer des zu umrahmenden Bildschirmfensters ║
- ║ [ 1 bis 30 ]. Wenn die Nummer noch nicht durch ein ║
- ║ Bildschirmfenster belegt ist, wird die Routine mit ║
- ║ "FLAG" gleich Eins abgebrochen. ║
- ║ Durch die Nummer ist die Hirarchie der Bildschirm- ║
- ║ fenster festgelegt. ║
- ║INTEGER Return: Höhe des Bildschirmfensters in Zeilen. ║
- ║INTEGER Return: Breite des Bildschirmfensters in Spalten ║
- ║INTEGER Return: Erste Bildschirmzeile des Fensters. ║
- ║INTEGER Return: Erste Bildschirmspalte des Fensters. ║
- ║INTEGER Return: Indikator für das Vorhandensein des Fensters║
- ║ am Bildschirm. ║
- ║ 0: Fenster nicht am Bildschirm vorhanden ║
- ║ 1: Fenster am Bildschirm vorhanden ║
- ║INTEGER Return: Adresse an der der Fensterinhalt gespeichert║
- ║ ist. ║
- ║ Positiv: Segment in der Memory ║
- ║ Negativ: Satznummer in Datei Unit 100 ║
- ║INTEGER Adresse des Verwaltungsfeldes. ║
- ║INTEGER Return: Fehlerflag ║
- ║ 0: Subroutine erfolgreich abgeschlossen. ║
- ║ 1: Ein Fehler ist aufgetreten. ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Subroutinen: GETMEM ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Beispiel: INTEGER FELD(12),VSEG,H,B,ZEI,SP,OP,SEG ║
- ║ OPEN (1,FILE='TEST',ACCESS='DIRECT', ║
- ║ -FORM='FORMATTED',RECL=72,STATUS='OLD') ║
- ║ CALL TEXFEN (2,12,3,20,1,1,23,VSEG,I) ║
- ║ IF (I .NE. 0) GOTO 1 ║
- ║ CALL RAMFEN (2,1,0,'Auswählen: <Esc>','NUM',VSEG,I) ║
- ║ IF (I .NE. 0) GOTO 1 ║
- ║ CALL GETFEN (2,5,10,VSEG,I) ║
-
-
- Seite 89
-
-
- ║ IF (I .NE. 0) GOTO 1 ║
- ║ CALL INFFEN (2,H,B,ZEI,SP,OP,SEG,VSEG,I) ║
- ║ IF (I .NE. 0) GOTO 1 ║
- ║ RETURN ║
- ║ 1 WRITE(*,'(1X,A)') 'FEHLER' ║
- ║ Aus einer direct orgsanisierten Datei mit dem Unit 1║
- ║ werden mit Hilfe der Subroutine "TEXFEN" 12 Menü- ║
- ║ texte dreispaltig mit einer jeweiligen Länge von ║
- ║ 20 Characters und dem Farbattribut 23 im Fenster ║
- ║ Nummer 2 abgelegt. ║
- ║ Die Subroutine "RAMFEN" umgibt das Menüfeld im ║
- ║ Fenster mit einen einfachen Rahmen und schreibt in ║
- ║ die erste Zeile des Fensters eine Meldung. In die ║
- ║ letzte Zeile des Fensters wird außerdem die Nummer ║
- ║ des Fensters eingeblendet. Rahmen und Texte werden ║
- ║ in der vorhandenen Farbe dargestellt. ║
- ║ Die Subroutine "GETFEN" öffnet das Fenster mit dem ║
- ║ Menütext am Bildschirm ab der 5. Zeile und der 10. ║
- ║ Spalte. ║
- ║ "INFFEN" gibt die aktuellen Parameter des Fensters ║
- ║ an das rufende Programm zurück. ║
- ║ Wenn in einer Subroutine ein Fehler auftritt, wird ║
- ║ eine Fehlermeldung ausgegeben. ║
- ╚═════════════════════════════════════════════════════════════════════╝
-
-
- Seite 90
-
-
- Schriftengeneratoren
-
- Manchmal ist es erwünscht, Hinweise in besonders auffälliger übergroßer
- Schrift auf den Bildschirm zu schreiben. FORSUB.LIB stellt zwei
- Blockschriften für diesen Zweck zur Verfügung. Beide Schriften sind
- acht mal sieben Zeichenfelder groß. Die erste Schrift entspricht in
- ihrer Form dem gerade aktivierten PC-Zeichensatz. Die zweite Schrift
- ist filigraner als die erste, enthält aber nicht alle 256 Zeichen des
- PC-Zeichensatzes. Mit diesen Schriften können drei Zeilen mit jeweils
- zehn Zeichen auf dem Bildschirm positioniert werden.
-
- In Systemen mit EGA- oder VGA-Konfiguration ist das Aktivieren von
- User-Zeichensätzen möglich. Der in einer Script-Datei abgelegte
- Zeichensatz wird dazu eingelesen. Die Zeichen des User-Zeichensatzes
- stehen bis zum nächsten Wechsel des Videomodus, auch nach dem Beenden
- des Programms, für alle Bildschirm-Ein- und Ausgaben zur Verfügung. Die
- Höhe der Zeichen eines User-Zeichensatzes ist dabei variabel.
-
- Zu den Utilities der FORTRAN-Library gehört ein Programm USERZ, mit
- dessen Hilfe eigene Zeichensätze erstellt oder korrigiert werden können.
- Vier fertige Zeichensätze sind ebenfalls in den Utilities enthalten.
-
-
- Subroutinen zur Schriftengeneration
-
- BLOCK a) Filigrane Blockschrift in ein Characterfeld schreiben
- BLOCK1 a) PC-Zeichensatz äquivalente Blockschrift in ein
- Characterfeld schreiben
- SCBL a) Filigrane Blockschrift auf den Bildschirm schreiben
- b) Filigrane Bockschrift mittenzentriert auf den Bildschirm
- schreiben
- c) PC-Zeichensatz äquivalente Blockschrift auf den Bildschirm
- schreiben
- d) PC-Zeichensatz äquivalente Bockschrift mittenzentriert auf
- den Bildschirm schreiben
- SCRIPT a) User-Zeichensatz für die Bildschirmausgabe aus einer
- Scriptdatei laden
-
-
- Seite 91
-
-
- ╔═════════════════════════════════════════════════════════════════════╗
- ║Beschreibung der Subroutine BLOCK (TEXT,ANZ,FELD) ║
- ║Die Subroutine füllt ein Characterfeld "FELD" mit einen Text aus ║
- ║Blocklettern der Größe 8 * 7 Zeichen. Der in Blocklettern zu ║
- ║konvertierende Text "TEXT" und die Anzahl der zu konvertierenden ║
- ║Zeichen "ANZ" werden übergeben. Die tatsächliche Zeilenlänge des ║
- ║Characterfeldes wird an das rufende Programm zurückgegeben. ║
- ║Kleingeschriebene Buchstaben werden in Großbuchstaben umgewandelt. ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Parameter: ║
- ║CHARACTERSTRING Zu konvertierender Text [max. 10 Zeichen]. ║
- ║INTEGER Anzahl der zu konvertierenden Zeichen [1 bis 10] ║
- ║ Return: Zeilenlänge des Characterfeldes. ║
- ║CHARACTERFELD Return: Feld mit Blocklettern ║
- ║ [FELD(7) * (8*Anzahl Zeichen)] (z. B. FELD(7)*80). ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Subroutinen: UPCASE ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Beispiel: CHARACTER FELD(7)*40 ║
- ║ CALL BLOCK ('Block',5,FELD) ║
- ║ Im Characterfeld "FELD" wird das Wort "BLOCK" in ║
- ║ Blocklettern zurückgegeben. ║
- ╚═════════════════════════════════════════════════════════════════════╝
-
-
- Seite 92
-
-
- ╔═════════════════════════════════════════════════════════════════════╗
- ║Beschreibung der Subroutine BLOCK1 (TEXT,ANZ,FELD) ║
- ║Die Subroutine füllt ein Characterfeld "FELD" mit einen Text aus ║
- ║Blocklettern der Größe 8 * 7 Zeichen. Der in Blocklettern zu ║
- ║konvertierende Text "TEXT" und die Anzahl der zu konvertierenden ║
- ║Zeichen "ANZ" werden übergeben. Die tatsächliche Zeilenlänge des ║
- ║Characterfeldes wird an das rufende Programm zurückgegeben. ║
- ║Es werden die ersten 127 ASCII-Zeichen berücksichtigt. ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Parameter: ║
- ║CHARACTERSTRING Zu konvertierender Text [max. 10 Zeichen]. ║
- ║INTEGER Anzahl der zu konvertierenden Zeichen [1 bis 10] ║
- ║ Return: Zeilenlänge des Characterfeldes. ║
- ║CHARACTERFELD Return: Feld mit Blocklettern ║
- ║ [FELD(7) * (8*Anzahl Zeichen)] (z. B. FELD(7)*80). ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Subroutinen: keine ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Beispiel: CHARACTER FELD(7)*40 ║
- ║ CALL BLOCK1 ('Block',5,FELD) ║
- ║ Im Characterfeld "FELD" wird das Wort "Block" in ║
- ║ Blocklettern zurückgegeben. ║
- ╚═════════════════════════════════════════════════════════════════════╝
-
-
- Seite 93
-
-
- ╔═════════════════════════════════════════════════════════════════════╗
- ║Beschreibung der Subroutine SCBL (TEXT,ANZ,ZEI,SP,HGZ,COL,ART) ║
- ║Die Subroutine schreibt einen Text mit Blocklettern der Größe 8 * 7 ║
- ║Zeichen positioniert auf den Bildschirm. Es besteht die Möglichkeit, ║
- ║den Text mittenzentriert darzustellen. ║
- ║Wenn "ART" kleiner 5 ist, wird eine filigrane Schrift verwendet, mit ║
- ║der sich aber nur Großbuchstaben darstellen lassen. "ART" größer oder║
- ║kleiner Null benutzt das Bitmuster des RAM-Zeichensatzes. Damit ║
- ║können die ersten 127 ASCII-Zeichen dargestellt werden. Die Schrift ║
- ║ist relativ grob. ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Parameter: ║
- ║CHARACTERSTRING Zu konvertierender Text [max. 10 Zeichen]. ║
- ║INTEGER Anzahl der zu konvertierenden Zeichen [1 bis 10] ║
- ║INTEGER Erste Zeile der Darstellung [1 BIS 25]. ║
- ║INTEGER Erste Spalte der Darstellung [1 BIS 72]. ║
- ║ oder 100 für mittenzentrierte Darstellung. ║
- ║INTEGER Hintergrunddarstellung: ║
- ║ 0: Hintergund mit Blanks beschreiben ║
- ║ 1: Hintergrund mit ░ beschreiben ║
- ║ 2: Hintergrund mit ▒ beschreiben ║
- ║ 3: Hintergrund mit ▓ beschreiben ║
- ║ 4: Hintergrund mit █ beschreiben ║
- ║INTEGER Farbattribut; Siehe Anhang: "Farbattribute". Wenn ║
- ║ ein Monochrome-Monitor erkannt wird, erfolgt die ║
- ║ Darstellung im Schwarz/Weiß-Modus. ║
- ║ Bit 0 - 2: Vordergrundfarbe ║
- ║ Bit 3 : Intensität der Vordergrundfarbe ║
- ║ Bit 4 - 6: Hintergrundfarbe ║
- ║ Bit 7 : blinken ║
- ║INTEGER Art der Darstellung: ║
- ║ 0: filigraner Zeichensatz, normale Darstellung ║
- ║ 1: filigraner Zeichensatz, inverse Darstellung ║
- ║ 2: filigraner Zeichensatz, intensive Darstellung ║
- ║ 3: filigraner Zeichensatz, blinkende Darstellung ║
- ║ 4: filigraner Zeichensatz, intensiv/inv. Darstellung║
- ║ 5: ASCII-Zeichensatz, normale Darstellung ║
- ║ 6: ASCII-Zeichensatz, inverse Darstellung ║
- ║ 7: ASCII-Zeichensatz, intensive Darstellung ║
- ║ 8: ASCII-Zeichensatz, blinkende Darstellung ║
- ║ 9: ASCII-Zeichensatz, intensiv/invverse Darstellung ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Subroutinen: ATTRIB,BLOCK,BLOCK1,SCREEN ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Beispiel: CALL SCBL ('Block',5,10,10,0,23,0) ║
- ║ Der Text "BLOCK" wird in Blocklettern ab der 10. ║
- ║ Zeile und der 10. Spalte in hellgrauer Farbe auf ║
- ║ blauem Hintergrund auf den Bildschirm gebracht. ║
- ║ Die Darstellung erfolgt normal, der Hintergrund wird║
- ║ mit Blanks beschrieben. ║
- ╚═════════════════════════════════════════════════════════════════════╝
-
-
- Seite 94
-
-
- ╔══════════════════════════════════════════════════════════════════════╗
- ║Beschreibung der Subroutine SCRIPT (FILE,FLAG) ║
- ║Die Subroutine lädt einen Textzeichensatz für die Bildschirmausgabe. ║
- ║Der neue Textzeichensatz bleibt bis zum Setzen eines neuen Videomodus ║
- ║erhalten. Der neue Textzeichensatz wird aus einem Scriptfile ║
- ║eingelesen. Die Zeichenhöhe wird aus der Größe des Scriptfiles ║
- ║errechnet, die Zeichenbreite ist 8 Pixel. Die Subroutine führt bei ║
- ║allen vom Standard (14 Pixel Zeichenhöhe) abweichenden Zeichenhöhen ║
- ║eine automatische Cursor-Korrektur durch. Nach dem Setzen eines neuen ║
- ║Videomodus wird der Cursor in der Zeichenmitte angezeigt, da die ║
- ║Korrektur nicht rückgängig gemacht werden kann. Die Subroutine ║
- ║funktioniert nur in den Videotextmodi und wenn eine EGA- oder VGA- ║
- ║Karte vorhanden ist. Es stehen mehrere Scriptfiles zur Verfügung. ║
- ║In "FLAG" wird eine Null zurückgegeben, wenn die Subroutine erfolg- ║
- ║reich abschließt, sonst ein Fehlercode. Es kann gewählt werden, ob der║
- ║bisherige Bildschirminhalt erhalten bleiben soll oder nicht. ║
- ╟──────────────────────────────────────────────────────────────────────╢
- ║Parameter: ║
- ║CHARACTERSTRING Filename des Scriptfiles. Es ist möglich, einen Path ║
- ║ mit zu übergeben. Das letzte Zeichen im String muß ║
- ║ ein Nullcharacter sein. ║
- ║INTEGER Löschflag: ║
- ║ 0: Bildschirminhalt erhalten ║
- ║ 1: Bildschirminhalt löschen ║
- ║ Return: Fehlerflag: ║
- ║ 0: Routine erfolgreich beendet ║
- ║ 1: Keine hochauflösende Graphikkarte vorhanden ║
- ║ 2: Kein Textmodus eingeschaltet ║
- ║ 3: Aktiver Monitor nicht an der hochauflösenden ║
- ║ Graphikkarte angeschlossen ║
- ║ 4: Fehler beim Öffnen der Script-Datei ║
- ║ 5: Fehler beim Lesen der Script-Datei ║
- ╟──────────────────────────────────────────────────────────────────────╢
- ║Beispiel: I=0 ║
- ║ CALL SCRIPT ('C:\SCR24'//CHAR(0),I) ║
- ║ Der Scriptfile SCR24 wird aus der Root des Laufwerks ║
- ║ C: eingelesen. Alle bis zum nächsten Wechsel des ║
- ║ Videomodus auf den Bildschirm ausgegebenen Zeichen ║
- ║ entsprechen dem in SCR24 enthaltenen Textzeichensatz.║
- ║ Der Inhalt des Bildschirms wird nicht gelöscht. ║
- ║ In "I" steht eine Null, wenn die Routine mit Erfolg ║
- ║ beendet wurde. ║
- ╚══════════════════════════════════════════════════════════════════════╝
-
-
- Seite 95
-
-
- Zeit- und Akustiksteuerung
-
- Es ist sinnvoll, Hinweise und Warnungen, die am Bildschirm ausgegeben
- werden, akustisch hervorzuheben. In FORSUB.LIB gibt es dazu eine
- Subroutine, die es gestattet, einen Ton mit vorgegebener Frequenz und
- Zeitdauer zu erzeugen. Ein Programm kann mit einer anderen Subroutine
- für eine bestimmte Zeitspanne unterbrochen werden, um Hinweise,
- Warnungen oder Programmoutputs eine Weile am Bildschirm zu erhalten.
-
-
- Subroutinen zur Zeit und Akustiksteuerung
-
- LAUT a) Ton variabler Frequenz und Zeitdauer erzeugen (Parameter in
- PC-Zeiteinheiten)
- b) Pause mit variabler Zeitdauer erzeugen (Parameter in
- PC-Zeiteinheiten)
- PIEPS a) Ton variabler Frequenz und Zeitdauer erzeugen (Parameter in
- Real-Sekunden und Integer-Hertz)
- PAUS a) Pause variabler Zeitdauer erzeugen (Parameter in Integer-
- Sekunden)
- b) Pause bis zum nächsten Tastendruck erzeugen
-
-
- Seite 96
-
-
- ╔══════════════════════════════════════════════════════════════════════╗
- ║Beschreibung der Subroutine LAUT (FREQ,ZEIT,ART) ║
- ║Die Subroutine erzeugt je nach dem in ART übergebenen Flag einen Ton ║
- ║vorgegebener Frequenz und Zeitdauer oder eine Pause im Programmablauf ║
- ║mit vorgegebener Zeitdauer. ║
- ╟──────────────────────────────────────────────────────────────────────╢
- ║Parameter: ║
- ║INTEGER Faktor für die Tonfrequenz [ 1193180/Hertz ]. ║
- ║INTEGER Faktor für die Zeitdauer [ Sekunden/0.055 ]. ║
- ║INTEGER Flag für die Arbeitsart: ║
- ║ 0: Ton erzeugen ║
- ║ 1: Pause erzeugen ║
- ╟──────────────────────────────────────────────────────────────────────╢
- ║Beispiele: CALL LAUT (1491,55,0) ║
- ║ Es wird ein drei Sekunden langer Ton mit einer ║
- ║ Frequenz von 800 Hertz erzeugt. ║
- ║ CALL LAUT (0,4,1) ║
- ║ Der Programmablauf wird für 0.22 Sekunden ║
- ║ unterbrochen. ║
- ╚══════════════════════════════════════════════════════════════════════╝
-
-
- Seite 97
-
-
- ╔═════════════════════════════════════════════════════════════════════╗
- ║Beschreibung der Subroutine PIEPS (FREQ,DAUER) ║
- ║Die Subroutine erzeugt einen Ton mit der Frequenz FREQ und der ║
- ║Zeitdauer DAUER. ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Parameter: ║
- ║INTEGER Frequenz des Tones in Hertz ║
- ║REAL Zeitdauer des Tones in Sekunden. ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Subroutinen: LAUT ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Beispiel: CALL PIEPS (1250,0.3) ║
- ║ Es wird ein 0.3 Sekunden dauernder Ton mit einer ║
- ║ Frequenz von 1250 Hertz erzeugt. ║
- ╚═════════════════════════════════════════════════════════════════════╝
-
-
- Seite 98
-
-
- ╔═════════════════════════════════════════════════════════════════════╗
- ║Beschreibung der Subroutine PAUS (N) ║
- ║Wenn N positiv ist, erzeugt die Subroutine eine N Sekunden lange ║
- ║Pause. Wenn N negativ ist, wird das Programm bis zum Betätigen einer ║
- ║beliebigen Taste unterbrochen. ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Parameter: ║
- ║INTEGER Dauer der Pause in Sekunden bzw. Indikator für den ║
- ║ Wartestatus bis zum Betätigen einer Taste. ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Subroutinen: LAUT,TAST ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Beispiele: CALL PAUS (10) ║
- ║ Es wird eine Pause von 10 Sekunden generiert. ║
- ║ CALL PAUS (-1) ║
- ║ Der Programmablauf wird bis zum Betätigen einer ║
- ║ beliebigen Taste unterbrochen. ║
- ╚═════════════════════════════════════════════════════════════════════╝
-
-
- Seite 99
-
-
- Transformationen
-
- Häufig benötigte Umwandlungen von einem Format in ein anderes sind mit
- Subroutinen in FORSUB.LIB automatisiert. Dazu gehören das Erzeugen
- alternativer Farbattribute mit automatischer Anpassung an die
- Videokonfiguration, Umwandlungen von Maschinenadressen, Datums- und
- Zeitformaten. Das Umwandeln von Strings in Integers und von Integers
- in Strings ist zwar mit der "WRITE"-Routine aus der Standardbibliothek
- möglich, jedoch sind die FORSUB-Routinen sehr viel schneller.
-
-
- Subroutinen für Transformationen
-
- ATTCOL a) Farbattribute der Videokonfiguration anpassen
- ATTRIB a) Alternative Farbattribute erzeugen und der Videokonfiguration
- anpassen
- ADRESS a) Maschinenadresse in Segment und Offset aufteilen
- DTRAN a) Characterformat eines Datums in das Integerformat umwandeln
- b) Integerformat eines Datums in das Characterformat umwandeln
- ZTRAN a) Characterformat einer Zeitangabe in das Integerformat
- umwandeln
- b) Integerformat einer Zeitangabe in das Characterformat
- umwandeln
- AITRAN a) Characterstring in mehrere Integers umwandeln
- IATRAN a) Integer in Characterstring umwandeln
-
-
- Seite 100
-
-
- ╔══════════════════════════════════════════════════════════════════════╗
- ║Beschreibung der Subroutine ATTCOL (COL) ║
- ║Die Subroutine stellt fest, ob eine Farb- oder Monochromekonfiguration║
- ║vorhanden ist und stellt das Farbattribut gegebenenfalls auf die für ║
- ║Monochromekonfigurationen geeignete Form ein. Das Intensitäts- und das║
- ║Blinkbit bleiben dabei unverändert. ║
- ╟──────────────────────────────────────────────────────────────────────╢
- ║Parameter: ║
- ║INTEGER Farbattribut; Siehe Anhang: "Farbattribute". Wenn ein║
- ║ Monochrome-Monitor erkannt wird, erfolgt eine ║
- ║ Umwandlung in ein dafür geeignetes Attribut. ║
- ║ Bit 0 - 2: Vordergrundfarbe ║
- ║ Bit 3 : Intensität der Vordergundfarbe ║
- ║ Bit 4 - 6: Hintergrundfarbe ║
- ║ Bit 7 : blinken ║
- ╟──────────────────────────────────────────────────────────────────────╢
- ║Beispiele: INTEGER COL/23/ ║
- ║ CALL ATTCOL (COL) ║
- ║ Das Farbattribut 23 (grau auf blau) wird bei der ║
- ║ Verwendung eines Monochrome-Monitors in das Farb- ║
- ║ attribut 7 (hellgrau auf schwarz) umgewandelt. Bei ║
- ║ Farbmonitoren bleibt das ursprüngliche Attribut 23 ║
- ║ erhalten. ║
- ╚══════════════════════════════════════════════════════════════════════╝
-
-
- Seite 101
-
-
- ╔══════════════════════════════════════════════════════════════════════╗
- ║Beschreibung der Subroutine ATTRIB (COL,INV,BOLD,BLINK,BOIN) ║
- ║Die Subroutine konvertiert das in COL übergebene Farbattribut in je ║
- ║ein inverses, reziprok-intensives, blinkendes und reziprok- ║
- ║intensiv/inverses Attribut. Wenn die Subroutine feststellt, daß ein ║
- ║Monochromebildschirm angeschlossen ist, wird das Farbattribut COL ║
- ║hellgrau auf schwarz gesetzt. Die restlichen Attribute werden ║
- ║entsprechend gesetzt. ║
- ╟──────────────────────────────────────────────────────────────────────╢
- ║Parameter: ║
- ║INTEGER Farbattribut normal. ║
- ║ Bit 0 - 2: Vordergrundfarbe ║
- ║ Bit 3 : Intensität der Vordergrundfarbe ║
- ║ Bit 4 - 6: Hintergrundfarbe ║
- ║ Bit 7 : blinken ║
- ║ Return: Farbattribut hellgrau auf schwarz wenn ein ║
- ║ Monochromemonitor festgestellt wurde. ║
- ║INTEGER Return: Farbattribut inverse. ║
- ║INTEGER Return: Farbattribut reziprok-intensive. ║
- ║INTEGER Return: Farbattribut blinkend. ║
- ║INTEGER Return: Farbattribut reziprok-intensiv/inverse. ║
- ╟──────────────────────────────────────────────────────────────────────╢
- ║Subroutinen: ATTCOL ║
- ╟──────────────────────────────────────────────────────────────────────╢
- ║Beispiel: CALL ATTRIB (23,I,J,K,L) ║
- ║ Aus dem Farbattribut 23 (hellgrau auf blau) werden in║
- ║ den Variablen das inverse, das reziprok-intensive, ║
- ║ das blinkende und das reziprok-intensiv/inverse ║
- ║ Farbattribut erzeugt und an das rufende Programm ║
- ║ übergeben. ║
- ╚══════════════════════════════════════════════════════════════════════╝
-
-
- Seite 102
-
-
- ╔═════════════════════════════════════════════════════════════════════╗
- ║Beschreibung der Subroutine ADRESS (ADDR,SEG,OFF) ║
- ║Die Subroutine ermittelt aus einer Maschinenadresse im Integer-4- ║
- ║Format das Segment und das Offset und übergibt diese in zwei ║
- ║Integer-4-Variablen. ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Parameter: ║
- ║INTEGER Maschinenadresse im Integer-4-Format (z.B. aus der ║
- ║ Function LOC(Variable) ). ║
- ║INTEGER Return: Segment der Adresse. ║
- ║INTEGER Return: Offset der Adresse. ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Subroutinen: keine ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Beispiel: INTEGER ADDR,SEG,OFF ║
- ║ REAL VARIAB ║
- ║ CALL ADRESS (LOC(VARIAB),SEG,OFF) ║
- ║ In SEG und OFF werden Segment und Offset der ║
- ║ Maschinenadresse zurückgegeben, an der der Inhalt ║
- ║ der Real-Variablen VARIAB gespeichert ist. ║
- ╚═════════════════════════════════════════════════════════════════════╝
-
-
- Seite 103
-
-
- ╔═════════════════════════════════════════════════════════════════════╗
- ║Beschreibung der Subroutine DTRAN (IDAT,CDAT,ART) ║
- ║Die Subroutine wandelt ein Datum im Stringformat der Form ║
- ║"TT.MM.JJJJ" in ein Integerformat der Form "JJJJMMTT" um, wenn in ║
- ║"ART" eine 1 übergeben wird. Wenn "ART" 0 ist, erfolgt die Wandlung ║
- ║vom Integerformat ins Characterformat. Wenn bei der Wandlung ein ║
- ║Fehler auftritt, wird "0" bzw. "##########" zurückgegeben. ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Parameter: ║
- ║INTEGER Datum in der Form JJJJMMTT. ║
- ║ Return (ART=1): Datum in der Form JJJJMMTT. ║
- ║CHARACTERSTRING Datum in der Form TT.MM.JJJJ. [10 Characters] ║
- ║ Return (ART=0): Datum in der Form TT.MM.JJJJ. ║
- ║INTEGER Indikator für die Art der Umwandlung [0 oder 1]. ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Beispiel: CHARACTER DAT*10 ║
- ║ CALL DTRAN (19890817,DAT,0) ║
- ║ Im String "DAT" steht nun "17.08.1989". ║
- ╚═════════════════════════════════════════════════════════════════════╝
-
-
- Seite 104
-
-
- ╔═════════════════════════════════════════════════════════════════════╗
- ║Beschreibung der Subroutine ZTRAN (IZEIT,CZEIT,ART) ║
- ║Die Subroutine wandelt die Zeit im Stringformat der Form ║
- ║"HH.MM.SS" in ein Integerformat der Form "HHMMSS" um, wenn in "ART" ║
- ║eine 1 übergeben wird. Wenn "ART" 0 ist, erfolgt die Wandlung vom ║
- ║Integerformat ins Characterformat. Wenn bei der Wandlung ein ║
- ║Fehler auftritt, wird "0" bzw. "########" zurückgegeben. ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Parameter: ║
- ║INTEGER Zeit in der Form HHMMSS. ║
- ║ Return (ART=1): Zeit in der Form HHMMSS. ║
- ║CHARACTERSTRING Zeit in der Form HH.MM.SS. [10 Characters] ║
- ║ Return (ART=0): Zeit in der Form HH.MM.SS. ║
- ║INTEGER Indikator für die Art der Umwandlung [0 oder 1]. ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Beispiel: CHARACTER ZT*10 ║
- ║ CALL ZTRAN (162200,ZT,0) ║
- ║ Im String "ZT" steht nun "16.22.00". ║
- ╚═════════════════════════════════════════════════════════════════════╝
-
-
- Seite 105
-
-
- ╔══════════════════════════════════════════════════════════════════════╗
- ║Beschreibung der Subroutine AITRAN (STRING,IFELD,PFELD,FLAG) ║
- ║Die Subroutine transformiert einen Characterstring aus Ziffern in ║
- ║Integers. Die Integers, deren Längen in "PFELD" eingetragen sind, ║
- ║werden in "IFELD" an das rufende Programm zurückgegeben. Wenn ║
- ║ungültige Zeichen im String gefunden werden oder eine Längenangabe ║
- ║ungültig ist, wird die Subroutine mit "FLAG" gleich Eins abgebrochen. ║
- ║Wenn die Subroutine mit Erfolg abgeschlossen wird, steht in "FLAG" ║
- ║eine Null. Blanks im String werden als Nullen interpretiert, Minus- ║
- ║und Pluszeichen sind zugelassen. Das letzte Zeichen im String muß ║
- ║ein Nullcharacter sein. Das Lesen von Integers aus einem String ist ║
- ║auch mit der READ-Anweisung möglich, AITRAN sollte aber eingesetzt ║
- ║werden, wenn es auf hohe Verarbeitungsgeschwindigkeit ankommt. ║
- ╟──────────────────────────────────────────────────────────────────────╢
- ║Parameter: ║
- ║CHARACTERSTRING [ZIFFERN, PLUS UND MINUSZEICHEN, BLANKS]//CHAR(0) ║
- ║INTEGERFELD Feld mit Längenangaben der aus dem String zu lesenden║
- ║ Integers (1 BIS 10) ║
- ║INTEGERFELD Return: Feld mit aus dem String gelesenen Integers. ║
- ║INTEGER Return: Fehlerflag: ║
- ║ 0: Routine mit Erfolg beendet ║
- ║ 1: Ein Fehler ist aufgetreten! ║
- ╟──────────────────────────────────────────────────────────────────────╢
- ║Beispiel: CHARACTER STRING*16 ║
- ║ INTEGER ZAHL(6),LANG(6) ║
- ║ DATA LANG /2,2,2,2,1,6/ ║
- ║ STRING='1234567890-23456'//CHAR(0) ║
- ║ CALL AITRAN (STRING,LANG,ZAHL,I) ║
- ║ IF (I .NE. 0) THEN ║
- ║ WRITE (*'(1X,A)') 'Fehler!' ║
- ║ ELSE ║
- ║ WRITE (*'(4(I3),I2,I7)') ZAHL ║
- ║ ENDIF ║
- ║ Die Subroutine liest aus dem String "STRING" sechs ║
- ║ Integers mit den in "LANG" übergebenen Längen aus. ║
- ║ Wenn ein Fehler auftritt, wird eine Meldung ║
- ║ ausgegeben, sonst werden die gelesenen Zahlen auf den║
- ║ Bildschirm geschrieben. ║
- ╚══════════════════════════════════════════════════════════════════════╝
-
-
- Seite 106
-
-
- ╔══════════════════════════════════════════════════════════════════════╗
- ║Beschreibung der Subroutine IATRAN (IWERT,AWERT,ALANG,FLAG) ║
- ║Die Subroutine transformiert eine Integerzahl IWERT in einen ║
- ║Characterstring AWERT. Die Länge des übergebenen Characterstrings ║
- ║wird in ALANG übergeben. Die Integerzahl wird im String rechtsbündig ║
- ║abgelegt; nicht benötigte Stellen werden linksbündig mit Blanks ║
- ║überschrieben. Wenn ein Fehler auftritt, weil z. B. der übergebene ║
- ║String zu klein ist, wird die Routine mit FLAG gleich 1 abgeschlossen,║
- ║sonst steht darin eine Null. Das Umformen von Integers in Strings ist ║
- ║auch mit der WRITE-Anweisung möglich, IATRAN sollte aber eingesetzt ║
- ║werden, wenn es auf hohe Verarbeitungsgeschwindigkeit ankommt. ║
- ╟──────────────────────────────────────────────────────────────────────╢
- ║Parameter: ║
- ║INTEGER In ASCII-Zeichen umzuformender Integer-Wert. ║
- ║CHARACTER Return: String mit in ASCII-Zeichen umgeformten ║
- ║ Integerwert [max 128 Byte lang!] ║
- ║INTEGER Länge des übergebenen Strings AWERT in Byte [MAX 128]║
- ║INTEGER Return: Fehlerflag: ║
- ║ 0: Routine mit Erfolg beendet ║
- ║ 1: Ein Fehler ist aufgetreten! ║
- ╟──────────────────────────────────────────────────────────────────────╢
- ║Beispiel: CHARACTER STRING*16 ║
- ║ CALL IATRAN (-123456,STRING,16,I) ║
- ║ IF (I .NE. 0) THEN ║
- ║ WRITE (*'(1X,A)') 'Fehler!' ║
- ║ ELSE ║
- ║ WRITE (*,'(1X,A16)') STRING ║
- ║ ENDIF ║
- ║ Die Subroutine schreibt die Zahl -123456 rechts- ║
- ║ bündig in der Form " -123456" in den String. ║
- ║ Wenn ein Fehler auftritt, wird eine Meldung ║
- ║ ausgegeben, sonst wird der String am Bildschirm ║
- ║ ausgegeben. ║
- ╚══════════════════════════════════════════════════════════════════════╝
-
-
- Seite 107
-
-
- Zufallzahlen und Sortierungen
-
- Zufallzahlen sind nie wirklich zufällig; sie unterliegen gewöhnlich
- einer mathematischen Gesetzmäßigkeit. Schließlich werden sie ja durch
- einen mathematischen Algorithmus erzeugt. FORSUB.LIB enthält eine
- Subroutine zur Erzeugung von Zufallzahlen, bei der der mathematische
- Algorithmus so weit gefächert ist, daß die damit erzeugten Zahlen so gut
- wie zufällig sind. Dadurch benötigt die Subroutine allerdings auch
- relativ viel Zeit für ihre Ausführung.
-
- In FORSUB.LIB sind Subroutinen zur Sortierung von Feldern der
- verschiedenen Datentypen enthalten. Je nach Bedarf kann steigend oder
- fallend sortiert werden.
-
-
- Subroutinen für Sortierungen und zur Erzeugung von Zufallzahlen
-
- ZUFALL a) Zufallzahl innerhalb vorgegebener Schranken erzeugen
- ZUFAFE a) Feld mit mehrdeutigen Zufallzahlen innerhalb vorgegebener
- Schranken erzeugen
- b) Feld mit eindeutigen Zufallzahlen innerhalb vorgegebener
- Schranken erzeugen
- ISORT a) Integerwerte steigend sortieren
- b) Integerwerte fallend sortieren
- RSORT a) Realwerte steigend sortieren
- b) Realwerte fallend sortieren
- ASORT a) Characterstrings alphanumerisch steigend sortieren
- b) Characterstrings alphanumerisch fallend sortieren
-
-
- Seite 108
-
-
- ╔═════════════════════════════════════════════════════════════════════╗
- ║Beschreibung der Subroutine ZUFALL (WERT,USCH,OSCH) ║
- ║Die Subroutine erzeugt eine Zufallzahl, die inerhalb der oberen ║
- ║Schranke OSCH und der unteren Schranke USCH liegt. Die zu erzeugende ║
- ║Zufallzahl kann zwischen 0 und 999999 plus dem Wert der unteren ║
- ║Schranke liegen. ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Parameter: ║
- ║INTEGER Return: Zufallzahl. ║
- ║INTEGER untere Schranke (kleinstmögliche Zufallzahl) ║
- ║ [ 0 bis 999999 ]. ║
- ║INTEGER obere Schranke (größtmögliche Zufallzahl) ║
- ║ [ 1 bis 999999+USCH ]. ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Subroutinen: PIKE,GETTIM ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Beispiel: CALL ZUFALL (I,1,49) ║
- ║ Die Routine erzeugt eine Zufallzahl zwischen 1 und ║
- ║ 49 und speichert sie in der Variablen I. ║
- ╚═════════════════════════════════════════════════════════════════════╝
-
-
- Seite 109
-
-
- ╔═════════════════════════════════════════════════════════════════════╗
- ║Beschreibung der Subroutine ZUFAFE (FELD,ANZ,USCH,OSCH,ART) ║
- ║Die Subroutine füllt ein Integerfeld FELD mit ANZ Zufallzahlen, die ║
- ║zwischen der oberen Schranke OSCH und der unteren Schranke USCH ║
- ║liegen. Die Zufallzahlen können zwischen 0 und 999999 plus dem Wert ║
- ║der unteren Schranke liegen. Mit ART wird angegeben, ob Zufallzahlen ║
- ║ein- oder mehrfach im Integerfeld vorkommen dürfen. ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Parameter: ║
- ║INTEGERFELD Return: Zufallzahlen [ FELD(ANZ) ]. ║
- ║INTEGER Anzahl der zu ermittelnden Zufallzahlen. ║
- ║INTEGER untere Schranke (kleinstmögliche Zufallzahl) ║
- ║ [ 0 bis 999999 ]. ║
- ║INTEGER obere Schranke (größtmögliche Zufallzahl) ║
- ║ [ 1 bis 999999+USCH ]. ║
- ║INTEGER Belegungsart: 0: Zufallzahlen dürfen mehrfach ║
- ║ vorkommen. ║
- ║ 1: Zufallzahlen dürfen jeweils nur ║
- ║ einmal vorkommen ║
- ║ Return: -1: Wenn ein Fehler aufgetreten ist ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Subroutinen: PEEK,GETTIM ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Beispiel: INTEGER FLED(6) ║
- ║ CALL ZUFAFE (FELD,6,1,49,1) ║
- ║ Die Routine erzeugt sechs Zufallzahlen zwischen 1 ║
- ║ und 49 und speichert sie im Integerfeld FELD. Jede ║
- ║ Zufallzahl kommt dabei nur einmal vor. ║
- ╚═════════════════════════════════════════════════════════════════════╝
-
-
- Seite 110
-
-
- ╔═════════════════════════════════════════════════════════════════════╗
- ║Beschreibung der Subroutine ASORT (ANZ,FELD,ART) ║
- ║Die Subroutine sortiert "ANZ" Characterstrings in einem Feld "FELD". ║
- ║Wenn in "ART" eine Null übergeben wird, erfolgt die Sortierung ║
- ║alphanumerisch steigend, wenn eine Eins übergeben wird, erfolgt die ║
- ║Sortierung alphanumerisch fallend. Die alphanumerische Reihenfolge ║
- ║entspricht der ASCII-Codetabelle. ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Parameter: ║
- ║INTEGER Anzahl der zu sortierenden Strings ║
- ║CHARACTERFELD Feld mit zu sortierenden Strings in der Form ║
- ║ [ FELD(ANZ)*(*) ]. ║
- ║INTEGER Art der Sortierung: 0: steigende Sortierung ║
- ║ 1: fallende Sortierung ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Subroutinen: keine ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Beispiel: CHARACTER FELD(100)*1 ║
- ║ DO 1 I=1,100 ║
- ║ CALL ZUFALL (CHAR(FELD(I)),0,256) ║
- ║ 1 CONTINUE ║
- ║ CALL ASORT (100,FELD,0) ║
- ║ Es werden einhundert zufällig erzeugte Zeichen ║
- ║ im Feld "FELD" aufsteigend sortiert. ║
- ╚═════════════════════════════════════════════════════════════════════╝
-
-
- Seite 111
-
-
- ╔═════════════════════════════════════════════════════════════════════╗
- ║Beschreibung der Subroutine ISORT (ANZ,FELD,ART) ║
- ║Die Subroutine sortiert "ANZ" Integerwerte in einem Wertefeld "FELD".║
- ║Wenn in "ART" eine Null übergeben wird, erfolgt die Sortierung ║
- ║steigend, wenn eine Eins übergeben wird, erfolgt die Sortierung ║
- ║fallend. ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Parameter: ║
- ║INTEGER Anzahl der zu sortierenden Werte. ║
- ║INTEGERFELD Feld mit zu sortierenden Integers in der Form ║
- ║ [ FELD(ANZ) ]. ║
- ║INTEGER Art der Sortierung: 0: steigende Sortierung ║
- ║ 1: fallende Sortierung ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Subroutinen: keine ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Beispiel: INTEGER FELD(100) ║
- ║ DO 1 I=1,100 ║
- ║ CALL ZUFALL (FELD(I),0,1000000) ║
- ║ 1 CONTINUE ║
- ║ CALL ISORT (100,FELD,0) ║
- ║ Es werden einhundert zufällig erzeugte Integers ║
- ║ im Feld "FELD" aufsteigend sortiert. ║
- ╚═════════════════════════════════════════════════════════════════════╝
-
-
- Seite 112
-
-
- ╔═════════════════════════════════════════════════════════════════════╗
- ║Beschreibung der Subroutine RSORT (ANZ,FELD,ART) ║
- ║Die Subroutine sortiert "ANZ" Realwerte in einem Wertefeld "FELD". ║
- ║Wenn in "ART" eine Null übergeben wird, erfolgt die Sortierung ║
- ║steigend, wenn eine Eins übergeben wird, erfolgt die Sortierung ║
- ║fallend. ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Parameter: ║
- ║INTEGER Anzahl der zu sortierenden Werte. ║
- ║REALFELD Feld mit zu sortierenden Reals in der Form ║
- ║ [ FELD(ANZ) ]. ║
- ║INTEGER Art der Sortierung: 0: steigende Sortierung ║
- ║ 1: fallende Sortierung ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Subroutinen: keine ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Beispiel: REAL FELD(100) ║
- ║ DO 1 I=1,100 ║
- ║ CALL ZUFALL (J,0,10000000) ║
- ║ FELD(I)=J/100.0 ║
- ║ 1 CONTINUE ║
- ║ CALL RSORT (100,FELD,0) ║
- ║ Es werden einhundert zufällig erzeugte Realwerte ║
- ║ im Feld "FELD" aufsteigend sortiert. ║
- ╚═════════════════════════════════════════════════════════════════════╝
-
-
- Seite 113
-
-
- Stringmanipulationen
-
- Unter Stringmanipulationen versteht man Veränderungen in Textstrings,
- die alle darin enthaltenen Zeichen oder bestimmte Zeichenketten
- betreffen. FORSUB.LIB bietet die gebräuchlichsten Subroutinen zur
- Stringmanipulation, die dem Programmierer viel Arbeit abnehmen. Jede
- Subroutine kann Strings bis zu zweihundert Zeichen Länge verarbeiten.
- Die Verwendung von Substrings ist dabei möglich. Für den Eingabestring
- und den Ausgabestring, der das Ergebnis der Stringmanipulation enthält,
- darf die selbe Variable verwendet werden, wodurch aufwendige
- Umspeicherungen vermieden werden.
-
-
- Subroutinen für Stringmanipulationen
-
- ANZAHL a) Anzahl der Worte in einer Zeichenkette feststellen
- CHANGE a) Zeichenketten gegen andere Zeichenketten in einem Textstring
- austauschen
- CHAWAL a) Verschiedene Zeichen gegen andere Zeichen in einem Textstring
- austauschen
- b) Verschiedene Zeichen aus dem Textstring entfernen
- CHAZEI a) Gruppen von Zeichen gegen ein anderes Zeichen in einem
- Textstring austauschen
- DEHN a) Textstring durch Vervielfachen der darin enthaltenen
- Leerstellen auf eine vorgegebene Länge dehnen
- DELETE a) Zeichenketten aus einem Textstring entfernen
- FUEG a) Zeichenketten positioniert in einem String einfügen
- GETWOR a) Wort mit vorgegebener Nummer aus einem String lesen
- LAENGE a) Position des letzten Zeichens in einem Textstring ermitteln
- NEXT a) Position des nächsten Wortes ab einer vorgegebenen Position
- im Textstring ermitteln
- POSIT a) Position des erstmaligen Auftretens einer Zeichenkette in
- einem Textstring ermitteln
- b) Position des letztmaligen Auftretens einer Zeichenkette in
- einem Textstring ermitteln
- TXCODE a) Textstring mit Hilfe einer Codetabelle verschlüsseln
- b) Textstring mit Hilfe einer Codetabelle entschlüsseln
- RECHTS a) Text in einer Character-Variablen rechtsbündig formatieren
- UPCASE a) Kleinbuchstaben eines Textstrings in Großbuchstaben umwandeln
- WOSUCH a) Nummer eines Wortes in einem Textstring ermitteln
- ZAHL a) Equivalenz eines Textstrings zum Integer- oder Realformat
- testen
-
-
- Seite 114
-
-
- ╔═════════════════════════════════════════════════════════════════════╗
- ║Beschreibung der Subroutine ANZAHL (IN,ANZ) ║
- ║Die Subroutine stellt die Anzahl der in einem String "IN" vorhandenen║
- ║Worte fest und gibt sie in "ANZ" an das rufende Programm zurück. Die ║
- ║Characters Null [CHAR(0)] und Blank werden dabei als Separator ║
- ║gewertet. Der String "IN" darf eine Länge von maximal 200 Zeichen ║
- ║haben. ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Parameter: ║
- ║CHARACTERSTRING Eingabestring [max. 200 Zeichen]. ║
- ║INTEGER Return: Anzahl der gefundenen Worte ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Beispiel: CHARACTER IN*100 ║
- ║ IN='Zu bearbeitender String: ANZAHL.FOR' ║
- ║ CALL ANZAHL (IN,IANZ) ║
- ║ In der Variablen "IANZ" wird der Wert 4 als Anzahl ║
- ║ der gefundenen Worte zurückgegeben. ║
- ╚═════════════════════════════════════════════════════════════════════╝
-
-
- Seite 115
-
-
- ╔═════════════════════════════════════════════════════════════════════╗
- ║Beschreibung der Subroutine CHANGE (IN,STRIN,OUT,STROUT) ║
- ║Die Subroutine kopiert den String "IN" in den String "OUT". Dabei ║
- ║werden Zeichenketten "STRIN" gegen Zeichenketten "STROUT" ║
- ║ausgetauscht. ║
- ║Alle Strings dürfen eine Länge von maximal 200 Zeichen haben. Die ║
- ║Strings "STRIN" und "STROUT" dürfen nicht als Substrings übergeben ║
- ║werden. Es ist möglich, für die Strings "IN" und "OUT" dieselbe ║
- ║Variable zu verwenden. ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Parameter: ║
- ║CHARACTERSTRING Eingabestring [max. 200 Zeichen]. ║
- ║CHARACTERSTRING Zeichenkette, die ausgetauscht werden soll ║
- ║ [max. 200 Zeichen]. ║
- ║CHARACTERSTRING Return: Ausgabestring [max. 200 Zeichen]. ║
- ║CHARACTERSTRING Zeichenkette, gegen die ausgetauscht werden soll ║
- ║ [max. 200 Zeichen]. ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Subroutinen: LAENGE ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Beispiel: CHARACTER IN*100,OUT*80 ║
- ║ IN='Zu suchende Datei: CHANGE.FOR' ║
- ║ CALL CHANGE (IN,'FOR',OUT,'EXE') ║
- ║ Der Text in der Variablen "OUT" ist nun: ║
- ║ "Zu suchende Datei: CHANGE.EXE". ║
- ╚═════════════════════════════════════════════════════════════════════╝
-
-
- Seite 116
-
-
- ╔═════════════════════════════════════════════════════════════════════╗
- ║Beschreibung der Subroutine CHAWAL (IN,STRIN,OUT,STROUT) ║
- ║Die Subroutine kopiert den String "IN" in den String "OUT". Dabei ║
- ║werden alle in "STRIN" vorkommenden Zeichen gegen die in "STROUT" an ║
- ║der gleichen Position stehenden Zeichen ausgetauscht. Zeichen, für ║
- ║die in "STROUT" kein Äquivalent vorhanden ist, werden nur gelöscht. ║
- ║Die Strings dürfen eine Länge von maximal 200 Zeichen haben. ║
- ║Es ist möglich, für die Strings "IN" und "OUT" dieselbe Variable zu ║
- ║verwenden. ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Parameter: ║
- ║CHARACTERSTRING Eingabestring [max. 200 Zeichen]. ║
- ║CHARACTERSTRING String mit auszutauschenden Zeichen ║
- ║ [max. 200 Zeichen]. ║
- ║CHARACTERSTRING Return: Ausgabestring [max. 200 Zeichen]. ║
- ║CHARACTERSTRING String mit Zeichen, gegen die ausgetauscht werden ║
- ║ soll [max. 200 Zeichen]. ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Subroutinen: LAENGE ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Beispiel: CHARACTER IN*100,OUT*80 ║
- ║ IN='Zu suchende Datei: CHAWAL.FOR' ║
- ║ CALL CHAWAL (IN,'uei',0UT,'*#') ║
- ║ Der Text in der Variablen "OUT" ist nun: ║
- ║ "Z* s*ch#nd# Dat#: CHAWAL.FOR". ║
- ╚═════════════════════════════════════════════════════════════════════╝
-
-
- Seite 117
-
-
- ╔═════════════════════════════════════════════════════════════════════╗
- ║Beschreibung der Subroutine CHAZEI (IN,ZEIKL,ZEIGR,OUT,ZEICHA) ║
- ║Die Subroutine kopiert den String "IN" in den String "OUT". Dabei ║
- ║werden Zeichen größer/gleich "ZEIKL" und kleiner/gleich "ZEIGR" gegen║
- ║das Zeichen "ZEICHA" ausgetauscht. Wenn "ZEICHA" das Zeichen Null ║
- ║[CHAR(0)] ist, wird das gefundene Zeichen nur gelöscht. ║
- ║Die Strings "IN" und "OUT" dürfen eine Länge von maximal 200 Zeichen ║
- ║haben. "ZEIKL" muß lexikaligraphisch kleiner als "ZEIGR" sein. ║
- ║"ZEIKL", "ZEIGR" und "ZEICHA" dürfen nur ein Zeichen lang sein. ║
- ║Es ist möglich, für die Strings "IN" und "OUT" diselbe Variable zu ║
- ║verwenden. ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Parameter: ║
- ║CHARACTERSTRING Eingabestring [max. 200 Zeichen]. ║
- ║CHARACTER Kleinstes auzutauschendes Zeichen. ║
- ║CHARACTER Größtes auszutauschendes Zeichen. ║
- ║CHARACTERSTRING Return: Ausgabestring [max. 200 Zeichen]. ║
- ║CHARACTER Zeichen, gegen das ausgetauscht werden soll oder ║
- ║ Null [CHAR (0)] wenn nur gelöscht werden soll. ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Subroutinen: LAENGE ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Beispiel: CHARACTER IN*100,OUT*80 ║
- ║ IN='Zu suchende Datei: CHAZEI.FOR' ║
- ║ CALL CHAZEI (IN,'A','E',OUT,'*') ║
- ║ Der Text in der Variablen "OUT" ist nun: ║
- ║ "Zu suchende *atei: *H*Z*I.*X*". ║
- ╚═════════════════════════════════════════════════════════════════════╝
-
-
- Seite 118
-
-
- ╔═════════════════════════════════════════════════════════════════════╗
- ║Beschreibung der Subroutine DEHN (IN,OUT,LAN) ║
- ║Die Subroutine kopiert den String "IN" in den String "OUT". Dabei ║
- ║werden die in "IN" enthaltenen Leerzeichen sooft vervielfacht, bis ║
- ║das letzte Zeichen an der Position "LAN" steht. Wenn die Länge von ║
- ║"IN" kleiner als 75% von "LAN" ist, wird "IN" unverändert in "OUT" ║
- ║kopiert. ║
- ║Es ist möglich, für die Strings "IN" und "OUT" diselbe Variable zu ║
- ║verwenden. ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Parameter: ║
- ║CHARACTERSTRING Eingabestring [max. 200 Zeichen]. ║
- ║CHARACTERSTRING Return: Ausgabestring [max. 200 Zeichen]. ║
- ║INTEGER Position, an der das letzte Zeichen stehen soll ║
- ║ [max. 200]. ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Beispiel: CHARACTER IN*100,OUT*80 ║
- ║ IN='Zu suchende Datei: DEHN.FOR' ║
- ║ CALL DEHN (IN,OUT,35) ║
- ║ Der Text in der Variablen "OUT" ist nun: ║
- ║ "Zu suchende Datei: DEHN.FOR". ║
- ╚═════════════════════════════════════════════════════════════════════╝
-
-
- Seite 119
-
-
- ╔═════════════════════════════════════════════════════════════════════╗
- ║Beschreibung der Subroutine DELETE (IN,OUT,STRIN) ║
- ║Die Subroutine kopiert den String "IN" in den String "OUT". Dabei ║
- ║werden Zeichenketten "STRIN" herausgefiltert. ║
- ║Alle Strings dürfen eine Länge von maximal 200 Zeichen haben. Der ║
- ║String "STRIN" darf nicht als Substring übergeben werden. Es ist ║
- ║möglich, für die Strings "IN" und "OUT" dieselbe Variable zu ║
- ║verwenden. ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Parameter: ║
- ║CHARACTERSTRING Eingabestring [max. 200 Zeichen]. ║
- ║CHARACTERSTRING Return: Ausgabestring [max. 200 Zeichen]. ║
- ║CHARACTERSTRING Zeichenkette, die herausgefiltert werden soll ║
- ║ [max. 200 Zeichen]. ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Subroutinen: LAENGE ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Beispiel: CHARACTER IN*100,OUT*80 ║
- ║ IN='Zu suchende Datei: DELETE.FOR' ║
- ║ CALL DELETE (IN,OUT,'Datei') ║
- ║ Der Text in der Variablen "OUT" ist nun: ║
- ║ "Zu suchende : DELETE.FOR". ║
- ╚═════════════════════════════════════════════════════════════════════╝
-
-
- Seite 120
-
-
- ╔═════════════════════════════════════════════════════════════════════╗
- ║Beschreibung der Subroutine FUEG (IN,STRIN,OUT,POS) ║
- ║Die Subroutine kopiert den String "IN" in den String "OUT". Dabei ║
- ║wird die Zeichenkette "STRIN" hinter der Position "POS" eingefügt. ║
- ║Alle Strings dürfen eine Länge von maximal 200 Zeichen haben. Der ║
- ║String "STRIN" darf nicht als Substring übergeben werden. Es ist ║
- ║möglich, für die Strings "IN" und "OUT" dieselbe Variable zu ║
- ║verwenden. ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Parameter: ║
- ║CHARACTERSTRING Eingabestring [max. 200 Zeichen]. ║
- ║CHARACTERSTRING Zeichenkette, die eingefügt werden soll ║
- ║ [max. 200 Zeichen]. ║
- ║CHARACTERSTRING Return: Ausgabestring [max. 200 Zeichen]. ║
- ║INTEGER Position, hinter die eingefügt werden soll ║
- ║ [max. 199]. ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Beispiel: CHARACTER IN*100,OUT*80 ║
- ║ IN='Zu suchende Datei: FUEG.FOR' ║
- ║ CALL FUEG (IN,'FORTRAN-',OUT,12) ║
- ║ Der Text in der Variablen "OUT" ist nun: ║
- ║ "Zu suchende FORTRAN-Datei: FUEG.FOR". ║
- ╚═════════════════════════════════════════════════════════════════════╝
-
-
- Seite 121
-
-
- ╔═════════════════════════════════════════════════════════════════════╗
- ║Beschreibung der Subroutine GETWOR (IN,ANZ,STROUT) ║
- ║Die Subroutine schreibt das in "ANZ" angeforderte Wort aus der ║
- ║Zeichenkette "IN" in die Variable "STROUT". Die Strings dürfen eine ║
- ║Länge von maximal 200 Zeichen haben. Die Nummer des gewünschten ║
- ║Wortes wird in "ANZ" übergeben. Wenn die Anzahl Wörter in "IN" nicht ║
- ║vorhanden ist, wird in "ANZ" 0 zurückgegeben. ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Parameter: ║
- ║CHARACTERSTRING Eingabestring [max. 200 Zeichen]. ║
- ║INTEGER Wortzähler ║
- ║ Return: 0 wenn Anzahl Wörter nicht vorhanden ist ║
- ║CHARACTERSTRING Return: Gesuchtes Wort [max. 200 Zeichen] ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Subroutinen: FUEG,POSIT,NEXT ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Beispiel: CHARACTER IN*100,STROUT*40 ║
- ║ IN='Zu suchende Datei: GETWOR.FOR' ║
- ║ CALL GETWOR (IN,3,STROUT) ║
- ║ In der Variablen "STROUT" wird der Text "Datei" ║
- ║ zurückgegeben. ║
- ╚═════════════════════════════════════════════════════════════════════╝
-
-
- Seite 122
-
-
- ╔═════════════════════════════════════════════════════════════════════╗
- ║Beschreibung der Subroutine LAENGE (IN,LAN) ║
- ║Die Subroutine stellt die Position des letzten Zeichens in "IN" fest ║
- ║und gibt sie in "LAN" an das rufende Programm zurück. Die Characters ║
- ║Null [CHAR(0)] und Blank werden dabei nicht als Zeichen gewertet. ║
- ║Der String "IN" darf eine Länge von maximal 200 Zeichen haben. ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Parameter: ║
- ║CHARACTERSTRING Eingabestring [max. 200 Zeichen]. ║
- ║INTEGER Return: Position des letzten Zeichens ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Beispiel: CHARACTER IN*100 ║
- ║ IN='Zu suchende Datei: LAENGE.FOR ' ║
- ║ CALL LAENGE (IN,IPOS) ║
- ║ In der Variablen "IPOS" wird der Wert 29 als ║
- ║ Position des letzten Zeichens zurückgegeben. ║
- ╚═════════════════════════════════════════════════════════════════════╝
-
-
- Seite 123
-
-
- ╔═════════════════════════════════════════════════════════════════════╗
- ║Beschreibung der Subroutine NEXT (IN,POS) ║
- ║Die Subroutine stellt die Position des nächsten Wortes in einer ║
- ║Zeichenkette "IN" fest. Die Position wird in "POS" an das rufende ║
- ║Programm zurückgegeben. Das am Anfang der Zeichenkette stehende Wort ║
- ║und die nachfolgenden Blanks und Null-Characters werden überlesen, ║
- ║so daß die Position des ersten Zeichens im nachfolgenden Wort in ║
- ║"POS" übergeben wird. Wenn das nächste Wort in der Zeichenkette nicht║
- ║vorhanden ist, wird in "POS" 0 zurückgegeben. ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Parameter: ║
- ║CHARACTERSTRING Eingabestring [max. 200 Zeichen]. ║
- ║INTEGER Return: Position des nächsten Wortes ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Subroutinen: LAENGE ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Beispiel: CHARACTER IN*100 ║
- ║ IN='Zu suchende Datei: NEXT.FOR' ║
- ║ CALL NEXT (IN,IPOS) ║
- ║ In der Variablen "IPOS" wird der Wert 4 als ║
- ║ Position für das erste Zeichen im nächsten Wort an ║
- ║ das rufende Programm übergeben. ║
- ╚═════════════════════════════════════════════════════════════════════╝
-
-
- Seite 124
-
-
- ╔═════════════════════════════════════════════════════════════════════╗
- ║Beschreibung der Subroutine POSIT (IN,POS,STRIN,IND) ║
- ║Die Subroutine stellt die Position der Zeichenkette "STRIN" in der ║
- ║Zeichenkette "IN" fest. Die Position wird in "POS" an das rufende ║
- ║Programm zurückgegeben. Wenn der Indikator "IND" 1 gesetzt ist, wird ║
- ║nach dem letztmaligen Auftreten in "IN" gesucht, wenn "IND" 0 gesetzt║
- ║ist, wird nach dem erstmaligen Auftreten gesucht. Wenn "STRIN" in ║
- ║"IN" nicht vorhanden ist, wird in "POS" 0 zurückgegeben. "STRIN" darf║
- ║nicht als Substring übergeben werden. ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Parameter: ║
- ║CHARACTERSTRING Eingabestring [max. 200 Zeichen]. ║
- ║INTEGER Return: Position des Suchstrings ║
- ║CHARACTERSTRING Zeichenkette, deren Position festgestellt werden ║
- ║ soll [max. 200 Zeichen]. ║
- ║INTEGER Indikator: 0: Es wird nach dem erstmaligen Auftreten║
- ║ gesucht. ║
- ║ 1: Es wird nach dem letztmaligen ║
- ║ Auftreten gesucht. ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Beispiel: CHARACTER IN*100 ║
- ║ IN='Zu suchende Datei: POSIT.FOR' ║
- ║ CALL POSIT (IN,IPOS,'POSIT',1) ║
- ║ In der Variablen "IPOS" wird der Wert 20 als ║
- ║ Position für das letztmalige Auftreten des ║
- ║ Suchstrings an das rufende Programm übergeben. ║
- ╚═════════════════════════════════════════════════════════════════════╝
-
-
- Seite 125
-
-
- ╔═════════════════════════════════════════════════════════════════════╗
- ║Beschreibung der Subroutine RECHTS (IN,OUT,LAN) ║
- ║Die Subroutine kopiert den String "IN" in den String "OUT". Dabei ║
- ║werden die in "IN" enthaltene String rechtsbündig in die Variable ║
- ║"OUT" kopiert. ║
- ║Es ist möglich, für die Strings "IN" und "OUT" diselbe Variable zu ║
- ║verwenden. ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Parameter: ║
- ║CHARACTERSTRING Eingabestring [max. 200 Zeichen]. ║
- ║CHARACTERSTRING Return: Ausgabestring [max. 200 Zeichen]. ║
- ║INTEGER Position, an der das letzte Zeichen stehen soll ║
- ║ [max. 200]. ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Beispiel: CHARACTER IN*100,OUT*80 ║
- ║ IN='RECHTS.FOR' ║
- ║ CALL RECHTS (IN,OUT,20) ║
- ║ Der Text in der Variablen "OUT" ist nun: ║
- ║ " RECHTS.FOR". ║
- ╚═════════════════════════════════════════════════════════════════════╝
-
-
- Seite 126
-
-
- ╔═════════════════════════════════════════════════════════════════════╗
- ║Beschreibung der Subroutine TXCODE (IN,OUT,CODE,ART) ║
- ║Die Subroutine kopiert den String "IN" in den String "OUT". Dabei ║
- ║werden alle Kleinbuchstaben, Großbuchstaben und Ziffern mit Hilfe ║
- ║einer Codetabelle "CODE" umgewandelt. Wenn in "ART" eine Null steht, ║
- ║wird verschlüsselt, eine Eins wird zum entschlüsseln übergeben. ║
- ║Ein- und Ausgabestrings dürfen eine Länge von maximal 200 Zeichen ║
- ║haben. Es ist möglich, für die Strings "IN" und "OUT" dieselbe ║
- ║Variable zu verwenden. ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Parameter: ║
- ║CHARACTERSTRING Eingabestring [max. 200 Zeichen]. ║
- ║CHARACTERSTRING Return: Ausgabestring [max. 200 Zeichen]. ║
- ║CHARACTERSTRING Codetabelle [69 Zeichen!]. ║
- ║ In der Codetabelle stehen in der richtigen ║
- ║ Reihenfolge Zeichen, gegen die ausgetauscht werden ║
- ║ soll. ║
- ║ Die Zeichen 1 bis 10 stehen für die Ziffern 0 bis 9║
- ║ Die Zeichen 11 bis 36 stehen für die Zeichen A bis Z║
- ║ Die Zeichen 37 bis 62 stehen für die Zeichen a bis z║
- ║ Die Zeichen 63 bis 69 stehen für die Zeichen ÄÖÜäöüß║
- ║ Die Codetabelle muß EINDEUTIG sein, um den Text ║
- ║ wieder fehlerfrei entschlüsseln zu können (d. h. ║
- ║ jedes Zeichen darf in der Codetabelle nur einmal ║
- ║ vorhanden sein, alle 69 Zeichen müssen eingetragen ║
- ║ sein, es dürfen nur die o. g. Zeichen verwendet ║
- ║ werden). ║
- ║INTEGER Art der Codewandlung. ║
- ║ 0: verschlüsseln ║
- ║ 1: entschlüsseln ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Subroutinen: LAENGE ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Beispiel: CHARACTER IN*100,OUT*80,CODE*38 ║
- ║ DATA CODE(1:32) /'9876543210QWERTZUIOPVASDFGHJKLBN'/║
- ║ DATA CODE(33:69) /'YXCMmnbvcxylkjhgfdsapoiuztrewqß'/║
- ║ DATA CODE(64:69) /'üöäÜÖÄ'/ ║
- ║ IN='ZU VERSCHLÜSSELNDER TEXT' ║
- ║ CALL TXCODE (IN,OUT,CODE,0) ║
- ║ Der Text in der Variablen "OUT" ist nun: ║
- ║ "VB NTJKEIAöKKTADRTJ LTXL". ║
- ╚═════════════════════════════════════════════════════════════════════╝
-
-
- Seite 127
-
-
- ╔═════════════════════════════════════════════════════════════════════╗
- ║Beschreibung der Subroutine UPCASE (IN,OUT) ║
- ║Die Subroutine kopiert den String "IN" in den String "OUT". Dabei ║
- ║werden alle Kleinbuchstaben in Großbuchstaben umgewandelt. ║
- ║Die Strings dürfen eine Länge von maximal 200 Zeichen haben. ║
- ║Es ist möglich, für die Strings "IN" und "OUT" dieselbe Variable zu ║
- ║verwenden. ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Parameter: ║
- ║CHARACTERSTRING Eingabestring [max. 200 Zeichen]. ║
- ║CHARACTERSTRING Return: Ausgabestring [max. 200 Zeichen]. ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Subroutinen: LAENGE ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Beispiel: CHARACTER IN*100,OUT*80 ║
- ║ IN='Zu suchende Datei: UPCASE.FOR' ║
- ║ CALL UPCASE (IN,OUT) ║
- ║ Der Text in der Variablen "OUT" ist nun: ║
- ║ "ZU SUCHENDE DATEI: UPCASE.FOR". ║
- ╚═════════════════════════════════════════════════════════════════════╝
-
-
- Seite 128
-
-
- ╔═════════════════════════════════════════════════════════════════════╗
- ║Beschreibung der Subroutine WOSUCH (IN,STRIN,ANZ) ║
- ║Die Subroutine stellt fest, um das wievielte Wort in der Zeichenkette║
- ║"IN" es sich bei der in "STRIN" übergebenen Zeichenkette handelt. ║
- ║Alle Strings dürfen eine Länge von maximal 200 Zeichen haben. Die ║
- ║Nummer des gesuchten Wortes wird in "ANZ" zurückgegeben. Wenn das ║
- ║Wort nicht gefunden wird, enthält "ANZ" eine 0. ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Parameter: ║
- ║CHARACTERSTRING Eingabestring [max. 200 Zeichen]. ║
- ║CHARACTERSTRING Suchstring [max. 200 Zeichen]. ║
- ║INTEGER Return: Wortzähler ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Subroutinen: LAENGE,NEXT ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Beispiel: CHARACTER IN*100 ║
- ║ IN='Zu suchende Datei: WOSUCH.FOR' ║
- ║ CALL WOSUCH (IN,'Datei',ANZ) ║
- ║ In der Variablen "ANZ" wird der Wert 3 ║
- ║ zurückgegeben. ║
- ╚═════════════════════════════════════════════════════════════════════╝
-
-
- Seite 129
-
-
- ╔═════════════════════════════════════════════════════════════════════╗
- ║Beschreibung der Subroutine ZAHL (IN,IND) ║
- ║Die Subroutine stellt fest, ob im String "IN" eine in Integer- oder ║
- ║Realvariablen konvertierbare Zeichenfolge vorhanden ist und gibt ein ║
- ║entsprechendes Flag an das rufende Programm zurück. Die von der ║
- ║Routine berücksichtigten Maximalformate sind für Integer I11 und für ║
- ║Real F20.9. ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Parameter: ║
- ║CHARACTERSTRING Eingabestring ║
- ║INTEGER Return: Indikator für Konvertierbarkeit ║
- ║ 0: nicht konvertierbar oder Wert zu groß ║
- ║ 1: nach Integer konvertierbar ║
- ║ 2: nach Real konvertierbar ║
- ║ 3: nach Real und nach Integer konvertierbar ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Subroutinen: LAENGE ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Beispiel: CHARACTER IN*100 ║
- ║ IN='-12345.66666' ║
- ║ CALL ZAHL (IN,I) ║
- ║ In der Variablen "I" wird eine 2 zurückgegeben, da ║
- ║ der String nach Real konvertierbar ist. ║
- ╚═════════════════════════════════════════════════════════════════════╝
-
-
- Seite 130
-
-
- Laufwerks-, Verzeichnis- und Dateimanipulationen
-
- Mit dieser Gruppe von Subroutinen können Informationen über Laufwerke,
- Verzeichnisse und Dateien ermittelt werden. Daneben sind Wechsel in
- andere Laufwerke oder Verzeichnisse und das Anlegen und Löschen von
- Verzeichnissen möglich. Wichtig ist die Möglichkeit, aus einem Programm
- heraus sämtliche Dateimanipulationen wie Kopieren, Moven und Löschen
- optimiert ausführen zu können.
-
- Besondere Bedeutung kommt der Subroutine "DFIND" zu, die alle Laufwerke
- und Verzeichnisse eines Personal-Computers rekursiv nach Dateien oder
- Dateigruppen durchsuchen kann. Dadurch ist es möglich, vom Programm
- benötigte Dateien vor dem Öffnen im gesamten System zu suchen und zu
- finden. So werden Programme, die Hilfsdateien benötigen, vom
- Verzeichnis unabhängig.
-
- Dateiinformationen können von allen Dateiformen, wie versteckten
- Dateien, Systemdateien, Verzeichnissen -die unter DOS nichts anderes als
- Dateien sind- und sogar von der Datenträgerkennung ermittelt werden. Zu
- den Dateiinformationen gehören neben dem Dateinamen der Dateipfad,
- Erzeugungsdatum und -zeit, die Dateiattribute und die Dateigröße.
-
-
- Subroutinen zu Laufwerks-, Verzeichnis- und Dateimanipulationen
-
- LAUFW a) Alle Laufwerke im System feststellen
- LAUFD a) Aktuelles Laufwerk feststellen
- LAUFK a) Typ eines Laufwerks feststellen
- LAUFC a) Wechsel des aktuellen Laufwerks
- DISKSP a) Freien Speicherplatz des aktuellen Laufwerks ermitteln
- b) Freien Speicherplatz eines beliebigen Laufwerks ermitteln
- c) Betriebsbereitschaft eines Laufwerks kontrollieren
- GETVER a) Pfad und Namen des aktuellen Verzeichnisses ermitteln
- SETVER a) Wechsel des aktuellen Verzeichnisses
- CREVER a) Anlegen eines neuen Verzeichnisses
- DELVER a) Löschen eines Verzeichnisses
- DSUCH a) Dateiensuche in einem Verzeichnis
- LFIND a) Dateiensuche in allen Verzeichnissen eines Laufwerks unter
- Berücksichtigung der Dateiattribute
- DFIND a) Dateiensuche in allen Verzeichnissen aller Laufwerke des
- Systems
- DINFO a) Dateispezifische Informationen ermitteln
- DATEI a) Quelldatei kopieren wenn Zieldatei nicht vorhanden ist
- b) Quelldatei kopieren wenn Zieldatei vorhanden ist
- c) Quelldatei bewegen wenn Zieldatei nicht vorhanden ist
- d) Quelldatei bewegen wenn Zieldatei vorhanden ist
- e) Datei verschlüsseln
- f) Datei entschlüsseln
- g) Dateiattribute setzen
- h) Dateiattribute zurücksetzen
- i) Datei löschen
- j) Dateiinhalt mit Nullcharacters überschreiben und anschließend
- löschen
-
-
- Seite 131
-
-
- ╔══════════════════════════════════════════════════════════════════════╗
- ║Beschreibung der Subroutine LAUFW (STRING,ANZ) ║
- ║Die Subroutine ermittelt alle in einem System gültigen Laufwerke. ║
- ║Die Kennbuchstaben der gefundenen Laufwerke werden in den ║
- ║Characterstring "STRING" geschrieben. Es werden physikalische, ║
- ║logische und substituierte Laufwerke aufgeführt. In "ANZ" wird die ║
- ║Anzahl der zu findenden Laufwerke begrenzt. Die Anzahl der tatsächlich║
- ║gefundenen Laufwerke wird in der Variablen zurückgegeben. Die im ║
- ║"STRING" nicht mit Laufwerkskennungen beschriebenen Bytes werden mit ║
- ║Blanks überschrieben. ║
- ╟──────────────────────────────────────────────────────────────────────╢
- ║Parameter: ║
- ║CHARACTERSTRING Return: String mit Kennbuchstaben der gefundenen ║
- ║ Laufwerke [ STRING*ANZ ] ║
- ║INTEGER Maximale Anzahl der zu suchenden Laufwerke ║
- ║ Return: Anzahl der tatsächlich gefundenen Laufwerke ║
- ╟──────────────────────────────────────────────────────────────────────╢
- ║Beispiel: CHARACTER LW*10 ║
- ║ I=10 ║
- ║ CALL LAUFW (LW,I) ║
- ║ Es werden bis zu zehn gültige Laufwerke ermittelt. ║
- ║ Die Kennbuchstaben der gefundenen Laufwerke werden in║
- ║ der Charactervariablen "LW" zurückgegeben. In "I" ║
- ║ steht die Anzahl der tatsächlich gefundenen ║
- ║ Laufwerke. ║
- ╚══════════════════════════════════════════════════════════════════════╝
-
-
- Seite 132
-
-
- ╔══════════════════════════════════════════════════════════════════════╗
- ║Beschreibung der Subroutine LAUFD (LW) ║
- ║Die Subroutine gibt in der Charactervariablen "LW" den Kenn- ║
- ║buchstaben des aktuellen Laufwerks zurück. ║
- ╟──────────────────────────────────────────────────────────────────────╢
- ║Parameter: ║
- ║CHARACTER Return: Kennbuchstabe des aktuellen Laufwerks. ║
- ╟──────────────────────────────────────────────────────────────────────╢
- ║Beispiel: CHARACTER LW ║
- ║ CALL LAUFD (LW) ║
- ║ WRITE (*,'(1X,A)') LW ║
- ║ Die Routine schreibt den Kennbuchstaben des aktuellen║
- ║ Laufwerks auf den Bildschirm. ║
- ╚══════════════════════════════════════════════════════════════════════╝
-
-
- Seite 133
-
-
- ╔══════════════════════════════════════════════════════════════════════╗
- ║Beschreibung der Subroutine LAUFC (LW) ║
- ║Die Subroutine wechselt in das in der Charactervariablen "LW" als ║
- ║Laufwerkskennbuchstaben übergebene Laufwerk. ║
- ╟──────────────────────────────────────────────────────────────────────╢
- ║Parameter: ║
- ║CHARACTER Kennbuchstabe des neuen Laufwerks. ║
- ╟──────────────────────────────────────────────────────────────────────╢
- ║Beispiel: CHARACTER LW ║
- ║ LW='D' ║
- ║ CALL LAUFC (LW) ║
- ║ CALL LAUFD (LW) ║
- ║ WRITE (*,'(1X,A)') LW ║
- ║ Mit der Subroutine LAUFC wird in das Laufwerk D: ║
- ║ gewechselt. Zur Kontrolle wird mit der Subroutine ║
- ║ LAUFD das aktuelle Laufwerk erfragt und am Bildschirm║
- ║ ausgegeben. ║
- ╚══════════════════════════════════════════════════════════════════════╝
-
-
- Seite 134
-
-
- ╔══════════════════════════════════════════════════════════════════════╗
- ║Beschreibung der Subroutine LAUFK (LW,TYP) ║
- ║Die Subroutine stellt den Typ des in "LW" übergebenen Laufwerks fest ║
- ║und gibt ihn in "TYP" an das rufende Programm zurück. ║
- ╟──────────────────────────────────────────────────────────────────────╢
- ║Parameter: ║
- ║CHARACTER Kennbuchstabe des zu untersuchenden Laufwerks. ║
- ║INTEGER Return: Typ des Laufwerks: ║
- ║ 0: Festplattenlaufwerk oder RAM-Disk ║
- ║ 1: Diskettenlaufwerk ║
- ║ 2: Serverlaufwerk ║
- ║ 3: ungültiges Laufwerk ║
- ╟──────────────────────────────────────────────────────────────────────╢
- ║Beispiel: CHARACTER LW ║
- ║ CALL LAUFK ('C',TYP) ║
- ║ WRITE (*,'(1X,I1)') TYP ║
- ║ Die Routine schreibt den Typ des Laufwerks C: in ║
- ║ Form eines Falge auf den Bildschirm. ║
- ╚══════════════════════════════════════════════════════════════════════╝
-
-
- Seite 135
-
-
- ╔══════════════════════════════════════════════════════════════════════╗
- ║Beschreibung der Subroutine GETVER (VERZ,FLAG) ║
- ║Die Subroutine schreibt den Pfad und den Namen des aktuellen ║
- ║Verzeichnisses in den Characterstring "VERZ". Bei einem Fehler wird ║
- ║in "FLAG" eine Eins, sonst eine Null zurückgegeben. ║
- ╟──────────────────────────────────────────────────────────────────────╢
- ║Parameter: ║
- ║CHARACTERSTRING [ 64 Characters! ] ║
- ║ Return: Pfad und Name des aktuellen Verzeichnisses ║
- ║ den DOS-Konventionen entsprechend. ║
- ║INTEGER Return: Fehlerflag. ║
- ║ 0: Funktion erfolgreich abgeschlossen ║
- ║ 1: Ein Fehler ist aufgetreten ║
- ╟──────────────────────────────────────────────────────────────────────╢
- ║Beispiel: INTEGER FLAG ║
- ║ CHARACTER VERZ*64 ║
- ║ CALL GETVER (VERZ,FLAG) ║
- ║ Wenn in "FLAG" eine Null zurückgegeben wurde, steht ║
- ║ in "VERZ" der Pfad und Name des aktuellen ║
- ║ Verzeichnisses zur Verfügung. ║
- ╚══════════════════════════════════════════════════════════════════════╝
-
-
- Seite 136
-
-
- ╔══════════════════════════════════════════════════════════════════════╗
- ║Beschreibung der Subroutine SETVER (VERZ,FLAG) ║
- ║Die Subroutine wechselt das aktuelle Verzeichnis. Beim Auftreten eines║
- ║Fehlers wird in "FLAG" eine Eins, sonst eine Null übergeben. ║
- ╟──────────────────────────────────────────────────────────────────────╢
- ║Parameter: ║
- ║CHARACTERSTRING [LAUFWERK]//[PFAD]//VERZEICHNIS//CHAR(0) ║
- ║ Laufwerk, Pfad und Verzeichnisname den DOS- ║
- ║ Konventionen entsprechend. Der String muß mit einem ║
- ║ Nullcharacter abgeschlossen sein. ║
- ║INTEGER Return: Fehlerflag. ║
- ║ 0: Funktion erfolgreich abgeschlossen ║
- ║ 1: Ein Fehler ist aufgetreten ║
- ╟──────────────────────────────────────────────────────────────────────╢
- ║Beispiel: INTEGER FLAG ║
- ║ CALL SETVER ('D:\FORTRAN\LIB'//CHAR(0),FLAG) ║
- ║ Wenn in "FLAG" eine Null zurückgegeben wurde, ist das║
- ║ aktuelle Verzeichnis nun D:\FORTRAN\LIB. ║
- ╚══════════════════════════════════════════════════════════════════════╝
-
-
- Seite 137
-
-
- ╔══════════════════════════════════════════════════════════════════════╗
- ║Beschreibung der Subroutine CREVER (VERZ,FLAG) ║
- ║Die Subroutine legt ein neues Verzeichnis an. Beim Auftreten eines ║
- ║Fehlers wird in "FLAG" eine Eins, sonst eine Null übergeben. ║
- ╟──────────────────────────────────────────────────────────────────────╢
- ║Parameter: ║
- ║CHARACTERSTRING [LAUFWERK]//[PFAD]//VERZEICHNIS//CHAR(0) ║
- ║ Laufwerk, Pfad und Verzeichnisname den DOS- ║
- ║ Konventionen entsprechend. Der String muß mit einem ║
- ║ Nullcharacter abgeschlossen sein. ║
- ║INTEGER Return: Fehlerflag. ║
- ║ 0: Funktion erfolgreich abgeschlossen ║
- ║ 1: Ein Fehler ist aufgetreten ║
- ╟──────────────────────────────────────────────────────────────────────╢
- ║Beispiel: INTEGER FLAG ║
- ║ CALL CREVER ('D:\FORTRAN\LIB'//CHAR(0),FLAG) ║
- ║ Wenn in "FLAG" eine Null zurückgegeben wurde, ist das║
- ║ Verzeichnis D:\FORTRAN\LIB angelegt worden. ║
- ╚══════════════════════════════════════════════════════════════════════╝
-
-
- Seite 138
-
-
- ╔══════════════════════════════════════════════════════════════════════╗
- ║Beschreibung der Subroutine DELVER (VERZ,FLAG) ║
- ║Die Subroutine löscht ein Verzeichnis. Das zu löschende Verzeichnis ║
- ║darf keine Dateieinträge enthalten. Es darf nicht das aktuelle ║
- ║Verzeichnis sein. Beim Auftreten eines Fehlers wird in "FLAG" eine ║
- ║Eins, sonst eine Null zurückgegeben. ║
- ╟──────────────────────────────────────────────────────────────────────╢
- ║Parameter: ║
- ║CHARACTERSTRING [LAUFWERK]//[PFAD]//VERZEICHNIS//CHAR(0) ║
- ║ Laufwerk, Pfad und Verzeichnisname den DOS- ║
- ║ Konventionen entsprechend. Der String muß mit einem ║
- ║ Nullcharacter abgeschlossen sein. ║
- ║INTEGER Return: Fehlerflag. ║
- ║ 0: Funktion erfolgreich abgeschlossen ║
- ║ 1: Ein Fehler ist aufgetreten ║
- ╟──────────────────────────────────────────────────────────────────────╢
- ║Beispiel: INTEGER FLAG ║
- ║ CALL DELVER ('D:\FORTRAN\LIB'//CHAR(0),FLAG) ║
- ║ Wenn in "FLAG" eine Null zurückgegeben wurde, ist das║
- ║ Verzeichnis D:\FORTRAN\LIB gelöscht worden. ║
- ╚══════════════════════════════════════════════════════════════════════╝
-
-
- Seite 139
-
-
- ╔══════════════════════════════════════════════════════════════════════╗
- ║Beschreibung der Subroutine DSUCH (PFAD,ATTR,ANZ,FELD) ║
- ║Die Subroutine ermöglicht das Auffinden einer oder mehrerer Dateien ║
- ║in einem Verzeichnis. Das Verzeichnis wird nach den auf das ║
- ║Suchargument und auf das Dateiattribut zutreffenden Dateinamen ║
- ║durchsucht. Die gefundenen Dateinamen werden ohne Laufwerksbezeichnung║
- ║und ohne Pfadnamen in einem Feld zurückgegeben. Das Suchargument muß ║
- ║ein Dateiname sein, der eine Laufwerksbezeichnung und einen Pfadnamen ║
- ║beinhalten darf. Die Joker * und ? sind zugelassen. Die maximale ║
- ║Anzahl der zu suchenden Dateien wird an die Routine übergeben, die ║
- ║Anzahl der tatsächlich gefundenen Dateien wird an das rufende Programm║
- ║zurückgegeben. Wenn ein Hardware-Interrupt erfolgt, weil z. B. der ║
- ║Diskettenschacht nicht geschlossen ist, wird in ANZ eine -1 ║
- ║zurückgegeben. ║
- ╟──────────────────────────────────────────────────────────────────────╢
- ║Parameter: ║
- ║CHARACTERSTRING [PFAD]//DATEINAME//CHAR(0) ║
- ║ Dateiname als Suchargument. Der Dateiname muß mit dem║
- ║ Nullcharacter abgeschlossen werden und darf einen ║
- ║ Pfadnamen sowie die Joker * und ? beinhalten. ║
- ║INTEGER Dateiattribut als zweites Suchargument. ║
- ║ 1 Read-only Datei ║
- ║ 2 Hidden Datei ║
- ║ 4 System Datei ║
- ║ 8 Volume-ID (nur in der Root) ║
- ║ 16 Subdirectory ║
- ║ 32 Archiv Datei ║
- ║ 64 Normale Datei ║
- ║ (Read-only, Archiv, Hidden oder ohne Attribute) ║
- ║ Die Attribute können durch Addition miteinander "OR"-║
- ║ verknüpft werden. Die Suche nach Subdirectorys und ║
- ║ Volume-ID's schließt die restlichen Attribute aus. ║
- ║INTEGER Anzahl der maximal zu suchenden Dateien. ║
- ║ Return: Anzahl der tatsächlich gefundenen Dateien. ║
- ║ oder: -1 wenn ein Hardwareinterupt erfolgt ║
- ║ ist, weil z. B. keine Diskette im Disketten- ║
- ║ laufwerk vorhanden ist. ║
- ║CHARACTERFELD DATEINAME//BLANKS [ 12 Characters * Anzahl! ] ║
- ║ Return: Feld mit den Namen der gefundenen Dateien. ║
- ╟──────────────────────────────────────────────────────────────────────╢
- ║Beispiel: CHARACTER FELD(10)*12 ║
- ║ IANZ=10 ║
- ║ CALL DSUCH ('C:/*.SYS'//CHAR(0),6,IANZ,FELD) ║
- ║ WRITE (*,'(10(1X,A,/))') (FELD(I),I=1,IANZ) ║
- ║ Bis zu 10 Hidden- oder System-Dateien mit dem ║
- ║ Dateierweiteungsnamen "SYS" werden in der Root des ║
- ║ Laufwerks C: gefunden und am Bildschirm dargestellt. ║
- ╚══════════════════════════════════════════════════════════════════════╝
-
-
- Seite 140
-
-
- ╔══════════════════════════════════════════════════════════════════════╗
- ║Beschreibung der Subroutine LFIND (ATTR,LW,FNAME,ANZ,FELD) ║
- ║Die Subroutine ermöglicht das Auffinden einer oder mehrerer Dateien ║
- ║in einem Laufwerk. Das in "LW" übergebene Laufwerk wird nach dem in ║
- ║"FNAME" spezifizierten Dateinamen und nach dem in "ATTR" übergebenen ║
- ║Dateiattribut nach den auf beide Bedingungen zutreffenden Dateien ║
- ║durchsucht. Die gefundenen Dateinamen werden mit ihrem absoluten ║
- ║Pfadnamen in einem Feld zurückgegeben. Das Suchargument muß ein ║
- ║Dateiname ohne Laufwerksbezeichnung und Pfadnamen sein. Die Joker ║
- ║* und ? sind zugelassen. Die maximale Anzahl der zu suchenden Dateien ║
- ║wird an die Routine übergeben, die Anzahl der tatsächlich gefundenen ║
- ║Dateien wird an das rufende Programm zurückgegeben. Wenn ein ║
- ║Hardware-Interrupt erfolgt, weil z. B. der Diskettenschacht nicht ║
- ║geschlossen ist, wird in ANZ eine -1 zurückgegeben. ║
- ╟──────────────────────────────────────────────────────────────────────╢
- ║Parameter: ║
- ║INTEGER Dateiattribut als Suchargument ║
- ║ 1 Read-only Datei ║
- ║ 2 Hidden Datei ║
- ║ 4 System Datei ║
- ║ 8 Volume-ID (nur in der Root) ║
- ║ 16 Subdirectory ║
- ║ 32 Archiv Datei ║
- ║ 64 Normale Datei ║
- ║ (Read-only, Archiv, Hidden oder ohne Attribute) ║
- ║ Die Attribute können durch Addition miteinander "OR"-║
- ║ verknüpft werden. Die Suche nach Subdirectorys und ║
- ║ Volume-ID's schließt die restlichen Attribute aus. ║
- ║CHARACTER Laufwerkskennbuchstabe [ 1 Character! ] ║
- ║CHARACTERSTRING DATEINAME//CHAR(0) [ max. 13 Characters! ] ║
- ║ Dateiname als Suchargument. Der Dateiname muß mit dem║
- ║ Nullcharacter abgeschlossen werden und darf maximal ║
- ║ 13 Zeichen enthalten. ║
- ║INTEGER Anzahl der maximal zu suchenden Dateien. ║
- ║ Return: Anzahl der tatsächlich gefundenen Dateien. ║
- ║ oder: -1 wenn ein Hardwareinterupt erfolgt ║
- ║ ist, weil z. B. keine Diskette im Disketten- ║
- ║ laufwerk vorhanden ist. ║
- ║CHARACTERFELD PFAD//DATEINAME//BLANKS [ 50 Characters * Anzahl! ]║
- ║ Return: Feld mit Pfad und Namen der gefundenen ║
- ║ Dateien. ║
- ╟──────────────────────────────────────────────────────────────────────╢
- ║Beispiel: CHARACTER FELD(10)*50 ║
- ║ IANZ=10 ║
- ║ CALL LFIND (16,'D','*.*',IANZ,FELD) ║
- ║ WRITE (*,'(10(1X,A,/))') (FELD(I),I=1,IANZ) ║
- ║ Bis zu 10 Subdirectories werden im Laufwerk D: ║
- ║ aufgefunden und am Bildschirm mit dem kompletten ║
- ║ Pfadnamen dargestellt. ║
- ╚══════════════════════════════════════════════════════════════════════╝
-
-
- Seite 141
-
-
- ╔══════════════════════════════════════════════════════════════════════╗
- ║Beschreibung der Subroutine DFIND (NAME,ANZ,FELD) ║
- ║Die Subroutine ermöglicht das Auffinden einer oder mehrerer Dateien ║
- ║in allen Laufwerken. Zuerst wird das aktuelle Laufwerk (auch ║
- ║Diskettenlaufwerk oder Server) nach den auf das Suchargument ║
- ║zutreffenden Dateinamen durchsucht. Anschließend werden alle anderen ║
- ║Laufwerke und Partitionen außer Diskettenlaufwerke und Server ║
- ║durchsucht. Die gefundenen Dateinamen werden mit ihrem absoluten ║
- ║Pfadnamen in einem Feld zurückgegeben. Das Suchargument muß ein ║
- ║Dateiname ohne Laufwerksbezeichnung und Pfadnamen sein. Die Joker ║
- ║* und ? sind zugelassen. Die maximale Anzahl der zu suchenden Dateien ║
- ║wird an die Routine übergeben, die Anzahl der tatsächlich gefundenen ║
- ║Dateien wird an das rufende Programm zurückgegeben. ║
- ╟──────────────────────────────────────────────────────────────────────╢
- ║Parameter: ║
- ║CHARACTERSTRING DATEINAME//CHAR(0) [ max. 13 Characters! ] ║
- ║ Dateiname als Suchargument. Der Dateiname muß mit dem║
- ║ Nullcharacter abgeschlossen werden und darf maximal ║
- ║ 13 Zeichen enthalten. ║
- ║INTEGER Anzahl der maximal zu suchenden Dateien. ║
- ║ Return: Anzahl der tatsächlich gefundenen Dateien. ║
- ║CHARACTERFELD PFAD//DATEINAME//BLANKS [ 50 Characters * Anzahl! ]║
- ║ Return: Feld mit Pfad und Namen der gefundenen ║
- ║ Dateien. ║
- ╟──────────────────────────────────────────────────────────────────────╢
- ║Beispiel: CHARACTER FELD(10)*50 ║
- ║ IANZ=10 ║
- ║ CALL DFIND ('*.SYS',IANZ,FELD) ║
- ║ WRITE (*,'(10(1X,A,/))') (FELD(I),I=1,IANZ) ║
- ║ Bis zu 10 Dateien mit dem Dateierweiteungsnamen "SYS"║
- ║ werden aufgefunden und am Bildschirm mit ihrem ║
- ║ Pfadnamen dargestellt. ║
- ╚══════════════════════════════════════════════════════════════════════╝
-
-
- Seite 142
-
-
- ╔══════════════════════════════════════════════════════════════════════╗
- ║Beschreibung der Subroutine DINFO (PFAD,NAME,ATTR,DATUM,ZEIT,GROES) ║
- ║Die Subroutine übergibt Informationen über eine anhand eines ║
- ║Suchargumentes aufgefundene Datei an das rufende Programm. Das Such- ║
- ║argument muß ein Dateiname sein, der eine Laufwerksbezeichnung und ║
- ║einen Pfadnamen tragen darf. Die Joker * und ? sind zugelassen, ihre ║
- ║Verwendung ist aber nicht sinnvoll. Wenn die im Suchargument ║
- ║spezifizierte Datei gefunden wurde, werden der Dateiname, das Datei- ║
- ║attribut, das Datum und die Uhrzeit der letzten Änderung in der Datei ║
- ║und die Dateigröße in Bytes zurückgegeben, andernfalls werden die ║
- ║Parameter mit Blanks bzw. Nullen gefüllt. ║
- ╟──────────────────────────────────────────────────────────────────────╢
- ║Parameter: ║
- ║CHARACTERSTRING [PFAD]//DATEINAME//CHAR(0) ║
- ║ Dateiname als Suchargument. Der Dateiname muß mit dem║
- ║ Nullcharacter abgeschlossen werden. ║
- ║CHARACTERSTRING [ 12 Characters! ] ║
- ║ Return: Name der Datei. ║
- ║CHARACTERSTRING [ 6 Characters! ] ║
- ║ Return: Attribute der Datei. (z. B.: "A----R") ║
- ║ "A" = Archiv-Datei ║
- ║ "D" = Directory ║
- ║ "V" = Volume Label ║
- ║ "S" = System-Datei ║
- ║ "H" = Hidden-Datei ║
- ║ "R" = Read-only-Datei ║
- ║ "-" = Attribut nicht gesetzt ║
- ║INTEGER Return: Datum der letzten Änderung in der Datei in ║
- ║ der Form :"JJJJMMTT". ║
- ║INTEGER Return: Uhrzeit der letzten Änderung in der Datei in ║
- ║ der Form: "HHMMSS". ║
- ║INTEGER Return: Größe der Datei in Bytes. ║
- ╟──────────────────────────────────────────────────────────────────────╢
- ║Beispiel: CHARACTER NA*12,AT*6 ║
- ║ CALL DINFO ('C:\FO\INFO.ASM'//CHAR(0),NA,AT,ID,IZ,IG)║
- ║ IF (ID .NE. 0) ║
- ║ - WRITE (*,'(1X,A,1X,A,I9,I7,I8)') NA,AT,ID,IZ,IG ║
- ║ Wenn die Datei "INFO.ASM" im Verzeichnis "FO" des ║
- ║ Laufwerk "C" gefunden wird, werden die Datei- ║
- ║ informationen auf den Bildschirm geschrieben. ║
- ╚══════════════════════════════════════════════════════════════════════╝
-
-
- Seite 143
-
-
- ╔══════════════════════════════════════════════════════════════════════╗
- ║Beschreibung der Subroutine DATEI (QUELLE,QATTR,ZIEL,FLAG) ║
- ║Die Subroutine ermöglicht das Manipulieren mit Dateien. In <QUELLE> ║
- ║steht der Name der Quelldatei, die manipuliert werden soll. In <QATTR>║
- ║werden Dateiattribute angegeben, nach denen die Quelldatei ║
- ║vorselektiert wird. Wenn die Quelldatei andere als die angegebenen ║
- ║Attribute aufweist, wird die Subroutine abgebrochen. In <ZIEL> steht ║
- ║der Name der Ergebnisdatei für die durchzuführende Manipulation. ║
- ║<FLAG> enthält eine Kennung für die Art der auszuführenden ║
- ║Dateimanipulation. Der Rückgabewert ist ein Fehlercode, der beim ║
- ║ordnungsgemäßen Abschluß der Subroutine Null ist, sonst eine positive ║
- ║Zahl enthält. Wenn ein Hardware-Interrupt erfolgt, weil z. B. der ║
- ║Diskettenschacht nicht geschlossen ist, wird in <FLAG> eine -1 ║
- ║zurückgegeben. Dateimanipulationen, die sich nur auf die Quelldatei ║
- ║beziehen, benötigen für <ZIEL> nur ein Null-Character. In <QATTR> ║
- ║wird das Dateiattribut der Quelldatei zurückgegeben. ║
- ╟──────────────────────────────────────────────────────────────────────╢
- ║Parameter: ║
- ║CHARACTERSTRING [LAUFWERK]//[PFAD]//DATEINAME//CHAR(0) ║
- ║ Quelldatei deren Inhalt manipuliert werden soll. Der ║
- ║ String muß mit einem Nullcharacter abgeschlossen ║
- ║ sein. Die Joker * und ? dürfen nicht enthalten sein. ║
- ║INTEGER Dateiattribut zum Ausselektieren der Quelldatei oder ║
- ║ zum Setzen oder Zurücksetzen von Dateiattributen. ║
- ║ 1 Read-only Datei ║
- ║ 2 Hidden Datei ║
- ║ 4 System Datei ║
- ║ 8 Volume-ID (nur in der Root) ║
- ║ 16 Subdirectory ║
- ║ 32 Archiv Datei ║
- ║ 64 Normale Datei ║
- ║ (Read-only, Archiv, Hidden oder ohne Attribute) ║
- ║ Die Attribute können durch Addition miteinander "OR"-║
- ║ verknüpft werden. ║
- ║ Return: Tatsächliches Attribut der Quelldatei ║
- ║ 1 Read-only Datei ║
- ║ 2 Hidden Datei ║
- ║ 4 System Datei ║
- ║ 8 Volume-ID (nur in der Root) ║
- ║ 16 Subdirectory ║
- ║ 32 Archiv Datei ║
- ║ Die Attribute sind miteinander "OR"-verknüpft. ║
- ║CHARACTERSTRING [LAUFWERK]//[PFAD]//DATEINAME//CHAR(0) ║
- ║ Zieldatei für die durchzuführende Manipulation. Der ║
- ║ String muß mit einem Nullcharacter abgeschlossen ║
- ║ sein. Die Joker * und ? dürfen nicht enthalten sein. ║
- ║INTEGER Art der Dateimanipulation ║
- ║ 0 Quelldatei kopieren, Zieldatei nicht ║
- ║ überschreiben ║
- ║ 1 Quelldatei kopieren, Zieldatei überschreiben ║
- ║ 2 Quelldatei kopieren, Zieldatei nicht ║
- ║ überschreiben, Quelldatei löschen ║
- ║ 3 Quelldatei kopieren, Zieldatei überschreiben, ║
- ║ Quelldatei löschen ║
- ║ 4 Quelldatei verschlüsseln ║
-
-
- Seite 144
-
-
- ║ 5 Quelldatei entschlüsseln ║
- ║ 6 Quelldatei-Attribute setzen ║
- ║ 7 Quelldatei-Attribute zurücksetzen ║
- ║ 8 Quelldatei logisch löschen (auch leeres ║
- ║ Verzeichnis) ║
- ║ 9 Quelldatei physikalisch löschen (auch leeres ║
- ║ Verzeichnis) ║
- ║ Return: Fehlerflag ║
- ║ -1 Hardwarefehler aufgetreten ║
- ║ 0 Dateifunktion fehlerfrei beendet ║
- ║ 1 Nicht näher erläuterter Fehler ║
- ║ 2 Attribute der Quelldatei passen nicht ║
- ║ 3 Zieldatei vorhanden ║
- ║ 4 Zieldatei ist schreibgeschützt ║
- ║ 5 Quelldatei ist schreibgeschützt ║
- ║ 6 Quelldatei erhalten, da schreibgeschützt ║
- ║ 7 Quelldatei nicht vorhanden ║
- ║ 8 Zieldatei konnte nicht angelegt werden ║
- ║ 9 Attributänderung mißlungen ║
- ║ 10 Quelldatei ist bereits codiert ║
- ║ 11 Quelldatei ist bereits decodiert ║
- ║ 12 Kein Speicherplatz auf Disk verfügbar ║
- ║ 13 Verzeichnis ist nicht leer ║
- ║ 14 Nicht genügend Arbeitsspeicher vorhanden ║
- ║ 15 Quell- und Zieldatei sind identisch ║
- ║ 16 Fehlerhafte Parameter übergeben ║
- ║ 17 Aktuelles Verzeichnis ist nicht löschbar ║
- ║ 18 Löschvorgang mißlungen ║
- ╟──────────────────────────────────────────────────────────────────────╢
- ║Beispiel: CHARACTER QUELL*30,ZIEL*30 ║
- ║ IFL=6 ║
- ║ QUELL='A:\' ║
- ║ CALL DATEI (QUELL,0,CHAR(0),IFL) ║
- ║ IF (IFL .EQ. -1) WRITE ............. ║
- ║ IFL=1 ║
- ║ QUELL='D:\UTIL\DATEIA.TXT'//CHAR(0) ║
- ║ ZIEL ='A:\TEXTE\DATEIB.TXT'//CHAR(0) ║
- ║ CALL DATEI (QUELL,64,ZIEL,IFL) ║
- ║ IF (IFL .NE. 0) WRITE ............. ║
- ║ IFL=4 ║
- ║ QUELL='D:\UTIL\DATEIA.TXT'//CHAR(0) ║
- ║ CALL DATEI (QUELL,64,CHAR(0),IFL) ║
- ║ IF (IFL .NE. 0) WRITE ............. ║
- ║ Im ersten Beispiel wird lediglich kontrolliert, ob ║
- ║ der Diskettenschacht im Laufwerk A: geschlossen ist. ║
- ║ Das zweite Beispiel kopiert eine Datei und im dritten║
- ║ Beispiel wird eine Datei verschlüsselt. ║
- ╚══════════════════════════════════════════════════════════════════════╝
-
-
- Seite 145
-
-
- Zugriff auf Speicherinhalte
-
- Subroutinen aus FORSUB.LIB erlauben es, beliebige Speicheradressen
- auszulesen, zu beschreiben oder deren Inhalte umzuspeichern. Dadurch
- ist es beispielsweise möglich, Daten direkt in den Bildschirmspeicher zu
- schreiben oder daraus zu lesen. Auch können bestimmte Statusadressen
- des Personal-Computers ausgelesen oder beschrieben werden. Allokierte
- Speicherbereiche und Variableninhalte lassen sich extrem schnell
- umkopieren.
-
-
- Subroutinen für den Zugriff auf Speicherinhalte
-
- PEEK a) Speicherinhalt ab Segment/Offset-Adresse in eine Variable
- schreiben
- POKE a) Variableninhalt an eine Segment/Offset-Adresse in den
- Speicher schreiben
- PEPO a) Speicherinhalt ab Segment/Offset-Adresse mit vorgegebener
- Länge an eine andere Speicheradresse schreiben.
- PEEKS a) Jedes zweite Byte eines Speicherinhalts ab Segment/Offset-
- Adresse in eine Variable schreiben (Bildschirmspeicher!)
- POKES a) Variableninhalt an eine Segment/Offset-Adresse in den
- Speicher schreiben, dabei nur jedes zweite Byte beschreiben
- (Bildschirmspeicher!)
-
-
- Seite 146
-
-
- ╔══════════════════════════════════════════════════════════════════════╗
- ║Beschreibung der Subroutine PEEK (SEGMENT,OFFSET,STRING,ANZ) ║
- ║Die Subroutine liest ANZ Byte aus dem RAM-Speicher ab der Adresse ║
- ║SEGMENT:OFFSET in eine Variable STRING. ║
- ╟──────────────────────────────────────────────────────────────────────╢
- ║Parameter: ║
- ║INTEGER Segment der Adresse im RAM-Speicher. ║
- ║INTEGER Offset der Adresse im RAM-Speicher. ║
- ║INTEGER Return: Aus dem RAM-Speicher gelesener Wert ║
- ║ (ANZ muß dazu der Länge der Integervariablen ║
- ║ entsprechen: 1, 2 oder 4). ║
- ║oder: ║
- ║CHARACTERSTRING Return: Aus dem RAM-Speicher gelesener String ║
- ║ (ANZ muß dazu der Länge des zu lesenden Strings ║
- ║ entsprechen). ║
- ║INTEGER Anzahl der in STRING einzulesenden Byte. ║
- ╟──────────────────────────────────────────────────────────────────────╢
- ║Beispiele: CALL PEEK (1,10,I,4) ║
- ║ Vier Byte ab der RAM-Adresse Segment 1, Offset 10 ║
- ║ werden in eine Integervariable I gelesen. ║
- ║ CHARACTER STRING*20 ║
- ║ CALL PEEK (1,10,STRING,20) ║
- ║ Zwanzig Byte ab der RAM-Adresse Segment 1, Offset 10 ║
- ║ werden in einen Characterstring STRING gelesen. ║
- ╚══════════════════════════════════════════════════════════════════════╝
-
-
- Seite 147
-
-
- ╔══════════════════════════════════════════════════════════════════════╗
- ║Beschreibung der Subroutine POKE (SEGMENT,OFFSET,STRING,ANZ) ║
- ║Die Subroutine schreibt ANZ Byte aus der Variablen STRING in den ║
- ║RAM-Speicher ab Adresse SEGMENT:OFFSET. ║
- ╟──────────────────────────────────────────────────────────────────────╢
- ║Parameter: ║
- ║INTEGER Segment der Adresse im RAM-Speicher. ║
- ║INTEGER Offset der Adresse im RAM-Speicher. ║
- ║INTEGER In den RAM-Speicher zu schreibender Wert ║
- ║ (ANZ muß dazu der Länge der Integervariablen ║
- ║ entsprechen: 1, 2 oder 4). ║
- ║oder: ║
- ║CHARACTERSTRING In den RAM-Speicher zu schreibender String ║
- ║ (ANZ muß dazu der Länge des zu schreibenden Strings ║
- ║ entsprechen). ║
- ║INTEGER Anzahl der aus STRING in den RAM-Speicher zu ║
- ║ schreibenden Byte. ║
- ╟──────────────────────────────────────────────────────────────────────╢
- ║Beispiele: CALL POKE (1,10,I,4) ║
- ║ Es werden vier Byte ab der RAM-Adresse Segment 1, ║
- ║ Offset 10 aus der Integervariablen I in den ║
- ║ RAM-Speicher geschrieben. ║
- ║ CHARACTER STRING*20 ║
- ║ CALL POKE (1,10,STRING,20) ║
- ║ Es werden zwanzig Byte ab der RAM-Adresse Segment 1, ║
- ║ Offset 10 aus dem Characterstring STRING in den ║
- ║ RAM-Speicher geschrieben. ║
- ╚══════════════════════════════════════════════════════════════════════╝
-
-
- Seite 148
-
-
- ╔══════════════════════════════════════════════════════════════════════╗
- ║Beschreibung der Subroutine PEPO (LESSEG,LESOFF,SCHSEG,SCHOFF,ANZ) ║
- ║Die Subroutine liest ANZ Byte aus dem RAM-Speicher ab der Adresse ║
- ║LESSEG:LESOFF und schreibt sie an anderer Stelle ab der Adresse ║
- ║SCHSEG:SCHOFF zurück. ║
- ╟──────────────────────────────────────────────────────────────────────╢
- ║Parameter: ║
- ║INTEGER Segment des zu lesenden Speicherinhalts. ║
- ║INTEGER Offset des zu lesenden Speicherinhalts. ║
- ║INTEGER Segment der zu beschreibenden Speicheradresse. ║
- ║INTEGER Offset der zu beschreibenden Speicheradresse. ║
- ║INTEGER Anzahl der in STRING einzulesenden Byte. ║
- ╟──────────────────────────────────────────────────────────────────────╢
- ║Beispiele: CALL PEPO (1,10,100,10,1000) ║
- ║ 1000 Byte ab der RAM-Adresse Segment 1, Offset 10 ║
- ║ werden in eine an die Adresse Segment 100, Offset 10 ║
- ║ geschrieben. ║
- ╚══════════════════════════════════════════════════════════════════════╝
-
-
- Seite 149
-
-
- ╔══════════════════════════════════════════════════════════════════════╗
- ║Beschreibung der Subroutine PEEKS (SEGMENT,OFFSET,STRING,ANZ) ║
- ║Die Subroutine liest ANZ Bytes aus dem Bildschirmspeicher ab der ║
- ║Adresse SEGMENT:OFFSET in eine Variable STRING. Dabei wird jedoch nur ║
- ║jedes zweite Byte aus dem Bildschirmspeicher gelesen. Es ist also ║
- ║möglich nur Textzeichen oder nur Farbattribute zu lesen. ║
- ╟──────────────────────────────────────────────────────────────────────╢
- ║Parameter: ║
- ║INTEGER Segment des Bildschirmspeichers: ║
- ║ #0B000: Segment des Monochromebildschirmspeichers ║
- ║ #0B800: Segment des Farbbildschirmspeichers ║
- ║INTEGER Offset im Bildschirmspeicher. ║
- ║CHARACTERSTRING Return: Aus dem Bildschirmspeicher gelesener Text ║
- ║ oder Farbattribute. ║
- ║INTEGER Anzahl der in STRING einzulesenden Byte. ║
- ╟──────────────────────────────────────────────────────────────────────╢
- ║Beispiele: CHARACTER STRING*40 ║
- ║ CALL PEEKS (#0B800,0,STRING,40) ║
- ║ Vierzig Farbattribute werden aus dem Farbbildschirm- ║
- ║ speicher ausgelesen und in der Variablen STRING ║
- ║ abgelegt. ║
- ║ CHARACTER STRING*40 ║
- ║ CALL PEEKS (#0B000,1,STRING,40) ║
- ║ Vierzig Textzeichen werden aus dem Monochrome- ║
- ║ bildschirmspeicher ausgelesen und in der Variablen ║
- ║ STRING abgelegt. ║
- ╚══════════════════════════════════════════════════════════════════════╝
-
-
- Seite 150
-
-
- ╔══════════════════════════════════════════════════════════════════════╗
- ║Beschreibung der Subroutine POKES (SEGMENT,OFFSET,STRING,ANZ) ║
- ║Die Subroutine schreibt ANZ Bytes aus der Variablen STRING in den ║
- ║Bildschirmspeicher ab der Adresse SEGMENT:OFFSET. Dabei wird jedoch ║
- ║nur jedes zweite Offset des Bildschirmspeichers beschrieben. Es ist ║
- ║dadurch möglich nur Textzeichen oder nur Farbattribute zu schreiben. ║
- ╟──────────────────────────────────────────────────────────────────────╢
- ║Parameter: ║
- ║INTEGER Segment des Bildschirmspeichers: ║
- ║ #0B000: Segment des Monochromebildschirmspeichers ║
- ║ #0B800: Segment des Farbbildschirmspeichers ║
- ║INTEGER Offset im Bildschirmspeicher. ║
- ║CHARACTERSTRING In den Bildschirmspeicher zu schreibender Text oder ║
- ║ Farbattribute. ║
- ║INTEGER Anzahl der in den Bildschirmspeicher zu schreibenden ║
- ║ Bytes. ║
- ╟──────────────────────────────────────────────────────────────────────╢
- ║Beispiele: CHARACTER STRING*40 ║
- ║ CALL POKES (#0B800,0,STRING,40) ║
- ║ Vierzig Farbattribute werden aus der Variablen STRING║
- ║ in den Bildschirmspeicher geschrieben. ║
- ║ CHARACTER STRING*40 ║
- ║ CALL POKES (#0B000,1,STRING,40) ║
- ║ Vierzig Textzeichen werden aus der Variablen STRING ║
- ║ in den Bildschirmspeicher geschrieben. ║
- ╚══════════════════════════════════════════════════════════════════════╝
-
-
- Seite 151
-
-
- Virtuelle Speicherverwaltung
-
- Im Gegensatz zu vielen anderen Hochsprachen bietet FORTRAN standardmäßig
- nicht die Möglichkeit der virtuellen Speicherverwaltung. Subroutinen
- aus FORSUB.LIB ermöglichen jedoch die Allokation von Speicherblöcken zur
- Ablage von Datenmengen, das Rückgewinnen von Daten aus allokierten
- Speicherblöcken und das Verändern und Löschen allokierter
- Speicherbereiche. Durch die virtuelle Speicherverwaltung können zum
- Beispiel lokale und globale Datenbereiche eingerichtet,
- Bildschirminhalte und Datenfelder vorübergehend zwischengespeichert und
- sehr schnelle Datenzugriffe realisiert werden.
-
- Vier Subroutinen können neben dem verfügbaren Arbeitspeicher den Inhalt
- einer Arbeitsdatei für sehr große zu verwaltende Datenmengen nutzen.
- Wenn im Arbeitsspeicher nicht mehr genügend Speicherplatz vorhanden ist,
- wird eine temporäre, direct organisierte Datei eröffnet. Die dort
- abgelegten Daten stehen unabhängig von der Größe des noch freien
- Arbeitsspeichers zur Verfügung. Das Programm erhält von den Subroutinen
- für jeden Datenblock im Arbeitsspeicher oder in der Arbeitsdatei eine
- Adresse zurück, mit deren Hilfe auf die dort abgelegten Daten
- zugegriffen werden kann. Die Adresse ist positiv, wenn sie den
- Arbeitsspeicher betrifft und negativ, wenn sie die Arbeitsdatei
- betrifft. Beim Zugriff auf einen abgelegten Datenblock erkennt die
- betreffende Subroutine daran automatisch, wo die Daten zu finden sind.
-
-
- Subroutinen zur virtuellen Speicherverwaltung
-
- ALMEM a) Block im Arbeitsspeicher allokieren
- MOMEM a) Die Größe eines im Arbeitsspeicher allokierten Blocks
- ändern
- REMEM a) Im Arbeitsspeicher allokierten Block wieder freigeben
- CREMEM a) Block im Arbeitsspeicher oder in einer Arbeitsdatei
- allokieren und Variableninhalt dort ablegen
- PUTMEM a) Variableninhalt in den bereits allokierten Block im
- Arbeitsspeicher oder in der Arbeitsdatei ablegen
- GETMEM a) Inhalt aus dem allokierten Block des Arbeitsspeichers oder
- der Arbeitsdatei in einer Variablen ablegen
- FREMEM a) Allokierten Block im Arbeitsspeicher oder in der Arbeitsdate
- wieder freigeben
-
-
- Seite 152
-
-
- ╔══════════════════════════════════════════════════════════════════════╗
- ║Beschreibung der Subroutine ALMEM (BYTES,SEG,FLAG) ║
- ║Die Subroutine allokiert einen "BYTES" großen Bereich in der Memory. ║
- ║Bei Erfolgreicher Allokation wird in "SEG" die Nummer des Segmentes ║
- ║übergeben, an dem der allokierte Speicherbereich beginnt. Das "FLAG" ║
- ║ist in diesen Fall Null gesetzt, sonst eins. ║
- ╟──────────────────────────────────────────────────────────────────────╢
- ║Parameter: ║
- ║INTEGER Größe des zu allokierenden Speicherblocks in Bytes. ║
- ║INTEGER Return: Segment in dem der allokierte Speicherblock ║
- ║ beginnt. Das Offset des allokierten Speicherblocks ║
- ║ ist Null. ║
- ║INTEGER Return: Fehlerflag ║
- ║ 0: Speicherblock erfolgreich allokiert ║
- ║ 1: Speicherblock konte nicht allokiert werden. ║
- ╟──────────────────────────────────────────────────────────────────────╢
- ║Beispiel: INTEGER SEG,FLAG ║
- ║ CALL ALMEM (1000,SEG,FLAG) ║
- ║ Wenn in "FLAG" eine Null zurückgegeben wurde, steht ║
- ║ ab der Adresse SEG:0 ein Speicherblock von 1000 Bytes║
- ║ zur Verfügung. ║
- ╚══════════════════════════════════════════════════════════════════════╝
-
-
- Seite 153
-
-
- ╔══════════════════════════════════════════════════════════════════════╗
- ║Beschreibung der Subroutine MOMEM (BYTES,SEG,FLAG) ║
- ║Die Subroutine versucht die Größe eines schon allokierten Blocks in ║
- ║der Memory zu ändern. In BYTES" wird die neue Blockgröße in Bytes und ║
- ║in "SEG" wird das Segment des schon allokierten Blocks angegeben. ║
- ║Bei Erfolg wird in "FLAG" eine Null übergeben, sonst eine Eins. ║
- ╟──────────────────────────────────────────────────────────────────────╢
- ║Parameter: ║
- ║INTEGER Neue Größe für den schon allokierenden Speicherblock ║
- ║ in Bytes. ║
- ║INTEGER Segment des schon allokierten Speicherblocks. ║
- ║INTEGER Return: Fehlerflag ║
- ║ 0: Speicherblock erfolgreich geändert ║
- ║ 1: Speicherblock konte nicht geändert werden. ║
- ╟──────────────────────────────────────────────────────────────────────╢
- ║Beispiel: INTEGER SEG,FLAG ║
- ║ CALL ALMEM (1000,SEG,FLAG) ║
- ║ CALL MOMEM (500,SEG,FLAG) ║
- ║ Wenn in "FLAG" eine Null zurückgegeben wurde, ist der║
- ║ mit "ALMEM" allokierte Speicherblock von 1000 Bytes ║
- ║ erfolgreich auf 500 Bytes verkleinert worden. ║
- ╚══════════════════════════════════════════════════════════════════════╝
-
-
- Seite 154
-
-
- ╔══════════════════════════════════════════════════════════════════════╗
- ║Beschreibung der Subroutine REMEM (SEG,FLAG) ║
- ║Die Subroutine gibt einen vorher allokierten Bereich in der Memory ║
- ║ab der Adresse SEG:0 wieder frei. Wenn dabei ein Fehler auftritt, wird║
- ║"FLAG" eins gesetzt, sonst enthält es eine Null. ║
- ╟──────────────────────────────────────────────────────────────────────╢
- ║Parameter: ║
- ║INTEGER Segment des vorher allokierten Speicherblocks. ║
- ║ beginnt. Das Offset des allokierten Speicherblocks ║
- ║ ist Null. ║
- ║INTEGER Return: Fehlerflag ║
- ║ 0: Speicherblock erfolgreich allokiert ║
- ║ 1: Speicherblock konte nicht allokiert werden. ║
- ╟──────────────────────────────────────────────────────────────────────╢
- ║Beispiel: INTEGER SEG,FLAG ║
- ║ CALL ALMEM (1000,SEG,FLAG) ║
- ║ CALL REMEM (SEG,FLAG) ║
- ║ Wenn in "FLAG" eine Null zurückgegeben wurde, ist der║
- ║ vorher mit "ALMEM" allokierte 1000 byte große ║
- ║ Speicherblock wieder freigegeben. ║
- ╚══════════════════════════════════════════════════════════════════════╝
-
-
- Seite 155
-
-
- ╔═════════════════════════════════════════════════════════════════════╗
- ║Beschreibung der Subroutine CREMEM (ADD,LAN,SEG,FLAG) ║
- ║Die Subroutine allokiert einen "LAN" Byte großen Bereich in der ║
- ║Memory. Falls in der Memory kein Speicherplatz mehr zur Verfügung ║
- ║steht, wird ein entsprechender Bereich in einer direkt organisierten ║
- ║temporären Datei zur Verfügung gestellt. Die an der Adresse "ADD" ║
- ║gespeicherten Daten oder Datenfelder werden in den allokierten ║
- ║Bereich umgespeichert. In "SEG" steht anschließend die Adresse des ║
- ║allokierten Speicherbereiches. Sie ist positiv, wenn der Speicher- ║
- ║bedarf in der Memory allokiert werden konnte (Segment) und sie ist ║
- ║negativ, wenn der Speicherbedarf in der temporären Datei zur ║
- ║Verfügung steht (Satznummer). Die in "SEG" übergebene Adresse wird ║
- ║für zukünftige Operationen mit den Subroutinen "PUTMEM", "GETMEM" und║
- ║"FREMEM" benötigt. Wenn diese Subroutine von einem Programm genutzt ║
- ║wird, darf keine Datei mit dem Unit 100 eröffnet werden, da das Unit ║
- ║für die temporäre Datei benötigt wird. Bei erfolgreicher Beendigung ║
- ║der Subroutine steht in "FLAG" eine Null, sonst eine Eins. ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Parameter: ║
- ║INTEGER Adresse einer Variablen oder eines Variablenfeldes, ║
- ║ das in der Memory abgelegt werden soll ║
- ║ [ LOC(Variable) ]. ║
- ║INTEGER Größe der Variable oder des Variablenfeldes in Byte.║
- ║INTEGER Return: Positiv: Memorysegment, an dem die Variable ║
- ║ oder das Variablenfeld abgelegt ist. ║
- ║ Negativ: Satznummer in der direkt organis. ║
- ║ temporären Datei, ab der die Variable oder ║
- ║ das Variablenfeld abgelegt ist. ║
- ║INTEGER Return: Fehlerflag ║
- ║ 0: Subroutine erfolgreich abgeschlossen. ║
- ║ 1: Ein Fehler ist aufgetreten. ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Subroutinen: ADRESS,ALMEM,FREMEM,PEPO ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Beispiel: INTEGER FELD(100),FELD1(100),FELD2(100),SEG ║
- ║ DO 1 I=1,100 ║
- ║ FELD(I)=1 ║
- ║ FELD2(I)=0 ║
- ║ 1 CONTINUE ║
- ║ CALL CREMEM (LOC(FELD),400,SEG,I) ║
- ║ IF (I .NE. 0) GOTO 2 ║
- ║ CALL GETMEM (LOC(FELD1),400,SEG,I) ║
- ║ IF (I .NE. 0) GOTO 2 ║
- ║ CALL PUTMEM (LOC(FELD2),400,SEG,I) ║
- ║ IF (I .NE. 0) GOTO 2 ║
- ║ CALL FREMEM (SEG,I) ║
- ║ IF (I .NE. 0) GOTO 2 ║
- ║ RETURN ║
- ║ 2 WRITE(*,'(1X,A)') 'Fehler!' ║
- ║ Mit der Subroutine "CREMEM" werden 400 Byte in der ║
- ║ Memory bzw. in einem temporären File allokiert und ║
- ║ das Integerfeld "FELD" im allokierten Bereich ║
- ║ abgelegt. "GETMEM" liest den allokierten Bereich ║
- ║ in ein Integerfeld "FELD1". Die Subroutine "PUTMEM" ║
- ║ überschreibt den allokierten Speicherbereich mit dem║
-
-
- Seite 156
-
-
- ║ Integerfeld "FELD2". "FREMEM" gibt den allokierten ║
- ║ Speicherbereich wieder frei. Beim Auftreten eines ║
- ║ Fehlers wird eine Meldung ausgegeben. ║
- ╚═════════════════════════════════════════════════════════════════════╝
-
-
- Seite 157
-
-
- ╔═════════════════════════════════════════════════════════════════════╗
- ║Beschreibung der Subroutine PUTMEM (ADD,LAN,SEG,FLAG) ║
- ║Die Subroutine legt eine Variable oder ein Variablenfeld, dessen ║
- ║Adresse in "ADD" übergeben wird, in bereits allokierter Memory ab. ║
- ║Dazu muß in "SEG" die Adresse des allokierten Speicherbereichs ║
- ║stehen. Sie ist positiv, wenn der Speicherbedarf in der Memory ║
- ║allokiert ist (Segment) und sie ist negativ, wenn der Speicherbedarf ║
- ║in einer temporären Datei zur Verfügung steht (Satznummer). In ║
- ║"LAN" steht die Länge der Variable oder des Variablenfeldes. Bei ║
- ║erfolgreicher Beendigung der Subroutine wird in "FLAG" eine Null, ║
- ║sonst eine Eins an das rufende Programm zurückgegeben. ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Parameter: ║
- ║INTEGER Adresse einer Variablen oder eines Variablenfeldes, ║
- ║ das in der Memory abgelegt werden soll ║
- ║ [ LOC(Variable) ]. ║
- ║INTEGER Größe der Variable oder des Variablenfeldes in Byte.║
- ║INTEGER Positiv: Segmentadresse der Memory, an der die ║
- ║ Variable oder das Variablenfeld abgelegt werden ║
- ║ soll. ║
- ║ Negativ: Satznummer in der direkt organisierten ║
- ║ temporären Datei, ab der die Variable oder das ║
- ║ Variablenfeld abzulegen ist ║
- ║INTEGER Return: Fehlerflag ║
- ║ 0: Subroutine erfolgreich abgeschlossen. ║
- ║ 1: Ein Fehler ist aufgetreten. ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Subroutinen: ADRESS,PEPO ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Beispiel: INTEGER FELD(100),FELD1(100),FELD2(100),SEG ║
- ║ DO 1 I=1,100 ║
- ║ FELD(I)=1 ║
- ║ FELD2(I)=0 ║
- ║ 1 CONTINUE ║
- ║ CALL CREMEM (LOC(FELD),400,SEG,I) ║
- ║ IF (I .NE. 0) GOTO 2 ║
- ║ CALL GETMEM (LOC(FELD1),400,SEG,I) ║
- ║ IF (I .NE. 0) GOTO 2 ║
- ║ CALL PUTMEM (LOC(FELD2),400,SEG,I) ║
- ║ IF (I .NE. 0) GOTO 2 ║
- ║ CALL FREMEM (SEG,I) ║
- ║ IF (I .NE. 0) GOTO 2 ║
- ║ GOTO 3 ║
- ║ 2 WRITE(*,'(1X,A)') 'Fehler!' ║
- ║ Mit der Subroutine "CREMEM" werden 400 Byte in der ║
- ║ Memory bzw. in einem temporären File allokiert und ║
- ║ das Integerfeld "FELD" im allokierten Bereich ║
- ║ abgelegt. "GETMEM" liest den allokierten Bereich ║
- ║ in ein Integerfeld "FELD1". Die Subroutine "PUTMEM" ║
- ║ überschreibt den allokierten Speicherbereich mit dem║
- ║ Integerfeld "FELD2". "FREMEM" gibt den allokierten ║
- ║ Speicherbereich wieder frei. Beim Auftreten eines ║
- ║ Fehlers wird eine Meldung ausgegeben. ║
- ╚═════════════════════════════════════════════════════════════════════╝
-
-
- Seite 158
-
-
- ╔═════════════════════════════════════════════════════════════════════╗
- ║Beschreibung der Subroutine GETMEM (ADD,LAN,SEG,FLAG) ║
- ║Die Subroutine speichert "LAN" Bytes aus der Memory bzw. aus einem ║
- ║temporären File in eine Variable oder in ein Variablenfeld, dessen ║
- ║Adresse in "ADD" an die Subroutine übergeben wird. In "SEG" wird ║
- ║dazu die Adresse des Speicherbereichs an die Routine übergeben. Sie ║
- ║ist positiv, wenn der Speicherbereich in der Memory allokiert ist ║
- ║(Segment) und sie ist negativ, wenn der Speicherbereich in einer ║
- ║temporären Datei zur Verfügung steht (Satznummer). Bei erfolgreicher ║
- ║Beendigung der Subroutine wird in "FLAG" eine Null, sonst eine Eins ║
- ║an das rufende Programm zurückgegeben. ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Parameter: ║
- ║INTEGER Adresse einer Variablen oder eines Variablenfeldes, ║
- ║ in das aus der Memory geschrieben werden soll ║
- ║ [ LOC(Variable) ]. ║
- ║INTEGER Größe der Variable oder des Variablenfeldes in Byte.║
- ║INTEGER Positiv: Segmentadresse der Memory, ab der aus der ║
- ║ Memory gelesen werden soll. ║
- ║ Negativ: Satznummer in der direkt organisierten ║
- ║ temporären Datei, ab der gelesen werden soll. ║
- ║INTEGER Return: Fehlerflag ║
- ║ 0: Subroutine erfolgreich abgeschlossen. ║
- ║ 1: Ein Fehler ist aufgetreten. ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Subroutinen: ADRESS,PEPO ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Beispiel: INTEGER FELD(100),FELD1(100),FELD2(100),SEG ║
- ║ DO 1 I=1,100 ║
- ║ FELD(I)=1 ║
- ║ FELD2(I)=0 ║
- ║ 1 CONTINUE ║
- ║ CALL CREMEM (LOC(FELD),400,SEG,I) ║
- ║ IF (I .NE. 0) GOTO 2 ║
- ║ CALL GETMEM (LOC(FELD1),400,SEG,I) ║
- ║ IF (I .NE. 0) GOTO 2 ║
- ║ CALL PUTMEM (LOC(FELD2),400,SEG,I) ║
- ║ IF (I .NE. 0) GOTO 2 ║
- ║ CALL FREMEM (SEG,I) ║
- ║ IF (I .NE. 0) GOTO 2 ║
- ║ GOTO 3 ║
- ║ 2 WRITE(*,'(1X,A)') 'Fehler!' ║
- ║ Mit der Subroutine "CREMEM" werden 400 Byte in der ║
- ║ Memory bzw. in einem temporären File allokiert und ║
- ║ das Integerfeld "FELD" im allokierten Bereich ║
- ║ abgelegt. "GETMEM" liest den allokierten Bereich ║
- ║ in ein Integerfeld "FELD1". Die Subroutine "PUTMEM" ║
- ║ überschreibt den allokierten Speicherbereich mit dem║
- ║ Integerfeld "FELD2". "FREMEM" gibt den allokierten ║
- ║ Speicherbereich wieder frei. Beim Auftreten eines ║
- ║ Fehlers wird eine Meldung ausgegeben. ║
- ╚═════════════════════════════════════════════════════════════════════╝
-
-
- Seite 159
-
-
- ╔═════════════════════════════════════════════════════════════════════╗
- ║Beschreibung der Subroutine FREMEM (SEG,FLAG) ║
- ║Die Subroutine gibt den ab der Adresse "SEG" allokierten Speicher- ║
- ║bereich in der Memory oder in einem temporären direkt organisierten ║
- ║File frei. Bei erfolgreicher Beendigung der Subroutine wird in "FLAG"║
- ║eine Null, sonst eine Eins an das rufende Programm zurückgegeben. ║
- ║Die Adresse "FLAG" wird Null gesetzt. ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Parameter: ║
- ║INTEGER Positiv: Segmentadresse in der Memory. ║
- ║ Negativ: Satznummer in der direkt organisierten ║
- ║ temporären Datei. ║
- ║ Return: Null bei erfolgreichen Abschluß der Routine.║
- ║INTEGER Return: Fehlerflag ║
- ║ 0: Subroutine erfolgreich abgeschlossen. ║
- ║ 1: Ein Fehler ist aufgetreten. ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Subroutinen: REMEM ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Beispiel: INTEGER FELD(100),FELD1(100),FELD2(100),SEG ║
- ║ DO 1 I=1,100 ║
- ║ FELD(I)=1 ║
- ║ FELD2(I)=0 ║
- ║ 1 CONTINUE ║
- ║ CALL CREMEM (LOC(FELD),400,SEG,I) ║
- ║ IF (I .NE. 0) GOTO 2 ║
- ║ CALL GETMEM (LOC(FELD1),400,SEG,I) ║
- ║ IF (I .NE. 0) GOTO 2 ║
- ║ CALL PUTMEM (LOC(FELD2),400,SEG,I) ║
- ║ IF (I .NE. 0) GOTO 2 ║
- ║ CALL FREMEM (SEG,I) ║
- ║ IF (I .NE. 0) GOTO 2 ║
- ║ GOTO 3 ║
- ║ 2 WRITE(*,'(1X,A)') 'Fehler!' ║
- ║ Mit der Subroutine "CREMEM" werden 400 Byte in der ║
- ║ Memory bzw. in einem temporären File allokiert und ║
- ║ das Integerfeld "FELD" im allokierten Bereich ║
- ║ abgelegt. "GETMEM" liest den allokierten Bereich ║
- ║ in ein Integerfeld "FELD1". Die Subroutine "PUTMEM" ║
- ║ überschreibt den allokierten Speicherbereich mit dem║
- ║ Integerfeld "FELD2". "FREMEM" gibt den allokierten ║
- ║ Speicherbereich wieder frei. Beim Auftreten eines ║
- ║ Fehlers wird eine Meldung ausgegeben. ║
- ╚═════════════════════════════════════════════════════════════════════╝
-
-
- Seite 160
-
-
- Childprozess und Interruptaufruf
-
- Als Childprozess wird ein Programm bezeichnet, das aus einem aktiven
- Programm heraus aufgerufen und ausgeführt wird. Während der Ausführung
- des Childprozesses wartet das rufende Programm, bis es die Kontrolle
- wieder zurückerhält. Der Childprozess kann jedes beliebige ausführbare
- Programm oder ein DOS-Befehl sein. Es ist möglich, ein sehr großes
- Programm in mehrere kleine Programme zu untergliedern und jeweils nur
- das aktuelle Teilprogramm auszuführen. Dadurch werden Probleme mit dem
- maximal 640 kB großen adressierbaren Arbeitspeicher unter dem
- Betriebssystem DOS vermieden. DOS-Befehle wie DIR oder COPY können als
- Childprozess aus einem Programm heraus aufgerufen werden.
-
- Das Betriebssystem DOS verarbeitet sogenannte Interrupts, um bestimmte,
- häufig benötigte Vorgänge zur Ausführung zu bringen. So wird zum
- Beispiel die Bildschirmausgabe über das Interrupt 10H gesteuert. Durch
- die entsprechende Belegung der benötigten Register werden beispielsweise
- Zeichen ausgegeben, Farben gesetzt, Bildschirmbereiche gescrollt,
- gelöscht oder gelesen und der Cursor gesetzt. Neben der
- Bildschirmgestaltung ist es mit Interruptaufrufen möglich, Einfluß auf
- die Arbeit der Tastatur, der Disketten und Harddisklaufwerke und auf die
- anderen elektronischen Komponenten des Personal-Computers zu nehmen.
-
-
- Subroutinen zum Childprozess und zum Interruptaufruf
-
- SYS a) Childprozess zur Ausführung bringen
- ERRLEV a) Programm mit ERRORLEVEL beenden
- GETLEV a) ERRORLEVEL eines Childprozesses ermitteln
- INTER a) Software-Interrupt zur Ausführung bringen
-
-
- Seite 161
-
-
- ╔═════════════════════════════════════════════════════════════════════╗
- ║Beschreibung der Subroutine SYS (NAME) ║
- ║Die Subroutine ermöglicht das Aufrufen eines Childprozesses. Die ║
- ║Ausführung des rufenden Programms wird unterbrochen, bis der ║
- ║aufgerufene Prozess beendet ist. Danach wird die Kontrolle an das ║
- ║rufende Programm zurückgegeben. ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Parameter: ║
- ║CHARACTERSTRING Name des auszuführenden Prozesses. Es müßen die ║
- ║ DOS-Konventionen benutzt werden. ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Beispiele: CALL SYS ('DIR C:\UTIL') ║
- ║ CALL SYS ('CHEM1') ║
- ║ Im ersten Beispiel werden die Dateien des ║
- ║ Verzeichnisses UTIL im Laufwerk C: am Bildschirm ║
- ║ angezeigt, sofern das Verzeichnis vorhanden ist. ║
- ║ Das zweite Beispiel ruft ein Programm CHEM1 auf. ║
- ╚═════════════════════════════════════════════════════════════════════╝
-
-
- Seite 162
-
-
- ╔══════════════════════════════════════════════════════════════════════╗
- ║Beschreibung der Subroutine ERRLEV (CODE) ║
- ║Die Subroutine beendet das rufende Programm mit dem in "CODE" ║
- ║übergebenen Errorlevel. In einer Batchdatei kann anschließend anhand ║
- ║des Errorlevels verzweigt werden (IF ERRORLEVEL .......). ║
- ╟──────────────────────────────────────────────────────────────────────╢
- ║Parameter: ║
- ║INTEGER Errorlevel (Fehlercode) [ 0 bis 255 ]. ║
- ╟──────────────────────────────────────────────────────────────────────╢
- ║Beispiel: READ (1,'(2I3,F8.3)',IOSTAT=I) I,J,A ║
- ║ IF (I .NE. 0) CALL ERRLEV (3) ║
- ║ Wenn beim Lesen aus der Datei mit dem Unit 1 ein ║
- ║ Fehler auftritt, wird das Programm mit dem Errorlevel║
- ║ 3 beendet. ║
- ╚══════════════════════════════════════════════════════════════════════╝
-
-
- Seite 163
-
-
- ╔══════════════════════════════════════════════════════════════════════╗
- ║Beschreibung der Subroutine GETLEV (CODE) ║
- ║Die Subroutine gibt den Errorlevel eines Childprozesses an das ║
- ║rufende Programm. Anhand des Errorlevels kann im rufenden Programm ║
- ║entsprechend verzweigt werden. Vom Childprozess kann mit Hilfe der ║
- ║Subroutine ERRLEV ein Errorcode an das Betriebssystem übergeben ║
- ║werden, das mit der Subrooutine GETLEV ausgewertet werden kann. ║
- ╟──────────────────────────────────────────────────────────────────────╢
- ║Parameter: ║
- ║INTEGER Return: Errorlevel (Fehlercode) des Childprozesses ║
- ╟──────────────────────────────────────────────────────────────────────╢
- ║Beispiel CALL SYS ('CHILD') ║
- ║ CALL GETLEV (I) ║
- ║ IF (I .NE. 0) THEN ║
- ║ WRITE (*,'(1X,A)') 'Childpprogramm fehlerfrei' ║
- ║ ELSE ║
- ║ WRITE (*,'(1X,A)') 'Childpprogramm fehlerhaft' ║
- ║ ENDIF ║
- ║ Wenn beim Lesen aus der Datei mit dem Unit 1 ein ║
- ║ Fehler auftritt, wird das Programm mit dem Errorlevel║
- ║ 3 beendet. ║
- ╚══════════════════════════════════════════════════════════════════════╝
-
-
- Seite 164
-
-
- ╔══════════════════════════════════════════════════════════════════════╗
- ║Beschreibung der Subroutine INTER (IN,AX,BX,CX,DX,BP,SI,DI,DS,ES,FLAG)║
- ║Die Subroutine ermöglicht die Ausführung eines Software-Interrupts. ║
- ║Die Prozessorregister und die Segmentregister DS und ES werden vor dem║
- ║Aufruf mit den benötigten Inhalten geladen. Nach dem Aufruf mit der ║
- ║Interruptnummer in der Variablen "IN" werden die neuen Registerinhalte║
- ║und das Carryflag an das rufende Programm zurückgegeben. ║
- ╟──────────────────────────────────────────────────────────────────────╢
- ║Parameter: ║
- ║INTEGER Nummer des zur Ausführung kommenden Interrupts. ║
- ║ Return: 0 wenn ungültige Interruptnummer übergeben ║
- ║ wurde. ║
- ║INTEGER Inhalt für das AX-Register. ║
- ║ Return: Inhalt des AX-Registers nach der Ausführung. ║
- ║INTEGER Inhalt für das BX-Register. ║
- ║ Return: Inhalt des BX-Registers nach der Ausführung. ║
- ║INTEGER Inhalt für das CX-Register. ║
- ║ Return: Inhalt des CX-Registers nach der Ausführung. ║
- ║INTEGER Inhalt für das DX-Register. ║
- ║ Return: Inhalt des DX-Registers nach der Ausführung. ║
- ║INTEGER Inhalt für das BP-Register. ║
- ║ Return: Inhalt des BP-Registers nach der Ausführung. ║
- ║INTEGER Inhalt für das SI-Register. ║
- ║ Return: Inhalt des SI-Registers nach der Ausführung. ║
- ║INTEGER Inhalt für das DI-Register. ║
- ║ Return: Inhalt des DI-Registers nach der Ausführung. ║
- ║INTEGER Inhalt für das DS-Register. ║
- ║ Return: Inhalt des DS-Registers nach der Ausführung. ║
- ║INTEGER Inhalt für das ES-Register. ║
- ║ Return: Inhalt des ES-Registers nach der Ausführung. ║
- ║INTEGER Return: 1: Carryflag gesetzt ║
- ║ 0: Carryflag nicht gesetzt ║
- ╟──────────────────────────────────────────────────────────────────────╢
- ║ INTEGER IN,AX ║
- ║ IN=#21 ║
- ║ AX=#3000 ║
- ║ CALL INTER (IN,AX,0,0,0,0,0,0,0,0,0) ║
- ║ Das Programms ruft das Interrupt 21H, Funktion 30H ║
- ║ auf, das im AX-Register Informationen über die ║
- ║ benutzte MS-DOS-Version zurückgibt. ║
- ╚══════════════════════════════════════════════════════════════════════╝
-
-
- Seite 165
-
-
- Verschiedene Routinen
-
- In dieser Rubrik sind Subroutinen zusammengestellt, deren Wirkung keiner
- Gruppe zugeordnet werden kann.
-
-
- Verschiedene Subroutinen
-
- CPOS a) Cursor auf dem Bildschirm positionieren
- CTYP a) Form des Cursors ändern
- b) Cursor ausschalten
- c) Cursor wieder einschalten
- CONTCA a) Abbruch eines Programms durch "CONTROL-C" und "CONTROL-BREAK"
- verhindern
- CONTCE a) Abbruch eines Programms durch "CONTROL-C" und "CONTROL-BREAK"
- wieder ermöglichen
- CTBUF a) Im Tastaturpuffer vorhandene Zeichen löschen
- DRUOP a) Druckerunit öffnen und Druckerstatus abfragen
- DRUST a) Druckerstatus abfragen
- GETDAY a) Kennziffer für den aktuellen Wochentag ermitteln
- INV24 a) Serielle Schnittstelle öffnen und konfigurieren
- REV24 a) String aus der seriellen Schnittstelle lesen
- MAUS a) Emulation von Keyboard-Tasten durch eine MICROSOFT-kompatible
- Maus
- b) Ausschalten der Maus-Emulation
- b) Wiederherstellen des ursprünglichen Mausstatus
- PSP a) Inhalt der Programmsegmentpräfix in eine Charactervariable
- lesen
- PARAM a) Parameter aus der Kommandozeile zur Verfügung stellen
- TASMOD a) Aktuellen Tastaturmodus ermitteln
- b) Neuen Tastaturmodus setzen
- SCPRF a) Segmentadresse des Bildschirmspeichers ermitteln
- VIDMOD a) Aktuellen Videomodus ermitteln
- b) Neuen Videomodus setzen und Bildschirminhalt löschen
- c) Neuen Videomodus setzen und Bildschirminhalt erhalten
-
-
- Seite 166
-
-
- ╔══════════════════════════════════════════════════════════════════════╗
- ║Beschreibung der Subroutine CPOS (ZEILE,SPALTE) ║
- ║Die Subroutine positioniert den Cursor auf dem Bildschirm in der vom ║
- ║Programm übergebenen Zeile und Spalte. ║
- ╟──────────────────────────────────────────────────────────────────────╢
- ║Parameter: ║
- ║INTEGER Bildschirmzeile. ║
- ║INTEGER Bildschirmspalte. ║
- ╟──────────────────────────────────────────────────────────────────────╢
- ║Beispiel: CALL CPOS (10,5) ║
- ║ Der Cursor wird in der 1o. Zeile und 5. Spalte ║
- ║ positioniert. ║
- ╚══════════════════════════════════════════════════════════════════════╝
-
-
- Seite 167
-
-
- ╔══════════════════════════════════════════════════════════════════════╗
- ║Beschreibung der Subroutine CTYP (ANFANG,ENDE) ║
- ║Die Subroutine setzt die Höhe und die Position des Cursors innerhalb ║
- ║einer Bildschirmtextzeile. Wenn beide Parameter Null gesetzt werden, ║
- ║wird der Cursor ausgeschaltet. Wenn beide Parameter eins gesetzt ║
- ║werden, wird der Cursor auf die normalen Werte gesetzt. Mit allen ║
- ║anderen Werten kann die Form des Cursors variiert werden. ║
- ╟──────────────────────────────────────────────────────────────────────╢
- ║Parameter: ║
- ║INTEGER Pixelzeile in der Bildschirmtextzeile, in der der ║
- ║ Cursor beginnt [0 bis 31]. ║
- ║INTEGER Pixelzeile in der Bildschirmtextzeile, in der der ║
- ║ Cursor endet [0 bis 31]. ║
- ╟──────────────────────────────────────────────────────────────────────╢
- ║Beispiele: CALL CTYP (5,7) ║
- ║ Ein drei Pixelzeilen hoher Cursor wird am Fuß der ║
- ║ Bildschirmtextzeile gesetzt. ║
- ║ CALL CTYP (0,0) ║
- ║ Der Cursor wird ausgeschaltet. ║
- ║ CALL CTYP (1,1) ║
- ║ Der für den jeweiligen Bildschirmmodus übliche ║
- ║ Cursortyp wird gesetzt. ║
- ╚══════════════════════════════════════════════════════════════════════╝
-
-
- Seite 168
-
-
- ╔══════════════════════════════════════════════════════════════════════╗
- ║Beschreibung der Subroutine CONTCA () ║
- ║Die Subroutine verhindert den Abbruch des rufenden Programms durch das║
- ║Betätigen der Tastenkombination CONTROL-C oder CONTROL-BREAK. Vor der ║
- ║Beendigung des rufenden Programms sollte die Subroutine CONTCE ║
- ║aufgerufen werden, um den Tastenkombinationen die ursprüngliche ║
- ║Bestimmung zurückzugeben. ║
- ╟──────────────────────────────────────────────────────────────────────╢
- ║Parameter: keine ║
- ╟──────────────────────────────────────────────────────────────────────╢
- ║Beispiel: CALL CONTCA () ║
- ║ Im weiteren Programmablauf lösen die Tasten- ║
- ║ kombinationen CONTROL-C und CONTROL-BREAK keine ║
- ║ Aktion mehr aus, bis die Subroutine CONTCE aufgerufen║
- ║ wird. ║
- ║ ║
- ╚══════════════════════════════════════════════════════════════════════╝
-
-
- Seite 169
-
-
- ╔=═════════════════════════════════════════════════════════════════════╗
- ║Beschreibung der Subroutine CONTCE () ║
- ║Wenn mit der Subroutine CONTCA der Abbruch des rufenden Programms ║
- ║durch das Betätigen der Tastenkombination CONTROL-C oder CONTROL-BREAK║
- ║verhindert wurde, werden den Tastenkombinationen durch die Subroutine ║
- ║die ursprünglichen Bestimmungen zurückgegeben. ║
- ╟──────────────────────────────────────────────────────────────────────╢
- ║Parameter: keine ║
- ╟──────────────────────────────────────────────────────────────────────╢
- ║Beispiel: CALL CONTCE () ║
- ║ Im weiteren Programmablauf lösen die Tasten- ║
- ║ kombinationen CONTROL-C und CONTROL-BREAK wieder die ║
- ║ ihnen ursprünglich zugewiesenen Aktionen aus. ║
- ╚=═════════════════════════════════════════════════════════════════════╝
-
-
- Seite 170
-
-
- ╔══════════════════════════════════════════════════════════════════════╗
- ║Beschreibung der Subroutine CTBUF () ║
- ║Die Subroutine löscht alle im Tastaturringpuffer vorhandenen Zeichen. ║
- ╟──────────────────────────────────────────────────────────────────────╢
- ║Parameter: keine ║
- ╟──────────────────────────────────────────────────────────────────────╢
- ║Beispiel: CALL CTBUF () ║
- ║ Alle im Tastaturpuffer vorhandenen Zeichen sind ║
- ║ gelöscht worden. ║
- ╚══════════════════════════════════════════════════════════════════════╝
-
-
- Seite 171
-
-
- ╔═════════════════════════════════════════════════════════════════════╗
- ║Beschreibung der Subroutine DRUOP (UNI,STATUS) ║
- ║Die Subroutine überprüft die Betriebsbereitschaft des Druckers. ║
- ║Wenn der Drucker nicht betriebsbereit ist, wird in "STATUS" eine 0 ║
- ║zurückgegeben, andernfalls eine 1. Wenn der Drucker mit der in "UNI" ║
- ║übergebenen Nummer noch nicht geöffnet worden ist, wird er geöffnet. ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Parameter: ║
- ║INTEGER Unit für den Drucker. ║
- ║INTEGER Return: Status des Druckers: ║
- ║ 0: Drucker ist nicht betriebsbereit. ║
- ║ 1: Drucker ist betriebsbereit und eröffnet. ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Subroutinen: DRUST ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Beispiel: 1 CALL DRUOP (3,ISTAT) ║
- ║ IF (ISTAT .EQ. 0) THEN ║
- ║ WRITE(*,'(1X,A)') 'Drucker einschalten!' ║
- ║ GOTO 1 ║
- ║ ENDIF ║
- ║ Die Schleife wird erst verlassen, wenn der Drucker ║
- ║ betriebsbereit ist. ║
- ╚═════════════════════════════════════════════════════════════════════╝
-
-
- Seite 172
-
-
- ╔══════════════════════════════════════════════════════════════════════╗
- ║Beschreibung der Subroutine DRUST (DRU) ║
- ║Die Subroutine erfragt den Status eines Druckers. Die Nummer des ║
- ║Druckers wird in "DRU" übergeben. Wenn der Drucker betriebsbereit ist,║
- ║wird in "DRU" eine 1, sonst eine 0 zurückgegeben. ║
- ╟──────────────────────────────────────────────────────────────────────╢
- ║Parameter: ║
- ║INTEGER Nummer des Druckers [1 bis n]. ║
- ║ Return: Druckerstatus: 1: Drucker betriebsbereit ║
- ║ 0: Drucker nicht bereit ║
- ╟──────────────────────────────────────────────────────────────────────╢
- ║Beispiel: I=1 ║
- ║ CALL DRUST (I) ║
- ║ IF (I .EQ. 1) OPEN (1,FILE='PRN',STATUS='OLD') ║
- ║ Der Drucker wird nur dann unter dem Unit 1 eröffnet, ║
- ║ wenn er betriebsbereit ist. ║
- ╚══════════════════════════════════════════════════════════════════════╝
-
-
- Seite 173
-
-
- ╔══════════════════════════════════════════════════════════════════════╗
- ║Beschreibung der Subroutine GETDAY (TAG) ║
- ║Die Subroutine gibt in einer Variablen eine Kennziffer für den ║
- ║aktuellen Wochentag zurück. ║
- ╟──────────────────────────────────────────────────────────────────────╢
- ║Parameter: ║
- ║INTEGER Return: Kennziffer für den aktuellen Wochentag: ║
- ║ 1: Montag ║
- ║ 2: Dienstag ║
- ║ 3: Mittwoch ║
- ║ 4: Donnerstag ║
- ║ 5: Freitag ║
- ║ 6: Samstag ║
- ║ 7: Sonntag ║
- ╟──────────────────────────────────────────────────────────────────────╢
- ║Beispiel: CALL GETDAY (I) ║
- ║ In der Variablen wird die Kennziffer für den ║
- ║ aktuellen Wochentag zurückgegeben. ║
- ╚══════════════════════════════════════════════════════════════════════╝
-
-
- Seite 174
-
-
- ╔══════════════════════════════════════════════════════════════════════╗
- ║Beschreibung der Subroutine INV24 (PORT,KONFIG) ║
- ║Die Subroutine konfiguriert eine serielle Schnittstelle. Die Nummer ║
- ║der Schnittstelle wird in "PORT" übergeben. Wenn die Schnittstelle ║
- ║nicht vorhanden ist, wird in "PORT" eine 0 zurückgegeben. In "KONFIG" ║
- ║werden die Konfigurationen übergeben. ║
- ╟──────────────────────────────────────────────────────────────────────╢
- ║Parameter: ║
- ║INTEGER Nummer der seriellen Schnittstelle [1 bis 4] ║
- ║ Return: 0 wenn Schnittstelle nicht vorhanden ist ║
- ║INTEGER Konfiguration der Schnittstelle: ║
- ║ Bits 7 6 5: Übertragungsgeschwindigkeit ║
- ║ 0 0 0 110 Baud ║
- ║ 0 0 1 150 Baud ║
- ║ 0 1 0 300 Baud ║
- ║ 0 1 1 600 Baud ║
- ║ 1 0 0 1200 Baud ║
- ║ 1 0 1 2400 Baud ║
- ║ 1 1 0 4800 Baud ║
- ║ 1 1 1 9600 Baud ║
- ║ Bits 4 3: Paritätskontrolle ║
- ║ 0 0 kein Paritätsbit ║
- ║ 0 1 ungerade Parität ║
- ║ 1 1 gerade Parität ║
- ║ Bit 2: Zahl der Stopbits ║
- ║ 0 ein Stopbit ║
- ║ 1 zwei Stopbits ║
- ║ Bits 1 0: Datenwortlänge ║
- ║ 1 0 7 Bit Datenwort ║
- ║ 1 1 8 Bit Datenwort ║
- ╟──────────────────────────────────────────────────────────────────────╢
- ║Beispiel: I=3 ║
- ║ CALL INV24 (I,251) ║
- ║ IF (I .EQ. 1) WRITE(*,'(1X,A)') 'Fehler!' ║
- ║ Wenn die serielle Schnittstelle mit der Nummer 3 ║
- ║ vorhanden ist, wird sie mit 9600 Baud, gerader ║
- ║ Parität, einem Stopbit und 8 Bit Wortlänge ║
- ║ konfiguriert. Wenn die Schnittstelle nicht vorhanden ║
- ║ ist, wird eine Fehlermeldung ausgegeben. ║
- ╚══════════════════════════════════════════════════════════════════════╝
-
-
- Seite 175
-
-
- ╔══════════════════════════════════════════════════════════════════════╗
- ║Beschreibung der Subroutine REV24 (PORT,ANZ,STRING) ║
- ║Die Subroutine liest aus der in "PORT" übergebenen seriellen ║
- ║Schnittstelle einen String. Die Leseroutine wird beendet, wenn die ║
- ║Anzahl "ANZ" Zeichen erreicht ist, wenn ein Return-Code gelesen wird, ║
- ║oder wenn ein Fehler auftritt. Null-Characters werden überlesen. ║
- ║Der nicht beschriebene Teil des Strings wird mit Blanks aufgefüllt. ║
- ║Die Schnittstelle muß bereits initialisiert sein. Dazu eignet sich die║
- ║Subroutine INV24. ║
- ╟──────────────────────────────────────────────────────────────────────╢
- ║Parameter: ║
- ║INTEGER Nummer der seriellen Schnittstelle [1 bis 4] ║
- ║INTEGER Anzahl der zu lesenden Zeichen ║
- ║CHARACTERSTRING Return: Aus der seriellen Schnittstelle gelesene ║
- ║ Zeichen [ STRING*(ANZ) ] ║
- ╟──────────────────────────────────────────────────────────────────────╢
- ║Beispiel: CHARACTER STRING*30 ║
- ║ I=3 ║
- ║ CALL INV24 (I,251) ║
- ║ IF (I .NE. 0) WRITE(*,'(1X,A)') 'Fehler!' ║
- ║ CALL REV24 (3,30,STRING) ║
- ║ WRITE(*,'(1X,A)') STRING ║
- ║ Wenn die serielle Schnittstelle mit der Nummer 3 ║
- ║ vorhanden ist, wird sie mit 9600 Baud, gerader ║
- ║ Parität, einem Stopbit und 8 Bit Wortlänge ║
- ║ konfiguriert. Wenn die Schnittstelle nicht vorhanden ║
- ║ ist, wird eine Fehlermeldung ausgegeben. Danach wird ║
- ║ ein String mit maximal 30 Zeichen aus der ║
- ║ Schnittstelle gelesen. ║
- ╚══════════════════════════════════════════════════════════════════════╝
-
-
- Seite 176
-
-
- ╔══════════════════════════════════════════════════════════════════════╗
- ║Beschreibung der Subroutine MAUS (TR,TL,RECHTS,LINKS,AUF,AB,SENS) ║
- ║Die Subroutine ordnet den Tasten und Richtungen einer installierten ║
- ║MIROSOFT-kompatiblen Maus definierte Keyboard-Tastendrücke zu. Dadurch║
- ║kann die Tastatur mit Hilfe der Maus simuliert werden. Die Tastatur ║
- ║kann dabei weiterhin uneingeschränkt parallel zur Maus bedient werden.║
- ║Die Empfindlichkeit der Maus wird mit SENS eingestellt. Zum Schluß des║
- ║Programms muß die Subroutine mit SENS gleich Null nochmals aufgerufen ║
- ║werden, damit die Maus ihre ursprüngliche Funktion zurückerhält. Mit ║
- ║der Subroutine können einfache Menüsteuerungen aufgebaut werden. ║
- ╟──────────────────────────────────────────────────────────────────────╢
- ║Parameter: ║
- ║INTEGER Bitmuster zur Emulation einer Keybord-Taste durch die║
- ║ rechte Maustaste: ║
- ║ 0: kein Tastaturäquivalent ║
- ║ 1: <Return-Taste> ║
- ║ 2: <Cursor rechts>-Taste ║
- ║ 4: <Cursor links>-Taste ║
- ║ 8: <Cursor aufwärts>-Taste ║
- ║ 16: <Cursor abwärts>-Taste ║
- ║ 32: <Bild aufwärts>-Taste ║
- ║ 64: <Bild abwärts>-Taste ║
- ║ 128: <Tabulator rechts>-Taste ║
- ║ 256: <Tabulator links>-Taste ║
- ║ 512: <Escape>-Taste ║
- ║ 1024: <F1>-Taste ║
- ║ 2048: <F2>-Taste ║
- ║ 4096: <F3>-Taste ║
- ║ 8192: <F4>-Taste ║
- ║ 16384: <F5>-Taste ║
- ║ 32768: <F6>-Taste ║
- ║ 65536: <F7>-Taste ║
- ║ 131072: <F8>-Taste ║
- ║ 262144: <F9>-Taste ║
- ║ 524288: <F10>-Taste ║
- ║INTEGER Bitmuster zur Emulation einer Keybord-Taste durch die║
- ║ linke Maustaste: ║
- ║ wie im ersten Parameter ║
- ║INTEGER Bitmuster zur Emulation einer Keybord-Taste durch die║
- ║ Bewegung der Maus nach rechts: ║
- ║ wie im ersten Parameter ║
- ║INTEGER Bitmuster zur Emulation einer Keybord-Taste durch die║
- ║ Bewegung der Maus nach links: ║
- ║ wie im ersten Parameter ║
- ║INTEGER Bitmuster zur Emulation einer Keybord-Taste durch die║
- ║ Bewegung der Maus nach oben: ║
- ║ wie im ersten Parameter ║
- ║INTEGER Bitmuster zur Emulation einer Keybord-Taste durch die║
- ║ Bewegung der Maus nach unten: ║
- ║ wie im ersten Parameter ║
- ║INTEGER Empfindlichkeit der Maus [1 bis 16] ║
- ║ 1: geringe Empfindlichkeit ║
- ║ 16: hohe Empfindlichkeit ║
- ║ oder: 0: Wiederherstellen der ursprünglichen ║
- ║ Mausfunktionen ║
-
-
- Seite 177
-
-
- ║ Return: -1: Mausstatus: kein Maustreiber vorhanden ║
- ╟──────────────────────────────────────────────────────────────────────╢
- ║Beispiel: SENS=5 ║
- ║ CALL MAUS (1,512,2,4,8,16,SENS) ║
- ║ Die Escape- und Return-Tasten werden von den Maus- ║
- ║ tasten emuliert. Die Cursortasten werden durch die ║
- ║ Mausbewegungen emuliert. Wenn in SENS eine -1 steht, ║
- ║ ist kein Maustreiber vorhanden. ║
- ╚══════════════════════════════════════════════════════════════════════╝
-
-
- Seite 178
-
-
- ╔══════════════════════════════════════════════════════════════════════╗
- ║Beschreibung der Subroutine PSP (ANZ,STRING) ║
- ║Aus der Programmsegmentpräfix (PSP) werden die beim Programmaufruf in ║
- ║der Kommandozeile aufgeführten Parameter ausgelesen und als String an ║
- ║das rufende Programm zurückgegeben. Die Anzahl der aus der PSP ║
- ║übernommenen Zeichen wird in ANZ übergeben. ║
- ╟──────────────────────────────────────────────────────────────────────╢
- ║Parameter: ║
- ║INTEGER Return: Anzahl der aus der PSP ausgelesenen und in ║
- ║ STRING übergebenen Zeichen. ║
- ║CHARACTERSTRING Return: String mit beim Programmaufruf übergebenen ║
- ║ Parametern [ STRING*128 ]. ║
- ╟──────────────────────────────────────────────────────────────────────╢
- ║Beispiel: CHARACTER STRING*128 ║
- ║ CALL PSP (I,STRING) ║
- ║ In STRING werden die beim Programmaufruf übergebenen ║
- ║ Parameter geschrieben. In I steht die Anzahl der aus ║
- ║ der PSP gelesenen Zeichen. ║
- ╚══════════════════════════════════════════════════════════════════════╝
-
-
- Seite 179
-
-
- ╔═════════════════════════════════════════════════════════════════════╗
- ║Beschreibung der Subroutine PARAM (ANZ,PFELD) ║
- ║Die Subroutine schreibt eine Anzahl "ANZ" der beim Programmaufruf ║
- ║übergebenen Parameter in ein Characterfeld "PFELD". Beim Programm- ║
- ║aufruf dürfen die Parameter durch Blanks, Kommata oder Slashs ║
- ║voneinander getrennt sein. Fehlende Parameter in einer Parameterliste║
- ║können durch ein Komma oder durch einen Slash ersetzt sein. Führende ║
- ║Blanks werden ignoriert. Wenn weniger Parameter gefunden werden, als ║
- ║in "ANZ" erwartet, so wird in "ANZ" die Anzahl der tatsächlich ║
- ║gefundenen Parameter an das rufende Programm zurückgegeben. ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Parameter: ║
- ║INTEGER Anzahl der erwarteten Parameter. ║
- ║ Return: Anzahl der gefundenen Parameter. ║
- ║CHARACTERFELD Return: Feld mit den gefundenen Parametern. ║
- ║ [ gewünschte Parameterlänge * Anzahl! ] ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Subroutinen: PSP,LAENGE ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Beispiel: CHARACTER PFELD*30(2) ║
- ║ I=2 ║
- ║ CALL PARAM (I,PFELD) ║
- ║ IF (I .NE. 2) WRITE(*,'(1X,A)') 'FEHLER' ║
- ║ Es werden die ersten zwei beim Programmaufruf ║
- ║ angegebenen Parameter in das Feld "PFELD" ║
- ║ geschrieben. Wenn kein oder weniger als zwei ║
- ║ Parameter vorhanden sind, wird eine Fehlermeldung ║
- ║ ausgegeben. ║
- ╚═════════════════════════════════════════════════════════════════════╝
-
-
- Seite 180
-
-
- ╔═════════════════════════════════════════════════════════════════════╗
- ║Beschreibung der Subroutine TASMOD (SET,GET) ║
- ║Die Routine liest den aktuellen Tastaturmodus in GET ein und gibt ihn║
- ║an das rufende Programm zurück. Danach wird der neue tastaturmodus ║
- ║aus SET gesetzt. Die verschiedenen Zustände der tastatur sind dem ║
- ║folgenden Bitmuster entsprechend "AND"-verknüpft: ║
- ║ 11111111 11111111 DEZ Zustand ║
- ║ ││││││││ │││││││└ 1 Shifttaste rechts gedrückt ║
- ║ ││││││││ ││││││└─ 2 Shifttaste links gedrückt ║
- ║ ││││││││ │││││└── 4 Controltaste rechts oder links gedrückt║
- ║ ││││││││ ││││└─── 8 Alttaste rechts oder links gedrückt ║
- ║ ││││││││ │││└──── 16 Scroll-lock eingeschaltet ║
- ║ ││││││││ ││└───── 32 Num-lock eingeschaltet ║
- ║ ││││││││ │└────── 64 Caps-lock eingeschaltet ║
- ║ ││││││││ └─────── 128 Insert eingeschaltet ║
- ║ ││││││││ ║
- ║ │││││││└───────── 256 Controltaste links gedrückt ║
- ║ ││││││└────────── 512 Alttaste links gedrückt ║
- ║ │││││└─────────── 1024 Ohne Auswirkung ║
- ║ ││││└──────────── 2048 Pause eingeschaltet ║
- ║ │││└───────────── 4096 Scroll-lock-Taste gedrückt ║
- ║ ││└────────────── 8192 Num-lock-Taste gedrückt ║
- ║ │└─────────────── 16384 Caps-lock-Taste gedrückt ║
- ║ └──────────────── 32768 Insert-Taste gedrückt ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Parameter: ║
- ║INTEGER Zu setzender Tastaturmodus. ║
- ║INTEGER Return: Alter Tastaturmodus. ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Subroutinen: PEEK,POKE ║
- ╟─────────────────────────────────────────────────────────────────────╢
- ║Beispiel: CALL TASMOD (96,I) ║
- ║ Der aktuelle Tastaturmodus wird in die Variable I ║
- ║ geschrieben, damit er später wieder in den ║
- ║ ursprünglichen Zustand gesetzt werden kann. Dann ║
- ║ werden Num-lock und Caps-lock eingeschaltet. ║
- ╚═════════════════════════════════════════════════════════════════════╝
-
-
- Seite 181
-
-
- ╔══════════════════════════════════════════════════════════════════════╗
- ║Beschreibung der Subroutine SCPRF (SEGMENT) ║
- ║Die Subroutine gibt die Segmentadresse des Bildschirmspeichers in der ║
- ║Variablen SEGMENT an das rufende Programm zurück. Sie ist #0B000 beim ║
- ║Betrieb mit einem Monochromemonitor und #0B800 beim Betrieb mit einem ║
- ║Farbmonitor. ║
- ╟──────────────────────────────────────────────────────────────────────╢
- ║Parameter: ║
- ║INTEGER Return: Segmentadresse des Bildschirmspeichers: ║
- ║ #0B000: Monochromemonitor ║
- ║ #0B800: Farbmonitor ║
- ╟──────────────────────────────────────────────────────────────────────╢
- ║Beispiel: CALL SCPRF (SEGM) ║
- ║ In der Variablen SEGM wird beim Betrieb mit einem ║
- ║ Monochromemonitor #0B000 oder beim Betrieb mit einem ║
- ║ Farbmonitor #0B800 an das rufende Programm zurück- ║
- ║ gegeben. ║
- ╚══════════════════════════════════════════════════════════════════════╝
-
-
- Seite 182
-
-
- ╔══════════════════════════════════════════════════════════════════════╗
- ║Beschreibung der Subroutine VIDMOD (NEUMOD,ALTMOD,CLSFLAG) ║
- ║Die Subroutine liest den aktuellen Videomodus und gibt ihn in der ║
- ║Variablen ALTMOD an das rufende Programm zurück. Danach wird geprüft, ║
- ║od der neu zu setzende Videomodus NEUMOD zur Hardwarekonfiguration von║
- ║Videokarte und Bildschirm paßt. Wenn das der Fall ist, wird der neue ║
- ║Videomodus gesetzt, wenn nicht, bleibt der alte Videomodus erhalten ║
- ║und in CLSFLAG wird eine 0 zurückgegeben. Das Löschen des Bildschirms ║
- ║beim Aktivieren eines neuen Videomodus wird werhindert, wenn in ║
- ║CLSFLAG eine 2 übergeben wird. Eine 1 in CLSFLAG löscht den Bildschirm║
- ║beim Aktivieren des neuen Videomodus. ║
- ╟──────────────────────────────────────────────────────────────────────╢
- ║Parameter: ║
- ║INTEGER Neu zu setzender Videomodus: ║
- ║ Modus Auflösg Sp/Z. Farben ║
- ║ 0 Text 320*350 40*25 16 grau ║
- ║ 1 Text 320*350 40*25 16 ║
- ║ 2 Text 640*350 80*25 16 grau ║
- ║ 3 Text 640*350 80*25 16 ║
- ║ 4 Grafik 320*200 40*25 4 ║
- ║ 5 Grafik 320*200 40*25 4 grau ║
- ║ 6 Grafik 640*200 80*25 bw ║
- ║ 7 Text 720*350 80*25 bw ║
- ║ 13 Grafik 320*200 40*25 16 ║
- ║ 14 Grafik 640*200 80*25 16 ║
- ║ 15 Grafik 640*350 80*25 bw ║
- ║ 16 Grafik 640*350 80*25 16 ║
- ║ 17 Grafik 640*480 80*30 bw ║
- ║ 18 Grafik 640*480 80*30 16 ║
- ║ 19 Grafik 320*200 40*25 256 ║
- ║INTEGER Return: Bisheriger Videomodus. ║
- ║INTEGER Flag zum Löschen des Bildschirms: ║
- ║ 1: Bildschirm soll gelöscht werden ║
- ║ 2: Bildschirm soll nicht gelöscht werden ║
- ║ Return: ║
- ║ 0: Setzen des neuen Videomodus ist nicht möglich ║
- ╟──────────────────────────────────────────────────────────────────────╢
- ║Beispiel: J=1 ║
- ║ CALL VIDMOD (18,I,J) ║
- ║ Es wird überprüft, ob der VGA-Farbmodus gesetzt ║
- ║ werden kann. Wenn das der Fall ist, wird in I der ║
- ║ bisherige Videomodus zurückgegeben und der VGA- ║
- ║ Farbmodus wird gesetzt, wobei der Bildschirminhalt ║
- ║ gelöscht wird. Eine 0 in J zeigt an, daß das Setzen ║
- ║ eines neuen Videomodus aus Gründen der Hardware- ║
- ║ konfiguration nicht möglich ist. ║
- ╚══════════════════════════════════════════════════════════════════════╝
-
-
- Seite 183
-
-
- ASCII-Code-Tabelle
-
-
-
- CTL = Control-Code Steuerzeichen Bed = Bedeutung Steuerzeichen
- Ch = ASCII-Zeichen Dez = Dezimale Entsprechung
- Hex = Hexadezimale Entsprechung
-
-
-
-
- CTL. Bed. Ch Dez. Hex. Ch Dez. Hex. Ch Dez. Hex. Ch Dez. Hex.
-
- CTL @ NU 0 00 @ 64 40 Ç 128 80 └ 192 C0
- CTL A SH 1 01 A 65 41 ü 129 81 ┴ 193 C1
- CTL B SX 2 02 B 66 42 é 130 82 ┬ 194 C2
- CTL C EX 3 03 C 67 43 â 131 83 ├ 195 C3
- CTL D ET 4 04 D 68 44 ä 132 84 ─ 196 C4
- CTL E EQ 5 05 E 69 45 à 133 85 ┼ 197 C5
- CTL F AK 6 06 F 70 46 å 134 86 ╞ 198 C6
- CTL G BEL 7 07 G 71 47 ç 135 87 ╟ 199 C7
- CTL H BS 8 08 H 72 48 ê 136 88 ╚ 200 C8
- CTL I HT 9 09 I 73 49 ë 137 89 ╔ 201 C9
- CTL J LF 10 0A J 74 4A è 138 8A ╩ 202 CA
- CTL K VT 11 0B K 75 4B ï 139 8B ╦ 203 CB
- CTL L FF 12 0C L 76 4C î 140 8C ╠ 204 CC
- CTL M CR 13 0D M 77 4D ì 141 8D ═ 205 CD
- CTL N SO 14 0E N 78 4E Ä 142 8E ╬ 206 CE
- CTL O SI 15 0F O 79 4F Å 143 8F ╧ 207 CF
- CTL P DL 16 10 P 80 50 É 144 90 ╨ 208 D0
- CTL Q D1 17 11 Q 81 51 æ 145 91 ╤ 209 D1
- CTL R D2 18 12 R 82 52 Æ 146 92 ╥ 210 D2
- CTL S D3 19 13 S 83 53 ô 147 93 ╙ 211 D3
- CTL T D4 20 14 T 84 54 ö 148 94 ╘ 212 D4
- CTL U NK 21 15 U 85 55 ò 149 95 ╒ 213 D5
- CTL V SY 22 16 V 86 56 û 150 96 ╓ 214 D6
- CTL W EB 23 17 W 87 57 ù 151 97 ╫ 215 D7
- CTL X CN 24 18 X 88 58 ÿ 152 98 ╪ 216 D8
- CTL Y EM 25 19 Y 89 59 Ö 153 99 ┘ 217 D9
- CTL Z SB 26 1A Z 90 5A Ü 154 9A ┌ 218 DA
- CTL [ EC 27 1B [ 91 5B ¢ 155 9B █ 219 DB
- CTL \ FS 28 1C \ 92 5C £ 156 9C ▄ 220 DC
- CTL ] GS 29 1D ] 93 5D ¥ 157 9D ▌ 221 DD
- CTL ^ RS 30 1E ^ 94 5E ₧ 158 9E ▐ 222 DE
- CTL _ US 31 1F _ 95 5F ƒ 159 9F ▀ 223 DF
- 32 20 ` 96 60 á 160 A0 α 224 E0
- ! 33 21 a 97 61 í 161 A1 ß 225 E1
- " 34 22 b 98 62 ó 162 A2 Γ 226 E2
- # 35 23 c 99 63 ú 163 A3 π 227 E3
- $ 36 24 d 100 64 ñ 164 A4 Σ 228 E4
- % 37 25 e 101 65 Ñ 165 A5 σ 229 E5
- & 38 26 f 102 66 ª 166 A6 µ 230 E6
- ' 39 27 g 103 67 º 167 A7 τ 231 E7
- ( 40 28 h 104 68 ¿ 168 A8 Φ 232 E8
- ) 41 29 i 105 69 ⌐ 169 A9 Θ 233 E9
-
-
- Seite 184
-
-
- * 42 2A j 106 6A ¬ 170 AA Ω 234 EA
- + 43 2B k 107 6B ½ 171 AB δ 235 EB
- , 44 2C l 108 6C ¼ 172 AC ∞ 236 EC
- - 45 2D m 109 6D ¡ 173 AD φ 237 ED
- . 46 2E n 110 6E « 174 AE ε 238 EE
- / 47 2F o 111 6F » 175 AF ∩ 239 EF
- 0 48 30 p 112 70 ░ 176 B0 ≡ 240 F0
- 1 49 31 q 113 71 ▒ 177 B1 ± 241 F1
- 2 50 32 r 114 72 ▓ 178 B2 ≥ 242 F2
- 3 51 33 s 115 73 │ 179 B3 ≤ 243 F3
- 4 52 34 t 116 74 ┤ 180 B4 ⌠ 244 F4
- 5 53 35 u 117 75 ╡ 181 B5 ⌡ 245 F5
- 6 54 36 v 118 76 ╢ 182 B6 ÷ 246 F6
- 7 55 37 w 119 77 ╖ 183 B7 ≈ 247 F7
- 8 56 38 x 120 78 ╕ 184 B8 ° 248 F8
- 9 57 39 y 121 79 ╣ 185 B9 ∙ 249 F9
- : 58 3A z 122 7A ║ 186 BA · 250 FA
- ; 59 3B { 123 7B ╗ 187 BB √ 251 FB
- < 60 3C | 124 7C ╝ 188 BC ⁿ 252 FC
- = 61 3D } 125 7D ╜ 189 BD ² 253 FD
- > 62 3E ~ 126 7E ╛ 190 BE ■ 254 FE
- ? 63 3F 127 7F ┐ 191 BF 255 FF
-
-
- Seite 185
-
-
- Farbcode-Tabelle
-
-
-
-
- Dez = Dezimaler Farbcode für Farbattribut
- Hex = Hexadezimaler Farbcode für Farbattribut
-
-
-
-
- Vordergrund Hintergrund Dez Hex Vordergrund Hintergrund Dez Hex
-
- Schwarz Schwarz 0 00 Schwarz Rot 64 40
- Blau Schwarz 1 01 Blau Rot 65 41
- Grün Schwarz 2 02 Grün Rot 66 42
- Cyan Schwarz 3 03 Cyan Rot 67 43
- Rot Schwarz 4 04 Rot Rot 68 44
- Magenta Schwarz 5 05 Magenta Rot 69 45
- Braun Schwarz 6 06 Braun Rot 70 46
- Hellgrau Schwarz 7 07 Hellgrau Rot 71 47
- Dunkelgrau Schwarz 8 08 Dunkelgrau Rot 72 48
- Hellblau Schwarz 9 09 Hellblau Rot 73 49
- Hellgrün Schwarz 10 0A Hellgrün Rot 74 4A
- Hellcyan Schwarz 11 0B Hellcyan Rot 75 4B
- Hellrot Schwarz 12 0C Hellrot Rot 76 4C
- Hellmagenta Schwarz 13 0D Hellmagenta Rot 77 4D
- Gelb Schwarz 14 0E Gelb Rot 78 4E
- Weiß Schwarz 15 0F Weiß Rot 79 4F
- Schwarz Blau 16 10 Schwarz Magenta 80 50
- Blau Blau 17 11 Blau Magenta 81 51
- Grün Blau 18 12 Grün Magenta 82 52
- Cyan Blau 19 13 Cyan Magenta 83 53
- Rot Blau 20 14 Rot Magenta 84 54
- Magenta Blau 21 15 Magenta Magenta 85 55
- Braun Blau 22 16 Braun Magenta 86 56
- Hellgrau Blau 23 17 Hellgrau Magenta 87 57
- Dunkelgrau Blau 24 18 Dunkelgrau Magenta 88 58
- Hellblau Blau 25 19 Hellblau Magenta 89 59
- Hellgrün Blau 26 1A Hellgrün Magenta 90 5A
- Hellcyan Blau 27 1B Hellcyan Magenta 91 5B
- Hellrot Blau 28 1C Hellrot Magenta 92 5C
- Hellmagenta Blau 29 1D Hellmagenta Magenta 93 5D
- Gelb Blau 30 1E Gelb Magenta 94 5E
- Weiß Blau 31 1F Weiß Magenta 95 5F
- Schwarz Grün 32 20 Schwarz Braun 96 60
- Blau Grün 33 21 Blau Braun 97 61
- Grün Grün 34 22 Grün Braun 98 62
- Cyan Grün 35 23 Cyan Braun 99 63
- Rot Grün 36 24 Rot Braun 100 64
- Magenta Grün 37 25 Magenta Braun 101 65
- Braun Grün 38 26 Braun Braun 102 66
- Hellgrau Grün 39 27 Hellgrau Braun 103 67
- Dunkelgrau Grün 40 28 Dunkelgrau Braun 104 68
- Hellblau Grün 41 29 Hellblau Braun 105 69
-
-
- Seite 186
-
-
- Hellgrün Grün 42 2A Hellgrün Braun 106 6A
- Hellcyan Grün 43 2B Hellcyan Braun 107 6B
- Hellrot Grün 44 2C Hellrot Braun 108 6C
- Hellmagenta Grün 45 2D Hellmagenta Braun 109 6D
- Gelb Grün 46 2E Gelb Braun 110 6E
- Weiß Grün 47 2F Weiß Braun 111 6F
- Schwarz Cyan 48 30 Schwarz Hellgrau 112 70
- Blau Cyan 49 31 Blau Hellgrau 113 71
- Grün Cyan 50 32 Grün Hellgrau 114 72
- Cyan Cyan 51 33 Cyan Hellgrau 115 73
- Rot Cyan 52 34 Rot Hellgrau 116 74
- Magenta Cyan 53 35 Magenta Hellgrau 117 75
- Braun Cyan 54 36 Braun Hellgrau 118 76
- Hellgrau Cyan 55 37 Hellgrau Hellgrau 119 77
- Dunkelgrau Cyan 56 38 Dunkelgrau Hellgrau 120 78
- Hellblau Cyan 57 39 Hellblau Hellgrau 121 79
- Hellgrün Cyan 58 3A Hellgrün Hellgrau 122 7A
- Hellcyan Cyan 59 3B Hellcyan Hellgrau 123 7B
- Hellrot Cyan 60 3C Hellrot Hellgrau 124 7C
- Hellmagenta Cyan 61 3D Hellmagenta Hellgrau 125 7D
- Gelb Cyan 62 3E Gelb Hellgrau 126 7E
- Weiß Cyan 63 3F Weiß Hellgrau 127 7F
-
-