******************************************* * * * BC-FORTRAN77 Version 1.3C * * * * Copyright ½ 1990 * * * * Andre Koestli * * Martin-Luther-Strasse 63 * * W-7000 Stuttgart 50 * * Federal Republic of Germany * * * ******************************************* 1. PREFACE =========== About this text --------------- The following text is a short introduction to the BC-FORTRAN77 Version C development system, written by Andre Koestli. He holds the copyright of this product, but does allow everybody to use it for noncommercial and nonmilitary applications. Florian Nold (email address MEHA@DFRRUF1.BITNET) translated the original german documents into english and has provided a supplementary dictionary explaining the error and warning messages (see appendix). Many thanx to Mr. Ken McNorton for reading and correcting this text. The original german introduction (file lies.txt) has also been included. If you find any mistakes in this english translation please write them to Florian Nold. Errors and suggestions to the BC-FORTRAN77 system itself have to be send to the author A. Koestli himself, since Florian Nold has NO connection whatsoever with him. Preface by the author of BC-FORTRAN77 ------------------------------------- Version 'C' of BC-FORTRAN77, consisting of the following 7 described files, was completely developed by Andre Koestli. I, Andre Koestli, allow the general use of Version 'C' for noncommercial applications. All rights remain entirely by me. I do not permit the sale of Version 'C' under any circumstances, not even in connection with other products. This text may not be changed and it has to be included with every copy of Version 'C'. For commercial applications Version 'P' must be used (see below). It is STRICTLY forbidden to use BC-FORTRAN77 Version 'C' for any military purpose or research. March 1990, A. Koestli BC-FORTRAN77 version 'C' is part of an extensive development system called version 'P' (see below). The purpose of version 'C' is to make a FORTRAN77 compiler available for programming courses. Another advantage is that BC-FORTRAN77 is available for Amiga, Atari ST and MS-DOS computers. 2. BC-FORTRAN77 version 'P' ============================ BC-FORTRAN77 version 'P' is a large development system, consisting of a compiler, linker, editor, precompiler and a version managment system, which are all embedded in a user friendly desktop shell. This shell only compiles source, which has been changed since the last compiler run. So even large programs, consisting of hundreds of subroutines, will be processed in a few seconds. Version 'P' supports the use of a mathema- tical coprocessor and special 68020 commands. Version 'P' includes a comfortable debugger for interactively testing programs. Supplementary libraries (e.g. plot output) are also included. The price of version 'P' is 350 DM (incl. manual, 150 pages). To order verison 'P' please write directly to A. Koestli. At the moment Version 'P' is only available for ATARI ST and Amiga, not for MS-DOS machines. 3. BC-FORTRAN77 Version C ========================== BC-FORTRAN77 version 'C', which is described in the rest of this text, includes the following files: LIES.TXT original german version of this text, written by Andre Koestli, the author of BC-FORTRAN77. ('lies' is the german word for 'read') BCFMAN.TXT this text BCFMAN.TEX TeX/LaTeX version of this text BCF.TTP the compiler BCL.TTP the linker BCRTSY.B the runtime library MATHLIB.B library (incl. FORTRAN77 standard functions) Be sure to include ALL these files without any changes when copying BC-FORTRAN77. Using a command-line-interpreter or a shell (e.g. gulam) would be the best way to work with BC-FORTRAN77. If you don't have any shell, you can start BC-FORTRAN77 from the desktop. Filenames and options can be entered in the dialogbox, which appears after double clicking the program icons. 4. The Installation ==================== The simplest way is to put all the files in the same directory. If you prefer to store the binaries, sources, etc. in distinct directories, put BCF.TTP and BCL.TTP in the directory, where the shell would search for the bin-stuff. BCRTSY.B and MATHLIB.B should be moved to the directory \BC of the actual drive. 5. The Compiler BCF.TTP ======================== To invoke the compiler enter BCF [-options] filename or double click on the BCF.TTP-icon on the desktop and enter options and filename. If the filename does not contain any point, the extension .F will be appended. In any case the compiler will write its output to the file filename.B. Examples: BCF -D TEST.F compile the file TEST.F to TEST.B using the debug-option BCF TEST SUB compile the file TEST.F to TEST.B and SUB.F to SUB.B BCF TEST.X compile the file TEST.X to TEST.B Compiler Options ---------------- -D Debug, equivalent to -BVL. -B deBugcode, uses -H implicit, generate code to check arraybounds and substrings. -H parcHeck, generate code to check parameter lists and stack overflow. -V Varlist, generate list of variables used by the debugger -L Lineslist, generate list of linenumbers for the debugger -U Uppercase, convert lowercase characters to uppercase (except character constants and FORMAT statements). If this option is not specified the compiler will treat xy, xY, Xy, XY as 4 different variables ! -F Freeinput, allows Free-Form-Input-Format (not standard !) -P Protocol, print compiler listing. -W Wait for RETURN key when compiler has finished. Language-Extensions and Restrictions ------------------------------------ BC-FORTRAN77 supports the fully FORTRAN77 standard defined by ANSI/ISO. This standard is often ignored by some special features. I do not recommend the use of these extensions, because they do not comply with the ANSI standard and are therefore not precisely defined. The most important specialities are: INTEGER*1 8 bit INTEGER INTEGER*2 16 bit INTEGER INTEGER*4 same as INTEGER LOGICAL*1 8 bit LOGICAL LOGICAL*2 8 bit LOGICAL LOGICAL*4 same as LOGICAL IMPLICIT NONE turn off all implicit typedefs COMMON /adr/ absolute addressed COMMON, adr may be a constant or a simple variable EQUIVALENCE() between CHARACTER and other types and mixing in COMMON blocks recursive subroutine calls max. length of names: 8 chars. (standard 6 chars.) The most important restrictions are: 32kB code per subroutine 32kB SAVE/DATA per subroutine or BLOCK DATA 700 subroutines per file 500 different COMMON blocks per file There are also some restrictions, which would cause a compile-time-error, if subroutines are unreasonable large. In most cases the 32kB limit would be exceeded anyway. 6. The Linker BCL.TTP ====================== To invoke the linker just type BCL [-options] filename .. or click the BCL.TTP icon on the desktop and enter options and filenames. If the filename doesn't contain any point, the extension .B will be appended. The executable program will be stored using the name of the first file and the extension .PRG. If the source contains any mathemati- cal standard function calls the file MATHLIB.B must be specified too. The runtime system BCRTSY.B will be linked automatically. Example: BCL -S16 TEST SUB MATHLIB or BCL -S16 TEST.B SUB.B MATHLIB.B will link the files TEST.B and SUB.B. The name of the resulting execu- table will be TEST.PRG (stacksize 16kB). Linker Options -------------- -Sn Stacksize of the resulting executable is set to n kB. If this option is not specified, a very large stack will be assumed. The stack is used to store all local variables/ arrays of nested subroutine calls. -O Optimize: remove unused functions in order to reduce code size -P Protocol: generate listing of COMMON blocks and program modules -W Wait for RETURN key when finished Restrictions ------------ The most important restriction is the RAM size: the generated program file (without COMMON blocks and stack) may be as large as the largest remaining free memory block after loading the linker. On the other hand it's also possible to generate a program with very large COMMON blocks or stack, that runs out of memory while loading or executing. The max. number of subroutines is restricted to 3000, the max. number of COMMON blocks is 1500. The Runtime System BCRTSY.B --------------------------- The runtime system BCRTSY.B contains stuff needed by every BC-FORTRAN77 program. Therefore it will be linked automatically by BCL.TTP. BCRTSY.B consists of: arithmetic routines 32 bit INTEGER multiplication/divison REAL arithmetics DOUBLE PRECISION arithmetics: in order to increase perfor- mance a special internal floating point number representation is used. These subroutines are much more tuned to speed than to accuracy. REAL: 6 decimal digits, 32 bit, 1 bit sign, 23 bit mantissa, 8 bit exponent DOUBLE PRECISION: 13 decimal digits, 64 bit, 1 bit sign, 47 bit mantissa, 16 bit exponent Math. coprocessor is not supported by Version 'C'. CHARACTER routines I/O routines Debugger: a tiny debugger is included too. After every error message the debugger waits for your reaction. The debugger may also be activated by pressign the ALT-key, to stop a running program. The following command keys are supported: S print the subroutine call Stack and the line number (if the compiler option -L has been specified) V print the Variables and their contents of the actual subroutine (only if the compiler option -V has been specified) Z terminate program space continue, in the case that no runtime error has occured. If you press the ALT-key simultaneously, only the next program step will be executed (e.g. next label, subroutine, ELSE, ENDIF, DO, ) The Standard Library MATHLIB.B ------------------------------ MATHLIB.B contains all the mathematical functions described by the ANSI standard. If the linker issues an error message like 'External nicht gefunden: f_SQRT' (german text for 'external not found') you have to specify MATHLIB.B when running the linker BCL.TTP. Starting your Program --------------------- Every executable program produced by BCL can be started like any other program from the desktop or a shell. 7. Error Messgages =================== The error messages produced by the compiler, the linker and the runtime system should be self explainatory and are supplemented with the following short list of messages. A complete list of errors (26 pages of the version P manual) would exceed this short description. IO-Errors --------- Input-Output-Errors. If you specify the IOSTAT parameter, you get the error number (see below) for the operation attempted in the IOSTAT data item. number description -1 end of file (EOF) reached -2 EOF reached while processing a record 1 filenumber already used (OPEN) 2 too many files (OPEN), max. 32 files 3 filename too long (OPEN), max. 31 characters 5 filenumber (unit) not opened. Only the units 5 and 6 are preconnected and can be used without issuing an OPEN statement 6 formatted / unformatted I/O contradiction 7 REC-parameter specified for a sequential access file 8 BACKSPACE, REWIND, ENDFILE not allowed for this file (e.g. AUX: or PRN:) 10 internal I/O only formatted 20 integer overflow processing an input 21 data error occured while processing list-directed input, e.g. missing quote-character for strings 22 unexpected EOF 23 record too long 24 read error processing UNFORMATTED SEQUENTIAL input 30 format code and I/O-listelement do not fit together INTEGER needs I-format code REAL, DOUBLE PRECISION (COMPLEX) need one (two) F-, G-, E- or D-format code(s) LOGICAL need L-format code CHARACTER need A-format code 31 format code L: T or F expected (input) 32 format code I: unexpected character found (input), only blanks, signs and numerals are allowed 33 format code E, F, or D: unexpected character (input), only blanks, signs, numerals, decimal-point, E, e, D or d are allowed. 34 format code contains too many ( 35 format code contains too many ) 36 forbidden position for numeral series in format code 37 unknown format code 38 missing . in F, E, G or D format code 39 4Htext or 'text' in READ format code FORTRAN66 allows to read a text for the format code, not allowed in FORTRAN77 40 exponent to high for given format code 42 format code too long, max. length of internal record buffer 80 char. 43 internal I/O, record too long 44 TL, record too long. If the recordlength exceeds the length of the internal record buffer, left tabbing will not work 45 field length 0 (zero) in I, L, F, E, G or D format code TOS Errors ---------- in general: 1000 + n --> TOS-Error -n number description 1002 drive not ready 1004 CRC error (cyclic redundancy code) 1010 write error 1011 read error 1013 disk is write protected 1014 media change detected 1016 bad sector 1017 put disk into drive 1033 file not found 1034 path not found 1035 too many files 1036 access not possible (write protected ?) 1039 out of memory (RAM) 1040 wrong memoryblock address 1046 wrong drive character (e.g. K) 1066 wrong format of program file 8. Problems ============ If you find any bug in BC-FORTRAN77 (compiler, linker or libraries) please inform the author Author A. Koestli. As you will appreciate, the author can't offer any update service or advise support by phone for this product, in contrast to the commercial version 'P'. ********************** * * * APPENDIX * * * * Small dictionary * * * ********************** German English anfang beginning COMMON aus BLOCKDATA verlaengert COMMON extended with BLOCK DATA COMMON in mehreren BLOCKDATA COMMON in several BLOCK DATA Character Konstante erwartet expected character constant Dataliste laenger Wertliste datalist longer than valuelist Dataliste zu lang datalist too long Deklaration hier nicht erlaubt declaration not allowed at this point Dimension fehlt fuer missing dimension for Doppelt twice drucke print ELSE ohne IF oder nach DO oder ELSE ELSE without IF or after DO or ELSE ENDIF ohne IF oder nach DO ENDIF without IF or after DO Erst Initialisieren mit first initialize with erwartet / erwartet nach expected / expected after Exponent zu gross exponent too large External Widerspruch contradiction in external External/Common nicht gefunden external/COMMON not found falsch wrong, invalid Falsche Version wrong version Falscher Name in Function wrong name in function Falscher Name in Subroutine wrong name in subroutine Falscher Operator wrong operator Falscher Parameter wrong parameter Falscher Typ wrong typ Falsches Symbol in Dataliste wrong symbol in datalist Falsches Symbol in Index wrong symbol in index Falsches Wertelement wrong value Falsches Zeichen wrong character Fehler error Fehler (Nr.) Nach [] in Zeile error (nr.) after [] in line Fehler beim Eroeffnen von ... error opening file ... Fehler beim Laden load error Fehler beim Lesen read error haupt main hier nicht erlaubt not allowed here Illegale Konversion illegal conversion illegale linke Seite illegal left side Index ausserhalb index beyond Index inkorrekt index wrong Indexanzahl index quantity Indexliste indexlist Integer Konstantenausdruck erwartet integer constant expression expected Integerkonstante erwartet interger constant expected Integerueberlauf integer overflow ist is ja yes Kein Code no code Kein Input no input Kein Objfile no object file Keine Reloc.Info no relocation info Konstanten constants Label doppelt label used twice Label erwartet label expected Label fehlt label missing Laengenfehler in Objfile length error in objfile Laengenwiderspruch COMMON length mismatch of COMMON blocks Lesefehler read error Liste list mehrfach benutzt used twice Modul doppelt module found twice Module geloescht module deleted Name zu lang name too long neu new Nicht definiertes Label label undefined nicht gefunden not found Nicht genuegend RAM frei not enough RAM Nicht genuegend Speicher not enough memory Nicht implementiert not implemented Nicht lokal not local Nummer zu gross number too large Nur Variable/Array only variable/array oder or offener string string not closed Parameteranzahl number of paramters Parameterliste parameter list Parameterliste fehlt parameter missing Parametername erwartet parameter expected Parametertyp parameter type Schreibfehler write error Speicher memory Sprung > 32kB branch > 32kB Statement Nr. erwartet statement nr. expected Statement nicht erkannt statement not recognized Statement zu lang statement too long String zu lang string too long Substring ausserhalb substring beyond limit Tabellenueberlauf table overflow Typen nicht kompatibel types not compatible Typunkompatibilitaet type incompatibility Typwiderspruch Dataliste/Wertliste type mismatch datalist/valuelist Ueberlauf Codetabelle codetable overflow Ueberlauf Objektspeicher object-memory overflow (?) Unbekannte Option unknown option Ungerade Adresse odd memory address Variable Dimensionierung varible dimensions Variable erforderlich nach varible needed after warte wait Weiter continue Wertliste laenger Dataliste valuelist longer than datalist Widerspruch Common/External Common/External mismatch Widerspruch fuer mismatch in Wiederholungsfaktor -+ Zahl repetition factor -+ number wort word zahl number Zahl oder String erwartet number or string expected Zu viele too many Zu viele Comdecks too many Comdecks Zu viele Levels too many levels