1998-08-11 This directory contains the libf2c library packaged for use with g77 to configure and build automatically (in principle!) as part of the top-level configure and make steps. g77 names this library `libg2c' to avoid conflicts with existing copies of `libf2c' on a system. Some small changes have been made vis-a-vis the netlib distribution of libf2c, which comes from and is maintained (excellently) by David M. Gay . See the Notice files for copyright information. We usually try to get g77-specific changes rolled back into the libf2c distribution. Files that come directly from netlib are either maintained in the libf2c directory under their original names or, if they are not pertinent for g77's version of libf2c, under their original names with `.netlib' appended. For example, permissions.netlib is a copy of f2c's top-level `permissions' file in the netlib distribution. In this case, it applies only to the relevant portions of the libF77/ and libI77/ directories; it does not apply to the libU77/ directory, which is distributed under different licensing arrangements. Similarly, the `makefile.netlib' files in the libF77/ and libI77/ subdirectories are copies of the respective `makefile' files in the netlib distribution, but are not used when building g77's version of libf2c. The README.netlib files in libF77/ and libI77/ thus might be interesting, but should not be taken as guidelines for how to configure and build libf2c in g77's distribution. * Read permissions.netlib for licensing conditions that apply to distributing programs containing portions of code in the libF77/ and libI77/ subdirectories. Also read disclaimer.netlib. * Read libU77/COPYING.LIB for licensing conditions that apply to distributing programs containing portions of code in the libU77/ subdirectory. Among the user-visible changes (choices) g77 makes in its version of libf2c: - f2c.h configured to default to padding unformatted direct reads (#define Pad_UDread), because that's the behavior most users expect. - f2c.h configured to default to outputting leading zeros before decimal points in formatted and list-directed output, to be compatible with many other compilers (#define WANT_LEAD_0). Either way is standard-conforming, however, and you should try to avoid writing code that assumes one format or another. - dtime_() and etime_() are from Dave Love's libU77, not from netlib's libF77. - Routines that are intended to be called directly via user code (as in `CALL EXIT', but not the support routines for `OPEN') have been renamed from `' to `G77__0'. This, in combination with g77 recognizing these names as intrinsics and calling them directly by those names, reduces the likelihood of interface mismatches occurring due to use of compiler options that change code generation, and permits use of these names as both intrinsics and user-supplied routines in applications (as required by the Fortran standards). f2cext.c contains "jacket" routines named `' that call `G77__0', to support code that relies on calling the relevant routines as `EXTERNAL' routines. Note that the `_0' in the name denotes version 0 of the *interface*, not the *implementation*, of a routine. The interface of a given routine *must not change* -- instead, introduce a new copy of the code, with an increment (e.g. `_1') suffix, having the new interface. Whether the previous interface is maintained is not as important as ensuring the routine implementing the new interface is never successfully linked to a call in existing, e.g. previously compiled, code that expects the old interface. - Version.c in the subdirectories contains g77-specific version information and a routine (per subdirectory) to print both the netlib and g77 version information when called. The `g77 -v' command is designed to trigger this, by compiling, linking, and running a small program that calls the routines in sequence. - libF77/main.c no longer contains the actual code to copy the argc and argv values into globals or to set up the signal-handling environment. These have been removed to libF77/setarg.c and libF77/setsig.c, respectively. libF77/main.c contains procedure calls to the new code in place of the code itself. This should simplify linking executables with a main() function other than that in libF77/main.c (such as one written by the user in C or C++). See the g77 documentation for more information. - Complex-arithmetic support routines in libF77/ take a different approach to avoiding problems resulting from aliased input and output arguments, which should avoid particularly unusual alias problems that netlib libf2c might suffer from. - libF77/signal_.c supports systems with 64-bit pointers and 32-bit integers. - I/O routines in libI77/ have code to detect attempts to do recursive I/O more "directly", mainly to lead to a clearer diagnostic than typically occurs under such conditions. - Formatted-I/O routines in libI77/ have code to pretty-print a FORMAT string when printing a fatal diagnostic involving formatted I/O. - libI77/open.c supports a more robust, perhaps more secure, method of naming temporary files on some systems. - Some g77-specific handling of building under Microsoft operating systems exists, mainly in libI77/.