----------------------------------------------- | BC-FORTRAN77 Vers.1.3C | | Copyright: Andre Köstli | | 1990 Martin-Luther-Str.63 | | D7000 Stuttgart 50 | |---------------------------------------------| | Die Version "C" von BC-FORTRAN77, bestehend | | aus den nachfolgend beschriebenen 5 Dateien,| | ist vollständig von mir programmiert. Ich | | gestatte freies Nutzungsrecht an Vers.C für | | nichtkommerzielle Anwendungen, alle Rechte | | bleiben jedoch bei mir, insbesondere ist der| | Verkauf der Vers.C, auch im Zusammenhang mit| | anderen Produkten, nicht erlaubt. Jeder Ko- | | pie ist dieser Text unverändert beizufügen. | | Für kommerzielle Anwendungen ist die Vers.P | | vorgesehen, die lizenzpflichtig ist. | | Die Anwendung für militärische Zwecke oder | | entsprechende Forschung ist verboten! | | März 1990 A.Köstli | ----------------------------------------------- BC-FORTRAN77 Version C ist Teil eines umfangreichen Entwicklungssystems, der Vers.P (siehe unten). Vers.C soll in einfacher Weise den für Programmierkurse nötigen Compiler zur Verfügung stellen. Dem kommt entgegen, dass diese Software fast identisch auf AMIGA, ATARI ST und MS-DOS Rechnern läuft. BC-FORTRAN77 Vers.P ------------------- BC-FORTRAN77 Vers.P ist ein umfangreiches Entwicklungs- system, das ausser Compiler und Linker auch noch Editor, Precompiler und Versionsverwaltung unter einer Benutzer- oberfläche vereinigt. Dabei wird dafür gesorgt, dass im Entwicklungszyklus automatisch nur die jeweils verän- derten Unterprogramme neu übersetzt werden; selbst bei Programmen mit mehreren hundert Unterprogrammen ergibt sich so ein Entwicklungsschritt (Editieren, übersetzen, linken und starten) von wenigen Sekunden. Mathematische Koprozessoren werden in Vers.P unterstützt, ebenso wie spezielle Befehle des 68020 Prozessors. Vers.P enthält einen komfortablen Debugger auf Quelltext Basis zum interaktiven Austesten sowie einige Biblio- theken die u.a. die Verwendung der AMIGA Libraries Exec, Dos, Graphics und Intuition ermöglichen. Inklusive 150 Seiten Handbuch kostet BC-FORTRAN77 Vers.P DM 350.- und kann bei der oben angegebenen Adresse bestellt werden. (Bitte AMIGA oder ATARI ST angeben. Für MS-DOS existiert Vers.P derzeit nicht.) BC-FORTRAN77 Vers.C ------------------- BC-FORTRAN77 Vers.C, auf die sich der Rest dieses Textes bezieht, besteht aus folgenden Dateien: LIES.TXT Dieser Text BCF Compiler BCL Linker BCRTSY Laufzeitsystem MATHLIB.B Bibliothek mit Standardfunktionen Wird eine Kopie angefertigt, müssen immer alle Dateien unverändert übernommen werden. Auf dem AMIGA erfodert BC-FORTRAN77 1MB RAM und arbeitet unter dem CLI oder der Shell. Installation. ------------- Die einfachste Arbeitsweise ergibt sich, wenn nur in einem Directory gearbeitet wird, in dem dann alle Dateien von BC-FORTRAN77 stehen. Sollen mehrere Directories verwendet werden, so installiert man mit folgenden CLI-Kommandos: COPY BC? C: COPY BCRTSY S: COPY MATHLIB.B S: Compiler -------- Der Compiler wird gestartet mit BCF [-Option...] Datei... Enthält Datei keinen Punkt, so wird .F angehängt. Die übersetzte Form der Programme wird in Datei.B abgelegt. Beispiel: BCF -D TEST.F Übersetzt TEST.F mit Debug-Option nach TEST.B BCF TEST SUB Übersetzt TEST.F nach TEST.B und SUB.F nach SUB.B BCF TEST.X.Y übersetzt TEST.X.Y nach TEST.B (Achtung!). Compiler Optionen ----------------- -D Debug, fasst -BVL zusammen. -B deBugcode, impliziert -H und erzeugt ausserdem Code für Debuggeraufrufe, zum Überprüfen von Feldgrenzen und Substrings. -H parcHeck, Code zum Überprüfen der Parameter- listen und auf Stacküberlauf erzeugen. -V Varlist: Variablenliste für Debugger. -L Lineslist: Zeilennummernliste für Debugger. -U Uppercase: Klein- in Grossbuchstaben wandeln (ausser in Characterkonstanten und Formaten). Fehlt diese Option, so sind xy, XY, Xy und xY vier verschiedene Variablen! -F Freeinput: Quellprogramm nicht im FORTRAN Format. Nichtstandart! -P Protokoll: Ausgabe der übersetzten Zeilen. Sprachumfang ------------ BC-FORTRAN77 übersetzt den vollständigen Standard nach ANSI/ISO. Der Sprachstandard wird allerdings durch einige Besonderheiten verletzt (meistens werden diese als Erweiterungen bezeichnet). Ich empfehle dringend, diese Dialektkonstrukte nicht zu verwenden, da sie nicht standardisiert und damit nicht genau definiert sind. Die wichtigsten dieser Besonderheiten: INTEGER*1 8 bit INTEGER INTEGER*2 16 bit INTEGER INTEGER*4 wie INTEGER LOGICAL*1 8 bit LOGICAL LOGICAL*2 16 bit LOGICAL LOGICAL*4 wie LOGICAL IMPLICIT NONE abschalten der impliziten Typdef. COMMON /%adr/ Absoluter Common, adr ist Konstante oder einfache Variable. EQUIVALENCE() zwischen Character und anderen Typen sowie Mischen im Common. Rekursive Unterprogrammaufrufe. Namen mit max. 8 Zeichen (Standart: 6). Als wichtigste Beschränkungen gibt es: 32kB Code pro Unterprogramm 32kB SAVE/DATA pro Unterprogramm oder Blockdata 700 Unterprogramme pro Datei 500 Verschiedene Commons pro Datei. Daneben gibt es eine Reihe von Beschränkungen, die bei unvernünftig grossen Unterprogrammen zu Fehlermeldungen führen, meistens wäre dann aber ohnehin die 32kB Code Grenze überschritten. Linker ------ Der Linker wird gestartet mit: BCL [-Optionen...] Datei... Enthält Datei keinen Punkt, so wird .B angehängt. Die Programmdatei wird mit dem Namen der ersten Datei, aber ohne .B, gespeichert. Werden Mathematische Standardfunktionen verwendet, so muss auch die Datei MATHLIB.B aufgeführt werden. Das Laufzeitsystem BCRTSY wird automatisch geladen. Beispiel: BCL -S16 TEST SUB MATHLIB oder BCL -S16 TEST.B SUB.B MATHLIB.B Linkt die Dateien TEST.B und SUB.B und speichert unter TEST das lauffähige Programm, das eine Stackgrösse von 16kB verwendet. Linker Optionen --------------- -Sn Stackgrösse für das zu erzeugende Programm wird auf n kB gesetzt. Fehlt diese Option, so wird ein sehr grosser Stack angenommen. Auf dem Stack werden alle lokalen Variablen/Felder einer Unter- programmverschachtelung abgelegt. -O Optimiertes Linken: nirgends aufgerufene Unterprogramme werden weggelassen. -P Protokoll: Liste der Commonblöcke und Programmmodule. Beschränkungen -------------- Die wichtigste Beschränkung liegt in der RAM Grösse: die zu erzeugende Programmdatei (ohne Commons und Stack) kann maximal so gross sein, wie der grösste freie Speicherblock nach Laden von BCL. Andererseits kann, bei grossen Commons oder Stack, auch ein Programm erzeugt werden, dass im vorhandenen RAM nicht gestartet werden kann. Die Anzahl Unterprogramme ist auf 3000, die Anzahl Commonblöcke auf 1500 beschränkt. Laufzeitsystem -------------- Das Laufzeitsystem BCRTSY enthält Routinen, die von einem FORTRAN77 Programm benötigt werden und wird vom Linker in jedes Programm eingebunden. BCRTSY enthält: Arithmetikroutinen: 32 bit INTEGER Multiplikation/Division REAL Arithmetik DOUBLE PRECISION Arithmetik Es wird ein eigenes Gleitkommaformat verwendet, das mehr auf Geschwindigkeit denn auf Genauigkeit ausgerichtet ist. REAL: 6 Dezimalstellen, 32 bit 1 bit Vorzeichen, 23 bit Mantisse, 8 bit Exp. DOUBLE PRECISION: 13 Dezimalstellen, 6 bit 1 bit Vorzeichen, 47 bit Mantisse, 16 bit Exp. Ein mathematischer Koprozessor wird in Vers.C nicht unterstützt. CHARACTER Routinen I/O Routinen Debugger: Ein einfacher Debugger zur Fehlersuche. Beim Start eines Programms, das mit -D oder -B Option übersetzt wurde, wird ein Debugwindow eröffnet. Nach einem Laufzeitfehler wird dort eine Fehlermeldung ausgegeben und Eingabe erwartet. Der Debugger kann aber auch durch eine Eingabe in dieses Window aktiviert werden, um den Programmlauf zu unterbrechen. Folgende Tasten erkennt der Debugger als Kommando: S Ausgabe des Subroutine-Call Stacks Mit Zeilennummern, falls -L Option beim Compilieren verwendet wurde. V Variablen des aktuellen Unterprogramms mit aktuellen Inhalten, falls mit -V Option übersetzt wurde. Z Programm beenden. Leertaste Weiterrechnen, falls kein Lauf- fehler auftrat. U Weiterrechnen bis Unterprogrammwechsel. L Weiter mit ständiger Anzeige Sub+Zeile. P Weiter mit Anzeige alle 200 Schritte. T Einen Schritt (bis zum nächsten Label, Unterprogramm, ELSE, ENDIF oder DO) weiterrechnen. Bibliothek ---------- MATHLIB.B enthält die mathematischen Funktionen im vollen vom Standard vorgeschriebenen Umfang. Wenn beim Linken Fehlermeldungen wie z.B. External nicht gefunden: f_SQRT auftauchen, so muss die MATHLIB.B beim Aufruf von BCL mit angegeben werden. Programmstart ------------- Eine von BCL erzeugte Programmdatei kann wie jedes andere Programm vom CLI aus gestartet werden. Da das Programm einen eigenen, mit der -S Option von BCL definierten Stack verwendet, spielt das CLI-Kommando STACK keine Rolle. Falls das Programm Eingabe vom Tastatur erwartet ( READ(*,... ), darf man nicht vergessen, das entsprechende Window zu aktivieren, falls ein Debugwindow eröffnet wurde. Fehlermeldungen --------------- Die Fehlermeldungen von Compiler, Linker und Laufzeitsystem sollten, bis auf die folgende Ausnahme, selbsterklärend sein. Die vollständige Auflistung (26 Seiten im Handbuch der Vers.P) würde den Rahmen dieser Beschreibung sprengen. IO-Error: Nummer Ein-/Ausgabefehler; kann abgefangen werden, indem im IO-Statement der IOSTAT= Parameter angegeben wird. Nummer ist derselbe Wert, der auch in der IOSTAT Variable zurückgegeben wird. Nummer -1 Dateiende. -2 Dateiende inmitten eines Records. 1 Dateinummer bereits verwendet (OPEN). 2 Zu viele Dateien (OPEN). Max. 32 Dateien. 3 Dateiname zu lang (OPEN).Max. 31 Zeichen. 5 Dateinummer nicht eröffnet. Nur die Nummern 5 und 6 können ohne OPEN verwendet werden. 6 Formatiert/unformatiert Widerspruch. 7 REC-Parameter für Datei mit ACCESS='SEQUENTIAL' 8 BACKSPACE, REWIND, ENDFILE für diese Datei nicht möglich (AUX: und PRN:). 10 Internal I/O nur formatiert. 20 INTEGER Überlauf bei Eingabe. 21 Datenfehler bein Listengesteuerter Eingabe, z.B. fehlende Apostroph für Zeichenketten. 22 Unerwartetes Dateiende. 23 Record zu lang. 24 Lesefehler bei UNFORMATTED SEQUENTIAL. 30 Formatelement und I/O-Listelement passen nicht zusammen. INTEGER benötigt ein I-Formatelement, REAL, DOUBLE PRECISION (COMPLEX) ein (zwei) F-, G-, E- oder D-Formatelemente, LOGICAL ein L-Formatelement, CHARACTER ein A-Formatelement. 31 Formatelement L: T oder F erwartet (Eingabe) 32 Formatelement I: unerwartetes Zeichen (Eingabe) Leerzeichen, Vorzeichen und Ziffern erlaubt. 33 Formatelemente E, F oder D: unerwartetes Zeichen (Eingabe). Leerzeichen, Vorzeichen, Ziffern, Dezimalpunkt, E, e, D oder d (für Exponent) erlaubt. 34 Zu viele ( in Format. 35 Zu viele ) in Format. 36 Ziffernfolge an unerlaubter Stelle in Format. 37 Formatelement nicht erkannt. 38 . fehlt in F, E, G oder D Formatelement. 39 4Htext oder 'text' in Format für READ. In FORTRAN66 konnte damit Text in ein Format hineingelesen werden; in FORTRAN77 nicht mehr erlaubt. 40 Exponent zu gross für gegebenes Format. 42 Formatelement zu lang. Max. Länge des internen Recordpuffers (80 Zeichen). 43 Internal I/O, Record zu lang. 44 TL, Record zu lang. Ist ein Record länger als der interne Recordpuffer, kann nicht mehr nach links tabuliert werden. 45 Feldlänge 0 bei I,L,F,E,G,D Formatelement. 1000+n Amiga-Dos Error n Siehe Amiga-Dos Handbuch, Anhang A. 1202 Datei wird benützt. 1203 Datei existiert bereits. 1204 Inhaltsverzeichnis nicht gefunden. 1205 Datei nicht gefunden. 1206 Ungültige Window-Parameter 1209 Funktion auf diesem Gerät nicht möglich. 1210 Ungültiger Dateiname. 1212 Verwechslung Dateiname/Inhaltsverzeichnis. 1213 Disk nicht validiert. 1214 Disk schreibgeschützt. 1218 Disk nicht vorhanden. 1221 Disk voll. 1222 Datei geschützt gegen Löschen. 1223 Datei geschützt gegen Schreiben. 1224 Datei geschützt gegen Leseen. 1225 Keine Amiga-Dos Disk. 1226 Keine Disk vorhanden. 1232 Kein Platz für Eintrag. Probleme -------- Sollte jemand der Meinung sein, dass der Compiler, Linker oder die Bibliothek fehlerhaft sind, bitte ich um schriftliche Mitteilung. Ich bitte um Verständnis, dass für dieses Produkt (im Gegensatz zur kommerziellen Version P) Updateservice und telefonische Beratung nicht möglich sind.