ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ» º BC-FORTRAN77 Vers 1.3b º º copyright: Andre Koestli º º 1990 Martin Luther Str.63 º º D700 Stuttgart 50 º ÌÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹ ºVersion "b" of BC-FORTRAN77, comprised of the 5 º ºfiles described later, is programmed entirely by º ºme. I permit free use of version "b" for non- º ºcommercial applications, with all rights remaining º ºwith me, in particular the sale of version b º ºtogether with other products is not allowed. Everyº ºcopy must include this text unchanged. Use for º ºmilitary purposes or corresponding research is º ºforbidden! º ºJuly 1990 A. Koestliº ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ BC-FORTRAN77 Version b consists of a compiler, linker, module library and a resident run-time system, which also contains a simple debugger. This version runs on an MS-DOS computer with 640kB RAM. A hard disk is not required. A compiler for a programming course should become available as a result of this. Then will come the corresponding compiler for the Atari ST and Amiga. I will still answer inquiries for sending another or newer version if 20 Deutchmarks (currency or check) to cover expenses for diskette, mailer, postage and time is included. I only send 3 1/2" diskettes. BC-FORTRAN77 version b consists of the following parts: LIES.TXT This text BCF.EXE Compiler BCL.EXE Linker BCRTSY.EXE Resident run-time system LIB.B Library of standard functions When a copy is made all of the parts mentioned above must be included. Installation. ------------- BEFORE the compiler, linker or program is started, the resident run-time system MUST be loaded. For this, just run the program BCRTSY.EXE. If you use BC-FORTRAN77 regularly, place BCRTSY.EXE in your AUTOEXEC.BAT file. Copy the *.EXE files into a directory contained in the PATH and the LIB.B file in an APPEND directory (see the MS-DOS commands PATH and APPEND). Compiler -------- The compiler is started by BCF [-Option...] File... If File does not contain a period, a .F will be appended. The object file will be placed in FILE.B. Example: BCF -D TEST.F Compile TEST.F with the debug option into TEST.B BCF TEST SUB Compile TEST.F into TEST.B and SUB.F into SUB.B BCF TEST.X Compile TEST.X into TEST.B Compiler Options ---------------- You can use /Option instead of -Option. -D Debug: equivalent to -BVL -B deBugcode: implies -H and also produces debugger calls for examination of field borders and substrings. -H parcHeck: produces code for examination of parameter lists and checks of stack overruns -V Varlist: List of variables for debugger -L Lineslist: Line number list for debugger -U Uppercase: Changes lower-case into upper case characters (even in character constants and formats). Without this option xy, XY, Xy and xY are four different variables! -F Free input: Source program is not in FORTRAN format. Non-standard! -P Protocol: registry of the compiled lines. -S Short protocol: One line per module with the size of the stack frame and code in bytes. -O One: produces one output file with name of the first input file. Language Summary ---------------- BCC-FORTRAN77 compiles the complete standard from ANSI/ISO. The language standard will, however, be violated by several peculiarities (mostly these will be called extensions). I strongly recommend that these extensions not be used, since they are non-standard and hence not precisely defined. The most important of the "peculiarities" are: INTEGER*1 8 bit INTEGER INTEGER*2 16 bit INTEGER INTEGER*4 like INTEGER LOGICAL*1 8 bit LOGICAL LOGICAL*2 16 bit LOGICAL LOGICAL*4 like LOGICAL IMPLICIT NONE turns off implicit type definitions COMMON /%adr/ Absolute COMMON, adr is a constant or simple variable which specifies the segment address EQUIVALENCE() allows character and other types to be mixed in COMMON Recursive subroutine calls Names with a maximum of 8 characters (the standard is 6). The most important restrictions are: 32kB Code+SAVE/DATA for subroutines 32kB local data for subroutines (stack frame) 32kB for COMMON (actually 64kB, but the address of the last field must be <32k) 700 subroutines per file 500 different COMMON blocks per file Less important are a series of restrictions where very large subroutines give rise to error messages without surpassing the 32kB code limit. Linker ------ The Linker is started by BCL [-Options...] File... If File doesn't contain a period, a .B will be appended. The executable file will be created with the name of the first file but with .EXE substituted for .B. It must also search the LIB.B file in order to link the standard functions and I/O routines. Example: BCL -S16 TEST SUB LIB or BCL -S16 TEST.B SUB.B LIB.B links the files TEST.B and SUB.B into the runnable program TEST.EXE with a stack size of 16kB. Linker Options -------------- -Sn Stack size will be set to n kB (max 64). Without this option a 64kB stack will be used. All local variables and fields for a subroutine will be placed on the stack. -O Optimize: subroutines which are not called are omitted. -P Protocol: List the COMMON blocks and program modules Restrictions ------------ The most important restriction lies in the size of RAM: the size of the program (without COMMON and stack) can only be as large as the largest free memory block after loading BCL. On the other hand, it is possible to produce a program with large COMMONs and stack which will not run in the available memory. The number of subroutines is limited to 3000, the number of COMMON blocks to 1500. (This is a result of the ridiculous 640kB limit of MS-DOS.) Run Time System --------------- The run time system BCRTSY.EXE contains the routines needed by a FORTRAN77 program and must be made memory resident before any FORTRAN77 programs are run. BCRTSY contains: Arithmetic routines: 32 bit INTEGER multiplication & division REAL arithmetic DOUBLE precision arithmetic It uses the IEEE floating point format REAL: 7 decimal places, 32 bit 1 bit sign, 8 bit exponent, 24 bit mantissa DOUBLE PRECISION: 14 decimal places, 64 bit 1 bit sign, 11 bit exponent, 52 bit mantissa A math coprocessor is not supported. (an 80x87 version exists, but I can't test it since I don't have the necessary hardware.) Character routines Debugger: A simple debugger for finding errors. Also a run time error will give an error message and wait for a command. The debugger can also be activated by a key-stroke interrupting the program's execution if the program was created with the B option. The following keys are recognized by the debugger as commands: T (Traceback) Look back through the subroutine call stack and find the next higher module with line number if the program was compiled with the -L option. U (Untrace) Cancel all trace back actions. This happens automatically when the program is restarted. V Display Variables of the current subroutine with their current contents if the program was compiled with the -V option. Move into the last displayed program module when T is pressed. Z Terminate program. Resume program execution, unless there was a run-time error encountered. S Step program until next label, subprogram ELSE, ENDIF or DO. C step subroutine until next CALL or RETURN Library ------- LIB.B contains the full set of mathematical functions prescribed by the standard. If you get an error message when linking e.g. External nicht gefunden: f_SQRT then you should place LIB.B on the BCL command line. Running a Program ----------------- Once a program has been linked with BCL it can be run like any other program, either from the desktop or from a shell. Error Messages -------------- The error messages from the compiler, linker and run time system should be self-descriptive except for the following exceptions. The complete listing is outside the scope of this description (it takes 26 pages in the handbook of Vers.P). IO-Error: Number Input/output errors may be intercepted by placing the IOSTAT= parameter in the IO statement. The number has the same value as is returned in the IOSTAT variable. Number: -1 End of File -2 End of File in middle of record. 1 File number already in use (OPEN) 2 Too many files (OPEN). Max. is 32 3 File name too long (OPEN). Max is 32 characters. 5 File number not opened. Only file numbers 5 and 6 can be used with being OPENed 6 formatted/unformatted contradiction 7 REC parameter for file with ACCESS='SEQUENTIAL' 8 BACKSPACE, REWIND, ENDFILE are not possible for files AUX: and PRN: 10 Internal I/O is formatted only 20 INTEGER overflow 21 Data error by the listing generator input, e.g. missing apostrophe for a symbol link 22 unexpected end of data 23 record too long 24 UNFORMATTED SEQUENTIAL read error 30 IO list element doesn't match format element. INTEGER needs I format REAL, DOUBLE PRECISION (COMPLEX) need one or two F, G, E or D format elements 31 Format element L: T or F expected (input) 32 format element I: unexpected characters (input). Null characters, signs and numerics allowed. 33 format element E, F or D unexpected characters (input null characters, signs, numerics, decimal point, E, e, D or d (for the exponent) allowed. 34 too many ( in format 35 too many ) in format 36 numeric character in a disallowed place in format 37 illegal format element 38 decimal point error in F, E, G, or D format element 39 4Htext or 'text' in format for READ. In FORTRAN66 this was allowed as a way to read in text but in FORTRAN77 this is no longer allowed. 40 exponent too large for the given format. 42 format element too long. Must be less than the internal record buffer size (80 characters). 43 Internal I/O, record too long. 44 TL, record too long. 45 zero field length in I, L, F, E, G, D format 1000+n MS-DOS Error n 1002 File not found 1003 Path not found 1004 Too many open files 1005 Access denied 1008 Not enough free RAM 1012 Invalid access code 1015 Invalid disk drive Bugs ---- The 80x87 version has not been tested and can not be supported. Write to me if you find any other kind of errors . [Translator's Note: This is one time I am happy to see terse documentation. Boy, is my German rusty! If any real German speakers have improvements to this translation, especially the computer terms (like Ausgabe, Zugriff or Zeichenketten), please contact me at the following address and I will incorporate them. luitje@m-net.ann-arbor.mi.us Here are some usage hints based on my limited experience with this package: - always specify LIB when linking, you'll need it and the linker may crash and burn without it. - I compiled a file with mixed upper and lower case variable names and that too crashed the linker. Compiling with -u worked just fine. Here are some translations of compiler error messages I've encountered. Doubtless there are many more but you should be able to figure them out. # Description --- ----------- 200 Unrecognized statement 201 Declaration not allowed here 203 Multiply defined label 252 Illegal expression 253 Equals sign expected 282 Undefined label The format of the compiler error messages is the error number followed by the error description (in German). On the next line is the string which was being scanned when the error was encountered, followed by the line number where the error was noticed. Have fun! --WVL]