====== index for f2c ============ FILES: f2c.h Include file necessary for compiling output of the converter. See the second NOTE below. f2c.1 Man page for f2c. f2c.1t Source for f2c.1 (to be processed by troff -man or nroff -man). libf77 Library of non I/O support routines the generated C may need. Fortran main programs result in a C function named MAIN__ that is meant to be invoked by the main() in libf77. libi77 Library of Fortran I/O routines the generated C may need. Note that some vendors (e.g., BSD, Sun and MIPS) provide a libF77 and libI77 that are incompatible with f2c -- they provide some differently named routines or routines with the names that f2c expects, but with different calling sequences. On such systems, the recommended procedure is to merge libf77 and libi77 into a single library, say libf2c, to install it where you can access it by specifying -lf2c , and to adjust the definition of link_msg in sysdep.c appropriately. f2c.ps Postscript for a technical report on f2c. After you strip the mail header, the first line should be "%!PS". fixes The complete change log, reporting bug fixes and other changes. (Some recent change-log entries are given below). fc A shell script that uses f2c and imitates much of the behavior of commonly found f77 commands. You will almost certainly need to adjust some of the shell-variable assignments to make this script work on your system. SUBDIRECTORY: f2c/src Source for the converter itself, including a file of checksums and source for a program to compute the checksums (to verify correct transmission of the source), is available: ask netlib to send all from f2c/src If the checksums show damage to just a few source files, or if the change log file (see "fixes" below) reports corrections to some source files, you can request those files individually "from f2c/src". For example, to get defs.h and xsum0.out, you would ask netlib to send defs.h xsum0.out from f2c/src "all from f2c/src" is 651471 bytes long. Tip: if asked to send over 99,000 bytes in one request, netlib breaks the shipment into 1000 line pieces and sends each piece separately (since otherwise some mailers might gag). To avoid the hassle of reassembling the pieces, try to keep each request under 99,000 bytes long. The final number in each line of xsum0.out gives the length of each file in f2c/src. For example, send exec.c expr.c from f2c/src send format.c format_data.c from f2c/src will give you slightly less hassle than send exec.c expr.c format.c format_data.c from f2c/src If you have trouble generating gram.c, you can ask netlib to send gram.c from f2c/src Then `xsum gram.c` should report gram.c fbc4f005 57277 NOTE: For now, you may exercise f2c by sending netlib a message whose first line is "execute f2c" and whose remaining lines are the Fortran 77 source that you wish to have converted. Return mail brings you the resulting C, with f2c's error messages between #ifdef uNdEfInEd and #endif at the end. (To understand line numbers in the error messages, regard the "execute f2c" line as line 0. It is stripped away by the netlib software before f2c sees your Fortran input.) Options described in the man page may be transmitted to netlib by having the first line of input be a comment whose first 6 characters are "c$f2c " and whose remaining characters are the desired options, e.g., "c$f2c -R -u". This scheme may change -- ask netlib to send index from f2c if you do not get the behavior you expect. During the initial experimental period, incoming Fortran will be saved in a file. Don't send any secrets! BUGS: Please send bug reports (including the shortest example you can find that illustrates the bug) to research!dmg or dmg@research.att.com . You might first check whether the bug goes away when you turn optimization off. NOTE: f2c.h defines several types, e.g., real, integer, doublereal. The definitions in f2c.h are suitable for most machines, but if your machine has sizeof(double) > 2*sizeof(long), you may need to adjust f2c.h appropriately. f2c assumes sizeof(doublecomplex) = 2*sizeof(doublereal) sizeof(doublereal) = sizeof(complex) sizeof(doublereal) = 2*sizeof(real) sizeof(real) = sizeof(integer) sizeof(real) = sizeof(logical) sizeof(real) = 2*sizeof(shortint) EQUIVALENCEs may not be translated correctly if these assumptions are violated. There exists a C compiler that objects to the lines typedef VOID C_f; /* complex function */ typedef VOID H_f; /* character function */ typedef VOID Z_f; /* double complex function */ in f2c.h . If yours is such a compiler, do two things: 1. Complain to your vendor about this compiler bug. 2. Find the line #define VOID void in f2c.h and change it to #define VOID int (For readability, the f2c.h lines shown above have had two tabs inserted before their first character.) FTP: All the material described above is now available by ftp from research.att.com (login: netlib; Password: your E-mail address; cd f2c). You must uncompress the .Z files once you have a copy of them, e.g., by uncompress *.Z ----------------- Recent change log (partial) ----------------- Tue Oct 15 10:25:49 EDT 1991: Minor tweaks that make some PC compilers happier: insert some casts, add args to signal functions. Change -g to emit uncommented #line lines -- and to emit more of them; update fc, f2c.1, f2c.1t, f2c.ps to reflect this. Thu Oct 17 09:22:05 EDT 1991: libi77: README, fio.h, sue.c, uio.c changed so the length field in unformatted sequential records has type long rather than int (unless UIOLEN_int is #defined). This is for systems where sizeof(int) can vary, depending on the compiler or compiler options. Thu Oct 17 13:42:59 EDT 1991: libi77: inquire.c: when MSDOS is defined, don't strcmp units[i].ufnm when it is NULL. Tue Oct 22 18:12:56 EDT 1991: Fix memory fault when a character*(*) argument is used (illegally) as a dummy variable in the definition of a statement function. (The memory fault occurred when the statement function was invoked.) Complain about implicit character*(*). Thu Nov 14 08:50:42 EST 1991: libi77: change uint to Uint in fmt.h, rdfmt.c, wrtfmt.c; this change should be invisible unless you're running a brain-damaged system. Mon Nov 25 19:04:40 EST 1991: libi77: correct botches introduced 17 Oct. 1991 and 14 Nov. 1991 (change uint to Uint in lwrite.c; other changes that only matter if sizeof(int) != sizeof(long)). Add a more meaningful error message when bailing out due to an attempt to invoke a COMMON variable as a function. Sun Dec 1 19:29:24 EST 1991: libi77: uio.c: add test for read failure (seq. unformatted reads); adjust an error return from EOF to off end of record. Tue Dec 10 17:42:28 EST 1991: Add tests to prevent memory faults with bad uses of character*(*). Thu Dec 12 11:24:41 EST 1991: libi77: fix bug with internal list input that caused the last character of each record to be ignored; adjust error message in internal formatted input from "end-of-file" to "off end of record" if the format specifies more characters than the record contains. Wed Dec 18 17:48:11 EST 1991: Fix bug in translating nonsensical ichar invocations involving concatenations. Fix bug in passing intrinsics lle, llt, lge, lgt as arguments; hl_le was being passed rather than l_le, etc. libf77: adjust length parameters from long to ftnlen, for compiling with f2c_i2 defined. Sat Dec 21 15:30:57 EST 1991: Allow DO nnn ... to end with an END DO statement labeled nnn. Tue Dec 31 13:53:47 EST 1991: Fix bug in handling dimension a(n**3,2) -- pow_ii was called incorrectly. Fix bug in translating subroutine x(abc,n) character abc(n) write(abc,'(i10)') 123 end (omitted declaration and initialiation of abc_dim1). Fri Jan 17 11:54:20 EST 1992: Diagnose some illegal uses of main program name (rather than memory faulting). libi77: (1) In list and namelist input, treat "r* ," and "r*," alike (where r is a positive integer constant), and fix a bug in handling null values following items with repeat counts (e.g., 2*1,,3). (2) For namelist reading of a numeric array, allow a new name-value subsequence to terminate the current one (as though the current one ended with the right number of null values). (3) [lio.h, lwrite.c]: omit insignificant zeros in list and namelist output. (Compile with -DOld_list_output to get the old behavior.) Current timestamps of files in "all from f2c/src", sorted by time, appear below (mm/dd/year hh:mm:ss). To bring your source up to date, obtain source files with a timestamp later than the time shown in your version.c. Note that the time shown in the current version.c is the timestamp of the source module that immediately follows version.c below: 1/17/1992 10:57:33 xsum0.out 1/17/1992 10:56:46 Notice 1/17/1992 0:18:15 version.c 1/17/1992 0:17:58 proc.c 12/30/1991 17:17:44 io.c 12/30/1991 10:38:07 expr.c 12/21/1991 15:24:34 exec.c 12/18/1991 16:11:29 intr.c 12/18/1991 15:32:06 putpcc.c 12/18/1991 15:32:02 put.c 10/22/1991 17:10:54 init.c 10/22/1991 15:55:17 output.c 10/15/1991 10:04:06 format.c 10/15/1991 9:45:46 f2c.1 10/15/1991 9:44:08 f2c.1t 10/15/1991 9:09:35 niceprintf.c 10/15/1991 1:27:37 formatdata.c 10/15/1991 1:26:52 sysdep.c 10/15/1991 1:26:39 sysdep.h 10/15/1991 0:17:34 main.c 10/14/1991 12:30:48 p1output.c 10/11/1991 18:59:37 defines.h 9/09/1991 23:15:17 xsum.c 8/28/1991 0:07:01 gram.dcl 8/28/1991 0:07:00 defs.h 7/12/1991 7:25:33 README 6/17/1991 16:43:01 gram.head 6/06/1991 0:41:56 makefile 6/05/1991 8:34:09 misc.c 4/25/1991 12:56:19 f2c.h 4/05/1991 8:43:45 mem.c 2/08/1991 11:29:18 gram.exec 2/08/1991 11:29:18 malloc.c 1/22/1991 19:25:10 lex.c 1/15/1991 1:21:00 equiv.c 12/07/1990 17:37:08 names.c 11/30/1990 9:47:48 data.c 7/26/1990 10:54:47 parse_args.c 7/26/1990 10:44:26 parse.h 5/11/1990 14:17:04 error.c 4/18/1990 12:25:19 pread.c 4/18/1990 12:25:18 cds.c 4/06/1990 0:00:57 gram.io 4/05/1990 23:40:09 gram.expr 3/27/1990 17:39:18 names.h 3/27/1990 11:05:15 p1defs.h 2/25/1990 9:04:30 vax.c 2/16/1990 10:37:27 tokens 2/14/1990 2:00:20 format.h 2/14/1990 1:38:46 output.h 2/14/1990 0:54:06 iob.h 2/03/1990 0:58:26 niceprintf.h 1/29/1990 13:26:52 memset.c 1/11/1990 18:02:51 ftypes.h 1/07/1990 1:20:01 usignal.h 11/27/1989 8:27:37 machdefs.h 7/01/1989 11:59:44 pccdefs.h