Update to Aug 26 g77 front end and runtime.
authorJeff Law <law@gcc.gnu.org>
Thu, 28 Aug 1997 03:21:05 +0000 (21:21 -0600)
committerJeff Law <law@gcc.gnu.org>
Thu, 28 Aug 1997 03:21:05 +0000 (21:21 -0600)
From-SVN: r14985

36 files changed:
gcc/f/ChangeLog
gcc/f/ChangeLog.egcs
gcc/f/Make-lang.in
gcc/f/bugs.texi
gcc/f/com-rt.def
gcc/f/com.c
gcc/f/config-lang.in
gcc/f/g77.texi
gcc/f/global.c
gcc/f/install.texi
gcc/f/intdoc.c
gcc/f/intdoc.h
gcc/f/intrin.h
gcc/f/malloc.c
gcc/f/news.texi
gcc/f/runtime/ChangeLog
gcc/f/runtime/ChangeLog.egcs
gcc/f/runtime/Makefile.in
gcc/f/runtime/changes.netlib
gcc/f/runtime/f2cext.c
gcc/f/runtime/libI77/Version.c
gcc/f/runtime/libI77/iio.c
gcc/f/runtime/libU77/alarm_.c
gcc/f/runtime/libU77/bes.c
gcc/f/runtime/libU77/dbes.c
gcc/f/runtime/libU77/dtime_.c
gcc/f/runtime/libU77/etime_.c
gcc/f/runtime/libU77/getcwd_.c
gcc/f/runtime/libU77/lstat_.c
gcc/f/runtime/libU77/rand_.c
gcc/f/runtime/libU77/secnds_.c
gcc/f/runtime/libU77/second_.c
gcc/f/runtime/readme.netlib
gcc/f/stb.c
gcc/f/top.c
gcc/f/version.c

index 38546900343dca83257abb481472a0c75fdf0df7..0323a8d691970e55c28ca5a5b4b925b23f7381b0 100644 (file)
@@ -1,3 +1,92 @@
+Tue Aug 26 05:59:21 1997  Craig Burley  <burley@gnu.ai.mit.edu>
+
+       * ansify.c (main): Make sure readers of stdout know
+       it's derived from stdin; omit comment text; get source
+       line numbers in future stderr output to be correct.
+
+Tue Aug 26 01:36:01 1997  Craig Burley  <burley@gnu.ai.mit.edu>
+
+       Fix 970825-0.f:
+       * stb.c (ffestb_R5284_): Allow OPEN_PAREN after closing
+       SLASH as well as NAME.
+
+Mon Aug 25 23:48:17 1997  Craig Burley  <burley@gnu.ai.mit.edu>
+
+       Changes to allow g77 docs to be built entirely from scratch
+       using any ANSI C compiler, not requiring GNU C:
+       * Make-lang.in ($(srcdir)/f/intdoc.texi): "Pipe" new
+       location of intrinsic documentation data base, f/intdoc.in,
+       through new `ansify' program to append `\n\' to quoted
+       newlines, into f/intdoc.h0.  Do appropriate cleanups.  Explain.
+       (f77.mostlyclean): Add f/ansify and f/intdoc.h0 to cleanups.
+       * f/ansify.c: New program.
+       * f/intdoc.c: Fix so it conforms to ANSI C.
+       #include f/intdoc.h0 instead of f/intdoc.h.
+       Avoid some warnings.
+       * f/intdoc.h, f/intdoc.in: Rename the former to the latter; no
+       changes made to the content in this patch!
+       * f/intrin.h (ffeintrinFamily): Fix to conform to ANSI C.
+
+Sun Aug 24 06:52:48 1997  Craig Burley  <burley@gnu.ai.mit.edu>
+
+       Fix up g77 compiler data base for libf2c routines:
+       * com-rt.def (FFECOM_gfrtSIGNAL): Change return type to
+       FTNINT to match actual code.
+
+       * com.c (ffecomRttype_): Replace FFECOM_rttypeINT_ with
+       FFECOM_rttypeFTNINT_.
+       Add and fix up comments.
+       (ffecom_make_gfrt_, ffecom_gfrt_basictype,
+       ffecom_gfrt_kindtype): Replace FFECOM_rttypeINT_ with
+       FFECOM_rttypeFTNINT_; add FFECOM_rttypeDOUBLEREAL_.
+
+Wed Aug 20 17:18:40 1997  Craig Burley  <burley@gnu.ai.mit.edu>
+
+       * global.c (ffeglobal_ref_progunit_): It's okay to have
+       a different CHARACTER*n length for a reference if the
+       existing length is for another reference, not a definition.
+
+Mon Aug 18 14:27:18 1997  Craig Burley  <burley@gnu.ai.mit.edu>
+
+       Fix 970814-0.f:
+       * global.c (ffeglobal_new_progunit_): Distinguish
+       between previously defined, versus inferred, filewide
+       when it comes to diagnostics.
+
+       Fix 970816-1.f:
+       * global.c (ffeglobal_ref_progunit_): Change BDATA into EXT
+       right at the beginning, so EXTERNAL FOO followed later
+       by SUBROUTINE FOO is not diagnosed.
+
+       Fix 970813-0.f:
+       * com-rt.def (FFECOM_gfrtALARM): Returns `integer', not
+       `void'.
+
+Sun Aug 17 03:32:44 1997  Craig Burley  <burley@gnu.ai.mit.edu>
+
+       Fix up problems when virtual memory exhausted:
+       * malloc.c (malloc_new_): Use gcc's xmalloc(), so we
+       print a nicer message when malloc returns no memory.
+       (malloc_resize_): Ditto for xrealloc().
+
+       * Make-lang.in, Makefile.in: Comment out lines containing
+       just formfeeds.
+
+Sat Aug 16 19:41:33 1997  Craig Burley  <burley@gnu.ai.mit.edu>
+
+       * com.c (ffecom_make_gfrt_): For rttypeREAL_F2C_, return
+       double_type_node; for rttypeREAL_GNU_, return
+       _real_type_node.
+
+1997-08-13  Dave Love  <d.love@dl.ac.uk>
+
+       * config-lang.in (diff_excludes): Add some hints about known
+       problematic platforms.
+
+1997-08-13  Dave Love  <d.love@dl.ac.uk>
+
+       * intdoc.h: Document `alarm'.
+
 Mon Aug 11 21:19:22 1997  Craig Burley  <burley@gnu.ai.mit.edu>
 
        * Make-lang.in ($(RUNTIMESTAGESTUFF)): Add
index 62de9d5ad2ec8af1a967788b80b5dca77890f79f..8becff73343283a739fafd84d64b719aca15846a 100644 (file)
@@ -1,3 +1,8 @@
+Wed Aug 27 20:32:03 1997  Jeffrey A Law  (law@cygnus.com)
+
+       * top.c (ffe_decode_option): Turn on flag_move_all_moveables
+       and flag_reduce_all_givs.
+
 Mon Aug 25 23:24:32 1997  H.J. Lu  (hjl@gnu.ai.mit.edu)
 
        * Make-lang.in ($(srcdir)/f/runtime/configure,
@@ -42,11 +47,6 @@ Sun Aug 17 08:35:11 1997  Jeffrey A Law  (law@cygnus.com)
 
        * intdoc.texi: Remove generated file from distribution.
 
-Fri Aug 15 13:44:14 1997  Jeffrey A Law  (law@cygnus.com)
-
-       * Makefile.in, Make-lang.in: Remove "^L" at the beginning
-       of lines.
-
 Tue Aug 12 10:23:02 1997  Jeffrey A Law  (law@cygnus.com)
 
        * config-lang.in: Don't demand the backend patch.
index f0cee37e6b0a1081a114794f3b40b2ced70b36bd..ba9158eccfebb7ba9474e9d7a2d43117a6ac25ae 100644 (file)
@@ -332,11 +332,33 @@ $(srcdir)/f/g77.info: f/g77.texi f/bugs.texi f/install.texi f/news.texi f/intdoc
 $(srcdir)/f/g77.dvi: f/g77.texi f/bugs.texi f/install.texi f/news.texi f/intdoc.texi
        cd $(srcdir)/f; $(TEXI2DVI) g77.texi
 
-$(srcdir)/f/intdoc.texi: f/intdoc.c f/intdoc.h f/intrin.def f/intrin.h
+# This dance is all about producing accurate documentation for g77's
+# intrinsics with minimum fuss.  f/ansify appends "\n\" to C strings
+# so ANSI C compilers can compile f/intdoc.h -- gcc can compile f/intdoc.in
+# directly, if f/intdoc.c #include'd that, but we don't want to force
+# people to install gcc just to build the documentation.  We use the
+# C format for f/intdoc.in in the first place to allow a fairly "free",
+# but widely known format for documentation -- basically anyone who knows
+# how to write texinfo source and enclose it in C constants can handle
+# it, and f/ansify allows them to not even end lines with "\n\".  So,
+# essentially, the C preprocessor and compiler are used to enter the
+# document snippets into a data base via name lookup, rather than duplicating
+# that kind of code here.  And we use f/intdoc.c instead of straight
+# texinfo in the first place so that as much information as possible
+# contained in f/intrin.def can be inserted directly and reliably into
+# the documentation.  That's better than replicating it, because it
+# reduces the likelihood of discrepancies between the docs and the compiler
+# itself, which uses f/intrin.def; in fact, many bugs in f/intrin.def have
+# been found only upon reading the documentation that was automatically
+# produced from it.
+$(srcdir)/f/intdoc.texi: f/intdoc.c f/intdoc.in f/ansify.c f/intrin.def f/intrin.h
        $(HOST_CC) $(HOST_CFLAGS) $(HOST_LDFLAGS) \
+             `echo $(srcdir)/f/ansify.c | sed 's,^\./,,'` -o f/ansify
+       f/ansify < $(srcdir)/f/intdoc.in > f/intdoc.h0 $(srcdir)/f/intdoc.in
+       $(HOST_CC) $(HOST_CFLAGS) $(HOST_LDFLAGS) -I./f \
              `echo $(srcdir)/f/intdoc.c | sed 's,^\./,,'` -o f/intdoc
        f/intdoc > $(srcdir)/f/intdoc.texi
-       rm f/intdoc
+       rm f/intdoc f/ansify f/intdoc.h0
 
 $(srcdir)/f/BUGS: f/bugs0.texi f/bugs.texi
        cd $(srcdir)/f; $(MAKEINFO) -D BUGSONLY --no-header --no-split \
@@ -503,7 +525,7 @@ f77.uninstall:
 
 f77.mostlyclean:
        -rm -f f/*$(objext)
-       -rm -f f/fini f/f771 f/stamp-str f/str-*.h f/str-*.j f/intdoc
+       -rm -f f/fini f/f771 f/stamp-str f/str-*.h f/str-*.j f/intdoc f/ansify f/intdoc.h0
        -case $(srcdir) in \
        /*) cd f/runtime; $(MAKE) -f $(srcdir)/f/runtime/Makefile.in mostlyclean;; \
        *) cd f/runtime; $(MAKE) -f ../../$(srcdir)/f/runtime/Makefile.in mostlyclean;; \
index 692e1b3a12ffa18724ed65e9eb13c1ec6341666b..28a18bd404014c00dcc1058c744687a3f488443c 100644 (file)
@@ -5,7 +5,7 @@
 @c The text of this file appears in the file BUGS
 @c in the G77 distribution, as well as in the G77 manual.
 
-@c 1996-06-24
+@c 1996-08-19
 
 @ifclear BUGSONLY
 @node Actual Bugs
@@ -25,6 +25,34 @@ configure, port, build, and install @code{g77},
 @ref{Problems Installing}.
 
 @itemize @bullet
+@cindex DNRM2 miscompiled
+@item
+An old version of the BLAS function @code{DNRM2} is miscompiled
+on ix86 machines when @samp{-O2} (or higher, probably) is
+used.
+The bug is in the @code{gcc} back end, as proven using
+a C translation of a simplified version of @code{DRNM2}
+that illustrates the bug.
+(The code in @file{gcc/reg-stack.c} fails to recognize that,
+after an initial load of @samp{XMAX}, a subsequent load
+must be preceded by a stack pop, or @samp{fstp %st(0)} in
+assembler, to avoid ultimately overflowing the floating-point
+stack.)
+
+@cindex Alpha
+@item
+@code{g77}'s version of @code{gcc}, and probably @code{g77}
+itself, cannot be reliably used with the @samp{-O2} option
+(or higher) on Digital Semiconductor Alpha AXP machines.
+The problem is most immediately noticed in differences
+discovered by @kbd{make compare} following a bootstrap
+build using @samp{-O2}.
+It also manifests itself as a failure to compile
+@samp{DATA} statements such as @samp{DATA R/7./} correctly;
+in this case, @samp{R} might be initialized to @samp{4.0}.
+
+Until this bug is fixed, use only @samp{-O1} or no optimization.
+
 @cindex SIGNAL() intrinsic
 @cindex intrinsics, SIGNAL()
 @item
index eb2fed5f530edf4c700071ca6aab3841e5f0365a..1c1be602cad8039fe2198df33b48aa288b5454b5 100644 (file)
@@ -117,7 +117,7 @@ DEFGFRT (FFECOM_gfrtACCESS, "G77_access_0", FFECOM_rttypeINTEGER_, "&a&a", FALSE
 DEFGFRT (FFECOM_gfrtACOS, "r_acos", FFECOM_rttypeREAL_F2C_, "&f", FALSE, FALSE)
 DEFGFRT (FFECOM_gfrtAIMAG, "r_imag", FFECOM_rttypeREAL_F2C_, "&f", FALSE, FALSE)
 DEFGFRT (FFECOM_gfrtAINT, "r_int", FFECOM_rttypeREAL_F2C_, "&f", FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtALARM, "G77_alarm_0", FFECOM_rttypeVOID_, "&i0", FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtALARM, "G77_alarm_0", FFECOM_rttypeINTEGER_, "&i0", FALSE, FALSE)
 DEFGFRT (FFECOM_gfrtALOG, "r_log", FFECOM_rttypeREAL_F2C_, "&f", FALSE, FALSE)
 DEFGFRT (FFECOM_gfrtALOG10, "r_lg10", FFECOM_rttypeREAL_F2C_, "&f", FALSE, FALSE)
 DEFGFRT (FFECOM_gfrtAMOD, "r_mod", FFECOM_rttypeREAL_F2C_, "&f", FALSE, FALSE)
@@ -225,7 +225,7 @@ DEFGFRT (FFECOM_gfrtRENAME, "G77_rename_0", FFECOM_rttypeINTEGER_, "&a&a", FALSE
 DEFGFRT (FFECOM_gfrtSECNDS, "G77_secnds_0", FFECOM_rttypeREAL_F2C_, "&f", FALSE, FALSE)
 DEFGFRT (FFECOM_gfrtSECOND, "G77_second_0", FFECOM_rttypeREAL_F2C_, 0, FALSE, FALSE)
 DEFGFRT (FFECOM_gfrtSIGN, "r_sign", FFECOM_rttypeREAL_F2C_, "&f", FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtL_SIGNAL, "G77_signal_0", FFECOM_rttypeINTEGER_, "&i0", FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtL_SIGNAL, "G77_signal_0", FFECOM_rttypeFTNINT_, "&i0", FALSE, FALSE)
 DEFGFRT (FFECOM_gfrtSIN, "r_sin", FFECOM_rttypeREAL_F2C_, "&f", FALSE, FALSE)
 DEFGFRT (FFECOM_gfrtSINH, "r_sinh", FFECOM_rttypeREAL_F2C_, "&f", FALSE, FALSE)
 DEFGFRT (FFECOM_gfrtSLEEP, "G77_sleep_0", FFECOM_rttypeVOID_, "&i", FALSE, FALSE)
index 344cd71d236692200a0e33a112319ba08f52c024..a797e058e9e678d1224e6488fec3ac2e5d0395a5 100644 (file)
@@ -345,18 +345,18 @@ tree ffecom_f2c_ptr_to_ftnint_type_node;
 typedef enum
   {
     FFECOM_rttypeVOID_,
-    FFECOM_rttypeINT_,         /* C's `int' type, for libF77/system_.c? */
-    FFECOM_rttypeINTEGER_,
-    FFECOM_rttypeLONGINT_,     /* C's `long long int' type. */
-    FFECOM_rttypeLOGICAL_,
-    FFECOM_rttypeREAL_F2C_,    /* f2c's `float' returned as `double'. */
-    FFECOM_rttypeREAL_GNU_,    /* `float' returned as such. */
+    FFECOM_rttypeFTNINT_,      /* f2c's `ftnint' type. */
+    FFECOM_rttypeINTEGER_,     /* f2c's `integer' type. */
+    FFECOM_rttypeLONGINT_,     /* f2c's `longint' type. */
+    FFECOM_rttypeLOGICAL_,     /* f2c's `logical' type. */
+    FFECOM_rttypeREAL_F2C_,    /* f2c's `real' returned as `double'. */
+    FFECOM_rttypeREAL_GNU_,    /* `real' returned as such. */
     FFECOM_rttypeCOMPLEX_F2C_, /* f2c's `complex' returned via 1st arg. */
-    FFECOM_rttypeCOMPLEX_GNU_, /* gcc's `complex float' returned as such. */
+    FFECOM_rttypeCOMPLEX_GNU_, /* f2c's `complex' returned directly. */
     FFECOM_rttypeDOUBLE_,      /* C's `double' type. */
-    FFECOM_rttypeDOUBLEREAL_,
+    FFECOM_rttypeDOUBLEREAL_,  /* f2c's `doublereal' type. */
     FFECOM_rttypeDBLCMPLX_F2C_,        /* f2c's `doublecomplex' returned via 1st arg. */
-    FFECOM_rttypeDBLCMPLX_GNU_,        /* gcc's `complex double' returned as such. */
+    FFECOM_rttypeDBLCMPLX_GNU_,        /* f2c's `doublecomplex' returned directly. */
     FFECOM_rttypeCHARACTER_,   /* f2c `char *'/`ftnlen' pair. */
     FFECOM_rttype_
   } ffecomRttype_;
@@ -7423,8 +7423,8 @@ ffecom_make_gfrt_ (ffecomGfrt ix)
       ttype = void_type_node;
       break;
 
-    case FFECOM_rttypeINT_:
-      ttype = integer_type_node;
+    case FFECOM_rttypeFTNINT_:
+      ttype = ffecom_f2c_ftnint_type_node;
       break;
 
     case FFECOM_rttypeINTEGER_:
@@ -7440,11 +7440,11 @@ ffecom_make_gfrt_ (ffecomGfrt ix)
       break;
 
     case FFECOM_rttypeREAL_F2C_:
-      ttype = ffecom_f2c_real_type_node;
+      ttype = double_type_node;
       break;
 
     case FFECOM_rttypeREAL_GNU_:
-      ttype = ffecom_tree_type[FFEINFO_basictypeREAL][FFEINFO_kindtypeREAL1];
+      ttype = float_type_node;
       break;
 
     case FFECOM_rttypeCOMPLEX_F2C_:
@@ -7459,6 +7459,10 @@ ffecom_make_gfrt_ (ffecomGfrt ix)
       ttype = double_type_node;
       break;
 
+    case FFECOM_rttypeDOUBLEREAL_:
+      ttype = ffecom_f2c_doublereal_type_node;
+      break;
+
     case FFECOM_rttypeDBLCMPLX_F2C_:
       ttype = void_type_node;
       break;
@@ -11601,7 +11605,7 @@ ffecom_gfrt_basictype (ffecomGfrt gfrt)
     case FFECOM_rttypeVOID_:
       return FFEINFO_basictypeNONE;
 
-    case FFECOM_rttypeINT_:
+    case FFECOM_rttypeFTNINT_:
       return FFEINFO_basictypeINTEGER;
 
     case FFECOM_rttypeINTEGER_:
@@ -11622,6 +11626,7 @@ ffecom_gfrt_basictype (ffecomGfrt gfrt)
       return FFEINFO_basictypeCOMPLEX;
 
     case FFECOM_rttypeDOUBLE_:
+    case FFECOM_rttypeDOUBLEREAL_:
       return FFEINFO_basictypeREAL;
 
     case FFECOM_rttypeDBLCMPLX_F2C_:
@@ -11646,7 +11651,7 @@ ffecom_gfrt_kindtype (ffecomGfrt gfrt)
     case FFECOM_rttypeVOID_:
       return FFEINFO_kindtypeNONE;
 
-    case FFECOM_rttypeINT_:
+    case FFECOM_rttypeFTNINT_:
       return FFEINFO_kindtypeINTEGER1;
 
     case FFECOM_rttypeINTEGER_:
@@ -11667,6 +11672,7 @@ ffecom_gfrt_kindtype (ffecomGfrt gfrt)
       return FFEINFO_kindtypeREAL1;
 
     case FFECOM_rttypeDOUBLE_:
+    case FFECOM_rttypeDOUBLEREAL_:
       return FFEINFO_kindtypeREAL2;
 
     case FFECOM_rttypeDBLCMPLX_F2C_:
index 7a4f7ece2e7d99849caed067c24e29b15484bb7d..49e34334fbbd4aff20f86d5e391cffd5b8a6ad07 100644 (file)
@@ -98,3 +98,33 @@ case "$srcdir" in
    echo "unless you are using GNU make or a compatible VPATH mechanism."
    echo ;;
 esac
+
+case "$host" in
+hppa*-*-hpux10)
+   echo
+   echo "The GCC \`fixincludes' step (which involves running a sed script)"
+   echo "typically fails on HP-UX 10 because of a bug in the vendor's"
+   echo "implementation of sed.  Currently the only known workaround is to"
+   echo "install GNU sed before building gcc.  The file sed-2.05.bin.hpux10"
+   echo "in mirrors of the GNU distribution is a suitable precompiled"
+   echo "binary."
+   echo ;;
+rs6000-ibm-aix4.1*)
+   echo
+   echo "G77 has been observed to not build on (at least) the configuration"
+   echo "rs6000-ibm-aix4.1.4.0 with the native linker -- it crashes.  There"
+   echo "may be an IBM bug fix for this (we don't know) but the build should"
+   echo "work if you add \`-mminimal-toc' to the compilation flags, i.e. add"
+   echo "something like \`BOOT_CFLAGS=\"-O2 -mminimal-toc -g\"' to the \`make"
+   echo "bootstrap' command line.  Probably building with the GNU linker (from"
+   echo "the binutils package) installed and configuring \`--with-gnu-ld' will work."
+   echo ;;
+mips-sgi-irix6*)
+   echo
+   echo Consult
+   echo "<URL:http://reality.sgi.com/knobi/gcc-2.7.2.x-on-irix-6.2-6.3>"
+   echo "regarding building under IRIX-6.2/6.3/6.4.  Note that you *must*"
+   echo "have the SGI IDO bought and installed (sigh)."
+   echo ;;
+*) ;;
+esac
index 134deb56ceb9ee3f9a1d68ed789d9b74aa5009e2..97c966a736ca4e7ba5d81782b350662222523485 100644 (file)
@@ -102,7 +102,7 @@ was contributed to Craig by David Ronis (@email{ronis@@onsager.chem.mcgill.ca}).
 @sp 2
 @center James Craig Burley
 @sp 3
-@center Last updated 1997-08-11
+@center Last updated 1997-08-24
 @sp 1
 @c The version number appears some more times in this file.
 
@@ -1513,6 +1513,18 @@ These problems result, primarily, from differences between the way
 such constants are interpreted by the C preprocessor and by a Fortran
 compiler.
 
+Another example of a problem that results from using the C preprocessor
+is that a Fortran comment line that happens to contain any
+characters ``interesting'' to the C preprocessor,
+such as a backslash at the end of the line,
+is not recognized by the preprocessor as a comment line,
+so instead of being passed through ``raw'',
+the line is edited according to the rules for the preprocessor.
+For example, the backslash at the end of the line is removed,
+along with the subsequent newline, resulting in the next
+line being effectively commented out---unfortunate if that
+line is a non-comment line of important code!
+
 @emph{Note:} The @samp{-traditional} and @samp{-undef} flags are supplied
 to @code{cpp} by default, to avoid unpleasant surprises.
 @xref{Preprocessor Options,,Options Controlling the Preprocessor,
@@ -2573,10 +2585,9 @@ and data sets.
 this option does not apply, generally speaking, to Fortran
 code compiled by @code{g77}.
 
-@emph{Also note:} Apparently due to a @code{gcc} backend bug,
-@samp{-malign-double} does not align stack-allocated data (such as
-local variables neither @code{SAVE}d nor reckoned to take up too
-much space to put on the stack).
+@emph{Also note:} @code{g77} fixes a @code{gcc} backend bug to allow
+@samp{-malign-double} to work generally, not just with
+statically-allocated data.
 
 @emph{Also also note:} The negative form of @samp{-malign-double}
 is @samp{-mno-align-double}, not @samp{-benign-double}.
@@ -5004,6 +5015,7 @@ These are not necessarily supported by every GNU Fortran
 implementation.
 
 @item KIND=7
+@cindex pointers
 This is valid only as @code{INTEGER(KIND=7)} and
 denotes the @code{INTEGER} type that has the smallest
 storage size that holds a pointer on the system.
@@ -7909,7 +7921,8 @@ the return type of a @code{REAL} @code{FUNCTION}.)
 @samp{-P} option to generate C prototypes appropriate for calling the
 Fortran.@footnote{The files generated like this can also be used for
 inter-unit consistency checking of dummy and actual arguments, although
-the @samp{ftnchek} tool from @url{ftp://ftp.netlib.org/fortran} is
+the @samp{ftnchek} tool from @url{ftp://ftp.netlib.org/fortran}
+or @url{ftp://ftp.dsm.fordham.edu} is
 probably better for this purpose.}
 If the Fortran code containing any
 routines to be called from C is in file @file{joe.f}, use the command
@@ -9982,12 +9995,16 @@ The Intel x86 architecture generally ensures that these programs will
 work on all its implementations,
 but particular implementations (such as Pentium Pro)
 perform better with more strict alignment.
+(Such behavior isn't unique to the Intel x86 architecture.)
+Other architectures might @emph{demand} 64-bit alignment
+of 64-bit data.
 
-There are a variety of approaches to use to address this problem,
-in any combination:
+There are a variety of approaches to use to address this problem:
 
 @itemize @bullet
 @item
+@cindex COMMON, layout
+@cindex layout of common blocks
 Order your @code{COMMON} and @code{EQUIVALENCE} areas such
 that the variables and arrays with the widest alignment
 guidelines come first.
@@ -10017,67 +10034,44 @@ avoid having to carefully count the number of bytes
 occupied by each entity to determine whether the
 actual alignment of each subsequent entity meets the
 alignment guidelines for the type of that entity.
+If you don't ensure correct alignment of @code{COMMON} elements, the
+compiler may be forced by some systems to violate the Fortran semantics by
+adding padding to get @code{DOUBLE PRECISION} data properly aligned.
+If the unfortunate practice is employed of overlaying different types of
+data in the @code{COMMON} block, the different variants
+of this block may become misaligned with respect to each other.
+Even if your platform doesn't require strict alignment,
+@code{COMMON} should be laid out as above for portability.
+(Unfortunately the FORTRAN 77 standard didn't anticipate this
+possible requirement, which is compiler-independent on a given platform.)
 
 @item
+@cindex -malign-double option
+@cindex options, -malign-double
 Use the (x86-specific) @samp{-malign-double} option when compiling
-programs.
-This will align only static data (entities in @code{COMMON} or
-local entities with the @code{SAVE} attribute),
-but it should probably always be
-used with Fortran code on the 586 and 686 architectures for best
-performance.
-
-This feature of @samp{-malign-double} means it may actually be best to
-use it with @samp{-fno-automatic} even though the latter usually
-produces worse code; at least, doing so will tend to produce more
-consistent run times.
-
-Using @samp{-malign-double} and @samp{-fno-automatic} together is
-apparently the only way to ensure that all doubles are correctly aligned
-on GNU x86 systems without having to change @code{g77} itself as
-described in the next item.
-(Note that the @code{gcc} C extension @samp{__attribute__ ((aligned (8))}
-also won't double-align the datum to which it is applied if that is allocated
-on the stack.)
-It isn't clear whether this deficiency also applies to
-non-GNU based x86 systems (Solaris, DGUX et al), but it probably does.
-
-@item
-Change the definition of the @samp{STACK_BOUNDARY} macro in
-@file{gcc/config/i386/i386.h} from @samp{32} to
-@samp{(TARGET_ALIGN_DOUBLE ? 64 : 32)}, and rebuild
-@code{g77}.
-@xref{Installation,,Installing GNU Fortran}, for more information.
+programs for the Pentium and Pentium Pro architectures (called 586
+and 686 in the @code{gcc} configuration subsystem).
+The warning about this in the @code{gcc} manual isn't
+generally relevant to Fortran,
+but using it will force @code{COMMON} to be padded if necessary to align
+@code{DOUBLE PRECISION} data.
 
 @item
 Ensure that @file{crt0.o} or @file{crt1.o}
 on your system guarantees a 64-bit
 aligned stack for @code{main()}.
-Some experimentation might be needed to determine this, and
-access to source code to fix this.
-While arranging this may typically
-get more data properly aligned, it won't, by itself,
-ensure they all are.
-
-One approach to testing this is to write a @code{main()} program
-in C or assembler that outputs the address of the stack pointer
-(and/or frame pointer), and visually inspect the output to see
-if the stack is 64-bit aligned.
-If it is, try renaming the executable to longer and shorter names
-and running the program again.
-If the name of the executable is placed on the stack by @file{crt0.o}
-or @file{crt1.o},
-the location of the stack should move, and this might help determine
-whether it is kept on a 64-bit boundary.
+The recent one from GNU (@code{glibc2}) will do this on x86 systems,
+but we don't know of any other x86 setups where it will be right.
+Read your system's documentation to determine if
+it is appropriate to upgrade to a more recent version
+to obtain the optimal alignment.
 @end itemize
 
-Yes, this is all more complicated than it should be.
-The problems are best solved in @code{gcc} and the
-libraries for the operating systems on such systems,
-which need to be continuously updated to provide the
-best alignment for newly released processors.
-Managing this while remaining compatible with ABIs
-on various systems can be challenging.
+Progress is being made on making this work
+``out of the box'' on future versions of @code{g77},
+@code{gcc}, and some of the relevant operating systems
+(such as GNU/Linux).
 
 @node Prefer Automatic Uninitialized Variables
 @subsection Prefer Automatic Uninitialized Variables
@@ -10951,6 +10945,18 @@ probably considered just behind intrinsics
 in @code{PARAMETER} statements on the list of large,
 important things to add to @code{g77}.
 
+In the meantime, consider using the @code{INTEGER(KIND=7)}
+declaration to specify that a variable must be
+able to hold a pointer.
+This construct is not portable to other non-GNU compilers,
+but it is portable to all machines GNU Fortran supports
+when @code{g77} is used.
+
+@xref{Functions and Subroutines}, for information on
+@code{%VAL()}, @code{%REF()}, and @code{%DESCR()}
+constructs, which are useful for passing pointers to
+procedures written in languages other than Fortran.
+
 @node Sensible Non-standard Constructs
 @subsection Sensible Non-standard Constructs
 
@@ -12224,6 +12230,63 @@ If you are an experienced user of Fortran compilers, your suggestions
 for improvement of GNU Fortran are welcome in any case.
 @end itemize
 
+Many, perhaps most, bug reports against @code{g77} turn out to
+be bugs in the user's code.
+While we find such bug reports educational, they sometimes take
+a considerable amount of time to track down or at least respond
+to---time we could be spending making @code{g77}, not some user's
+code, better.
+
+Some steps you can take to verify that the bug is not certainly
+in the code you're compiling with @code{g77}:
+
+@itemize @bullet
+@item
+Compile your code using the @code{g77} options @samp{-W -Wall -O}.
+These options enable many useful warning; the @samp{-O} option
+enables flow analysis that enables the uninitialized-variable
+warning.
+
+If you investigate the warnings and find evidence of possible bugs
+in your code, fix them first and retry @code{g77}.
+
+@item
+Compile your code using the @code{g77} options @samp{-finit-local-zero},
+@samp{-fno-automatic}, @samp{-ffloat-store}, and various
+combinations thereof.
+
+If your code works with any of these combinations, that is not
+proof that the bug isn't in @code{g77}---a @code{g77} bug exposed
+by your code might simply be avoided, or have a different, more subtle
+effect, when different options are used---but it can be a
+strong indicator that your code is making unawarranted assumptions
+about the Fortran dialect and/or underlying machine it is
+being compiled and run on.
+
+@xref{Overly Convenient Options,,Overly Convenient Command-Line Options},
+for information on the @samp{-fno-automatic} and
+@samp{-finit-local-zero} options and how to convert
+their use into selective changes in your own code.
+
+@item
+@pindex ftncheck
+Validate your code with @code{ftnchek} or a similar code-checking
+tool.
+@code{ftncheck} can be found at @url{ftp://ftp.netlib.org/fortran}
+or @url{ftp://ftp.dsm.fordham.edu}.
+
+@item
+Try your code out using other Fortran compilers, such as @code{f2c}.
+If it does not work on at least one other compiler (assuming the
+compiler supports the features the code needs), that is a strong
+indicator of a bug in the code.
+
+However, even if your code works on many compilers @emph{except}
+@code{g77}, that does @emph{not} mean the bug is in @code{g77}.
+It might mean the bug is in your code, and that @code{g77} simply
+exposes it more readily than other compilers.
+@end itemize
+
 @node Bug Lists
 @section Where to Report Bugs
 @cindex bug report mailing lists
index 033448deaa425873962ff1cfff1253e432059802..237f06e07529a51d1f9da569131feb2dbaa15b6f 100644 (file)
@@ -302,10 +302,11 @@ ffeglobal_new_progunit_ (ffesymbol s, ffelexToken t, ffeglobalType type)
     return;
 
   if ((g != NULL)
-      && (g->type != FFEGLOBAL_typeNONE)
-      && (g->type != FFEGLOBAL_typeEXT)
-      && ((g->type != type)
-         || (g->u.proc.defined)))
+      && ((g->type == FFEGLOBAL_typeMAIN)
+         || (g->type == FFEGLOBAL_typeSUBR)
+         || (g->type == FFEGLOBAL_typeFUNC)
+         || (g->type == FFEGLOBAL_typeBDATA))
+      && g->u.proc.defined)
     {
       if (ffe_is_globals () || ffe_is_warn_globals ())
        {
@@ -321,6 +322,27 @@ ffeglobal_new_progunit_ (ffesymbol s, ffelexToken t, ffeglobalType type)
        }
       g->type = FFEGLOBAL_typeANY;
     }
+  else if ((g != NULL)
+          && (g->type != FFEGLOBAL_typeNONE)
+          && (g->type != FFEGLOBAL_typeEXT)
+          && (g->type != type))
+    {
+      if (ffe_is_globals () || ffe_is_warn_globals ())
+       {
+         ffebad_start (ffe_is_globals ()
+                       ? FFEBAD_FILEWIDE_DISAGREEMENT
+                       : FFEBAD_FILEWIDE_DISAGREEMENT_W);
+         ffebad_string (ffelex_token_text (t));
+         ffebad_string (ffeglobal_type_string_[type]);
+         ffebad_string (ffeglobal_type_string_[g->type]);
+         ffebad_here (0, ffelex_token_where_line (t),
+                      ffelex_token_where_column (t));
+         ffebad_here (1, ffelex_token_where_line (g->t),
+                      ffelex_token_where_column (g->t));
+         ffebad_finish ();
+       }
+      g->type = FFEGLOBAL_typeANY;
+    }
   else
     {
       if (g == NULL)
@@ -1180,6 +1202,12 @@ ffeglobal_ref_progunit_ (ffesymbol s, ffelexToken t, ffeglobalType type)
   ffename n = NULL;
   ffeglobal g;
 
+  /* It is never really _known_ that an EXTERNAL statement
+     names a BLOCK DATA by just looking at the program unit,
+     so override a different notion here.  */
+  if (type == FFEGLOBAL_typeBDATA)
+    type = FFEGLOBAL_typeEXT;
+
   g = ffesymbol_global (s);
   if (g == NULL)
     {
@@ -1218,11 +1246,6 @@ ffeglobal_ref_progunit_ (ffesymbol s, ffelexToken t, ffeglobalType type)
              ffebad_finish ();
            }
 #endif
-         /* It is never really _known_ that an EXTERNAL statement
-            names a BLOCK DATA by just looking at the program unit,
-            so don't override a different notion.  */
-         if (type == FFEGLOBAL_typeBDATA)
-           type = FFEGLOBAL_typeEXT;
        }
       else if (ffe_is_globals ())
        {
@@ -1272,6 +1295,7 @@ ffeglobal_ref_progunit_ (ffesymbol s, ffelexToken t, ffeglobalType type)
               && ((ffesymbol_basictype (s) != g->u.proc.bt)
                   || (ffesymbol_kindtype (s) != g->u.proc.kt)
                   || ((ffesymbol_size (s) != g->u.proc.sz)
+                      && g->u.proc.defined
                       && (g->u.proc.sz != FFETARGET_charactersizeNONE))))
        {
          if (ffe_is_globals ())
index 1f7d79699482b08aa3fa041c58ae77e38612d8eb..26c479e5c6ef0964b39075b4f215688918d56aeb 100644 (file)
@@ -5,7 +5,7 @@
 @c The text of this file appears in the file INSTALL
 @c in the G77 distribution, as well as in the G77 manual.
 
-@c 1997-08-11
+@c 1997-08-17
 
 @ifclear INSTALLONLY
 @node Installation
@@ -61,12 +61,17 @@ There are GNU versions of all these available---in fact,
 a complete GNU UNIX system can be put together on
 most systems, if desired.
 
+The version of GNU @code{gzip} used to package this release
+is 1.24.
+(The version of GNU @code{tar} used to package this release
+is 1.11.2.)
+
 @item @file{gcc-2.7.2.2.tar.gz}
 You need to have this, or some other applicable, version
 of @code{gcc} on your system.
 The version should be an exact copy of a distribution
 from the FSF.
-It is approximately 7MB large.
+Its size is approximately 7.1MB.
 
 If you've already unpacked @file{gcc-2.7.2.2.tar.gz} into a
 directory (named @file{gcc-2.7.2.2}) called the @dfn{source tree}
@@ -79,31 +84,107 @@ build @code{g77}.
 You can obtain an FSF distribution of @code{gcc} from the FSF.
 
 @item @file{g77-0.5.21.tar.gz}
-You probably have already unpacked this distribution,
-or you are reading an advanced copy of this manual,
-which is contained in this distribution.
-This distribution approximately 1MB large.
+You probably have already unpacked this package,
+or you are reading an advance copy of these installation instructions,
+which are contained in this distribution.
+The size of this package is approximately 1.5MB.
 
 You can obtain an FSF distribution of @code{g77} from the FSF,
 the same way you obtained @code{gcc}.
 
-@item 100MB disk space
-For a complete @dfn{bootstrap} build, about 100MB
-of disk space is required for @code{g77} by the author's
-current GNU/Linux system.
+@item Enough disk space
+The amount of disk space needed to unpack, build, install,
+and use @code{g77} depends on the type of system you're
+using, how you build @code{g77}, and how much of it you
+install (primarily, which languages you install).
+
+The sizes shown below assume all languages distributed
+in @code{gcc-2.7.2.2}, plus @code{g77}, will be built
+and installed.
+These sizes are indicative of GNU/Linux systems on
+Intel x86 running COFF and on Digital Alpha (AXP) systems
+running ELF.
+These should be fairly representative of 32-bit and 64-bit
+systems, respectively.
+
+Note that all sizes are approximate and subject to change without
+notice!
+They are based on preliminary releases of g77 made shortly
+before the public beta release.
+
+@itemize ---
+@item
+@code{gcc} and @code{g77} distributions occupy 8.6MB
+packed, 35MB unpacked.
+These consist of the source code and documentation,
+plus some derived files (mostly documentation), for
+@code{gcc} and @code{g77}.
+Any deviations from these numbers for different
+kinds of systems are likely to be very minor.
+
+@item
+A ``bootstrap'' build requires an additional 67.3MB
+for a total of 102MB on an ix86, and an additional
+98MB for a total of 165MB on an Alpha.
+
+@item
+Removing @file{gcc/stage1} after the build recovers
+10.7MB for a total of 91MB on an ix86, and recovers
+??MB for a total of ??MB on an Alpha.
 
-Some juggling can reduce the amount of space needed;
-during the bootstrap process, once Stage 3 starts,
-during which the version of @code{gcc} that has been copied
-into the @file{stage2/} directory is used to rebuild the
-system, you can delete the @file{stage1/} directory
-to free up some space.
+After doing this, the integrity of the build can
+still be verified via @samp{make compare}, and the
+@code{gcc} compiler modified and used to build itself for
+testing fairly quickly, using the copy of the compiler
+kept in @code{gcc/stage2}.
 
-It is likely that many systems don't require the complete
-bootstrap build, as they already have a recent version of
-@code{gcc} installed.
-Such systems might be able to build @code{g77} with only
-about 75MB of free space.
+@item
+Removing @file{gcc/stage2} after the build further
+recovers 27.3MB for a total of 64.3MB, and recovers
+??MB for a total of ??MB on an Alpha.
+
+After doing this, the compiler can still be installed,
+especially if GNU @code{make} is used to avoid
+gratuitous rebuilds (or, the installation can be done
+by hand).
+
+@item
+Installing @code{gcc} and @code{g77} copies
+14.9MB onto the @samp{--prefix} disk for a total of 79.2MB
+on an ix86, and copies ??MB onto the @samp{--prefix}
+disk for a total of ??MB on an Alpha.
+@end itemize
+
+After installation, if no further modifications and
+builds of @code{gcc} or @code{g77} are planned, the
+source and build directory may be removed, leaving
+the total impact on a system's disk storage as
+that of the amount copied during installation.
+
+Systems with the appropriate version of @code{gcc}
+installed don't require the complete
+bootstrap build.
+Doing a ``straight build'' requires about as much
+space as does a bootstrap build followed by removing
+both the @file{gcc/stage1} and @file{gcc/stage2}
+directories.
+
+Installing @code{gcc} and @code{g77} over existing
+versions might require less @emph{new} disk space,
+but note that, unlike many products, @code{gcc}
+installs itself in a way that avoids overwriting other
+installed versions of itself, so that other versions may
+easily be invoked (via @samp{gcc -V @var{version}}).
+
+So, the amount of space saved as a result of having
+an existing version of @code{gcc} and @code{g77}
+already installed is not much---typically only the
+command drivers (@code{gcc}, @code{g77}, @code{g++},
+and so on, which are small) and the documentation
+is overwritten by the new installation.
+The rest of the new installation is done without
+replacing existing installed versions (assuming
+they have different version numbers).
 
 @item @code{patch}
 Although you can do everything @code{patch} does yourself,
@@ -116,11 +197,17 @@ You can obtain @code{patch} the same way you obtained
 In any case, you can apply patches by hand---patch files
 are designed for humans to read them.
 
+The version of GNU @code{patch} used to develop this release
+is 2.4.
+
 @item @code{make}
 Your system must have @code{make}, and you will probably save
 yourself a lot of trouble if it is GNU @code{make} (sometimes
 referred to as @code{gmake}).
 
+The version of GNU @code{make} used to develop this release
+is 3.73.
+
 @item @code{cc}
 Your system must have a working C compiler.
 
@@ -135,6 +222,9 @@ generated by running it in its distribution.
 You can obtain @code{bison} the same way you obtained
 @code{gcc} and @code{g77}.
 
+The version of GNU @code{bison} used to develop this release
+is 1.25.
+
 @xref{Missing bison?},
 for information on how to work around not having @code{bison}.
 
@@ -144,13 +234,29 @@ around any need for it.
 You can obtain @code{makeinfo} the same way you obtained
 @code{gcc} and @code{g77}.
 
+The version of GNU @code{makeinfo} used to develop this release
+is 1.68, from GNU @code{texinfo} version 3.11.
+
 @xref{Missing makeinfo?},
 for information on getting around the lack of @code{makeinfo}.
 
-@item @code{root} access
+@item @code{sed}
+All UNIX systems have @code{sed}, but some have a broken
+version that cannot handle configuring, building, or
+installing @code{gcc} or @code{g77}.
+
+The version of GNU @code{sed} used to develop this release
+is 2.05.
+(Note that GNU @code{sed} version 3.0 was withdrawn by the
+FSF---if you happen to have this version installed, replace
+it with version 2.05 immediately.
+See a GNU distribution site for further explanation.)
+
+@item @code{root} access or equivalent
 To perform the complete installation procedures on a system,
 you need to have @code{root} access to that system, or
-equivalent access.
+equivalent access to the @samp{--prefix} directory tree
+specified on the @code{configure} command line.
 
 Portions of the procedure (such as configuring and building
 @code{g77}) can be performed by any user with enough disk
@@ -384,7 +490,7 @@ constants.
 @item
 Improvements to the way @code{libf2c} is built could make
 building @code{g77} as a cross-compiler easier---for example,
-passing and using @samp{LD} and @samp{AR} in the appropriate
+passing and using @samp{$(LD)} and @samp{$(AR)} in the appropriate
 ways.
 
 @item
@@ -410,10 +516,13 @@ be pertinent in future versions of @code{g77}.
 @menu
 * Larger File Unit Numbers::     Raising @samp{MXUNIT}.
 * Always Flush Output::          Synchronizing write errors.
-* Maximum Stackable Size::       Large arrays are forced off the stack frame.
-* Floating-point Bit Patterns::  Possible programs building cross-compiler.
-* Large Initialization::         Large arrays with @code{DATA} initialization.
-* Alpha Problems Fixed::         Problems 64-bit systems like Alphas now fixed?
+* Maximum Stackable Size::       Large arrays forced off the stack.
+* Floating-point Bit Patterns::  Possible programs building @code{g77}
+                                   as a cross-compiler.
+* Large Initialization::         Large arrays with @code{DATA}
+                                   initialization.
+* Alpha Problems Fixed::         Problems with 64-bit systems like
+                                   Alphas now fixed?
 @end menu
 
 @node Larger File Unit Numbers
@@ -996,8 +1105,8 @@ and @code{g77} is:
 
 @example
 sh# @kbd{cd /usr/src}
-sh# @kbd{gunzip -d < /usr/FSF/gcc-2.7.2.2.tar.gz | tar xf -}
-sh# @kbd{gunzip -d < /usr/FSF/g77-0.5.21.tar.gz | tar xf -}
+sh# @kbd{gunzip -c /usr/FSF/gcc-2.7.2.2.tar.gz | tar xf -}
+sh# @kbd{gunzip -c /usr/FSF/g77-0.5.21.tar.gz | tar xf -}
 sh# @kbd{ln -s gcc-2.7.2.2 gcc}
 sh# @kbd{ln -s g77-0.5.21 g77}
 sh# @kbd{mv -i g77/* gcc}
index ff9a6f9bb4f7df8b49e433fd23f070c9b64028e3..f95703990d5b87042783ea23542e5255b906963d 100644 (file)
@@ -72,8 +72,8 @@ main (int argc, char **argv __attribute__ ((unused)))
   if (argc != 1)
     {
       fprintf (stderr, "\
-Usage: intdoc > intdoc.texi
-  Collects and dumps documentation on g77 intrinsics
+Usage: intdoc > intdoc.texi\n\
+  Collects and dumps documentation on g77 intrinsics\n\
   to the file named intdoc.texi.\n");
       exit (1);
     }
@@ -179,14 +179,14 @@ struct cc_pair { ffeintrinImp imp; char *text; };
 static char *descriptions[FFEINTRIN_imp] = { 0 };
 static struct cc_pair cc_descriptions[] = {
 #define DEFDOC(IMP,SUMMARY,DESCRIPTION) { FFEINTRIN_imp ## IMP, DESCRIPTION },
-#include "intdoc.h"
+#include "intdoc.h0"
 #undef DEFDOC
 };
 
 static char *summaries[FFEINTRIN_imp] = { 0 };
 static struct cc_pair cc_summaries[] = {
 #define DEFDOC(IMP,SUMMARY,DESCRIPTION) { FFEINTRIN_imp ## IMP, SUMMARY },
-#include "intdoc.h"
+#include "intdoc.h0"
 #undef DEFDOC
 };
 
@@ -312,11 +312,11 @@ static void
 dumpgen (int menu, char *name, char *name_uc, ffeintrinGen gen)
 {
   size_t i;
-  int total;
+  int total = 0;
 
   if (!menu)
     {
-      for (total = 0, i = 0; i < ARRAY_SIZE (gens[gen].specs); ++i)
+      for (i = 0; i < ARRAY_SIZE (gens[gen].specs); ++i)
        {
          if (gens[gen].specs[i] != FFEINTRIN_specNONE)
            ++total;
@@ -457,12 +457,12 @@ dumpimp (int menu, char *name, char *name_uc, size_t genno, ffeintrinFamily fami
 
   if (imp == FFEINTRIN_impNONE)
     {
-      printf ("
-This intrinsic is not yet implemented.
-The name is, however, reserved as an intrinsic.
-Use @samp{EXTERNAL %s} to use this name for an
-external procedure.
-
+      printf ("\n\
+This intrinsic is not yet implemented.\n\
+The name is, however, reserved as an intrinsic.\n\
+Use @samp{EXTERNAL %s} to use this name for an\n\
+external procedure.\n\
+\n\
 ",
              name);
       return;
@@ -472,9 +472,9 @@ external procedure.
   subr = (c[0] == '-');
   colon = (c[2] == ':') ? 2 : 3;
 
-  printf ("
-@noindent
-@example
+  printf ("\n\
+@noindent\n\
+@example\n\
 %s%s(",
          (subr ? "CALL " : ""), name);
 
@@ -497,8 +497,9 @@ external procedure.
                argc, argc);
     }
 
-  printf (")
-@end example\n
+  printf (")\n\
+@end example\n\
+\n\
 ");
 
   if (!subr)
@@ -522,7 +523,7 @@ external procedure.
        }
 
       printf ("\
-@noindent
+@noindent\n\
 %s: ", name);
       print_type_string (c);
       printf (" function");
@@ -536,20 +537,20 @@ external procedure.
          || (arg_info[0] == '*') || (arg_info[0] == 'n') || (arg_info[0] == 'p'))
            ++arg_info;
          if ((arg_info[0] == 'F') || (arg_info[0] == 'N'))
-           printf (".
-The exact type is @samp{REAL(KIND=1)} when argument @var{%s} is
-any type other than @code{COMPLEX}, or when it is @code{COMPLEX(KIND=1)}.
-When @var{%s} is any @code{COMPLEX} type other than @code{COMPLEX(KIND=1)},
-this intrinsic is valid only when used as the argument to
+           printf (".\n\
+The exact type is @samp{REAL(KIND=1)} when argument @var{%s} is\n\
+any type other than @code{COMPLEX}, or when it is @code{COMPLEX(KIND=1)}.\n\
+When @var{%s} is any @code{COMPLEX} type other than @code{COMPLEX(KIND=1)},\n\
+this intrinsic is valid only when used as the argument to\n\
 @code{REAL()}, as explained below.\n\n",
                    arg_string,
                    arg_string);
          else
-           printf (".
-This intrinsic is valid when argument @var{%s} is
-@code{COMPLEX(KIND=1)}.
-When @var{%s} is any other @code{COMPLEX} type,
-this intrinsic is valid only when used as the argument to
+           printf (".\n\
+This intrinsic is valid when argument @var{%s} is\n\
+@code{COMPLEX(KIND=1)}.\n\
+When @var{%s} is any other @code{COMPLEX} type,\n\
+this intrinsic is valid only when used as the argument to\n\
 @code{REAL()}, as explained below.\n\n",
                    arg_string,
                    arg_string);
@@ -557,7 +558,7 @@ this intrinsic is valid only when used as the argument to
 #if 0
       else if ((c[0] == 'I')
               && (c[1] == 'p'))
-       printf (", the exact type being wide enough to hold a pointer
+       printf (", the exact type being wide enough to hold a pointer\n\
 on the target system (typically @code{INTEGER(KIND=1)} or @code{INTEGER(KIND=4)}).\n\n");
 #endif
       else if ((c[1] == '=')
@@ -583,10 +584,10 @@ on the target system (typically @code{INTEGER(KIND=1)} or @code{INTEGER(KIND=4)}
                   && ((arg_info[0] == 'C')
                       || (arg_info[0] == 'F')
                       || (arg_info[0] == 'N')))
-           printf (".
-The exact type depends on that of argument @var{%s}---if @var{%s} is
-@code{COMPLEX}, this function's type is @code{REAL}
-with the same @samp{KIND=} value as the type of @var{%s}.
+           printf (".\n\
+The exact type depends on that of argument @var{%s}---if @var{%s} is\n\
+@code{COMPLEX}, this function's type is @code{REAL}\n\
+with the same @samp{KIND=} value as the type of @var{%s}.\n\
 Otherwise, this function's type is the same as that of @var{%s}.\n\n",
                    arg_string, arg_string, arg_string, arg_string);
          else
@@ -595,7 +596,7 @@ Otherwise, this function's type is the same as that of @var{%s}.\n\n",
        }
       else if ((c[1] == '=')
               && (c[colon + 1] == '*'))
-       printf (", the exact type being the result of cross-promoting the
+       printf (", the exact type being the result of cross-promoting the\n\
 types of all the arguments.\n\n");
       else if (c[1] == '=')
        assert ("?0:?:" == NULL);
@@ -613,7 +614,7 @@ types of all the arguments.\n\n");
       int elements;
 
       printf ("\
-@noindent
+@noindent\n\
 @var{");
       for (; ; ++argc)
        {
@@ -875,12 +876,12 @@ types of all the arguments.\n\n");
          break;
 
        case 'g':
-         printf ("@samp{*@var{label}}, where @var{label} is the label
+         printf ("@samp{*@var{label}}, where @var{label} is the label\n\
 of an executable statement");
          break;
 
        case 's':
-         printf ("Signal handler (@code{INTEGER FUNCTION} or @code{SUBROUTINE})
+         printf ("Signal handler (@code{INTEGER FUNCTION} or @code{SUBROUTINE})\n\
 or dummy/global @code{INTEGER(KIND=1)} scalar");
          break;
 
@@ -965,7 +966,7 @@ or dummy/global @code{INTEGER(KIND=1)} scalar");
     }
 
   printf ("\
-@noindent
+@noindent\n\
 Intrinsic groups: ");
   switch (family)
     {
@@ -1021,8 +1022,8 @@ Intrinsic groups: ");
       char *c = descriptions[imp];
 
       printf ("\
-@noindent
-Description:
+@noindent\n\
+Description:\n\
 \n");
 
       while (c[0] != '\0')
index 58b4007f7d5e4664b6f86f41ae6970d02361acec..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 100644 (file)
-/* Copyright (C) 1997 Free Software Foundation, Inc.
- * This is part of the G77 manual.
- * For copying conditions, see the file g77.texi. */
-
-/* This is the file containing the verbage for the
-   intrinsics.  It consists of a data base built up
-   via DEFDOC macros of the form:
-
-   DEFDOC (IMP, SUMMARY, DESCRIPTION)
-
-   IMP is the implementation keyword used in the intrin module.
-   SUMMARY is the short summary to go in the "* Menu:" section
-   of the Info document.  DESCRIPTION is the longer description
-   to go in the documentation itself.
-
-   Note that IMP is leveraged across multiple intrinsic names.
-
-   To make for more accurate and consistent documentation,
-   the translation made by intdoc.c of the text in SUMMARY
-   and DESCRIPTION includes the special sequence
-
-   @ARGNO@
-
-   where ARGNO is a series of digits forming a number that
-   is substituted by intdoc.c as follows:
-
-   0     The initial-caps form of the intrinsic name (e.g. Float).
-   1-98  The initial-caps form of the ARGNO'th argument.
-   99    (SUMMARY only) a newline plus the appropriate # of spaces.
-
-   Hope this info is enough to encourage people to feel free to
-   add documentation to this file!
-
-*/
-
-/* ~~~~~ to do:
-   ALARM
-*/
-
-#define ARCHAIC(upper,mixed) \
-  "Archaic form of @code{" #upper "()} that is specific\n\
-to one type for @var{@1@}.\n\
-@xref{" #mixed " Intrinsic}.\n"
-
-#define ARCHAIC_2nd(upper,mixed) \
-  "Archaic form of @code{" #upper "()} that is specific\n\
-to one type for @var{@2@}.\n\
-@xref{" #mixed " Intrinsic}.\n"
-
-#define ARCHAIC_2(upper,mixed) \
-  "Archaic form of @code{" #upper "()} that is specific\n\
-to one type for @var{@1@} and @var{@2@}.\n\
-@xref{" #mixed " Intrinsic}.\n"
-
-DEFDOC (ABS, "Absolute value.", "\
-Returns the absolute value of @var{@1@}.
-
-If @var{@1@} is type @code{COMPLEX}, the absolute
-value is computed as:
-
-@example
-SQRT(REALPART(@var{@1@})**2, IMAGPART(@var{@1@})**2)
-@end example
-
-@noindent
-Otherwise, it is computed by negating the @var{@1@} if
-it is negative, or returning @var{@1@}.
-
-@xref{Sign Intrinsic}, for how to explicitly
-compute the positive or negative form of the absolute
-value of an expression.
-")
-
-DEFDOC (CABS, "Absolute value (archaic).", ARCHAIC (ABS, Abs))
-
-DEFDOC (DABS, "Absolute value (archaic).", ARCHAIC (ABS, Abs))
-
-DEFDOC (IABS, "Absolute value (archaic).", ARCHAIC (ABS, Abs))
-
-DEFDOC (CDABS, "Absolute value (archaic).", ARCHAIC (ABS, Abs))
-
-DEFDOC (ACHAR, "ASCII character from code.", "\
-Returns the ASCII character corresponding to the
-code specified by @var{@1@}.
-
-@xref{IAChar Intrinsic}, for the inverse of this function.
-
-@xref{Char Intrinsic}, for the function corresponding
-to the system's native character set.
-")
-
-DEFDOC (IACHAR, "ASCII code for character.", "\
-Returns the code for the ASCII character in the
-first character position of @var{@1@}.
-
-@xref{AChar Intrinsic}, for the inverse of this function.
-
-@xref{IChar Intrinsic}, for the function corresponding
-to the system's native character set.
-")
-
-DEFDOC (CHAR, "Character from code.", "\
-Returns the character corresponding to the
-code specified by @var{@1@}, using the system's
-native character set.
-
-Because the system's native character set is used,
-the correspondence between character and their codes
-is not necessarily the same between GNU Fortran
-implementations.
-
-Note that no intrinsic exists to convert a numerical
-value to a printable character string.
-For example, there is no intrinsic that, given
-an @code{INTEGER} or @code{REAL} argument with the
-value @samp{154}, returns the @code{CHARACTER}
-result @samp{'154'}.
-
-Instead, you can use internal-file I/O to do this kind
-of conversion.
-For example:
-
-@smallexample
-INTEGER VALUE
-CHARACTER*10 STRING
-VALUE = 154
-WRITE (STRING, '(I10)'), VALUE
-PRINT *, STRING
-END
-@end smallexample
-
-The above program, when run, prints:
-
-@smallexample
-        154
-@end smallexample
-
-@xref{IChar Intrinsic}, for the inverse of the @code{@0@} function.
-
-@xref{AChar Intrinsic}, for the function corresponding
-to the ASCII character set.
-")
-
-DEFDOC (ICHAR, "Code for character.", "\
-Returns the code for the character in the
-first character position of @var{@1@}.
-
-Because the system's native character set is used,
-the correspondence between character and their codes
-is not necessarily the same between GNU Fortran
-implementations.
-
-Note that no intrinsic exists to convert a printable
-character string to a numerical value.
-For example, there is no intrinsic that, given
-the @code{CHARACTER} value @samp{'154'}, returns an
-@code{INTEGER} or @code{REAL} value with the value @samp{154}.
-
-Instead, you can use internal-file I/O to do this kind
-of conversion.
-For example:
-
-@smallexample
-INTEGER VALUE
-CHARACTER*10 STRING
-STRING = '154'
-READ (STRING, '(I10)'), VALUE
-PRINT *, VALUE
-END
-@end smallexample
-
-The above program, when run, prints:
-
-@smallexample
- 154
-@end smallexample
-
-@xref{Char Intrinsic}, for the inverse of the @code{@0@} function.
-
-@xref{IAChar Intrinsic}, for the function corresponding
-to the ASCII character set.
-")
-
-DEFDOC (ACOS, "Arc cosine.", "\
-Returns the arc-cosine (inverse cosine) of @var{@1@}
-in radians.
-
-@xref{Cos Intrinsic}, for the inverse of this function.
-")
-
-DEFDOC (DACOS, "Arc cosine (archaic).", ARCHAIC (ACOS, ACos))
-
-DEFDOC (AIMAG, "Convert/extract imaginary part of complex.", "\
-Returns the (possibly converted) imaginary part of @var{@1@}.
-
-Use of @code{@0@()} with an argument of a type
-other than @code{COMPLEX(KIND=1)} is restricted to the following case:
-
-@example
-REAL(AIMAG(@1@))
-@end example
-
-@noindent
-This expression converts the imaginary part of @1@ to
-@code{REAL(KIND=1)}.
-
-@xref{REAL() and AIMAG() of Complex}, for more information.
-")
-
-DEFDOC (DIMAG, "Convert/extract imaginary part of complex (archaic).", ARCHAIC (AIMAG, AImag))
-
-DEFDOC (AINT, "Truncate to whole number.", "\
-Returns @var{@1@} with the fractional portion of its
-magnitude truncated and its sign preserved.
-(Also called ``truncation towards zero''.)
-
-@xref{ANInt Intrinsic}, for how to round to nearest
-whole number.
-
-@xref{Int Intrinsic}, for how to truncate and then convert
-number to @code{INTEGER}.
-")
-
-DEFDOC (DINT, "Truncate to whole number (archaic).", ARCHAIC (AINT, AInt))
-
-DEFDOC (INT, "Convert to @code{INTEGER} value truncated@99@to whole number.", "\
-Returns @var{@1@} with the fractional portion of its
-magnitude truncated and its sign preserved, converted
-to type @code{INTEGER(KIND=1)}.
-
-If @var{@1@} is type @code{COMPLEX}, its real part is
-truncated and converted, and its imaginary part is disregarded.
-
-@xref{NInt Intrinsic}, for how to convert, rounded to nearest
-whole number.
-
-@xref{AInt Intrinsic}, for how to truncate to whole number
-without converting.
-")
-
-DEFDOC (IDINT, "Convert to @code{INTEGER} value truncated@99@to whole number (archaic).", ARCHAIC (INT, Int))
-
-DEFDOC (ANINT, "Round to nearest whole number.", "\
-Returns @var{@1@} with the fractional portion of its
-magnitude eliminated by rounding to the nearest whole
-number and with its sign preserved.
-
-A fractional portion exactly equal to
-@samp{.5} is rounded to the whole number that
-is larger in magnitude.
-(Also called ``Fortran round''.)
-
-@xref{AInt Intrinsic}, for how to truncate to
-whole number.
-
-@xref{NInt Intrinsic}, for how to round and then convert
-number to @code{INTEGER}.
-")
-
-DEFDOC (DNINT, "Round to nearest whole number (archaic).", ARCHAIC (ANINT, ANInt))
-
-DEFDOC (NINT, "Convert to @code{INTEGER} value rounded@99@to nearest whole number.", "\
-Returns @var{@1@} with the fractional portion of its
-magnitude eliminated by rounding to the nearest whole
-number and with its sign preserved, converted
-to type @code{INTEGER(KIND=1)}.
-
-If @var{@1@} is type @code{COMPLEX}, its real part is
-rounded and converted.
-
-A fractional portion exactly equal to
-@samp{.5} is rounded to the whole number that
-is larger in magnitude.
-(Also called ``Fortran round''.)
-
-@xref{Int Intrinsic}, for how to convert, truncate to
-whole number.
-
-@xref{ANInt Intrinsic}, for how to round to nearest whole number
-without converting.
-")
-
-DEFDOC (IDNINT, "Convert to @code{INTEGER} value rounded@99@to nearest whole number (archaic).", ARCHAIC (NINT, NInt))
-
-DEFDOC (LOG, "Natural logarithm.", "\
-Returns the natural logarithm of @var{@1@}, which must
-be greater than zero or, if type @code{COMPLEX}, must not
-be zero.
-
-@xref{Exp Intrinsic}, for the inverse of this function.
-
-@xref{Log10 Intrinsic}, for the base-10 logarithm function.
-")
-
-DEFDOC (ALOG, "Natural logarithm (archaic).", ARCHAIC (LOG, Log))
-
-DEFDOC (CLOG, "Natural logarithm (archaic).", ARCHAIC (LOG, Log))
-
-DEFDOC (DLOG, "Natural logarithm (archaic).", ARCHAIC (LOG, Log))
-
-DEFDOC (CDLOG, "Natural logarithm (archaic).", ARCHAIC (LOG, Log))
-
-DEFDOC (LOG10, "Natural logarithm.", "\
-Returns the natural logarithm of @var{@1@}, which must
-be greater than zero or, if type @code{COMPLEX}, must not
-be zero.
-
-The inverse of this function is @samp{10. ** LOG10(@var{@1@})}.
-
-@xref{Log Intrinsic}, for the natural logarithm function.
-")
-
-DEFDOC (ALOG10, "Natural logarithm (archaic).", ARCHAIC (LOG10, Log10))
-
-DEFDOC (DLOG10, "Natural logarithm (archaic).", ARCHAIC (LOG10, Log10))
-
-DEFDOC (MAX, "Maximum value.", "\
-Returns the argument with the largest value.
-
-@xref{Min Intrinsic}, for the opposite function.
-")
-
-DEFDOC (AMAX0, "Maximum value (archaic).", "\
-Archaic form of @code{MAX()} that is specific
-to one type for @var{@1@} and a different return type.
-@xref{Max Intrinsic}.
-")
-
-DEFDOC (AMAX1, "Maximum value (archaic).", ARCHAIC (MAX, Max))
-
-DEFDOC (DMAX1, "Maximum value (archaic).", ARCHAIC (MAX, Max))
-
-DEFDOC (MAX0, "Maximum value (archaic).", ARCHAIC (MAX, Max))
-
-DEFDOC (MAX1, "Maximum value (archaic).", "\
-Archaic form of @code{MAX()} that is specific
-to one type for @var{@1@} and a different return type.
-@xref{Max Intrinsic}.
-")
-
-DEFDOC (MIN, "Minimum value.", "\
-Returns the argument with the smallest value.
-
-@xref{Max Intrinsic}, for the opposite function.
-")
-
-DEFDOC (AMIN0, "Minimum value (archaic).", "\
-Archaic form of @code{MIN()} that is specific
-to one type for @var{@1@} and a different return type.
-@xref{Min Intrinsic}.
-")
-
-DEFDOC (AMIN1, "Minimum value (archaic).", ARCHAIC (MIN, Min))
-
-DEFDOC (DMIN1, "Minimum value (archaic).", ARCHAIC (MIN, Min))
-
-DEFDOC (MIN0, "Minimum value (archaic).", ARCHAIC (MIN, Min))
-
-DEFDOC (MIN1, "Minimum value (archaic).", "\
-Archaic form of @code{MIN()} that is specific
-to one type for @var{@1@} and a different return type.
-@xref{Min Intrinsic}.
-")
-
-DEFDOC (MOD, "Remainder.", "\
-Returns remainder calculated as:
-
-@smallexample
-@var{@1@} - (INT(@var{@1@} / @var{@2@}) * @var{@2@})
-@end smallexample
-
-@var{@2@} must not be zero.
-")
-
-DEFDOC (AMOD, "Remainder (archaic).", ARCHAIC (MOD, Mod))
-
-DEFDOC (DMOD, "Remainder (archaic).", ARCHAIC (MOD, Mod))
-
-DEFDOC (AND, "Boolean AND.", "\
-Returns value resulting from boolean AND of
-pair of bits in each of @var{@1@} and @var{@2@}.
-")
-
-DEFDOC (IAND, "Boolean AND.", "\
-Returns value resulting from boolean AND of
-pair of bits in each of @var{@1@} and @var{@2@}.
-")
-
-DEFDOC (OR, "Boolean OR.", "\
-Returns value resulting from boolean OR of
-pair of bits in each of @var{@1@} and @var{@2@}.
-")
-
-DEFDOC (IOR, "Boolean OR.", "\
-Returns value resulting from boolean OR of
-pair of bits in each of @var{@1@} and @var{@2@}.
-")
-
-DEFDOC (XOR, "Boolean XOR.", "\
-Returns value resulting from boolean exclusive-OR of
-pair of bits in each of @var{@1@} and @var{@2@}.
-")
-
-DEFDOC (IEOR, "Boolean XOR.", "\
-Returns value resulting from boolean exclusive-OR of
-pair of bits in each of @var{@1@} and @var{@2@}.
-")
-
-DEFDOC (NOT, "Boolean NOT.", "\
-Returns value resulting from boolean NOT of each bit
-in @var{@1@}.
-")
-
-DEFDOC (ASIN, "Arc sine.", "\
-Returns the arc-sine (inverse sine) of @var{@1@}
-in radians.
-
-@xref{Sin Intrinsic}, for the inverse of this function.
-")
-
-DEFDOC (DASIN, "Arc sine (archaic).", ARCHAIC (ASIN, ASin))
-
-DEFDOC (ATAN, "Arc tangent.", "\
-Returns the arc-tangent (inverse tangent) of @var{@1@}
-in radians.
-
-@xref{Tan Intrinsic}, for the inverse of this function.
-")
-
-DEFDOC (DATAN, "Arc tangent (archaic).", ARCHAIC (ATAN, ATan))
-
-DEFDOC (ATAN2, "Arc tangent.", "\
-Returns the arc-tangent (inverse tangent) of the complex
-number (@var{@1@}, @var{@2@}) in radians.
-
-@xref{Tan Intrinsic}, for the inverse of this function.
-")
-
-DEFDOC (DATAN2, "Arc tangent (archaic).", ARCHAIC_2 (ATAN2, ATan2))
-
-DEFDOC (BIT_SIZE, "Number of bits in argument's type.", "\
-Returns the number of bits (integer precision plus sign bit)
-represented by the type for @var{@1@}.
-
-@xref{BTest Intrinsic}, for how to test the value of a
-bit in a variable or array.
-
-@xref{IBSet Intrinsic}, for how to set a bit in a variable to 1.
-
-@xref{IBClr Intrinsic}, for how to set a bit in a variable to 0.
-
-")
-
-DEFDOC (BTEST, "Test bit.", "\
-Returns @code{.TRUE.} if bit @var{@2@} in @var{@1@} is
-1, @code{.FALSE.} otherwise.
-
-(Bit 0 is the low-order (rightmost) bit, adding the value 
-@ifinfo
-2**0,
-@end ifinfo
-@iftex
-@tex
-$2^0$,
-@end tex
-@end iftex
-or 1,
-to the number if set to 1;
-bit 1 is the next-higher-order bit, adding 
-@ifinfo
-2**1,
-@end ifinfo
-@iftex
-@tex
-$2^1$,
-@end tex
-@end iftex
-or 2;
-bit 2 adds 
-@ifinfo
-2**2,
-@end ifinfo
-@iftex
-@tex
-$2^2$,
-@end tex
-@end iftex
-or 4; and so on.)
-
-@xref{Bit_Size Intrinsic}, for how to obtain the number of bits
-in a type.
-The leftmost bit of @var{@1@} is @samp{BIT_SIZE(@var{@1@}-1}.
-")
-
-DEFDOC (CMPLX, "Construct @code{COMPLEX(KIND=1)} value.", "\
-If @var{@1@} is not type @code{COMPLEX},
-constructs a value of type @code{COMPLEX(KIND=1)} from the
-real and imaginary values specified by @var{@1@} and
-@var{@2@}, respectively.
-If @var{@2@} is omitted, @samp{0.} is assumed.
-
-If @var{@1@} is type @code{COMPLEX},
-converts it to type @code{COMPLEX(KIND=1)}.
-
-@xref{Complex Intrinsic}, for information on easily constructing
-a @code{COMPLEX} value of arbitrary precision from @code{REAL}
-arguments.
-")
-
-DEFDOC (DCMPLX, "Construct @code{COMPLEX(KIND=2)} value.", "\
-If @var{@1@} is not type @code{COMPLEX},
-constructs a value of type @code{COMPLEX(KIND=2)} from the
-real and imaginary values specified by @var{@1@} and
-@var{@2@}, respectively.
-If @var{@2@} is omitted, @samp{0D0} is assumed.
-
-If @var{@1@} is type @code{COMPLEX},
-converts it to type @code{COMPLEX(KIND=2)}.
-
-Although this intrinsic is not standard Fortran,
-it is a popular extension offered by many compilers
-that support @code{DOUBLE COMPLEX}, since it offers
-the easiest way to convert to @code{DOUBLE COMPLEX}
-without using Fortran 90 features (such as the @samp{KIND=}
-argument to the @code{CMPLX()} intrinsic).
-
-(@samp{CMPLX(0D0, 0D0)} returns a single-precision
-@code{COMPLEX} result, as required by standard FORTRAN 77.
-That's why so many compilers provide @code{DCMPLX()}, since
-@samp{DCMPLX(0D0, 0D0)} returns a @code{DOUBLE COMPLEX}
-result.
-Still, @code{DCMPLX()} converts even @code{REAL*16} arguments
-to their @code{REAL*8} equivalents in most dialects of
-Fortran, so neither it nor @code{CMPLX()} allow easy
-construction of arbitrary-precision values without
-potentially forcing a conversion involving extending or
-reducing precision.
-GNU Fortran provides such an intrinsic, called @code{COMPLEX()}.)
-
-@xref{Complex Intrinsic}, for information on easily constructing
-a @code{COMPLEX} value of arbitrary precision from @code{REAL}
-arguments.
-")
-
-DEFDOC (CONJG, "Complex conjugate.", "\
-Returns the complex conjugate:
-
-@example
-COMPLEX(REALPART(@var{@1@}), -IMAGPART(@var{@1@}))
-@end example
-")
-
-DEFDOC (DCONJG, "Complex conjugate (archaic).", ARCHAIC (CONJG, ATan2))
-
-DEFDOC (COS, "Cosine.", "\
-Returns the cosine of @var{@1@}, an angle measured
-in radians.
-
-@xref{ACos Intrinsic}, for the inverse of this function.
-")
-
-DEFDOC (CCOS, "Cosine (archaic).", ARCHAIC (COS, Cos))
-
-DEFDOC (DCOS, "Cosine (archaic).", ARCHAIC (COS, Cos))
-
-DEFDOC (CDCOS, "Cosine (archaic).", ARCHAIC (COS, Cos))
-
-DEFDOC (COSH, "Hyperbolic cosine.", "\
-Returns the hyperbolic cosine of @var{@1@}.
-")
-
-DEFDOC (DCOSH, "Hyperbolic cosine (archaic).", ARCHAIC (COSH, CosH))
-
-DEFDOC (SQRT, "Square root.", "\
-Returns the square root of @var{@1@}, which must
-not be negative.
-
-To calculate and represent the square root of a negative
-number, complex arithmetic must be used.
-For example, @samp{SQRT(COMPLEX(@var{@1@}))}.
-
-The inverse of this function is @samp{SQRT(@var{@1@}) * SQRT(@var{@1@})}.
-")
-
-DEFDOC (CSQRT, "Square root (archaic).", ARCHAIC (SQRT, SqRt))
-
-DEFDOC (DSQRT, "Square root (archaic).", ARCHAIC (SQRT, SqRt))
-
-DEFDOC (CDSQRT, "Square root (archaic).", ARCHAIC (SQRT, SqRt))
-
-DEFDOC (DBLE, "Convert to double precision.", "\
-Returns @var{@1@} converted to double precision
-(@code{REAL(KIND=2)}).
-If @var{@1@} is @code{COMPLEX}, the real part of
-@var{@1@} is used for the conversion
-and the imaginary part disregarded.
-
-@xref{Sngl Intrinsic}, for the function that converts
-to single precision.
-
-@xref{Int Intrinsic}, for the function that converts
-to @code{INTEGER}.
-
-@xref{Complex Intrinsic}, for the function that converts
-to @code{COMPLEX}.
-")
-
-DEFDOC (DIM, "Difference magnitude (non-negative subtract).", "\
-Returns @samp{@var{@1@}-@var{@2@}} if @var{@1@} is greater than
-@var{@2@}; otherwise returns zero.
-")
-
-DEFDOC (DDIM, "Difference magnitude (archaic).", ARCHAIC_2 (DIM, DiM))
-DEFDOC (IDIM, "Difference magnitude (archaic).", ARCHAIC_2 (IDIM, IDiM))
-
-DEFDOC (DPROD, "Double-precision product.", "\
-Returns @samp{DBLE(@var{@1@})*DBLE(@var{@2@})}.
-")
-
-DEFDOC (EXP, "Exponential.", "\
-Returns @samp{@var{e}**@var{@1@}}, where
-@var{e} is approximately 2.7182818.
-
-@xref{Log Intrinsic}, for the inverse of this function.
-")
-
-DEFDOC (CEXP, "Exponential (archaic).", ARCHAIC (EXP, Exp))
-
-DEFDOC (DEXP, "Exponential (archaic).", ARCHAIC (EXP, Exp))
-
-DEFDOC (CDEXP, "Exponential (archaic).", ARCHAIC (EXP, Exp))
-
-DEFDOC (FLOAT, "Conversion (archaic).", ARCHAIC (REAL, Real))
-DEFDOC (DFLOAT, "Conversion (archaic).", ARCHAIC (REAL, Real))
-
-DEFDOC (IFIX, "Conversion (archaic).", ARCHAIC (INT, Int))
-
-DEFDOC (LONG, "Conversion to @code{INTEGER(KIND=1)} (archaic).", "\
-Archaic form of @code{INT()} that is specific
-to one type for @var{@1@}.
-@xref{Int Intrinsic}.
-
-The precise meaning of this intrinsic might change
-in a future version of the GNU Fortran language,
-as more is learned about how it is used.
-")
-
-DEFDOC (SHORT, "Convert to @code{INTEGER(KIND=6)} value@99@truncated to whole number.", "\
-Returns @var{@1@} with the fractional portion of its
-magnitude truncated and its sign preserved, converted
-to type @code{INTEGER(KIND=6)}.
-
-If @var{@1@} is type @code{COMPLEX}, its real part
-is truncated and converted, and its imaginary part is disgregarded.
-
-@xref{Int Intrinsic}.
-
-The precise meaning of this intrinsic might change
-in a future version of the GNU Fortran language,
-as more is learned about how it is used.
-")
-
-DEFDOC (INT2, "Convert to @code{INTEGER(KIND=6)} value@99@truncated to whole number.", "\
-Returns @var{@1@} with the fractional portion of its
-magnitude truncated and its sign preserved, converted
-to type @code{INTEGER(KIND=6)}.
-
-If @var{@1@} is type @code{COMPLEX}, its real part
-is truncated and converted, and its imaginary part is disgregarded.
-
-@xref{Int Intrinsic}.
-
-The precise meaning of this intrinsic might change
-in a future version of the GNU Fortran language,
-as more is learned about how it is used.
-")
-
-DEFDOC (INT8, "Convert to @code{INTEGER(KIND=2)} value@99@truncated to whole number.", "\
-Returns @var{@1@} with the fractional portion of its
-magnitude truncated and its sign preserved, converted
-to type @code{INTEGER(KIND=2)}.
-
-If @var{@1@} is type @code{COMPLEX}, its real part
-is truncated and converted, and its imaginary part is disgregarded.
-
-@xref{Int Intrinsic}.
-
-The precise meaning of this intrinsic might change
-in a future version of the GNU Fortran language,
-as more is learned about how it is used.
-")
-
-DEFDOC (LEN, "Length of character entity.", "\
-Returns the length of @var{@1@}.
-
-If @var{@1@} is an array, the length of an element
-of @var{@1@} is returned.
-
-Note that @var{@1@} need not be defined when this
-intrinsic is invoked, since only the length, not
-the content, of @var{@1@} is needed.
-
-@xref{Bit_Size Intrinsic}, for the function that determines
-the size of its argument in bits.
-")
-
-DEFDOC (TAN, "Tangent.", "\
-Returns the tangent of @var{@1@}, an angle measured
-in radians.
-
-@xref{ATan Intrinsic}, for the inverse of this function.
-")
-
-DEFDOC (DTAN, "Tangent (archaic).", ARCHAIC (TAN, Tan))
-
-DEFDOC (TANH, "Hyperbolic tangent.", "\
-Returns the hyperbolic tangent of @var{@1@}.
-")
-
-DEFDOC (DTANH, "Hyperbolic tangent (archaic).", ARCHAIC (TANH, TanH))
-
-DEFDOC (SNGL, "Convert (archaic).", ARCHAIC (REAL, Real))
-
-DEFDOC (SIN, "Sine.", "\
-Returns the sine of @var{@1@}, an angle measured
-in radians.
-
-@xref{ASin Intrinsic}, for the inverse of this function.
-")
-
-DEFDOC (CSIN, "Sine (archaic).", ARCHAIC (SIN, Sin))
-
-DEFDOC (DSIN, "Sine (archaic).", ARCHAIC (SIN, Sin))
-
-DEFDOC (CDSIN, "Sine (archaic).", ARCHAIC (SIN, Sin))
-
-DEFDOC (SINH, "Hyperbolic sine.", "\
-Returns the hyperbolic sine of @var{@1@}.
-")
-
-DEFDOC (DSINH, "Hyperbolic sine (archaic).", ARCHAIC (SINH, SinH))
-
-DEFDOC (LSHIFT, "Left-shift bits.", "\
-Returns @var{@1@} shifted to the left
-@var{@2@} bits.
-
-Although similar to the expression
-@samp{@var{@1@}*(2**@var{@2@})}, there
-are important differences.
-For example, the sign of the result is
-not necessarily the same as the sign of
-@var{@1@}.
-
-Currently this intrinsic is defined assuming
-the underlying representation of @var{@1@}
-is as a two's-complement integer.
-It is unclear at this point whether that
-definition will apply when a different
-representation is involved.
-
-@xref{LShift Intrinsic}, for the inverse of this function.
-
-@xref{IShft Intrinsic}, for information
-on a more widely available left-shifting
-intrinsic that is also more precisely defined.
-")
-
-DEFDOC (RSHIFT, "Right-shift bits.", "\
-Returns @var{@1@} shifted to the right
-@var{@2@} bits.
-
-Although similar to the expression
-@samp{@var{@1@}/(2**@var{@2@})}, there
-are important differences.
-For example, the sign of the result is
-undefined.
-
-Currently this intrinsic is defined assuming
-the underlying representation of @var{@1@}
-is as a two's-complement integer.
-It is unclear at this point whether that
-definition will apply when a different
-representation is involved.
-
-@xref{RShift Intrinsic}, for the inverse of this function.
-
-@xref{IShft Intrinsic}, for information
-on a more widely available right-shifting
-intrinsic that is also more precisely defined.
-")
-
-DEFDOC (LGE, "Lexically greater than or equal.", "\
-Returns @samp{.TRUE.} if @samp{@var{@1@}.GE.@var{@2@}},
-@samp{.FALSE.} otherwise.
-@var{@1@} and @var{@2@} are interpreted as containing
-ASCII character codes.
-If either value contains a character not in the ASCII
-character set, the result is processor dependent.
-
-If the @var{@1@} and @var{@2@} are not the same length,
-the shorter is compared as if spaces were appended to
-it to form a value that has the same length as the longer.
-
-The lexical comparison intrinsics @code{LGe}, @code{LGt},
-@code{LLe}, and @code{LLt} differ from the corresponding
-intrinsic operators @code{.GE.}, @code{.GT.},
-@code{.LE.}, @code{.LT.}.
-Because the ASCII collating sequence is assumed,
-the following expressions always return @samp{.TRUE.}:
-
-@smallexample
-LGE ('0', ' ')
-LGE ('A', '0')
-LGE ('a', 'A')
-@end smallexample
-
-The following related expressions do @emph{not} always
-return @samp{.TRUE.}, as they are not necessarily evaluated
-assuming the arguments use ASCII encoding:
-
-@smallexample
-'0' .GE. ' '
-'A' .GE. '0'
-'a' .GE. 'A'
-@end smallexample
-
-The same difference exists
-between @code{LGt} and @code{.GT.};
-between @code{LLe} and @code{.LE.}; and
-between @code{LLt} and @code{.LT.}.
-")
-
-DEFDOC (LGT, "Lexically greater than.", "\
-Returns @samp{.TRUE.} if @samp{@var{@1@}.GT.@var{@2@}},
-@samp{.FALSE.} otherwise.
-@var{@1@} and @var{@2@} are interpreted as containing
-ASCII character codes.
-If either value contains a character not in the ASCII
-character set, the result is processor dependent.
-
-If the @var{@1@} and @var{@2@} are not the same length,
-the shorter is compared as if spaces were appended to
-it to form a value that has the same length as the longer.
-
-@xref{LGe Intrinsic}, for information on the distinction
-between the @code{@0@} intrinsic and the @code{.GT.}
-operator.
-")
-
-DEFDOC (LLE, "Lexically less than or equal.", "\
-Returns @samp{.TRUE.} if @samp{@var{@1@}.LE.@var{@2@}},
-@samp{.FALSE.} otherwise.
-@var{@1@} and @var{@2@} are interpreted as containing
-ASCII character codes.
-If either value contains a character not in the ASCII
-character set, the result is processor dependent.
-
-If the @var{@1@} and @var{@2@} are not the same length,
-the shorter is compared as if spaces were appended to
-it to form a value that has the same length as the longer.
-
-@xref{LGe Intrinsic}, for information on the distinction
-between the @code{@0@} intrinsic and the @code{.LE.}
-operator.
-")
-
-DEFDOC (LLT, "Lexically less than.", "\
-Returns @samp{.TRUE.} if @samp{@var{@1@}.LT.@var{@2@}},
-@samp{.FALSE.} otherwise.
-@var{@1@} and @var{@2@} are interpreted as containing
-ASCII character codes.
-If either value contains a character not in the ASCII
-character set, the result is processor dependent.
-
-If the @var{@1@} and @var{@2@} are not the same length,
-the shorter is compared as if spaces were appended to
-it to form a value that has the same length as the longer.
-
-@xref{LGe Intrinsic}, for information on the distinction
-between the @code{@0@} intrinsic and the @code{.LT.}
-operator.
-")
-
-DEFDOC (SIGN, "Apply sign to magnitude.", "\
-Returns @samp{ABS(@var{@1@})*@var{s}}, where
-@var{s} is +1 if @samp{@var{@2@}.GE.0},
--1 otherwise.
-
-@xref{Abs Intrinsic}, for the function that returns
-the magnitude of a value.
-")
-
-DEFDOC (DSIGN, "Apply sign to magnitude (archaic).", ARCHAIC_2 (SIGN, Sign))
-DEFDOC (ISIGN, "Apply sign to magnitude (archaic).", ARCHAIC_2 (ISIGN, ISign))
-
-DEFDOC (REAL, "Convert value to type @code{REAL(KIND=1)}.", "\
-Converts @var{@1@} to @code{REAL(KIND=1)}.
-
-Use of @code{@0@()} with a @code{COMPLEX} argument
-(other than @code{COMPLEX(KIND=1)}) is restricted to the following case:
-
-@example
-REAL(REAL(@1@))
-@end example
-
-@noindent
-This expression converts the real part of @1@ to
-@code{REAL(KIND=1)}.
-
-@xref{RealPart Intrinsic}, for information on a GNU Fortran
-intrinsic that extracts the real part of an arbitrary
-@code{COMPLEX} value.
-
-@xref{REAL() and AIMAG() of Complex}, for more information.
-")
-
-DEFDOC (DREAL, "Convert value to type @code{REAL(KIND=2)}.", "\
-Converts @var{@1@} to @code{REAL(KIND=2)}.
-
-If @var{@1@} is type @code{COMPLEX}, its real part
-is converted (if necessary) to @code{REAL(KIND=2)},
-and its imaginary part is disregarded.
-
-Although this intrinsic is not standard Fortran,
-it is a popular extension offered by many compilers
-that support @code{DOUBLE COMPLEX}, since it offers
-the easiest way to extract the real part of a @code{DOUBLE COMPLEX}
-value without using the Fortran 90 @code{REAL()} intrinsic
-in a way that produces a return value inconsistent with
-the way many FORTRAN 77 compilers handle @code{REAL()} of
-a @code{DOUBLE COMPLEX} value.
-
-@xref{RealPart Intrinsic}, for information on a GNU Fortran
-intrinsic that avoids these areas of confusion.
-
-@xref{REAL() and AIMAG() of Complex}, for more information on
-this issue.
-")
-
-DEFDOC (IMAGPART, "Extract imaginary part of complex.", "\
-The imaginary part of @var{@1@} is returned, without conversion.
-
-@emph{Note:} The way to do this in standard Fortran 90
-is @samp{AIMAG(@var{@1@})}.
-However, when, for example, @var{@1@} is @code{DOUBLE COMPLEX},
-@samp{AIMAG(@var{@1@})} means something different for some compilers
-that are not true Fortran 90 compilers but offer some
-extensions standardized by Fortran 90 (such as the
-@code{DOUBLE COMPLEX} type, also known as @code{COMPLEX(KIND=2)}).
-
-The advantage of @code{@0@()} is that, while not necessarily
-more or less portable than @code{AIMAG()}, it is more likely to
-cause a compiler that doesn't support it to produce a diagnostic
-than generate incorrect code.
-
-@xref{REAL() and AIMAG() of Complex}, for more information.
-")
-
-DEFDOC (COMPLEX, "Build complex value from real and@99@imaginary parts.", "\
-Returns a @code{COMPLEX} value that has @samp{@1@} and @samp{@2@} as its
-real and imaginary parts, respectively.
-
-If @var{@1@} and @var{@2@} are the same type, and that type is not
-@code{INTEGER}, no data conversion is performed, and the type of
-the resulting value has the same kind value as the types
-of @var{@1@} and @var{@2@}.
-
-If @var{@1@} and @var{@2@} are not the same type, the usual type-promotion
-rules are applied to both, converting either or both to the
-appropriate @code{REAL} type.
-The type of the resulting value has the same kind value as the
-type to which both @var{@1@} and @var{@2@} were converted, in this case.
-
-If @var{@1@} and @var{@2@} are both @code{INTEGER}, they are both converted
-to @code{REAL(KIND=1)}, and the result of the @code{@0@()}
-invocation is type @code{COMPLEX(KIND=1)}.
-
-@emph{Note:} The way to do this in standard Fortran 90
-is too hairy to describe here, but it is important to
-note that @samp{CMPLX(D1,D2)} returns a @code{COMPLEX(KIND=1)}
-result even if @samp{D1} and @samp{D2} are type @code{REAL(KIND=2)}.
-Hence the availability of @code{COMPLEX()} in GNU Fortran.
-")
-
-DEFDOC (LOC, "Address of entity in core.", "\
-The @code{LOC()} intrinsic works the
-same way as the @code{%LOC()} construct.
-@xref{%LOC(),,The @code{%LOC()} Construct}, for
-more information.
-")
-
-DEFDOC (REALPART, "Extract real part of complex.", "\
-The real part of @var{@1@} is returned, without conversion.
-
-@emph{Note:} The way to do this in standard Fortran 90
-is @samp{REAL(@var{@1@})}.
-However, when, for example, @var{@1@} is @code{COMPLEX(KIND=2)},
-@samp{REAL(@var{@1@})} means something different for some compilers
-that are not true Fortran 90 compilers but offer some
-extensions standardized by Fortran 90 (such as the
-@code{DOUBLE COMPLEX} type, also known as @code{COMPLEX(KIND=2)}).
-
-The advantage of @code{@0@()} is that, while not necessarily
-more or less portable than @code{REAL()}, it is more likely to
-cause a compiler that doesn't support it to produce a diagnostic
-than generate incorrect code.
-
-@xref{REAL() and AIMAG() of Complex}, for more information.
-")
-
-DEFDOC (GETARG, "Obtain command-line argument.", "\
-Sets @var{@2@} to the @var{@1@}-th command-line argument (or to all
-blanks if there are fewer than @var{@2@} command-line arguments);
-@code{CALL @0@(0, @var{value})} sets @var{value} to the name of the
-program (on systems that support this feature).
-
-@xref{IArgC Intrinsic}, for information on how to get the number
-of arguments.
-")
-
-DEFDOC (ABORT, "Abort the program.", "\
-Prints a message and potentially causes a core dump via @code{abort(3)}.
-")
-
-DEFDOC (EXIT, "Terminate the program.", "\
-Exit the program with status @var{@1@} after closing open Fortran
-I/O units and otherwise behaving as @code{exit(2)}.
-If @var{@1@} is omitted the canonical `success' value
-will be returned to the system.
-")
-
-DEFDOC (IARGC, "Obtain count of command-line arguments.", "\
-Returns the number of command-line arguments.
-
-This count does not include the specification of the program
-name itself.
-")
-
-DEFDOC (CTIME_func, "Convert time to Day Mon dd hh:mm:ss yyyy.", "\
-Converts @var{@1@}, a system time value, such as returned by
-@code{TIME8()}, to a string of the form @samp{Sat Aug 19 18:13:14 1995},
-and returns that string as the function value.
-
-@xref{Time8 Intrinsic}.
-")
-
-DEFDOC (CTIME_subr, "Convert time to Day Mon dd hh:mm:ss yyyy.", "\
-Converts @var{@2@}, a system time value, such as returned by
-@code{TIME8()}, to a string of the form @samp{Sat Aug 19 18:13:14 1995},
-and returns that string in @var{@1@}.
-
-@xref{Time8 Intrinsic}.
-
-Some non-GNU implementations of Fortran provide this intrinsic as
-only a function, not as a subroutine.
-")
-
-DEFDOC (DATE, "Get current date as dd-Mon-yy.", "\
-Returns @var{@1@} in the form @samp{@var{dd}-@var{mmm}-@var{yy}},
-representing the numeric day of the month @var{dd}, a three-character
-abbreviation of the month name @var{mmm} and the last two digits of
-the year @var{yy}, e.g.@ @samp{25-Nov-96}.
-
-This intrinsic is not recommended, due to the year 2000 approaching.
-@xref{CTime Intrinsic (subroutine)}, for information on obtaining more digits
-for the current (or any) date.
-")
-
-DEFDOC (DTIME_func, "Get elapsed time since last time.", "\
-Initially, return the number of seconds of runtime
-since the start of the process's execution
-as the function value,
-and the user and system components of this in @samp{@var{@1@}(1)}
-and @samp{@var{@1@}(2)} respectively.
-The functions' value is equal to @samp{@var{@1@}(1) + @var{@1@}(2)}.
-
-Subsequent invocations of @samp{@0@()} return values accumulated since the
-previous invocation.
-
-Due to the side effects performed by this intrinsic, the function
-form is not recommended.
-")
-
-DEFDOC (DTIME_subr, "Get elapsed time since last time.", "\
-Initially, return the number of seconds of runtime
-since the start of the process's execution
-in @var{@1@},
-and the user and system components of this in @samp{@var{@2@}(1)}
-and @samp{@var{@2@}(2)} respectively.
-The value of @var{@1@} is equal to @samp{@var{@2@}(1) + @var{@2@}(2)}.
-
-Subsequent invocations of @samp{@0@()} set values based on accumulations
-since the previous invocation.
-
-Some non-GNU implementations of Fortran provide this intrinsic as
-only a function, not as a subroutine.
-")
-
-DEFDOC (ETIME_func, "Get elapsed time for process.", "\
-Return the number of seconds of runtime
-since the start of the process's execution
-as the function value,
-and the user and system components of this in @samp{@var{@1@}(1)}
-and @samp{@var{@1@}(2)} respectively.
-The functions' value is equal to @samp{@var{@1@}(1) + @var{@1@}(2)}.
-")
-
-DEFDOC (ETIME_subr, "Get elapsed time for process.", "\
-Return the number of seconds of runtime
-since the start of the process's execution
-in @var{@1@},
-and the user and system components of this in @samp{@var{@2@}(1)}
-and @samp{@var{@2@}(2)} respectively.
-The value of @var{@1@} is equal to @samp{@var{@2@}(1) + @var{@2@}(2)}.
-
-Some non-GNU implementations of Fortran provide this intrinsic as
-only a function, not as a subroutine.
-")
-
-DEFDOC (FDATE_func, "Get current time as Day Mon dd hh:mm:ss yyyy.", "\
-Returns the current date (using the same format as @code{CTIME()}).
-
-Equivalent to:
-
-@example
-CTIME(TIME8())
-@end example
-
-@xref{CTime Intrinsic (function)}.
-")
-
-DEFDOC (FDATE_subr, "Get current time as Day Mon dd hh:mm:ss yyyy.", "\
-Returns the current date (using the same format as @code{CTIME()})
-in @var{@1@}.
-
-Equivalent to:
-
-@example
-CALL CTIME(@var{@1@}, TIME8())
-@end example
-
-@xref{CTime Intrinsic (subroutine)}.
-
-Some non-GNU implementations of Fortran provide this intrinsic as
-only a function, not as a subroutine.
-")
-
-DEFDOC (GMTIME, "Convert time to GMT time info.", "\
-Given a system time value @var{@1@}, fills @var{@2@} with values
-extracted from it appropriate to the GMT time zone using
-@code{gmtime(3)}.
-
-The array elements are as follows:
-
-@enumerate
-@item
-Seconds after the minute, range 0--59 or 0--61 to allow for leap
-seconds
-
-@item
-Minutes after the hour, range 0--59
-
-@item
-Hours past midnight, range 0--23
-
-@item
-Day of month, range 0--31
-
-@item
-Number of months since January, range 0--12
-
-@item
-Years since 1900
-
-@item
-Number of days since Sunday, range 0--6
-
-@item
-Days since January 1
-
-@item
-Daylight savings indicator: positive if daylight savings is in effect,
-zero if not, and negative if the information isn't available.
-@end enumerate
-")
-
-DEFDOC (LTIME, "Convert time to local time info.", "\
-Given a system time value @var{@1@}, fills @var{@2@} with values
-extracted from it appropriate to the GMT time zone using
-@code{localtime(3)}.
-
-The array elements are as follows:
-
-@enumerate
-@item
-Seconds after the minute, range 0--59 or 0--61 to allow for leap
-seconds
-
-@item
-Minutes after the hour, range 0--59
-
-@item
-Hours past midnight, range 0--23
-
-@item
-Day of month, range 0--31
-
-@item
-Number of months since January, range 0--12
-
-@item
-Years since 1900
-
-@item
-Number of days since Sunday, range 0--6
-
-@item
-Days since January 1
-
-@item
-Daylight savings indicator: positive if daylight savings is in effect,
-zero if not, and negative if the information isn't available.
-@end enumerate
-")
-
-DEFDOC (IDATE_unix, "Get local time info.", "\
-Fills @var{@1@} with the numerical values at the current local time
-of day, month (in the range 1--12), and year in elements 1, 2, and 3,
-respectively.
-The year has four significant digits.
-")
-
-DEFDOC (IDATE_vxt, "Get local time info (VAX/VMS).", "\
-Returns the numerical values of the current local time.
-The month (in the range 1--12) is returned in @var{@1@},
-the day (in the range 1--7) in @var{@2@},
-and the year in @var{@3@} (in the range 0--99).
-
-This intrinsic is not recommended, due to the year 2000 approaching.
-")
-
-DEFDOC (ITIME, "Get local time of day.", "\
-Returns the current local time hour, minutes, and seconds in elements
-1, 2, and 3 of @var{@1@}, respectively.
-")
-
-DEFDOC (MCLOCK, "Get number of clock ticks for process.", "\
-Returns the number of clock ticks since the start of the process.
-Supported on systems with @code{clock(3)} (q.v.).
-
-This intrinsic is not fully portable, such as to systems
-with 32-bit @code{INTEGER} types but supporting times
-wider than 32 bits.
-@xref{MClock8 Intrinsic}, for information on a
-similar intrinsic that might be portable to more
-GNU Fortran implementations, though to fewer
-Fortran compilers.
-
-If the system does not support @code{clock(3)},
--1 is returned.
-")
-
-DEFDOC (MCLOCK8, "Get number of clock ticks for process.", "\
-Returns the number of clock ticks since the start of the process.
-Supported on systems with @code{clock(3)} (q.v.).
-
-No Fortran implementations other than GNU Fortran are
-known to support this intrinsic at the time of this
-writing.
-@xref{MClock Intrinsic}, for information on a
-similar intrinsic that might be portable to more Fortran
-compilers, though to fewer GNU Fortran implementations.
-
-If the system does not support @code{clock(3)},
--1 is returned.
-")
-
-DEFDOC (SECNDS, "Get local time offset since midnight.", "\
-Returns the local time in seconds since midnight minus the value
-@var{@1@}.
-")
-
-DEFDOC (SECOND_func, "Get CPU time for process in seconds.", "\
-Returns the process's runtime in seconds---the same value as the
-UNIX function @code{etime} returns.
-
-This routine is known from Cray Fortran.
-")
-
-DEFDOC (SECOND_subr, "Get CPU time for process@99@in seconds.", "\
-Returns the process's runtime in seconds in @var{@1@}---the same value
-as the UNIX function @code{etime} returns.
-
-This routine is known from Cray Fortran.  @xref{Cpu_Time Intrinsic}
-for a standard equivalent.
-")
-
-DEFDOC (SYSTEM_CLOCK, "Get current system clock value.", "\
-Returns in @var{@1@} the current value of the system clock; this is
-the value returned by the UNIX function @code{times(2)}
-in this implementation, but
-isn't in general.
-@var{@2@} is the number of clock ticks per second and
-@var{@3@} is the maximum value this can take, which isn't very useful
-in this implementation since it's just the maximum C @code{unsigned
-int} value.
-")
-
-DEFDOC (CPU_TIME, "Get current CPU time.", "\
-Returns in @var{@1@} the current value of the system time.
-This implementation of the Fortran 95 intrinsic is just an alias for
-@code{second} @xref{Second Intrinsic (subroutine)}.
-")
-
-DEFDOC (TIME8, "Get current time as time value.", "\
-Returns the current time encoded as a long integer
-(in the manner of the UNIX function @code{time(3)}).
-This value is suitable for passing to @code{CTIME},
-@code{GMTIME}, and @code{LTIME}.
-
-No Fortran implementations other than GNU Fortran are
-known to support this intrinsic at the time of this
-writing.
-@xref{Time Intrinsic (UNIX)}, for information on a
-similar intrinsic that might be portable to more Fortran
-compilers, though to fewer GNU Fortran implementations.
-")
-
-DEFDOC (TIME_unix, "Get current time as time value.", "\
-Returns the current time encoded as an integer
-(in the manner of the UNIX function @code{time(3)}).
-This value is suitable for passing to @code{CTIME},
-@code{GMTIME}, and @code{LTIME}.
-
-This intrinsic is not fully portable, such as to systems
-with 32-bit @code{INTEGER} types but supporting times
-wider than 32 bits.
-@xref{Time8 Intrinsic}, for information on a
-similar intrinsic that might be portable to more
-GNU Fortran implementations, though to fewer
-Fortran compilers.
-")
-
-#define BES(num,n,val) "\
-Calculates the Bessel function of the " #num " kind of \
-order " #n " of @var{@" #val "@}.\n\
-See @code{bessel(3m)}, on whose implementation the \
-function depends.\
-"
-
-DEFDOC (BESJ0, "Bessel function.", BES (first, 0, 1))
-DEFDOC (BESJ1, "Bessel function.", BES (first, 1, 1))
-DEFDOC (BESJN, "Bessel function.", BES (first, @var{N}, 2))
-DEFDOC (BESY0, "Bessel function.", BES (second, 0, 1))
-DEFDOC (BESY1, "Bessel function.", BES (second, 1, 1))
-DEFDOC (BESYN, "Bessel function.", BES (second, @var{N}, 2))
-DEFDOC (DBESJ0, "Bessel function (archaic).", ARCHAIC (BESJ0, BesJ0))
-DEFDOC (DBESJ1, "Bessel function (archaic).", ARCHAIC (BESJ1, BesJ1))
-DEFDOC (DBESJN, "Bessel function (archaic).", ARCHAIC_2nd (BESJN, BesJN))
-DEFDOC (DBESY0, "Bessel function (archaic).", ARCHAIC (BESY0, BesY0))
-DEFDOC (DBESY1, "Bessel function (archaic).", ARCHAIC (BESY1, BesY1))
-DEFDOC (DBESYN, "Bessel function (archaic).", ARCHAIC_2nd (BESYN, BesYN))
-
-DEFDOC (ERF, "Error function.", "\
-Returns the error function of @var{@1@}.
-See @code{erf(3m)}, which provides the implementation.
-")
-
-DEFDOC (ERFC, "Complementary error function.", "\
-Returns the complementary error function of @var{@1@}:
-@samp{ERFC(R) = 1 - ERF(R)} (except that the result may be more
-accurate than explicitly evaluating that formulae would give).
-See @code{erfc(3m)}, which provides the implementation.
-")
-
-DEFDOC (DERF, "Error function (archaic).", ARCHAIC (ERF, ErF))
-DEFDOC (DERFC, "Complementary error function (archaic).", ARCHAIC (ERFC, ErFC))
-
-DEFDOC (IRAND, "Random number.", "\
-Returns a uniform quasi-random number up to a system-dependent limit.
-If @var{@1@} is 0, the next number in sequence is returned; if
-@var{@1@} is 1, the generator is restarted by calling the UNIX function
-@samp{srand(0)}; if @var{@1@} has any other value,
-it is used as a new seed with @code{srand()}.
-
-@xref{SRand Intrinsic}.
-
-@emph{Note:} As typically implemented (by the routine of the same
-name in the C library), this random number generator is a very poor
-one, though the BSD and GNU libraries provide a much better
-implementation than the `traditional' one.
-On a different system you almost certainly want to use something better.
-")
-
-DEFDOC (RAND, "Random number.", "\
-Returns a uniform quasi-random number between 0 and 1.
-If @var{@1@} is 0, the next number in sequence is returned; if
-@var{@1@} is 1, the generator is restarted by calling @samp{srand(0)};
-if @var{@1@} has any other value, it is used as a new seed with
-@code{srand}.
-
-@xref{SRand Intrinsic}.
-
-@emph{Note:} As typically implemented (by the routine of the same
-name in the C library), this random number generator is a very poor
-one, though the BSD and GNU libraries provide a much better
-implementation than the `traditional' one.
-On a different system you
-almost certainly want to use something better.
-")
-
-DEFDOC (SRAND, "Random seed.", "\
-Reinitialises the generator with the seed in @var{@1@}.
-@xref{IRand Intrinsic}.
-@xref{Rand Intrinsic}.
-")
-
-DEFDOC (ACCESS, "Check file accessibility.", "\
-Checks file @var{@1@} for accessibility in the mode specified by @var{@2@} and
-returns 0 if the file is accessible in that mode, otherwise an error
-code if the file is inaccessible or @var{@2@} is invalid.
-See @code{access(2)}.
-A null character (@samp{CHAR(0)}) marks the end of
-the name in @var{@1@}---otherwise,
-trailing blanks in @var{@1@} are ignored.
-@var{@2@} may be a concatenation of any of the following characters:
-
-@table @samp
-@item r
-Read permission
-
-@item w
-Write permission
-
-@item x
-Execute permission
-
-@item @kbd{SPC}
-Existence
-@end table
-")
-
-DEFDOC (CHDIR_subr, "Change directory.", "\
-Sets the current working directory to be @var{@1@}.
-If the @var{@2@} argument is supplied, it contains 0
-on success or a non-zero error code otherwise upon return.
-See @code{chdir(3)}.
-
-Some non-GNU implementations of Fortran provide this intrinsic as
-only a function, not as a subroutine, or do not support the
-(optional) @var{@2@} argument.
-")
-
-DEFDOC (CHDIR_func, "Change directory.", "\
-Sets the current working directory to be @var{@1@}.
-Returns 0 on success or a non-zero error code.
-See @code{chdir(3)}.
-
-Due to the side effects performed by this intrinsic, the function
-form is not recommended.
-")
-
-DEFDOC (CHMOD_func, "Change file modes.", "\
-Changes the access mode of file @var{@1@} according to the
-specification @var{@2@}, which is given in the format of
-@code{chmod(1)}.
-A null character (@samp{CHAR(0)}) marks the end of
-the name in @var{@1@}---otherwise,
-trailing blanks in @var{@1@} are ignored.
-Currently, @var{@1@} must not contain the single quote
-character.
-
-Returns 0 on success or a non-zero error code otherwise.
-
-Note that this currently works
-by actually invoking @code{/bin/chmod} (or the @code{chmod} found when
-the library was configured) and so may fail in some circumstances and
-will, anyway, be slow.
-
-Due to the side effects performed by this intrinsic, the function
-form is not recommended.
-")
-
-DEFDOC (CHMOD_subr, "Change file modes.", "\
-Changes the access mode of file @var{@1@} according to the
-specification @var{@2@}, which is given in the format of
-@code{chmod(1)}.
-A null character (@samp{CHAR(0)}) marks the end of
-the name in @var{@1@}---otherwise,
-trailing blanks in @var{@1@} are ignored.
-Currently, @var{@1@} must not contain the single quote
-character.
-
-If the @var{@3@} argument is supplied, it contains
-0 on success or a non-zero error code upon return.
-
-Note that this currently works
-by actually invoking @code{/bin/chmod} (or the @code{chmod} found when
-the library was configured) and so may fail in some circumstances and
-will, anyway, be slow.
-
-Some non-GNU implementations of Fortran provide this intrinsic as
-only a function, not as a subroutine, or do not support the
-(optional) @var{@3@} argument.
-")
-
-DEFDOC (GETCWD_func, "Get current working directory.", "\
-Places the current working directory in @var{@1@}.
-Returns 0 on
-success, otherwise a non-zero error code
-(@code{ENOSYS} if the system does not provide @code{getcwd(3)}
-or @code{getwd(3)}).
-")
-
-DEFDOC (GETCWD_subr, "Get current working directory.", "\
-Places the current working directory in @var{@1@}.
-If the @var{@2@} argument is supplied, it contains 0
-success or a non-zero error code upon return
-(@code{ENOSYS} if the system does not provide @code{getcwd(3)}
-or @code{getwd(3)}).
-
-Some non-GNU implementations of Fortran provide this intrinsic as
-only a function, not as a subroutine, or do not support the
-(optional) @var{@2@} argument.
-")
-
-DEFDOC (FSTAT_func, "Get file information.", "\
-Obtains data about the file open on Fortran I/O unit @var{@1@} and
-places them in the array @var{@2@}.
-The values in this array are
-extracted from the @code{stat} structure as returned by
-@code{fstat(2)} q.v., as follows:
-
-@enumerate
-@item
-File mode
-
-@item
-Inode number
-
-@item
-ID of device containing directory entry for file
-
-@item
-Device id (if relevant)
-
-@item
-Number of links
-
-@item
-Owner's uid
-
-@item
-Owner's gid
-
-@item
-File size (bytes)
-
-@item
-Last access time
-
-@item
-Last modification time
-
-@item
-Last file status change time
-
-@item
-Preferred I/O block size
-
-@item
-Number of blocks allocated
-@end enumerate
-
-Not all these elements are relevant on all systems.
-If an element is not relevant, it is returned as 0.
-
-Returns 0 on success or a non-zero error code.
-")
-
-DEFDOC (FSTAT_subr, "Get file information.", "\
-Obtains data about the file open on Fortran I/O unit @var{@1@} and
-places them in the array @var{@2@}.
-The values in this array are
-extracted from the @code{stat} structure as returned by
-@code{fstat(2)} q.v., as follows:
-
-@enumerate
-@item
-File mode
-
-@item
-Inode number
-
-@item
-ID of device containing directory entry for file
-
-@item
-Device id (if relevant)
-
-@item
-Number of links
-
-@item
-Owner's uid
-
-@item
-Owner's gid
-
-@item
-File size (bytes)
-
-@item
-Last access time
-
-@item
-Last modification time
-
-@item
-Last file status change time
-
-@item
-Preferred I/O block size
-
-@item
-Number of blocks allocated
-@end enumerate
-
-Not all these elements are relevant on all systems.
-If an element is not relevant, it is returned as 0.
-
-If the @var{@3@} argument is supplied, it contains
-0 on success or a non-zero error code upon return.
-
-Some non-GNU implementations of Fortran provide this intrinsic as
-only a function, not as a subroutine, or do not support the
-(optional) @var{@3@} argument.
-")
-
-DEFDOC (LSTAT_func, "Get file information.", "\
-Obtains data about the given file @var{@1@} and places them in the array
-@var{@2@}.
-A null character (@samp{CHAR(0)}) marks the end of
-the name in @var{@1@}---otherwise,
-trailing blanks in @var{@1@} are ignored.
-If @var{@1@} is a symbolic link it returns data on the
-link itself, so the routine is available only on systems that support
-symbolic links.
-The values in this array are extracted from the
-@code{stat} structure as returned by @code{fstat(2)} q.v., as follows:
-
-@enumerate
-@item
-File mode
-
-@item
-Inode number
-
-@item
-ID of device containing directory entry for file
-
-@item
-Device id (if relevant)
-
-@item
-Number of links
-
-@item
-Owner's uid
-
-@item
-Owner's gid
-
-@item
-File size (bytes)
-
-@item
-Last access time
-
-@item
-Last modification time
-
-@item
-Last file status change time
-
-@item
-Preferred I/O block size
-
-@item
-Number of blocks allocated
-@end enumerate
-
-Not all these elements are relevant on all systems.
-If an element is not relevant, it is returned as 0.
-
-Returns 0 on success or a non-zero error code
-(@code{ENOSYS} if the system does not provide @code{lstat(2)}).
-")
-
-DEFDOC (LSTAT_subr, "Get file information.", "\
-Obtains data about the given file @var{@1@} and places them in the array
-@var{@2@}.
-A null character (@samp{CHAR(0)}) marks the end of
-the name in @var{@1@}---otherwise,
-trailing blanks in @var{@1@} are ignored.
-If @var{@1@} is a symbolic link it returns data on the
-link itself, so the routine is available only on systems that support
-symbolic links.
-The values in this array are extracted from the
-@code{stat} structure as returned by @code{fstat(2)} q.v., as follows:
-
-@enumerate
-@item
-File mode
-
-@item
-Inode number
-
-@item
-ID of device containing directory entry for file
-
-@item
-Device id (if relevant)
-
-@item
-Number of links
-
-@item
-Owner's uid
-
-@item
-Owner's gid
-
-@item
-File size (bytes)
-
-@item
-Last access time
-
-@item
-Last modification time
-
-@item
-Last file status change time
-
-@item
-Preferred I/O block size
-
-@item
-Number of blocks allocated
-@end enumerate
-
-Not all these elements are relevant on all systems.
-If an element is not relevant, it is returned as 0.
-
-If the @var{@3@} argument is supplied, it contains
-0 on success or a non-zero error code upon return
-(@code{ENOSYS} if the system does not provide @code{lstat(2)}).
-
-Some non-GNU implementations of Fortran provide this intrinsic as
-only a function, not as a subroutine, or do not support the
-(optional) @var{@3@} argument.
-")
-
-DEFDOC (STAT_func, "Get file information.", "\
-Obtains data about the given file @var{@1@} and places them in the array
-@var{@2@}.
-A null character (@samp{CHAR(0)}) marks the end of
-the name in @var{@1@}---otherwise,
-trailing blanks in @var{@1@} are ignored.
-The values in this array are extracted from the
-@code{stat} structure as returned by @code{fstat(2)} q.v., as follows:
-
-@enumerate
-@item
-File mode
-
-@item
-Inode number
-
-@item
-ID of device containing directory entry for file
-
-@item
-Device id (if relevant)
-
-@item
-Number of links
-
-@item
-Owner's uid
-
-@item
-Owner's gid
-
-@item
-File size (bytes)
-
-@item
-Last access time
-
-@item
-Last modification time
-
-@item
-Last file status change time
-
-@item
-Preferred I/O block size
-
-@item
-Number of blocks allocated
-@end enumerate
-
-Not all these elements are relevant on all systems.
-If an element is not relevant, it is returned as 0.
-
-Returns 0 on success or a non-zero error code.
-")
-
-DEFDOC (STAT_subr, "Get file information.", "\
-Obtains data about the given file @var{@1@} and places them in the array
-@var{@2@}.
-A null character (@samp{CHAR(0)}) marks the end of
-the name in @var{@1@}---otherwise,
-trailing blanks in @var{@1@} are ignored.
-The values in this array are extracted from the
-@code{stat} structure as returned by @code{fstat(2)} q.v., as follows:
-
-@enumerate
-@item
-File mode
-
-@item
-Inode number
-
-@item
-ID of device containing directory entry for file
-
-@item
-Device id (if relevant)
-
-@item
-Number of links
-
-@item
-Owner's uid
-
-@item
-Owner's gid
-
-@item
-File size (bytes)
-
-@item
-Last access time
-
-@item
-Last modification time
-
-@item
-Last file status change time
-
-@item
-Preferred I/O block size
-
-@item
-Number of blocks allocated
-@end enumerate
-
-Not all these elements are relevant on all systems.
-If an element is not relevant, it is returned as 0.
-
-If the @var{@3@} argument is supplied, it contains
-0 on success or a non-zero error code upon return.
-
-Some non-GNU implementations of Fortran provide this intrinsic as
-only a function, not as a subroutine, or do not support the
-(optional) @var{@3@} argument.
-")
-
-DEFDOC (LINK_subr, "Make hard link in file system.", "\
-Makes a (hard) link from file @var{@1@} to @var{@2@}.
-A null character (@samp{CHAR(0)}) marks the end of
-the names in @var{@1@} and @var{@2@}---otherwise,
-trailing blanks in @var{@1@} and @var{@2@} are ignored.
-If the @var{@3@} argument is supplied, it contains
-0 on success or a non-zero error code upon return.
-See @code{link(2)}.
-
-Some non-GNU implementations of Fortran provide this intrinsic as
-only a function, not as a subroutine, or do not support the
-(optional) @var{@3@} argument.
-")
-
-DEFDOC (LINK_func, "Make hard link in file system.", "\
-Makes a (hard) link from file @var{@1@} to @var{@2@}.
-A null character (@samp{CHAR(0)}) marks the end of
-the names in @var{@1@} and @var{@2@}---otherwise,
-trailing blanks in @var{@1@} and @var{@2@} are ignored.
-Returns 0 on success or a non-zero error code.
-See @code{link(2)}.
-
-Due to the side effects performed by this intrinsic, the function
-form is not recommended.
-")
-
-DEFDOC (SYMLNK_subr, "Make symbolic link in file system.", "\
-Makes a symbolic link from file @var{@1@} to @var{@2@}.
-A null character (@samp{CHAR(0)}) marks the end of
-the names in @var{@1@} and @var{@2@}---otherwise,
-trailing blanks in @var{@1@} and @var{@2@} are ignored.
-If the @var{@3@} argument is supplied, it contains
-0 on success or a non-zero error code upon return
-(@code{ENOSYS} if the system does not provide @code{symlink(2)}).
-
-Some non-GNU implementations of Fortran provide this intrinsic as
-only a function, not as a subroutine, or do not support the
-(optional) @var{@3@} argument.
-")
-
-DEFDOC (SYMLNK_func, "Make symbolic link in file system.", "\
-Makes a symbolic link from file @var{@1@} to @var{@2@}.
-A null character (@samp{CHAR(0)}) marks the end of
-the names in @var{@1@} and @var{@2@}---otherwise,
-trailing blanks in @var{@1@} and @var{@2@} are ignored.
-Returns 0 on success or a non-zero error code
-(@code{ENOSYS} if the system does not provide @code{symlink(2)}).
-
-Due to the side effects performed by this intrinsic, the function
-form is not recommended.
-")
-
-DEFDOC (RENAME_subr, "Rename file.", "\
-Renames the file @var{@1@} to @var{@2@}.
-A null character (@samp{CHAR(0)}) marks the end of
-the names in @var{@1@} and @var{@2@}---otherwise,
-trailing blanks in @var{@1@} and @var{@2@} are ignored.
-See @code{rename(2)}.
-If the @var{@3@} argument is supplied, it contains
-0 on success or a non-zero error code upon return.
-
-Some non-GNU implementations of Fortran provide this intrinsic as
-only a function, not as a subroutine, or do not support the
-(optional) @var{@3@} argument.
-")
-
-DEFDOC (RENAME_func, "Rename file.", "\
-Renames the file @var{@1@} to @var{@2@}.
-A null character (@samp{CHAR(0)}) marks the end of
-the names in @var{@1@} and @var{@2@}---otherwise,
-trailing blanks in @var{@1@} and @var{@2@} are ignored.
-See @code{rename(2)}.
-Returns 0 on success or a non-zero error code.
-
-Due to the side effects performed by this intrinsic, the function
-form is not recommended.
-")
-
-DEFDOC (UMASK_subr, "Set file creation permissions mask.", "\
-Sets the file creation mask to @var{@1@} and returns the old value in
-argument @var{@2@} if it is supplied.
-See @code{umask(2)}.
-
-Some non-GNU implementations of Fortran provide this intrinsic as
-only a function, not as a subroutine.
-")
-
-DEFDOC (UMASK_func, "Set file creation permissions mask.", "\
-Sets the file creation mask to @var{@1@} and returns the old value.
-See @code{umask(2)}.
-
-Due to the side effects performed by this intrinsic, the function
-form is not recommended.
-")
-
-DEFDOC (UNLINK_subr, "Unlink file.", "\
-Unlink the file @var{@1@}.
-A null character (@samp{CHAR(0)}) marks the end of
-the name in @var{@1@}---otherwise,
-trailing blanks in @var{@1@} are ignored.
-If the @var{@2@} argument is supplied, it contains
-0 on success or a non-zero error code upon return.
-See @code{unlink(2)}.
-
-Some non-GNU implementations of Fortran provide this intrinsic as
-only a function, not as a subroutine, or do not support the
-(optional) @var{@2@} argument.
-")
-
-DEFDOC (UNLINK_func, "Unlink file.", "\
-Unlink the file @var{@1@}.
-A null character (@samp{CHAR(0)}) marks the end of
-the name in @var{@1@}---otherwise,
-trailing blanks in @var{@1@} are ignored.
-Returns 0 on success or a non-zero error code.
-See @code{unlink(2)}.
-
-Due to the side effects performed by this intrinsic, the function
-form is not recommended.
-")
-
-DEFDOC (GERROR, "Get error message for last error.", "\
-Returns the system error message corresponding to the last system
-error (C @code{errno}).
-")
-
-DEFDOC (IERRNO, "Get error number for last error.", "\
-Returns the last system error number (corresponding to the C
-@code{errno}).
-")
-
-DEFDOC (PERROR, "Print error message for last error.", "\
-Prints (on the C @code{stderr} stream) a newline-terminated error
-message corresponding to the last system error.
-This is prefixed by @var{@1@}, a colon and a space.
-See @code{perror(3)}.
-")
-DEFDOC (GETGID, "Get process group id.", "\
-Returns the group id for the current process.
-")
-DEFDOC (GETUID, "Get process user id.", "\
-Returns the user id for the current process.
-")
-DEFDOC (GETPID, "Get process id.", "\
-Returns the process id for the current process.
-")
-
-DEFDOC (GETENV, "Get environment variable.", "\
-Sets @var{@2@} to the value of environment variable given by the
-value of @var{@1@} (@code{$name} in shell terms) or to blanks if
-@code{$name} has not been set.
-A null character (@samp{CHAR(0)}) marks the end of
-the name in @var{@1@}---otherwise,
-trailing blanks in @var{@1@} are ignored.
-")
-
-DEFDOC (GETLOG, "Get login name.", "\
-Returns the login name for the process in @var{@1@}.
-")
-
-DEFDOC (HOSTNM_func, "Get host name.", "\
-Fills @var{@1@} with the system's host name returned by
-@code{gethostname(2)}, returning 0 on success or a non-zero error code
-(@code{ENOSYS} if the system does not provide @code{gethostname(2)}).
-
-This intrinsic is not available on all systems.
-")
-
-DEFDOC (HOSTNM_subr, "Get host name.", "\
-Fills @var{@1@} with the system's host name returned by
-@code{gethostname(2)}.
-If the @var{@2@} argument is supplied, it contains
-0 on success or a non-zero error code upon return
-(@code{ENOSYS} if the system does not provide @code{gethostname(2)}).
-
-This intrinsic is not available on all systems.
-
-Some non-GNU implementations of Fortran provide this intrinsic as
-only a function, not as a subroutine, or do not support the
-(optional) @var{@2@} argument.
-")
-
-/* Fixme: stream I/O */
-
-DEFDOC (FLUSH, "Flush buffered output.", "\
-Flushes Fortran unit(s) currently open for output.
-Without the optional argument, all such units are flushed,
-otherwise just the unit specified by @var{@1@}.
-
-Some non-GNU implementations of Fortran provide this intrinsic
-as a library procedure that might or might not support the
-(optional) @var{@1@} argument.
-")
-
-DEFDOC (FNUM, "Get file descriptor from Fortran unit number.", "\
-Returns the Unix file descriptor number corresponding to the open
-Fortran I/O unit @var{@1@}.
-This could be passed to an interface to C I/O routines.
-")
-
-#define IOWARN "
-Stream I/O should not be mixed with normal record-oriented (formatted or
-unformatted) I/O on the same unit; the results are unpredictable.
-"
-
-DEFDOC (FGET_func, "Read a character from unit 5 stream-wise.", "\
-Reads a single character into @var{@1@} in stream mode from unit 5
-(by-passing normal formatted input) using @code{getc(3)}.
-Returns 0 on
-success, @minus{}1 on end-of-file, and the error code from
-@code{ferror(3)} otherwise.
-" IOWARN)
-
-DEFDOC (FGET_subr, "Read a character from unit 5 stream-wise.", "\
-Reads a single character into @var{@1@} in stream mode from unit 5
-(by-passing normal formatted output) using @code{getc(3)}.
-Returns in
-@var{@2@} 0 on success, @minus{}1 on end-of-file, and the error code
-from @code{ferror(3)} otherwise.
-" IOWARN)
-
-DEFDOC (FGETC_func, "Read a character stream-wise.", "\
-Reads a single character into @var{@2@} in stream mode from unit @var{@1@}
-(by-passing normal formatted output) using @code{getc(3)}.
-Returns 0 on
-success, @minus{}1 on end-of-file, and the error code from
-@code{ferror(3)} otherwise.
-" IOWARN)
-
-DEFDOC (FGETC_subr, "Read a character stream-wise.", "\
-Reads a single character into @var{@2@} in stream mode from unit @var{@1@}
-(by-passing normal formatted output) using @code{getc(3)}.
-Returns in
-@var{@3@} 0 on success, @minus{}1 on end-of-file, and the error code from
-@code{ferror(3)} otherwise.
-" IOWARN)
-
-DEFDOC (FPUT_func, "Write a character to unit 6 stream-wise.", "\
-Writes the single character @var{@1@} in stream mode to unit 6
-(by-passing normal formatted output) using @code{getc(3)}.
-Returns 0 on
-success, the error code from @code{ferror(3)} otherwise.
-" IOWARN)
-
-DEFDOC (FPUT_subr, "Write a character to unit 6 stream-wise.", "\
-Writes the single character @var{@1@} in stream mode to unit 6
-(by-passing normal formatted output) using @code{putc(3)}.
-Returns in
-@var{@2@} 0 on success, the error code from @code{ferror(3)} otherwise.
-" IOWARN)
-
-DEFDOC (FPUTC_func, "Write a character stream-wise.", "\
-Writes the single character @var{@2@} in stream mode to unit @var{@1@}
-(by-passing normal formatted output) using @code{putc(3)}.
-Returns 0 on
-success, the error code from @code{ferror(3)} otherwise.
-" IOWARN)
-
-DEFDOC (FPUTC_subr, "Write a character stream-wise.", "\
-Writes the single character @var{@1@} in stream mode to unit 6
-(by-passing normal formatted output) using @code{putc(3)}.
-Returns in
-@var{@2@} 0 on success, the error code from @code{ferror(3)} otherwise.
-" IOWARN)
-
-DEFDOC (FSEEK, "Position file (low-level).", "\
-Attempts to move Fortran unit @var{@1@} to the specified
-@var{Offset}: absolute offset if @var{@2@}=0; relative to the
-current offset if @var{@2@}=1; relative to the end of the file if
-@var{@2@}=2.
-It branches to label @var{@3@} if @var{@1@} is
-not open or if the call otherwise fails.
-")
-
-DEFDOC (FTELL_func, "Get file position (low-level).", "\
-Returns the current offset of Fortran unit @var{@1@}
-(or @minus{}1 if @var{@1@} is not open).
-")
-
-DEFDOC (FTELL_subr, "Get file position (low-level).", "\
-Sets @var{@2@} to the current offset of Fortran unit @var{@1@}
-(or to @minus{}1 if @var{@1@} is not open).
-
-Some non-GNU implementations of Fortran provide this intrinsic as
-only a function, not as a subroutine.
-")
-
-DEFDOC (ISATTY, "Is unit connected to a terminal?", "\
-Returns @code{.TRUE.} if and only if the Fortran I/O unit
-specified by @var{@1@} is connected
-to a terminal device.
-See @code{isatty(3)}.
-")
-
-DEFDOC (TTYNAM_func, "Get name of terminal device for unit.", "\
-Returns the name of the terminal device open on logical unit
-@var{@1@} or a blank string if @var{@1@} is not connected to a
-terminal.
-")
-
-DEFDOC (TTYNAM_subr, "Get name of terminal device for unit.", "\
-Sets @var{@1@} to the name of the terminal device open on logical unit
-@var{@2@} or a blank string if @var{@2@} is not connected to a
-terminal.
-
-Some non-GNU implementations of Fortran provide this intrinsic as
-only a function, not as a subroutine.
-")
-
-DEFDOC (SIGNAL_subr, "Muck with signal handling.", "\
-If @var{@2@} is a an @code{EXTERNAL} routine, arranges for it to be
-invoked with a single integer argument (of system-dependent length)
-when signal @var{@1@} occurs.
-If @var{@1@} is an integer, it can be
-used to turn off handling of signal @var{@2@} or revert to its default
-action.
-See @code{signal(2)}.
-
-Note that @var{@2@} will be called using C conventions, so its value in
-Fortran terms is obtained by applying @code{%LOC()} (or @var{LOC()}) to it.
-
-The value returned by @code{signal(2)} is written to @var{@3@}, if
-that argument is supplied.
-Otherwise the return value is ignored.
-
-Some non-GNU implementations of Fortran provide this intrinsic as
-only a function, not as a subroutine, or do not support the
-(optional) @var{@3@} argument.
-")
-
-DEFDOC (SIGNAL_func, "Muck with signal handling.", "\
-If @var{@2@} is a an @code{EXTERNAL} routine, arranges for it to be
-invoked with a single integer argument (of system-dependent length)
-when signal @var{@1@} occurs.
-If @var{@1@} is an integer, it can be
-used to turn off handling of signal @var{@2@} or revert to its default
-action.
-See @code{signal(2)}.
-
-Note that @var{@2@} will be called using C conventions, so its value in
-Fortran terms is obtained by applying @code{%LOC()} (or @var{LOC()}) to it.
-
-The value returned by @code{signal(2)} is returned.
-
-Due to the side effects performed by this intrinsic, the function
-form is not recommended.
-")
-
-DEFDOC (KILL_func, "Signal a process.", "\
-Sends the signal specified by @var{@2@} to the process @var{@1@}.
-Returns 0 on success or a non-zero error code.
-See @code{kill(2)}.
-
-Due to the side effects performed by this intrinsic, the function
-form is not recommended.
-")
-
-DEFDOC (KILL_subr, "Signal a process.", "\
-Sends the signal specified by @var{@2@} to the process @var{@1@}.
-If the @var{@3@} argument is supplied, it contains
-0 on success or a non-zero error code upon return.
-See @code{kill(2)}.
-
-Some non-GNU implementations of Fortran provide this intrinsic as
-only a function, not as a subroutine, or do not support the
-(optional) @var{@3@} argument.
-")
-
-DEFDOC (LNBLNK, "Get last non-blank character in string.", "\
-Returns the index of the last non-blank character in @var{@1@}.
-@code{LNBLNK} and @code{LEN_TRIM} are equivalent.
-")
-
-DEFDOC (SLEEP, "Sleep for a specified time.", "\
-Causes the process to pause for @var{@1@} seconds.
-See @code{sleep(2)}.
-")
-
-DEFDOC (SYSTEM_subr, "Invoke shell (system) command.", "\
-Passes the command @var{@1@} to a shell (see @code{system(3)}).
-If argument @var{@2@} is present, it contains the value returned by
-@code{system(3)}, presumably 0 if the shell command succeeded.
-Note that which shell is used to invoke the command is system-dependent
-and environment-dependent.
-
-Some non-GNU implementations of Fortran provide this intrinsic as
-only a function, not as a subroutine, or do not support the
-(optional) @var{@2@} argument.
-")
-
-DEFDOC (SYSTEM_func, "Invoke shell (system) command.", "\
-Passes the command @var{@1@} to a shell (see @code{system(3)}).
-Returns the value returned by
-@code{system(3)}, presumably 0 if the shell command succeeded.
-Note that which shell is used to invoke the command is system-dependent
-and environment-dependent.
-
-Due to the side effects performed by this intrinsic, the function
-form is not recommended.
-However, the function form can be valid in cases where the
-actual side effects performed by the call are unimportant to
-the application.
-
-For example, on a UNIX system, @samp{SAME = SYSTEM('cmp a b')}
-does not perform any side effects likely to be important to the
-program, so the programmer would not care if the actual system
-call (and invocation of @code{cmp}) was optimized away in a situation
-where the return value could be determined otherwise, or was not
-actually needed (@samp{SAME} not actually referenced after the
-sample assignment statement).
-")
-
-DEFDOC (TIME_vxt, "Get the time as a character value.", "\
-Returns in @var{@1@} a character representation of the current time as
-obtained from @code{ctime(3)}.
-
-@xref{Fdate Intrinsic (subroutine)} for an equivalent routine.
-")
-
-DEFDOC (IBCLR, "Clear a bit.", "\
-Returns the value of @var{@1@} with bit @var{@2@} cleared (set to
-zero).
-@xref{BTest Intrinsic} for information on bit positions.
-")
-
-DEFDOC (IBSET, "Set a bit.", "\
-Returns the value of @var{@1@} with bit @var{@2@} set (to one).
-@xref{BTest Intrinsic} for information on bit positions.
-")
-
-DEFDOC (IBITS, "Extract a bit subfield of a variable.", "\
-Extracts a subfield of length @var{@3@} from @var{@1@}, starting from
-bit position @var{@2@} and extending left for @var{@3@} bits.
-The result is right-justified and the remaining bits are zeroed.
-The value
-of @samp{@var{@2@}+@var{@3@}} must be less than or equal to the value
-@samp{BIT_SIZE(@var{@1@})}.
-@xref{Bit_Size Intrinsic}.
-")
-
-DEFDOC (ISHFT, "Logical bit shift.", "\
-All bits representing @var{@1@} are shifted @var{@2@} places.
-@samp{@var{@2@}.GT.0} indicates a left shift, @samp{@var{@2@}.EQ.0}
-indicates no shift and @samp{@var{@2@}.LT.0} indicates a right shift.
-If the absolute value of the shift count is greater than
-@samp{BIT_SIZE(@var{@1@})}, the result is undefined.
-Bits shifted out from the left end or the right end, as the case may be,
-are lost.
-Zeros are shifted in from the opposite end.
-
-@xref{IShftC Intrinsic} for the circular-shift equivalent.
-")
-
-DEFDOC (ISHFTC, "Circular bit shift.", "\
-The rightmost @var{@3@} bits of the argument @var{@1@}
-are shifted circularly @var{@2@}
-places, i.e.@ the bits shifted out of one end are shifted into 
-the opposite end.
-No bits are lost.
-The unshifted bits of the result are the same as
-the unshifted bits of @var{@1@}.
-The  absolute value of the argument @var{@2@}
-must be less than or equal to @var{@3@}.  
-The value of @var{@3@} must be greater than or equal to one and less than 
-or equal to @samp{BIT_SIZE(@var{@1@})}.
-
-@xref{IShft Intrinsic} for the logical shift equivalent.
-")
-
-DEFDOC (MVBITS, "Moving a bit field.", "\
-Moves @var{@3@} bits from positions @var{@2@} through
-@samp{@var{@2@}+@var{@3@}-1} of @var{@1@} to positions @var{@5@} through
-@samp{@var{@2@}+@var{@3@}-1} of @var{@4@}.  The portion of argument
-@var{@4@} not affected by the movement of bits is unchanged.  Arguments
-@var{@1@} and @var{@4@} are permitted to be the same numeric storage
-unit.  The values of @samp{@var{@2@}+@var{@3@}} and
-@samp{@var{@5@}+@var{@3@}} must be less than or equal to
-@samp{BIT_SIZE(@var{@1@})}.
-")
-
-DEFDOC (INDEX, "Locate a CHARACTER substring.", "\
-Returns the position of the start of the first occurrence of string
-@var{@2@} as a substring in @var{@1@}, counting from one.
-If @var{@2@} doesn't occur in @var{@1@}, zero is returned.
-")
-
index c19b0fd85dd1c696d3079a1a5edf45ac314c90d9..3e370f0cc071f4e0bb7de3d766530f756cd8a4cd 100644 (file)
@@ -42,7 +42,7 @@ typedef enum
     FFEINTRIN_familyFVZ,       /* in both f2c and VAX/VMS FORTRAN. */
     FFEINTRIN_familyF2U,       /* libf2c/libU77 UNIX system intrinsics. */
     FFEINTRIN_familyBADU77,    /* libU77 UNIX system intrinsics with bad form. */
-    FFEINTRIN_family,
+    FFEINTRIN_family
   } ffeintrinFamily;
 
 typedef enum
index 3b394ead563f743c87618f1676f9353bb8259542..1cbaf0399ca1fe99fe0729aca3fee6a6bbf86685 100644 (file)
@@ -33,10 +33,9 @@ the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
 #include "proj.h"
 #include "malloc.h"
 
-/* For systems where <stdlib.h> is missing: */
-
-void *malloc (size_t size);
-void *realloc (void *ptr, size_t size);
+/* Assume gcc/toplev.o is linked in.  */
+void *xmalloc (unsigned size);
+void *xrealloc (void *ptr, int size);
 
 /* Externals defined here.  */
 
@@ -364,19 +363,14 @@ void *
 malloc_new_ (mallocSize s)
 {
   void *ptr;
-  size_t ss = s;
+  unsigned ss = s;
 
-#if MALLOC_DEBUG
+#if MALLOC_DEBUG && 0
   assert (s == (mallocSize) ss);/* Else alloc is too big for this
                                   library/sys. */
 #endif
 
-  ptr = malloc (ss);
-  if (ptr == NULL)
-    {
-      free (malloc_reserve_);
-      assert (ptr != NULL);
-    }
+  ptr = xmalloc (ss);
 #if MALLOC_DEBUG
   memset (ptr, 126, ss);       /* Catch some kinds of errors more
                                   quickly/reliably. */
@@ -523,18 +517,13 @@ malloc_resize_inpool_ (mallocPool pool, mallocType_ type UNUSED,
 void *
 malloc_resize_ (void *ptr, mallocSize s)
 {
-  size_t ss = s;
+  int ss = s;
 
-#if MALLOC_DEBUG
+#if MALLOC_DEBUG && 0
   assert (s == (mallocSize) ss);/* Too big if failure here. */
 #endif
 
-  ptr = realloc (ptr, ss);
-  if (ptr == NULL)
-    {
-      free (malloc_reserve_);
-      assert (ptr != NULL);
-    }
+  ptr = xrealloc (ptr, ss);
   return ptr;
 }
 
index efb599645aaa24f122eeb09a2961f6665b5c83b1..3257025ee25eca40f2313081c759e9522cb692aa 100644 (file)
@@ -5,7 +5,7 @@
 @c The text of this file appears in the file BUGS
 @c in the G77 distribution, as well as in the G77 manual.
 
-@c 1997-08-11
+@c 1997-08-25
 
 @ifclear NEWSONLY
 @node News
@@ -111,6 +111,11 @@ Place automatic arrays on the stack, even if
 is in effect.
 This avoids a compiler crash in some cases.
 
+@item
+The @samp{-malign-double} option now reliably aligns
+@code{DOUBLE PRECISION} optimally on Pentium and
+Pentium Pro architectures (586 and 686 in @code{gcc}).
+
 @item
 New option @samp{-Wno-globals} disables warnings
 about ``suspicious'' use of a name both as a global
@@ -231,6 +236,9 @@ front end.
 Modify @code{make} rules and related code so that
 generation of Info documentation doesn't require
 compilation using @code{gcc}.
+Now, any ANSI C compiler should be adequate to
+produce the @code{g77} documentation (in particular,
+the tables of intrinsics) from scratch.
 
 @item
 Add @code{INT2} and @code{INT8} intrinsics.
@@ -284,7 +292,7 @@ as an option that inhibits linking, just like @samp{-c} or
 and @samp{-Xlinker} options.
 
 @item
-Upgrade to @code{libf2c} as of 1997-08-06.
+Upgrade to @code{libf2c} as of 1997-08-16.
 
 @item
 Modify @code{libf2c} to consistently and clearly diagnose
index f5f79c899f71f210d5f17aa856296b126f03f86b..abb075d78d941a5838ba90c3516e9ab5fb511a86 100644 (file)
@@ -1,3 +1,51 @@
+Tue Aug 26 01:42:21 1997  Craig Burley  <burley@gnu.ai.mit.edu>
+
+       From Jim Wilson:
+       * configure.in: Make sure RANLIB_TEST is set also.
+
+       From Robert Lipe <robertl@dgii.com>:
+       * libU77/getcwd_.c, libU77/hostnm_.c, libU77/lstat_.c:
+       Also #include <errno.h>, to define ENOSYS.
+
+Tue Aug 26 01:25:58 1997  Craig Burley  <burley@gnu.ai.mit.edu>
+
+       * Makefile.in (stamp-lib): Put all f2cext.c objects in
+       a temp directory named libE77, then `ar' them all at
+       once into libf2c.a, to get the job done a bit faster.
+       Still remove the objects (and libE77 directory) afterward.
+
+Sun Aug 24 05:04:35 1997  Craig Burley  <burley@gnu.ai.mit.edu>
+
+       * libU77/rand_.c (G77_rand_0), libU77/dtime_.c (G77_dtime_0),
+       libU77/etime_.c (G77_etime_0), libU77/secnds_.c (G77_secnds_0),
+       libU77/second_.c (G77_second_0): Really return `double', not
+       `doublereal', since the result is cast to `float'.
+       * f2cext.c: (rand_, dtime_, etime_, secnds_, second_): Ditto.
+       (erf_, erfc_, besj0_, besj1_, besjn_, besy0_, besy1_,
+       besyn_, dbesj0_, dbesj1_, dbesjn_, dbesy0_, dbesy1_,
+       dbesyn_): All of these return `double', not `doublereal',
+       as they either have `float' or `double' results.
+       * libU77/bes.c (besj0_, besj1_, besjn_, besy0_, besy1_,
+       besyn_): Ditto.
+       * libU77/dbes.c (dbesj0_, dbesj1_, dbesjn_, dbesy0_, dbesy1_,
+       dbesyn_): Ditto.
+
+       Update to Netlib version of 1997-08-16:
+       * libI77/iio.c: Fix bug in internal writes to an array
+       of character strings.
+
+       * Makefile.in (UOBJ): Restore fixes made by Dan Pettet I
+       lost, which included the addition of mclock_.o already noted
+       below, plus adding symlnk_.o.
+
+Thu Aug 21 03:58:34 1997  Craig Burley  <burley@gnu.ai.mit.edu>
+
+       * Makefile.in (UOBJ): Add mclock_.o, thanks to Mumit Khan!
+
+1997-08-21  Dave Love  <d.love@dl.ac.uk>
+
+       * libU77/alarm_.c: Fix return type: `integer'.
+
 Mon Aug 11 20:12:42 1997  Craig Burley  <burley@gnu.ai.mit.edu>
 
        * Makefile.in ($(lib), stamp-lib): Ensure that library
index 665ded2bce1562dea15f7ecf9cc4b829dbcf8f47..c59d803b98f849a3d99c552394daad9cb27ee775 100644 (file)
@@ -9,17 +9,3 @@ Mon Aug 25 23:26:05 1997  H.J. Lu  (hjl@gnu.ai.mit.edu)
        (stamp-libi77, stamp-libf77, stamp-libu77): New.
        (stamp-lib): Only depend on stamp-libi77 stamp-libf77
        stamp-libu77
-
-Mon Aug 25 01:40:01 1997  Jim Wilson  (wilson@cygnus.com)
-
-       * configure.in: Always make sure RANLIB_TEST is set.
-       * configure: Rebuilt.
-
-Fri Aug 22 08:55:12 1997  Jeffrey A Law  (law@cygnus.com)
-
-       * Makefile.in (UOBJ): Include symlnk.
-
-Wed Aug 20 23:18:46 1997  Mumit Khan  (khan@xraylith.wisc.edu)
-
-       * Makefile.in (UOBJ): Include mclock. 
-
index 6c4ea100332f749362a55ed9b00711ef97600e37..0f51385137ab7207d188b06b23d1e6ee5671065d 100644 (file)
@@ -132,8 +132,8 @@ UOBJ =  libU77/VersionU.o libU77/gerror_.o libU77/perror_.o libU77/ierrno_.o \
        libU77/bes.o libU77/dbes.o libU77/chdir_.o libU77/chmod_.o \
        libU77/lnblnk_.o libU77/hostnm_.o libU77/rename_.o libU77/fgetc_.o \
        libU77/fputc_.o libU77/umask_.o libU77/system_clock_.o libU77/date_.o \
-       libU77/second_.o libU77/flush1_.o libU77/alarm_.o \
-       libU77/mclock_.o libU77/symlnk_.o
+       libU77/second_.o libU77/flush1_.o libU77/alarm_.o libU77/mclock_.o \
+       libU77/symlnk_.o
 
 F2CEXT = abort derf derfc ef1asc ef1cmc erf erfc exit getarg getenv iargc \
        signal system flush ftell fseek access besj0 besj1 besjn besy0 besy1 \
@@ -175,16 +175,17 @@ $(lib): stamp-lib ; @true
 stamp-lib: stamp-libf77 stamp-libi77 stamp-libu77
        rm -f stamp-lib
        $(AR) $(AR_FLAGS) $(lib) $(FOBJ) $(IOBJ) $(UOBJ)
+       rm -fr libE77
+       mkdir libE77
        for name in $(F2CEXT); \
        do \
          echo $${name}; \
          $(GCC_FOR_TARGET) -c -I. -I$(srcdir) -I../../include $(CPPFLAGS) $(CFLAGS) $(CGFLAGS) \
-           -DL$${name} $(srcdir)/f2cext.c; \
+           -DL$${name} $(srcdir)/f2cext.c -o libE77/L$${name}$(objext); \
          if [ $$? -eq 0 ] ; then true; else exit 1; fi; \
-         mv f2cext$(objext) L$${name}$(objext); \
-         $(AR) $(AR_FLAGS) $(lib) L$${name}$(objext); \
-         rm -f L$${name}$(objext); \
        done
+       $(AR) $(AR_FLAGS) $(lib) libE77/*$(object)
+       rm -fr libE77
        if $(RANLIB_TEST); then $(RANLIB) $(lib); \
          else true; fi
        touch stamp-lib
index 0edfba3a8549faf9d0d79dd7bbbbcadad488237e..1827154b5911d3852049218f86f293d229140c78 100644 (file)
@@ -2834,3 +2834,8 @@ draft (in 1990 or 1991) that rescinded permission to elide quote marks
 in namelist input of character data; to get the old behavior, compile
 with F8X_NML_ELIDE_QUOTES #defined.  wrtfmt.o: wrt_G: tweak to print
 the right number of 0's for zero under G format.
+
+Sat Aug 16 05:45:32 EDT 1997
+  libI77: iio.c: fix bug in internal writes to an array of character
+strings that sometimes caused one more array element than required by
+the format to be blank-filled.  Example: format(1x).
index 199440975d4787f4c2185c08c44346d19760a071..d5ac815c9b4a4be62b1bbd08583574eae594c59f 100644 (file)
@@ -55,18 +55,15 @@ integer ef1cmc_ (ftnint *a, ftnlen *la, ftnint *b, ftnlen *lb) {
 }
 #endif
 
-/* Note that erf*_ and bes*_ return doublereal, not real, as this
-   is the f2c interface, which is based on K&R C.  */
-
 #ifdef Lerf
-doublereal erf_ (real *x) {
+double erf_ (real *x) {
     extern double G77_erf_0 (real *x);
     return G77_erf_0 (x);
 }
 #endif
 
 #ifdef Lerfc
-doublereal erfc_ (real *x) {
+double erfc_ (real *x) {
     extern double G77_erfc_0 (real *x);
     return G77_erfc_0 (x);
 }
@@ -150,37 +147,37 @@ integer alarm_ (integer *seconds, sig_proc proc, integer *status) {
 #endif
 
 #ifdef Lbesj0
-doublereal besj0_ (const real *x) {
+double besj0_ (const real *x) {
     return j0 (*x);
 }
 #endif
 
 #ifdef Lbesj1
-doublereal besj1_ (const real *x) {
+double besj1_ (const real *x) {
     return j1 (*x);
 }
 #endif
 
 #ifdef Lbesjn
-doublereal besjn_ (const integer *n, real *x) {
+double besjn_ (const integer *n, real *x) {
     return jn (*n, *x);
 }
 #endif
 
 #ifdef Lbesy0
-doublereal besy0_ (const real *x) {
+double besy0_ (const real *x) {
     return y0 (*x);
 }
 #endif
 
 #ifdef Lbesy1
-doublereal besy1_ (const real *x) {
+double besy1_ (const real *x) {
     return y1 (*x);
 }
 #endif
 
 #ifdef Lbesyn
-doublereal besyn_ (const integer *n, real *x) {
+double besyn_ (const integer *n, real *x) {
     return yn (*n, *x);
 }
 #endif
@@ -214,51 +211,51 @@ int date_ (char *buf, ftnlen buf_len) {
 #endif
 
 #ifdef Ldbesj0
-doublereal dbesj0_ (const double *x) {
+double dbesj0_ (const double *x) {
     return j0 (*x);
 }
 #endif
 
 #ifdef Ldbesj1
-doublereal dbesj1_ (const double *x) {
+double dbesj1_ (const double *x) {
     return j1 (*x);
 }
 #endif
 
 #ifdef Ldbesjn
-doublereal dbesjn_ (const integer *n, double *x) {
+double dbesjn_ (const integer *n, double *x) {
     return jn (*n, *x);
 }
 #endif
 
 #ifdef Ldbesy0
-doublereal dbesy0_ (const double *x) {
+double dbesy0_ (const double *x) {
     return y0 (*x);
 }
 #endif
 
 #ifdef Ldbesy1
-doublereal dbesy1_ (const double *x) {
+double dbesy1_ (const double *x) {
     return y1 (*x);
 }
 #endif
 
 #ifdef Ldbesyn
-doublereal dbesyn_ (const integer *n, double *x) {
+double dbesyn_ (const integer *n, double *x) {
     return yn (*n, *x);
 }
 #endif
 
 #ifdef Ldtime
-doublereal dtime_ (real tarray[2]) {
-    extern doublereal G77_dtime_0 (real tarray[2]);
+double dtime_ (real tarray[2]) {
+    extern double G77_dtime_0 (real tarray[2]);
     return G77_dtime_0 (tarray);
 }
 #endif
 
 #ifdef Letime
-doublereal etime_ (real tarray[2]) {
-    extern doublereal G77_etime_0 (real tarray[2]);
+double etime_ (real tarray[2]) {
+    extern double G77_etime_0 (real tarray[2]);
     return G77_etime_0 (tarray);
 }
 #endif
@@ -460,8 +457,8 @@ int perror_ (const char *str, const ftnlen Lstr) {
 #endif
 
 #ifdef Lrand
-doublereal rand_ (integer *flag) {
-    extern doublereal G77_rand_0 (integer *flag);
+double rand_ (integer *flag) {
+    extern double G77_rand_0 (integer *flag);
     return G77_rand_0 (flag);
 }
 #endif
@@ -474,15 +471,15 @@ integer rename_ (const char *path1, const char *path2, const ftnlen Lpath1, cons
 #endif
 
 #ifdef Lsecnds
-doublereal secnds_ (real *r) {
-    extern doublereal G77_secnds_0 (real *r);
+double secnds_ (real *r) {
+    extern double G77_secnds_0 (real *r);
     return G77_secnds_0 (r);
 }
 #endif
 
 #ifdef Lsecond
-doublereal second_ () {
-    extern doublereal G77_second_0 ();
+double second_ () {
+    extern double G77_second_0 ();
     return G77_second_0 ();
 }
 #endif
index 36d4043c056ad4923b8a58e02f4239c9fc8a1e90..31d0e8bb03bc972f758308bf64ba76512cca512b 100644 (file)
@@ -1,4 +1,4 @@
-static char junk[] = "\n@(#) LIBI77 VERSION pjw,dmg-mods 19970805\n";
+static char junk[] = "\n@(#) LIBI77 VERSION pjw,dmg-mods 19970816\n";
 
 /*
 */
@@ -260,6 +260,10 @@ wrtfmt.c:
                 with -DF8X_NML_ELIDE_QUOTES to get the old behavior.
                 wrtfmt.o: wrt_G: tweak to print the right number of 0's
                 for zero under G format. */
+/* 16 Aug. 1997: iio.c: fix bug in internal writes to an array of character
+                strings that sometimes caused one more array element than
+                required by the format to be blank-filled.  Example:
+                format(1x). */
 /* 17 June 1997: detect recursive I/O and call f__fatal explaining it. */
 
 #include <stdio.h>
index 680524f6c1a7a6e8a61536af8c7d42101d612508..22eae3f433dd181b01e886549a2236c5c5736ba3 100644 (file)
@@ -139,7 +139,8 @@ integer e_wsfi(Void)
        f__init &= ~2;
        n = en_fio();
        f__fmtbuf = NULL;
-       if(f__icnum >= f__svic->icirnum)
+       if(f__icnum >= f__svic->icirnum
+       || !f__recpos && f__icnum)
                return(n);
        while(f__recpos++ < f__svic->icirlen)
                *f__icptr++ = ' ';
index cc869ff7898eb8b6721b35a62dcb3c51d5cd08dc..b1c347d4a68d9331c31dcd50ef162be04f7c3333 100644 (file)
@@ -39,14 +39,14 @@ typedef RETSIGTYPE (*sig_type)();
 #ifdef KR_headers
 extern sig_type signal();
 
-int G77_alarm_0 (seconds, proc)
+integer G77_alarm_0 (seconds, proc)
      integer *seconds;
      sig_type proc;
 #else
 #include <signal.h>
 typedef int (*sig_proc)(int);
 
-int G77_alarm_0 (integer *seconds, sig_proc proc)
+integer G77_alarm_0 (integer *seconds, sig_proc proc)
 #endif
 {
   int status;
index c5ffdce59a36368d95a4ec9b3d43e8302a603619..442337fd77a761b2d70b8ec8ad02ea2ae17f6ef6 100644 (file)
@@ -20,27 +20,27 @@ Boston, MA 02111-1307, USA.  */
 #include "f2c.h"
 #include <math.h>
 
-doublereal G77_besj0_0 (const real *x) {
+double G77_besj0_0 (const real *x) {
     return j0 (*x);
 }
 
-doublereal G77_besj1_0 (const real *x) {
+double G77_besj1_0 (const real *x) {
     return j1 (*x);
 }
 
-doublereal G77_besjn_0 (const integer *n, real *x) {
+double G77_besjn_0 (const integer *n, real *x) {
      return jn (*n, *x);
  }
 
-doublereal G77_besy0_0 (const real *x) {
+double G77_besy0_0 (const real *x) {
     return y0 (*x);
 }
 
-doublereal G77_besy1_0 (const real *x) {
+double G77_besy1_0 (const real *x) {
     return y1 (*x);
 }
 
-doublereal G77_besyn_0 (const integer *n, real *x) {
+double G77_besyn_0 (const integer *n, real *x) {
     return yn (*n, *x);
 }
 #endif
index 2330b50489b00c6fd1f76c29fe80b4655955b551..8c245cf3c25bd8d62339562a59c3b7b57d39b9d2 100644 (file)
@@ -20,27 +20,27 @@ Boston, MA 02111-1307, USA.  */
 #include <math.h>
 
 #if 0  /* Don't include these unless necessary -- dnp. */
-doublereal G77_dbesj0_0 (const double *x) {
+double G77_dbesj0_0 (const double *x) {
     return j0 (*x);
 }
 
-doublereal G77_dbesj1_0 (const double *x) {
+double G77_dbesj1_0 (const double *x) {
     return j1 (*x);
 }
 
-doublereal G77_dbesjn_0 (const integer *n, double *x) {
+double G77_dbesjn_0 (const integer *n, double *x) {
      return jn (*n, *x);
  }
 
-doublereal G77_dbesy0_0 (const double *x) {
+double G77_dbesy0_0 (const double *x) {
     return y0 (*x);
 }
 
-doublereal G77_dbesy1_0 (const double *x) {
+double G77_dbesy1_0 (const double *x) {
     return y1 (*x);
 }
 
-doublereal G77_dbesyn_0 (const integer *n, double *x) {
+double G77_dbesyn_0 (const integer *n, double *x) {
     return yn (*n, *x);
 }
 #endif
index e04ada1eca2fa78c99e0e58e440d93395082d838..dc0accbfdf01536d07943dcb366cb630a0aabac6 100644 (file)
@@ -37,10 +37,10 @@ Boston, MA 02111-1307, USA.  */
 static long clk_tck = 0;
 
 #ifdef KR_headers
-doublereal G77_dtime_0 (tarray)
+double G77_dtime_0 (tarray)
      real tarray[2];
 #else
-doublereal G77_dtime_0 (real tarray[2])
+double G77_dtime_0 (real tarray[2])
 #endif
 {
   time_t utime, stime;
index 36e68133a24f9d8b1d37794a92c1ad5b3fe84456..fa6ccfb0d4d4e10359014cd92d98910f16ab78aa 100644 (file)
@@ -39,10 +39,10 @@ Boston, MA 02111-1307, USA.  */
 static long clk_tck = 0;
 
 #ifdef KR_headers
-doublereal G77_etime_0 (tarray)
+double G77_etime_0 (tarray)
      real tarray[2];
 #else
-doublereal G77_etime_0 (real tarray[2])
+double G77_etime_0 (real tarray[2])
 #endif
 {
   /* The getrusage version is only the default for convenience. */
index e01b22c698daba2fc6d4b43d14f2c4318c72e5d9..e757803896ad3f1c7972d7f467cf6c8a41bc27cb 100644 (file)
@@ -26,6 +26,7 @@ Boston, MA 02111-1307, USA.  */
 #  include <strings.h>
 #endif
 #include <stdio.h>             /* for NULL */
+#include <errno.h>             /* for ENOSYS */
 #include "f2c.h"
 
 #if HAVE_GETCWD
index 17f0c1a6b3a305be5b558b780704f69046aa6188..e3efce7c55bbea0b7236281e9e55e64820e6cb03 100644 (file)
@@ -25,6 +25,7 @@ Boston, MA 02111-1307, USA.  */
 #endif
 #include <sys/types.h>
 #include <sys/stat.h>
+#include <errno.h>             /* for ENOSYS */
 #include "f2c.h"
 
 /* lstat isn't posix */
index 1c533a39fdda7e82ce1d5c4dd334ebddf7d7d5de..165aee1220c93052bfd077b0672a52be27cc514b 100644 (file)
@@ -35,10 +35,10 @@ Boston, MA 02111-1307, USA.  */
 /* Note this is per SunOS -- other s may have no arg. */
 
 #ifdef KR_headers
-doublereal G77_rand_0 (flag)
+double G77_rand_0 (flag)
   integer *flag;
 #else
-doublereal G77_rand_0 (integer *flag)
+double G77_rand_0 (integer *flag)
 #endif
 {
   switch (*flag) {
index 64eb76e2fb9f8879cbeeeded3f9772c342993bf7..1942528530f2ce4fef58ccd700a9a8c7ff5ec808 100644 (file)
@@ -36,7 +36,7 @@ Boston, MA 02111-1307, USA.  */
 
 /* This is a VMS intrinsic. */
 
-doublereal G77_secnds_0 (real *r)
+double G77_secnds_0 (real *r)
 {
     struct tm *lt;
     time_t clock;
index a984cf9e3d236ce6eafdacd910c288054a556dbf..41bb5a90a928652f34f6bb25e07264977dd93881 100644 (file)
@@ -18,8 +18,8 @@ Boston, MA 02111-1307, USA.  */
 
 #include "f2c.h"
 
-doublereal G77_second_0 () {
-  extern doublereal G77_etime_0 ();
+double G77_second_0 () {
+  extern double G77_etime_0 ();
   real tarray[2];
 
   return G77_etime_0 (tarray);
index 22efbfe801e9e42f9904d493e6fb1d3bbc44afe9..5d2ac98226f4ffecb38ad946ad698416dc9db6ac 100644 (file)
@@ -520,6 +520,11 @@ in namelist input of character data; to get the old behavior, compile
 with F8X_NML_ELIDE_QUOTES #defined.  wrtfmt.o: wrt_G: tweak to print
 the right number of 0's for zero under G format.
 
+Sat Aug 16 05:45:32 EDT 1997
+  libI77: iio.c: fix bug in internal writes to an array of character
+strings that sometimes caused one more array element than required by
+the format to be blank-filled.  Example: format(1x).
+
 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
index 90ecc5f8f4758b5cf8a14b96c72514ce861bb650..2bee98a9fa57c0744e4b9f39d8baddbf4090343a 100644 (file)
@@ -5800,6 +5800,7 @@ ffestb_R5284_ (ffelexToken t)
                                          (ffeexprCallback) ffestb_R5281_);
 
     case FFELEX_typeNAME:
+    case FFELEX_typeOPEN_PAREN:
       return (ffelexHandler) (*((ffelexHandler)
                                ffeexpr_lhs (ffesta_output_pool,
                                             FFEEXPR_contextDATA,
index 786b01f2f89c574ddc90f794114db5d6d60780ee..641bd39dc4a7dbee8ff5e09a2f1d51138fbe0eab 100644 (file)
@@ -176,10 +176,10 @@ ffe_decode_option (char *opt)
          ffe_is_do_internal_checks_ = 0;
 #if BUILT_FOR_270      /* User must have applied patch (circa 2.7.2 and beyond). */
 #if 0
-         flag_move_all_movables = 1;
-         flag_reduce_all_givs = 1;
          flag_rerun_loop_opt = 1;
 #endif
+         flag_move_all_movables = 1;
+         flag_reduce_all_givs = 1;
          flag_argument_noalias = 2;
 #endif
        }
index 7bc758eb83b5e9cc5151ba4ef79373034a9cc653..7eb5f921d653537ccbdcb582273d8da4a1eff8dd 100644 (file)
@@ -31,4 +31,4 @@ the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
 
 #include "version.h"
 
-char *ffe_version_string = "0.5.21-19970811";
+char *ffe_version_string = "0.5.21-19970826";