------------------------------------------------ | BC-FORTRAN77 Vers.1.3C | | Copyright: Andre Koestli | | 1990 Martin-Luther-Str.63 | | D7000 Stuttgart 50 | |----------------------------------------------| | Die Version "C" von BC-FORTRAN77, bestehend | | aus den nachfolgend beschriebenen 5 Dateien, | | ist vollstaendig von mir programmiert. Ich | | gestatte freies Nutzungsrecht an Vers.C fuer | | 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 unveraendert beizufuegen.| | Fuer kommerzielle Anwendungen ist die Vers.P | | vorgesehen, die lizenzpflichtig ist. | | Die Anwendung fuer militaerische Zwecke oder | | entsprechende Forschung ist verboten! | | Maerz 1990 A.Koestli | ------------------------------------------------ BC-FORTRAN77 Version C ist Teil eines umfangreichen Entwicklungssystems, der Vers.P (siehe unten). Vers.C soll in einfacher Weise den fuer Programmierkurse noetigen Compiler zur Verfuegung stellen. Dem kommt entgegen, dass diese Software fast identisch auf AMIGA, ATARI ST und MS-DOS Rechnern laeuft. 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- oberflaeche vereinigt. Dabei wird dafuer gesorgt, dass im Entwicklungszyklus automatisch nur die jeweils veraen- derten Unterprogramme neu uebersetzt werden; selbst bei Programmen mit mehreren hundert Unterprogrammen ergibt sich so ein Entwicklungsschritt (Editieren, uebersetzen, linken und starten) von wenigen Sekunden. Mathematische Koprozessoren werden in Vers.P unterstuetzt, ebenso wie spezielle Befehle des 68020 Prozessors. Vers.P enthaelt einen komfortablen Debugger auf Quelltext Basis zum interaktiven Austesten sowie einige Biblio- theken z.B. zur einfachen Plotausgabe auf dem Bildschirm. 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. Fuer 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.TTP Compiler BCL.TTP Linker BCRTSY.B Laufzeitsystem MATHLIB.B Bibliothek mit Standardfunktionen Wird eine Kopie angefertigt, muessen immer alle Dateien unveraendert uebernommen werden. Am besten arbeitet man mit einer Command-Shell. Falls keine Shell vorhanden ist koennen die Programme aber auch vom Desktop gestartet werden, die Optionen und Dateinamen muessen dann in ein Window eingegeben werden, das nach dem anklicken des Programms erscheint. 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 kopiert man BCF.TTP und BCL.TTP in ein Directory, in dem die Shell nach Programmen sucht. BCRTSY.B und MATHLIB.B sollten in das Directory \BC des aktuellen Laufwerks kopiert werden, damit sie vom Linker gefunden werden. Compiler -------- Der Compiler wird gestartet mit BCF [-Option...] Datei... oder vom Desktop durch anklicken von BCF.TTP und anschliessender Eingabe von Optionen und Dateinamen. Enthaelt Datei keinen Punkt, so wird .F angehaengt. Die uebersetzte Form der Programme wird in Datei.B abgelegt. Beispiel: BCF -D TEST.F Uebersetzt TEST.F mit Debug-Option nach TEST.B BCF TEST SUB Uebersetzt TEST.F nach TEST.B und SUB.F nach SUB.B BCF TEST.X uebersetzt TEST.X nach TEST.B Compiler Optionen ----------------- -D Debug, fasst -BVL zusammen. -B deBugcode, impliziert -H und erzeugt ausserdem Code fuer Debuggeraufrufe, zum Ueberpruefen von Feldgrenzen und Substrings. -H parcHeck, Code zum Ueberpruefen der Parameter- listen und auf Stackueberlauf erzeugen. -V Varlist: Variablenliste fuer Debugger. -L Lineslist: Zeilennummernliste fuer 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 uebersetzten Zeilen. -W Am Ende auf Return warten, sinnvoll, wenn vom Desktop gestartet wird. Sprachumfang ------------ BC-FORTRAN77 uebersetzt den vollstaendigen 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 Beschraenkungen 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 Beschraenkungen, die bei unvernuenftig grossen Unterprogrammen zu Fehlermeldungen fuehren, meistens waere dann aber ohnehin die 32kB Code Grenze ueberschritten. Linker ------ Der Linker wird gestartet mit: BCL [-Optionen...] Datei... oder vom Desktop durch anklicken von BCL.TTP und anschliessender Eingabe von Optionen und Dateinamen. Enthaelt Datei keinen Punkt, so wird .B angehaengt. Die Programmdatei wird mit dem Namen der ersten Datei, aber mit .PRG statt .B, gespeichert. Werden mathe- matische Standardfunktionen verwendet, so muss auch die Datei MATHLIB.B aufgefuehrt werden. Das Laufzeitsystem BCRTSY.B 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.PRG das lauffaehige Programm, das eine Stackgroesse von 16kB verwendet. Linker Optionen --------------- -Sn Stackgroesse fuer 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 Commonbloecke und Programmmodule. -W Am Ende auf Return warten, sinnvoll, wenn vom Desktop gestartet wird. Beschraenkungen --------------- Die wichtigste Beschraenkung liegt in der RAM Groesse: die zu erzeugende Programmdatei (ohne Commons und Stack) kann maximal so gross sein, wie der groesste 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 Commonbloecke auf 1500 beschraenkt. Laufzeitsystem -------------- Das Laufzeitsystem BCRTSY.B enthaelt Routinen, die von einem FORTRAN77 Programm benoetigt werden und wird vom Linker in jedes Programm eingebunden. BCRTSY enthaelt: 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 unterstuetzt. CHARACTER Routinen I/O Routinen Debugger: Ein einfacher Debugger zur Fehlersuche. Nach einem Laufzeitfehler wird von ihm eine Fehlermeldung ausgegeben und Eingabe erwartet. Der Debugger kann aber auch durch Druecken der Alternate Taste 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 uebersetzt wurde. Z Programm beenden. Leertaste Weiterrechnen, falls kein Lauf- zeitfehler auftrat. Haelt man dabei die Alternate Taste gedrueckt, wird ein Programmschritt (bis zum naechsten Label, Unterprogramm, ELSE, ENDIF, DO) ausgefuehrt. Bibliothek ---------- MATHLIB.B enthaelt 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 Desktop oder einer Shell aus gestartet werden. Fehlermeldungen --------------- Die Fehlermeldungen von Compiler, Linker und Laufzeitsystem sollten, bis auf die folgende Ausnahme, selbsterklaerend sein. Die vollstaendige Auflistung (26 Seiten im Handbuch der Vers.P) wuerde 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 zurueckgegeben 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 eroeffnet. Nur die Nummern 5 und 6 koennen ohne OPEN verwendet werden. 6 Formatiert/unformatiert Widerspruch. 7 REC-Parameter fuer Datei mit ACCESS='SEQUENTIAL' 8 BACKSPACE, REWIND, ENDFILE fuer diese Datei nicht moeglich (AUX: und PRN:). 10 Internal I/O nur formatiert. 20 INTEGER Ueberlauf bei Eingabe. 21 Datenfehler bein Listengesteuerter Eingabe, z.B. fehlende Apostroph fuer Zeichenketten. 22 Unerwartetes Dateiende. 23 Record zu lang. 24 Lesefehler bei UNFORMATTED SEQUENTIAL. 30 Formatelement und I/O-Listelement passen nicht zusammen. INTEGER benoetigt 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 (fuer 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 fuer READ. In FORTRAN66 konnte damit Text in ein Format hineingelesen werden; in FORTRAN77 nicht mehr erlaubt. 40 Exponent zu gross fuer gegebenes Format. 42 Formatelement zu lang. Max. Laenge des internen Recordpuffers (80 Zeichen). 43 Internal I/O, Record zu lang. 44 TL, Record zu lang. Ist ein Record laenger als der interne Recordpuffer, kann nicht mehr nach links tabuliert werden. 45 Feldlaenge 0 bei I,L,F,E,G,D Formatelement. 1000+n TOS Error -n 1002 Laufwerk nicht bereit. 1004 CRC (Cyclic Redundancy Code) Fehler. 1010 Schreibfehler. 1011 Lesefehler. 1013 Schreibgeschuetzt. 1014 Diskette gewechselt. 1016 Bad Sector. 1017 Diskette einlegen. 1033 Datei nicht gefunden. 1034 Pfadname (zum Verzeichnis) nicht gefunden. 1035 Zu viele Dateien. 1036 Zugriff nicht moeglich (Schreibschutz?). 1039 Nicht genuegend Speicher (RAM). 1040 Falsche Speicherblockadresse. 1046 Ungueltige Laufwerksbezeichnung. z.B. K: Achtung, mit Q: bis Z: stuerzt TOS ab! 1066 Falsches Format fuer Programmfile. Probleme -------- Sollte jemand der Meinung sein, dass der Compiler, Linker oder die Bibliothek fehlerhaft sind, bitte ich um schriftliche Mitteilung. Ich bitte um Verstaendnis, dass fuer dieses Produkt (im Gegensatz zur kommerziellen Version P) Updateservice und telefonische Beratung nicht moeglich sind.