131 Aug. 1989: 2 1. A(min(i,j)) now is translated correctly (where A is an array). 3 2. 7 and 8 character variable names are allowed (but elicit a 4 complaint under -ext). 5 3. LOGICAL*1 is treated as LOGICAL, with just one error message 6 per LOGICAL*1 statement (rather than one per variable declared 7 in that statement). [Note that LOGICAL*1 is not in Fortran 77.] 8 Like f77, f2c now allows the format in a read or write statement 9 to be an integer array. 10 115 Sept. 1989: 12 Fixed botch in argument passing of substrings of equivalenced 13variables. 14 1515 Sept. 1989: 16 Warn about incorrect code generated when a character-valued 17function is not declared external and is passed as a parameter 18(in violation of the Fortran 77 standard) before it is invoked. 19Example: 20 21 subroutine foo(a,b) 22 character*10 a,b 23 call goo(a,b) 24 b = a(3) 25 end 26 2718 Sept. 1989: 28 Complain about overlapping initializations. 29 3020 Sept. 1989: 31 Warn about names declared EXTERNAL but never referenced; 32include such names as externs in the generated C (even 33though most C compilers will discard them). 34 3524 Sept. 1989: 36 New option -w8 to suppress complaint when COMMON or EQUIVALENCE 37forces word alignment of a double. 38 Under -A (for ANSI C), ensure that floating constants (terminated 39by 'f') contain either a decimal point or an exponent field. 40 Repair bugs sometimes encountered with CHAR and ICHAR intrinsic 41functions. 42 Restore f77's optimizations for copying and comparing character 43strings of length 1. 44 Always assume floating-point valued routines in libF77 return 45doubles, even under -R. 46 Repair occasional omission of arguments in routines having multiple 47entry points. 48 Repair bugs in computing offsets of character strings involved 49in EQUIVALENCE. 50 Don't omit structure qualification when COMMON variables are used 51as FORMATs or internal files. 52 532 Oct. 1989: 54 Warn about variables that appear only in data stmts; don't emit them. 55 Fix bugs in character DATA for noncharacter variables 56involved in EQUIVALENCE. 57 Treat noncharacter variables initialized (at least partly) with 58character data as though they were equivalenced -- put out a struct 59and #define the variables. This eliminates the hideous and nonportable 60numeric values that were used to initialize such variables. 61 Treat IMPLICIT NONE as IMPLICIT UNDEFINED(A-Z) . 62 Quit when given invalid options. 63 648 Oct. 1989: 65 Modified naming scheme for generated intermediate variables; 66more are recycled, fewer distinct ones used. 67 New option -W nn specifies nn characters/word for Hollerith 68data initializing non-character variables. 69 Bug fix: x(i:min(i+10,j)) used to elicit "Can't handle opcode 31 yet". 70 Integer expressions of the form (i+const1) - (i+const2), where 71i is a scalar integer variable, are now simplified to (const1-const2); 72this leads to simpler translation of some substring expressions. 73 Initialize uninitialized portions of character string arrays to 0 74rather than to blanks. 75 769 Oct. 1989: 77 New option -c to insert comments showing original Fortran source. 78 New option -g to insert line numbers of original Fortran source. 79 8010 Oct. 1989: 81 ! recognized as in-line comment delimiter (a la Fortran 88). 82 8324 Oct. 1989: 84 New options to ease coping with systems that want the structs 85that result from COMMON blocks to be defined just once: 86 -E causes uninitialized COMMON blocks to be declared Extern; 87if Extern is undefined, f2c.h #defines it to be extern. 88 -ec causes a separate .c file to be emitted for each 89uninitialized COMMON block: COMMON /ABC/ yields abc_com.c; 90thus one can compile *_com.c into a library to ensure 91precisely one definition. 92 -e1c is similar to -ec, except that everything goes into 93one file, along with comments that give a sed script for 94splitting the file into the pieces that -ec would give. 95This is for use with netlib's "execute f2c" service (for which 96-ec is coerced into -e1c, and the sed script will put everything 97but the COMMON definitions into f2c_out.c ). 98 9928 Oct. 1989: 100 Convert "i = i op ..." into "i op= ...;" even when i is a 101dummy argument. 102 10313 Nov. 1989: 104 Name integer constants (passed as arguments) c__... rather 105than c_... so 106 common /c/stuff 107 call foo(1) 108 ... 109is translated correctly. 110 11119 Nov. 1989: 112 Floating-point constants are now kept as strings unless they 113are involved in constant expressions that get simplified. The 114floating-point constants kept as strings can have arbitrarily 115many significant figures and a very large exponent field (as 116large as long int allows on the machine on which f2c runs). 117Thus, for example, the body of 118 119 subroutine zot(x) 120 double precision x(6), pi 121 parameter (pi=3.1415926535897932384626433832795028841972) 122 x(1) = pi 123 x(2) = pi+1 124 x(3) = 9287349823749272.7429874923740978492734D-298374 125 x(4) = .89 126 x(5) = 4.0005 127 x(6) = 10D7 128 end 129 130now gets translated into 131 132 x[1] = 3.1415926535897932384626433832795028841972; 133 x[2] = 4.1415926535897931; 134 x[3] = 9.2873498237492727429874923740978492734e-298359; 135 x[4] = (float).89; 136 x[5] = (float)4.0005; 137 x[6] = 1e8; 138 139rather than the former 140 141 x[1] = 3.1415926535897931; 142 x[2] = 4.1415926535897931; 143 x[3] = 0.; 144 x[4] = (float)0.89000000000000003; 145 x[5] = (float)4.0004999999999997; 146 x[6] = 100000000.; 147 148 Recognition of f77 machine-constant intrinsics deleted, i.e., 149epbase, epprec, epemin, epemax, eptiny, ephuge, epmrsp. 150 15122 Nov. 1989: 152 Workarounds for glitches on some Sun systems... 153 libf77: libF77/makefile modified to point out possible need 154to compile libF77/main.c with -Donexit=on_exit . 155 libi77: libI77/wref.c (and libI77/README) modified so non-ANSI 156systems can compile with USE_STRLEN defined, which will cause 157 sprintf(b = buf, "%#.*f", d, x); 158 n = strlen(b) + d1; 159rather than 160 n = sprintf(b = buf, "%#.*f", d, x) + d1; 161to be compiled. 162 16326 Nov. 1989: 164 Longer names are now accepted (up to 50 characters); names may 165contain underscores (in which case they will have two underscores 166appended, to avoid clashes with library names). 167 16828 Nov. 1989: 169 libi77 updated: 170 1. Allow 3 (or, on Crays, 4) digit exponents under format Ew.d . 171 2. Try to get things right on machines where ints have 16 bits. 172 17329 Nov. 1989: 174 Supplied missing semicolon in parameterless subroutines that 175have multiple entry points (all of them parameterless). 176 17730 Nov. 1989: 178 libf77 and libi77 revised to use types from f2c.h. 179 f2c now types floating-point valued C library routines as "double" 180rather than "doublereal" (for use with nonstandard C compilers for 181which "double" is IEEE double extended). 182 1831 Dec. 1989: 184 f2c.h updated to eliminate #defines rendered unnecessary (and, 185indeed, dangerous) by change of 26 Nov. to long names possibly 186containing underscores. 187 libi77 further revised: yesterday's change omitted two tweaks to fmt.h 188(tweaks which only matter if float and real or double and doublereal are 189different types). 190 1912 Dec. 1989: 192 Better error message (than "bad tag") for NAMELIST, which no longer 193inhibits C output. 194 1954 Dec. 1989: 196 Allow capital letters in hex constants (f77 extension; e.g., 197x'a012BCd', X'A012BCD' and x'a012bcd' are all treated as the integer 198167848909). 199 libi77 further revised: lio.c lio.h lread.c wref.c wrtfmt.c tweaked 200again to allow float and real or double and doublereal to be different. 201 2026 Dec. 1989: 203 Revised f2c.h -- required for the following... 204 Simpler looking translations for abs, min, max, using #defines in 205revised f2c.h . 206 libi77: more corrections to types; additions for NAMELIST. 207 Corrected casts in some I/O calls. 208 Translation of NAMELIST; libi77 must still be revised. Currently 209libi77 gives you a run-time error message if you attempt NAMELIST I/O. 210 2117 Dec. 1989: 212 Fixed bug that prevented local integer variables that appear in DATA 213stmts from being ASSIGNed statement labels. 214 Fillers (for DATA statements initializing EQUIVALENCEd variables and 215variables in COMMON) typed integer rather than doublereal (for slightly 216more portability, e.g. to Crays). 217 libi77: missing return values supplied in a few places; some tests 218reordered for better working on the Cray. 219 libf77: better accuracy for complex divide, complex square root, 220real mod function (casts to double; double temporaries). 221 2229 Dec. 1989: 223 Fixed bug that caused needless (albeit harmless) empty lines to be 224inserted in the C output when a comment line contained trailing blanks. 225 Further tweak to type of fillers: allow doublereal fillers if the 226struct has doublereal data. 227 22811 Dec. 1989: 229 Alteration of rule for producing external (C) names from names that 230contain underscores. Now the external name is always obtained by 231appending a pair of underscores. 232 23312 Dec. 1989: 234 C production inhibited after most errors. 235 23615 Dec. 1989: 237 Fixed bug in headers for subroutines having two or more character 238strings arguments: the length arguments were reversed. 239 24019 Dec. 1989: 241 f2c.h libf77 libi77: adjusted so #undefs in f2c.h should not foil 242compilation of libF77 and libI77. 243 libf77: getenv_ adjusted to work with unsorted environments. 244 libi77: the iostat= specifier should now work right with internal I/O. 245 24620 Dec. 1989: 247 f2c bugs fixed: In the absence of an err= specifier, the iostat= 248specifier was generally set wrong. Character strings containing 249explicit nulls (\0) were truncated at the first null. 250 Unlabeled DO loops recognized; must be terminated by ENDDO. 251(Don't ask for CYCLE, EXIT, named DO loops, or DO WHILE.) 252 25329 Dec. 1989: 254 Nested unlabeled DO loops now handled properly; new warning for 255extraneous text at end of FORMAT. 256 25730 Dec. 1989: 258 Fixed bug in translating dble(real(...)), dble(sngl(...)), and 259dble(float(...)), where ... is either of type double complex or 260is an expression requiring assignment to intermediate variables (e.g., 261dble(real(foo(x+1))), where foo is a function and x is a variable). 262Regard nonblank label fields on continuation lines as an error. 263 2643 Jan. 1990: 265 New option -C++ yields output that should be understood 266by C++ compilers. 267 2686 Jan. 1989: 269 -a now excludes variables that appear in a namelist from those 270that it makes automatic. (As before, it also excludes variables 271that appear in a common, data, equivalence, or save statement.) 272 The syntactically correct Fortran 273 read(*,i) x 274 end 275now yields syntactically correct C (even though both the Fortran 276and C are buggy -- no FORMAT has not been ASSIGNed to i). 277 2787 Jan. 1990: 279 libi77: routines supporting NAMELIST added. Surrounding quotes 280made optional when no ambiguity arises in a list or namelist READ 281of a character-string value. 282 2839 Jan. 1990: 284 f2c.src made available. 285 28616 Jan. 1990: 287 New options -P to produce ANSI C or C++ prototypes for procedures 288defined. Change to -A and -C++: f2c tries to infer prototypes for 289invoked procedures unless the new -!P option is given. New warning 290messages for inconsistent calling sequences among procedures within 291a single file. Most of f2c/src is affected. 292 f2c.h: typedefs for procedure arguments added; netlib's f2c service 293will insert appropriate typedefs for use with older versions of f2c.h. 294 29517 Jan. 1990: 296 f2c/src: defs.h exec.c format.c proc.c putpcc.c version.c xsum0.out 297updated. Castargs and protofile made extern in defs.h; exec.c 298modified so superfluous else clauses are diagnosed; unused variables 299omitted from declarations in format.c proc.c putpcc.c . 300 30121 Jan. 1990: 302 No C emitted for procedures declared external but not referenced. 303 f2c.h: more new types added for use with -P. 304 New feature: f2c accepts as arguments files ending in .p or .P; 305such files are assumed to be prototype files, such as produced by 306the -P option. All prototype files are read before any Fortran files 307and apply globally to all Fortran files. Suitable prototypes help f2c 308warn about calling-sequence errors and can tell f2c how to type 309procedures declared external but not explicitly typed; the latter is 310mainly of interest for users of the -A and -C++ options. (Prototype 311arguments are not available to netlib's "execute f2c" service.) 312 New option -it tells f2c to try to infer types of untyped external 313arguments from their use as parameters to prototyped or previously 314defined procedures. 315 f2c/src: many minor cleanups; most modules changed. Individual 316files in f2c/src are now in "bundle" format. The former f2c.1 is 317now f2c.1t; "f2c.1t from f2c" and "f2c.1t from f2c/src" are now the 318same, as are "f2c.1 from f2c" and "f2c.1 from f2c/src". People who 319do not obtain a new copy of "all from f2c/src" should at least add 320 fclose(sortfp); 321after the call on do_init_data(outfile, sortfp) in format_data.c . 322 32322 Jan. 1990: 324 Cleaner man page wording (thanks to Doug McIlroy). 325 -it now also applies to all untyped EXTERNAL procedures, not just 326arguments. 327 32823 Jan. 01:34:00 EST 1990: 329 Bug fixes: under -A and -C++, incorrect C was generated for 330subroutines having multiple entries but no arguments. 331 Under -A -P, subroutines of no arguments were given prototype 332calling sequence () rather than (void). 333 Character-valued functions elicited erroneous warning messages 334about inconsistent calling sequences when referenced by another 335procedure in the same file. 336 f2c.1t: omit first appearance of libF77.a in FILES section; 337load order of libraries is -lF77 -lI77, not vice versa (bug 338introduced in yesterday's edits); define .F macro for those whose 339-man lacks it. (For a while after yesterday's fixes were posted, 340f2c.1t was out of date. Sorry!) 341 34223 Jan. 9:53:24 EST 1990: 343 Character substring expressions involving function calls having 344character arguments (including the intrinsic len function) yielded 345incorrect C. 346 Procedures defined after invocation (in the same file) with 347conflicting argument types also got an erroneous message about 348the wrong number of arguments. 349 35024 Jan. 11:44:00 EST 1990: 351 Bug fixes: -p omitted #undefs; COMMON block names containing 352underscores had their C names incorrectly computed; a COMMON block 353having the name of a previously defined procedure wreaked havoc; 354if all arguments were .P files, f2c tried reading the second as a 355Fortran file. 356 New feature: -P emits comments showing COMMON block lengths, so one 357can get warnings of incompatible COMMON block lengths by having f2c 358read .P (or .p) files. Now by running f2c twice, first with -P -!c 359(or -P!c), then with *.P among the arguments, you can be warned of 360inconsistent COMMON usage, and COMMON blocks having inconsistent 361lengths will be given the maximum length. (The latter always did 362happen within each input file; now -P lets you extend this behavior 363across files.) 364 36526 Jan. 16:44:00 EST 1990: 366 Option -it made less aggressive: untyped external procedures that 367are invoked are now typed by the rules of Fortran, rather than by 368previous use of procedures to which they are passed as arguments 369before being invoked. 370 Option -P now includes information about references, i.e., called 371procedures, in the prototype files (in the form of special comments). 372This allows iterative invocations of f2c to infer more about untyped 373external names, particularly when multiple Fortran files are involved. 374 As usual, there are some obscure bug fixes: 3751. Repair of erroneous warning messages about inconsistent number of 376arguments that arose when a character dummy parameter was discovered 377to be a function or when multiple entry points involved character 378variables appearing in a previous entry point. 3792. Repair of memory fault after error msg about "adjustable character 380function". 3813. Under -U, allow MAIN_ as a subroutine name (in the same file as a 382main program). 3834. Change for consistency: a known function invoked as a subroutine, 384then as a function elicits a warning rather than an error. 385 38626 Jan. 22:32:00 EST 1990: 387 Fixed two bugs that resulted in incorrect C for substrings, within 388the body of a character-valued function, of the function's name, when 389those substrings were arguments to another function (even implicitly, 390as in character-string assignment). 391 39228 Jan. 18:32:00 EST 1990: 393 libf77, libi77: checksum files added; "make check" looks for 394transmission errors. NAMELIST read modified to allow $ rather than & 395to precede a namelist name, to allow $ rather than / to terminate 396input where the name of another variable would otherwise be expected, 397and to regard all nonprinting ASCII characters <= ' ' as spaces. 398 39929 Jan. 02:11:00 EST 1990: 400 "fc from f2c" added. 401 -it option made the default; -!it turns it off. Type information is 402now updated in a previously missed case. 403 -P option tweaked again; message about when rerunning f2c may change 404prototypes or declarations made more accurate. 405 New option -Ps implies -P and returns exit status 4 if rerunning 406f2c -P with prototype inputs might change prototypes or declarations. 407Now you can execute a crude script like 408 409 cat *.f >zap.F 410 rm -f zap.P 411 while :; do 412 f2c -Ps -!c zap.[FP] 413 case $? in 4) ;; *) break;; esac 414 done 415 416to get a file zap.P of the best prototypes f2c can determine for *.f . 417 418Jan. 29 07:30:21 EST 1990: 419 Forgot to check for error status when setting return code 4 under -Ps; 420error status (1, 2, 3, or, for caught signal, 126) now takes precedence. 421 422Jan 29 14:17:00 EST 1990: 423 Incorrect handling of 424 open(n,'filename') 425repaired -- now treated as 426 open(n,file='filename') 427(and, under -ext, given an error message). 428 New optional source file memset.c for people whose systems don't 429provide memset, memcmp, and memcpy; #include <string.h> in mem.c 430changed to #include "string.h" so BSD people can create a local 431string.h that simply says #include <strings.h> . 432 433Jan 30 10:34:00 EST 1990: 434 Fix erroneous warning at end of definition of a procedure with 435character arguments when the procedure had previously been called with 436a numeric argument instead of a character argument. (There were two 437warnings, the second one incorrectly complaining of a wrong number of 438arguments.) 439 440Jan 30 16:29:41 EST 1990: 441 Fix case where -P and -Ps erroneously reported another iteration 442necessary. (Only harm is the extra iteration.) 443 444Feb 3 01:40:00 EST 1990: 445 Supply semicolon occasionally omitted under -c . 446 Try to force correct alignment when numeric variables are initialized 447with character data (a non-standard and non-portable practice). You 448must use the -W option if your code has such data statements and is 449meant to run on a machine with other than 4 characters/word; e.g., for 450code meant to run on a Cray, you would specify -W8 . 451 Allow parentheses around expressions in output lists (in write and 452print statements). 453 Rename source files so their names are <= 12 characters long 454(so there's room to append .Z and still have <= 14 characters); 455renamed files: formatdata.c niceprintf.c niceprintf.h safstrncpy.c . 456 f2c material made available by anonymous ftp from research.att.com 457(look in dist/f2c ). 458 459Feb 3 03:49:00 EST 1990: 460 Repair memory fault that arose from use (in an assignment or 461call) of a non-argument variable declared CHARACTER*(*). 462 463Feb 9 01:35:43 EST 1990: 464 Fix erroneous error msg about bad types in 465 subroutine foo(a,adim) 466 dimension a(adim) 467 integer adim 468 Fix improper passing of character args (and possible memory fault) 469in the expression part of a computed goto. 470 Fix botched calling sequences in array references involving 471functions having character args. 472 Fix memory fault caused by invocation of character-valued functions 473of no arguments. 474 Fix botched calling sequence of a character*1-valued function 475assigned to a character*1 variable. 476 Fix bug in error msg for inconsistent number of args in prototypes. 477 Allow generation of C output despite inconsistencies in prototypes, 478but give exit code 8. 479 Simplify include logic (by removing some bogus logic); never 480prepend "/usr/include/" to file names. 481 Minor cleanups (that should produce no visible change in f2c's 482behavior) in intr.c parse.h main.c defs.h formatdata.c p1output.c . 483 484Feb 10 00:19:38 EST 1990: 485 Insert (integer) casts when floating-point expressions are used 486as subscripts. 487 Make SAVE stmt (with no variable list) override -a . 488 Minor cleanups: change field to Field in struct Addrblock (for the 489benefit of buggy C compilers); omit system("/bin/cp ...") in misc.c . 490 491Feb 13 00:39:00 EST 1990: 492 Error msg fix in gram.dcl: change "cannot make %s parameter" 493to "cannot make into parameter". 494 495Feb 14 14:02:00 EST 1990: 496 Various cleanups (invisible on systems with 4-byte ints), thanks 497to Dave Regan: vaxx.c eliminated; %d changed to %ld various places; 498external names adjusted for the benefit of stupid systems (that ignore 499case and recognize only 6 significant characters in external names); 500buffer shortened in xsum.c (e.g. for MS-DOS); fopen modes distinguish 501text and binary files; several unused functions eliminated; missing 502arg supplied to an unlikely fatalstr invocation. 503 504Thu Feb 15 19:15:53 EST 1990: 505 More cleanups (invisible on systems with 4 byte ints); casts inserted 506so most complaints from cyntax(1) and lint(1) go away; a few (int) 507versus (long) casts corrected. 508 509Fri Feb 16 19:55:00 EST 1990: 510 Recognize and translate unnamed Fortran 8x do while statements. 511 Fix bug that occasionally caused improper breaking of character 512strings. 513 New error message for attempts to provide DATA in a type-declaration 514statement. 515 516Sat Feb 17 11:43:00 EST 1990: 517 Fix infinite loop clf -> Fatal -> done -> clf after I/O error. 518 Change "if (addrp->vclass = CLPROC)" to "if (addrp->vclass == CLPROC)" 519in p1_addr (in p1output.c); this was probably harmless. 520 Move a misplaced } in lex.c (which slowed initkey()). 521 Thanks to Gary Word for pointing these things out. 522 523Sun Feb 18 18:07:00 EST 1990: 524 Detect overlapping initializations of arrays and scalar variables 525in previously missed cases. 526 Treat logical*2 as logical (after issuing a warning). 527 Don't pass string literals to p1_comment(). 528 Correct a cast (introduced 16 Feb.) in gram.expr; this matters e.g. 529on a Cray. 530 Attempt to isolate UNIX-specific things in sysdep.c (a new source 531file). Unless sysdep.c is compiled with SYSTEM_SORT defined, the 532intermediate files created for DATA statements are now sorted in-core 533without invoking system(). 534 535Tue Feb 20 16:10:35 EST 1990: 536 Move definition of binread and binwrite from init.c to sysdep.c . 537 Recognize Fortran 8x tokens < <= == >= > <> as synonyms for 538.LT. .LE. .EQ. .GE. .GT. .NE. 539 Minor cleanup in putpcc.c: fully remove simoffset(). 540 More discussion of system dependencies added to libI77/README. 541 542Tue Feb 20 21:44:07 EST 1990: 543 Minor cleanups for the benefit of EBCDIC machines -- try to remove 544the assumption that 'a' through 'z' are contiguous. (Thanks again to 545Gary Word.) Also, change log2 to log_2 (shouldn't be necessary). 546 547Wed Feb 21 06:24:56 EST 1990: 548 Fix botch in init.c introduced in previous change; only matters 549to non-ASCII machines. 550 551Thu Feb 22 17:29:12 EST 1990: 552 Allow several entry points to mention the same array. Protect 553parameter adjustments with if's (for the case that an array is not 554an argument to all entrypoints). 555 Under -u, allow 556 subroutine foo(x,n) 557 real x(n) 558 integer n 559 Compute intermediate variables used to evaluate dimension expressions 560at the right time. Example previously mistranslated: 561 subroutine foo(x,k,m,n) 562 real x(min(k,m,n)) 563 ... 564 write(*,*) x 565 Detect duplicate arguments. (The error msg points to the first 566executable stmt -- not wonderful, but not worth fixing.) 567 Minor cleanup of min/max computation (sometimes slightly simpler). 568 569Sun Feb 25 09:39:01 EST 1990: 570 Minor tweak to multiple entry points: protect parameter adjustments 571with if's only for (array) args that do not appear in all entry points. 572 Minor tweaks to format.c and io.c (invisible unless your compiler 573complained at the duplicate #defines of IOSUNIT and IOSFMT or at 574comparisons of p1gets(...) with NULL). 575 576Sun Feb 25 18:40:10 EST 1990: 577 Fix bug introduced Feb. 22: if a subprogram contained DATA and the 578first executable statement was labeled, then the label got lost. 579(Just change INEXEC to INDATA in p1output.c; it occurs just once.) 580 581Mon Feb 26 17:45:10 EST 1990: 582 Fix bug in handling of " and ' in comments. 583 584Wed Mar 28 01:43:06 EST 1990: 585libI77: 586 1. Repair nasty I/O bug: opening two files and closing the first 587(after possibly reading or writing it), then writing the second caused 588the last buffer of the second to be lost. 589 2. Formatted reads of logical values treated all letters other than 590t or T as f (false). 591 libI77 files changed: err.c rdfmt.c Version.c 592 (Request "libi77 from f2c" -- you can't get these files individually.) 593 594f2c itself: 595 Repair nasty bug in translation of 596 ELSE IF (condition involving complicated abs, min, or max) 597-- auxiliary statements were emitted at the wrong place. 598 Supply semicolon previously omitted from the translation of a label 599(of a CONTINUE) immediately preceding an ELSE IF or an ELSE. This 600bug made f2c produce invalid C. 601 Correct a memory fault that occurred (on some machines) when the 602error message "adjustable dimension on non-argument" should be given. 603 Minor tweaks to remove some harmless warnings by overly chatty C 604compilers. 605 Argument arays having constant dimensions but a variable lower bound 606(e.g., x(n+1:n+3)) had a * omitted from scalar arguments involved in 607the array offset computation. 608 609Wed Mar 28 18:47:59 EST 1990: 610libf77: add exit(0) to end of main [return(0) encounters a Cray bug] 611 612Sun Apr 1 16:20:58 EDT 1990: 613 Avoid dereferencing null when processing equivalences after an error. 614 615Fri Apr 6 08:29:49 EDT 1990: 616 Calls involving alternate return specifiers omitted processing 617needed for things like min, max, abs, and // (concatenation). 618 INTEGER*2 PARAMETERs were treated as INTEGER*4. 619 Convert some O(n^2) parsing to O(n). 620 621Tue Apr 10 20:07:02 EDT 1990: 622 When inconsistent calling sequences involve differing numbers of 623arguments, report the first differing argument rather than the numbers 624of arguments. 625 Fix bug under -a: formatted I/O in which either the unit or the 626format was a local character variable sometimes resulted in invalid C 627(a static struct initialized with an automatic component). 628 Improve error message for invalid flag after elided -. 629 Complain when literal table overflows, rather than infinitely 630looping. (The complaint mentions the new and otherwise undocumented 631-NL option for specifying a larger literal table.) 632 New option -h for forcing strings to word (or, with -hd, double-word) 633boundaries where possible. 634 Repair a bug that could cause improper splitting of strings. 635 Fix bug (cast of c to doublereal) in 636 subroutine foo(c,r) 637 double complex c 638 double precision r 639 c = cmplx(r,real(c)) 640 end 641 New include file "sysdep.h" has some things from defs.h (and 642elsewhere) that one may need to modify on some systems. 643 Some large arrays that were previously statically allocated are now 644dynamically allocated when f2c starts running. 645 f2c/src files changed: 646 README cds.c defs.h f2c.1 f2c.1t format.c formatdata.c init.c 647 io.c lex.c main.c makefile mem.c misc.c names.c niceprintf.c 648 output.c parse_args.c pread.c put.c putpcc.c sysdep.h 649 version.c xsum0.out 650 651Wed Apr 11 18:27:12 EDT 1990: 652 Fix bug in argument consistency checking of character, complex, and 653double complex valued functions. If the same source file contained a 654definition of such a function with arguments not explicitly typed, 655then subsequent references to the function might get erroneous 656warnings of inconsistent calling sequences. 657 Tweaks to sysdep.h for partially ANSI systems. 658 New options -kr and -krd cause f2c to use temporary variables to 659enforce Fortran evaluation-order rules with pernicious, old-style C 660compilers that apply the associative law to floating-point operations. 661 662Sat Apr 14 15:50:15 EDT 1990: 663 libi77: libI77 adjusted to allow list-directed and namelist I/O 664of internal files; bug in namelist I/O of logical and character arrays 665fixed; list input of complex numbers adjusted to permit d or D to 666denote the start of the exponent field of a component. 667 f2c itself: fix bug in handling complicated lower-bound 668expressions for character substrings; e.g., min and max did not work 669right, nor did function invocations involving character arguments. 670 Switch to octal notation, rather than hexadecimal, for nonprinting 671characters in character and string constants. 672 Fix bug (when neither -A nor -C++ was specified) in typing of 673external arguments of type complex, double complex, or character: 674 subroutine foo(c) 675 external c 676 complex c 677now results in 678 /* Complex */ int (*c) (); 679(as, indeed, it once did) rather than 680 complex (*c) (); 681 682Sat Apr 14 22:50:39 EDT 1990: 683 libI77/makefile: updated "make check" to omit lio.c 684 lib[FI]77/makefile: trivial change: define CC = cc, reference $(CC). 685 (Request, e.g., "libi77 from f2c" -- you can't ask for individual 686files from lib[FI]77.) 687 688Wed Apr 18 00:56:37 EDT 1990: 689 Move declaration of atof() from defs.h to sysdep.h, where it is 690now not declared if stdlib.h is included. (NeXT's stdlib.h has a 691#define atof that otherwise wreaks havoc.) 692 Under -u, provide a more intelligible error message (than "bad tag") 693for an attempt to define a function without specifying its type. 694 695Wed Apr 18 17:26:27 EDT 1990: 696 Recognize \v (vertical tab) in Hollerith as well as quoted strings; 697add recognition of \r (carriage return). 698 New option -!bs turns off recognition of escapes in character strings 699(\0, \\, \b, \f, \n, \r, \t, \v). 700 Move to sysdep.c initialization of some arrays whose initialization 701assumed ASCII; #define Table_size in sysdep.h rather than using 702hard-coded 256 in allocating arrays of size 1 << (bits/byte). 703 704Thu Apr 19 08:13:21 EDT 1990: 705 Warn when escapes would make Hollerith extend beyond statement end. 706 Omit max() definition from misc.c (should be invisible except on 707systems that erroneously #define max in stdlib.h). 708 709Mon Apr 23 22:24:51 EDT 1990: 710 When producing default-style C (no -A or -C++), cast switch 711expressions to (int). 712 Move "-lF77 -lI77 -lm -lc" to link_msg, defined in sysdep.c . 713 Add #define scrub(x) to sysdep.h, with invocations in format.c and 714formatdata.c, so that people who have systems like VMS that would 715otherwise create multiple versions of intermediate files can 716#define scrub(x) unlink(x) 717 718Tue Apr 24 18:28:36 EDT 1990: 719 Pass string lengths once rather than twice to a function of character 720arguments involved in comparison of character strings of length 1. 721 722Fri Apr 27 13:11:52 EDT 1990: 723 Fix bug that made f2c gag on concatenations involving char(...) on 724some systems. 725 726Sat Apr 28 23:20:16 EDT 1990: 727 Fix control-stack bug in 728 if(...) then 729 else if (complicated condition) 730 else 731 endif 732(where the complicated condition causes assignment to an auxiliary 733variable, e.g., max(a*b,c)). 734 735Mon Apr 30 13:30:10 EDT 1990: 736 Change fillers for DATA with holes from substructures to arrays 737(in an attempt to make things work right with C compilers that have 738funny padding rules for substructures, e.g., Sun C compilers). 739 Minor cleanup of exec.c (should not affect generated C). 740 741Mon Apr 30 23:13:51 EDT 1990: 742 Fix bug in handling return values of functions having multiple 743entry points of differing return types. 744 745Sat May 5 01:45:18 EDT 1990: 746 Fix type inference bug in 747 subroutine foo(x) 748 call goo(x) 749 end 750 subroutine goo(i) 751 i = 3 752 end 753Instead of warning of inconsistent calling sequences for goo, 754f2c was simply making i a real variable; now i is correctly 755typed as an integer variable, and f2c issues an error message. 756 Adjust error messages issued at end of declarations so they 757don't blame the first executable statement. 758 759Sun May 6 01:29:07 EDT 1990: 760 Fix bug in -P and -Ps: warn when the definition of a subprogram adds 761information that would change prototypes or previous declarations. 762 763Thu May 10 18:09:15 EDT 1990: 764 Fix further obscure bug with (default) -it: inconsistent calling 765sequences and I/O statements could interact to cause a memory fault. 766Example: 767 SUBROUTINE FOO 768 CALL GOO(' Something') ! Forgot integer first arg 769 END 770 SUBROUTINE GOO(IUNIT,MSG) 771 CHARACTER*(*)MSG 772 WRITE(IUNIT,'(1X,A)') MSG 773 END 774 775Fri May 11 16:49:11 EDT 1990: 776 Under -!c, do not delete any .c files (when there are errors). 777 Avoid dereferencing 0 when a fatal error occurs while reading 778Fortran on stdin. 779 780Wed May 16 18:24:42 EDT 1990: 781 f2c.ps made available. 782 783Mon Jun 4 12:53:08 EDT 1990: 784 Diagnose I/O units of invalid type. 785 Add specific error msg about dummy arguments in common. 786 787Wed Jun 13 12:43:17 EDT 1990: 788 Under -A, supply a missing "[1]" for CHARACTER*1 variables that appear 789both in a DATA statement and in either COMMON or EQUIVALENCE. 790 791Mon Jun 18 16:58:31 EDT 1990: 792 Trivial updates to f2c.ps . ("Fortran 8x" --> "Fortran 90"; omit 793"(draft)" from "(draft) ANSI C".) 794 795Tue Jun 19 07:36:32 EDT 1990: 796 Fix incorrect code generated for ELSE IF(expression involving 797function call passing non-constant substring). 798 Under -h, preserve the property that strings are null-terminated 799where possible. 800 Remove spaces between # and define in lex.c output.c parse.h . 801 802Mon Jun 25 07:22:59 EDT 1990: 803 Minor tweak to makefile to reduce unnecessary recompilations. 804 805Tue Jun 26 11:49:53 EDT 1990: 806 Fix unintended truncation of some integer constants on machines 807where casting a long to (int) may change the value. E.g., when f2c 808ran on machines with 16-bit ints, "i = 99999" was being translated 809to "i = -31073;". 810 811Wed Jun 27 11:05:32 EDT 1990: 812 Arrange for CHARACTER-valued PARAMETERs to honor their length 813specifications. Allow CHAR(nn) in expressions defining such PARAMETERs. 814 815Fri Jul 20 09:17:30 EDT 1990: 816 Avoid dereferencing 0 when a FORMAT statement has no label. 817 818Thu Jul 26 11:09:39 EDT 1990: 819 Remarks about VOID and binread,binwrite added to README. 820 Tweaks to parse_args: should be invisible unless your compiler 821complained at (short)*store. 822 823Thu Aug 2 02:07:58 EDT 1990: 824 f2c.ps: change the first line of page 5 from 825 include stuff 826to 827 include 'stuff' 828 829Tue Aug 14 13:21:24 EDT 1990: 830 libi77: libI77 adjusted to treat tabs as spaces in list input. 831 832Fri Aug 17 07:24:53 EDT 1990: 833 libi77: libI77 adjusted so a blank='ZERO' clause (upper case Z) 834in an open of a currently open file works right. 835 836Tue Aug 28 01:56:44 EDT 1990: 837 Fix bug in warnings of inconsistent calling sequences: if an 838argument to a subprogram was never referenced, then a previous 839invocation of the subprogram (in the same source file) that 840passed something of the wrong type for that argument did not 841elicit a warning message. 842 843Thu Aug 30 09:46:12 EDT 1990: 844 libi77: prevent embedded blanks in list output of complex values; 845omit exponent field in list output of values of magnitude between 84610 and 1e8; prevent writing stdin and reading stdout or stderr; 847don't close stdin, stdout, or stderr when reopening units 5, 6, 0. 848 849Tue Sep 4 12:30:57 EDT 1990: 850 Fix bug in C emitted under -I2 or -i2 for INTEGER*4 FUNCTION. 851 Warn of missing final END even if there are previous errors. 852 853Fri Sep 7 13:55:34 EDT 1990: 854 Remark about "make xsum.out" and "make f2c" added to README. 855 856Tue Sep 18 23:50:01 EDT 1990: 857 Fix null dereference (and, on some systems, writing of bogus *_com.c 858files) under -ec or -e1c when a prototype file (*.p or *.P) describes 859COMMON blocks that do not appear in the Fortran source. 860 libi77: 861 Add some #ifdef lines (#ifdef MSDOS, #ifndef MSDOS) to avoid 862references to stat and fstat on non-UNIX systems. 863 On UNIX systems, add component udev to unit; decide that old 864and new files are the same iff both the uinode and udev components 865of unit agree. 866 When an open stmt specifies STATUS='OLD', use stat rather than 867access (on UNIX systems) to check the existence of the file (in case 868directories leading to the file have funny permissions and this is 869a setuid or setgid program). 870 871Thu Sep 27 16:04:09 EDT 1990: 872 Supply missing entry for Impldoblock in blksize array of cpexpr 873(in expr.c). No examples are known where this omission caused trouble. 874 875Tue Oct 2 22:58:09 EDT 1990: 876 libf77: test signal(...) == SIG_IGN rather than & 01 in main(). 877 libi77: adjust rewind.c so two successive rewinds after a write 878don't clobber the file. 879 880Thu Oct 11 18:00:14 EDT 1990: 881 libi77: minor cleanups: add #include "fcntl.h" to endfile.c, err.c, 882open.c; adjust g_char in util.c for segmented memories; in f_inqu 883(inquire.c), define x appropriately when MSDOS is defined. 884 885Mon Oct 15 20:02:11 EDT 1990: 886 Add #ifdef MSDOS pointer adjustments to mem.c; treat NAME= as a 887synonym for FILE= in OPEN statements. 888 889Wed Oct 17 16:40:37 EDT 1990: 890 libf77, libi77: minor cleanups: _cleanup() and abort() invocations 891replaced by invocations of sig_die in main.c; some error messages 892previously lost in buffers will now appear. 893 894Mon Oct 22 16:11:27 EDT 1990: 895 libf77: separate sig_die from main (for folks who don't want to use 896the main in libF77). 897 libi77: minor tweak to comments in README. 898 899Fri Nov 2 13:49:35 EST 1990: 900 Use two underscores rather than one in generated temporary variable 901names to avoid conflict with COMMON names. f2c.ps updated to reflect 902this change and the NAME= extension introduced 15 Oct. 903 Repair a rare memory fault in io.c . 904 905Mon Nov 5 16:43:55 EST 1990: 906 libi77: changes to open.c (and err.c): complain if an open stmt 907specifies new= and the file already exists (as specified by Fortrans 77 908and 90); allow file= to be omitted in open stmts and allow 909status='replace' (Fortran 90 extensions). 910 911Fri Nov 30 10:10:14 EST 1990: 912 Adjust malloc.c for unusual systems whose sbrk() can return values 913not properly aligned for doubles. 914 Arrange for slightly more helpful and less repetitive warnings for 915non-character variables initialized with character data; these warnings 916are (still) suppressed by -w66. 917 918Fri Nov 30 15:57:59 EST 1990: 919 Minor tweak to README (about changing VOID in f2c.h). 920 921Mon Dec 3 07:36:20 EST 1990: 922 Fix spelling of "character" in f2c.1t. 923 924Tue Dec 4 09:48:56 EST 1990: 925 Remark about link_msg and libf2c added to f2c/README. 926 927Thu Dec 6 08:33:24 EST 1990: 928 Under -U, render label nnn as L_nnn rather than Lnnn. 929 930Fri Dec 7 18:05:00 EST 1990: 931 Add more names from f2c.h (e.g. integer, real) to the c_keywords 932list of names to which an underscore is appended to avoid confusion. 933 934Mon Dec 10 19:11:15 EST 1990: 935 Minor tweaks to makefile (./xsum) and README (binread/binwrite). 936 libi77: a few modifications for POSIX systems; meant to be invisible 937elsewhere. 938 939Sun Dec 16 23:03:16 EST 1990: 940 Fix null dereference caused by unusual erroneous input, e.g. 941 call foo('abc') 942 end 943 subroutine foo(msg) 944 data n/3/ 945 character*(*) msg 946 end 947(Subroutine foo is illegal because the character statement comes after a 948data statement.) 949 Use decimal rather than hex constants in xsum.c (to prevent 950erroneous warning messages about constant overflow). 951 952Mon Dec 17 12:26:40 EST 1990: 953 Fix rare extra underscore in character length parameters passed 954for multiple entry points. 955 956Wed Dec 19 17:19:26 EST 1990: 957 Allow generation of C despite error messages about bad alignment 958forced by equivalence. 959 Allow variable-length concatenations in I/O statements, such as 960 open(3, file=bletch(1:n) // '.xyz') 961 962Fri Dec 28 17:08:30 EST 1990: 963 Fix bug under -p with formats and internal I/O "units" in COMMON, 964as in 965 COMMON /FIGLEA/F 966 CHARACTER*20 F 967 F = '(A)' 968 WRITE (*,FMT=F) 'Hello, world!' 969 END 970 971Tue Jan 15 12:00:24 EST 1991: 972 Fix bug when two equivalence groups are merged, the second with 973nonzero offset, and the result is then merged into a common block. 974Example: 975 INTEGER W(3), X(3), Y(3), Z(3) 976 COMMON /ZOT/ Z 977 EQUIVALENCE (W(1),X(1)), (X(2),Y(1)), (Z(3),X(1)) 978***** W WAS GIVEN THE WRONG OFFSET 979 Recognize Fortran 90's optional NML= in NAMELIST READs and WRITEs. 980(Currently NML= and FMT= are treated as synonyms -- there's no 981error message if, e.g., NML= specifies a format.) 982 libi77: minor adjustment to allow internal READs from character 983string constants in read-only memory. 984 985Fri Jan 18 22:56:15 EST 1991: 986 Add comment to README about needing to comment out the typedef of 987size_t in sysdep.h on some systems, e.g. Sun 4.1. 988 Fix misspelling of "statement" in an error message in lex.c 989 990Wed Jan 23 00:38:48 EST 1991: 991 Allow hex, octal, and binary constants to have the qualifying letter 992(z, x, o, or b) either before or after the quoted string containing the 993digits. For now this change will not be reflected in f2c.ps . 994 995Tue Jan 29 16:23:45 EST 1991: 996 Arrange for character-valued statement functions to give results of 997the right length (that of the statement function's name). 998 999Wed Jan 30 07:05:32 EST 1991: 1000 More tweaks for character-valued statement functions: an error 1001check and an adjustment so a right-hand side of nonconstant length 1002(e.g., a substring) is handled right. 1003 1004Wed Jan 30 09:49:36 EST 1991: 1005 Fix p1_head to avoid printing (char *)0 with %s. 1006 1007Thu Jan 31 13:53:44 EST 1991: 1008 Add a test after the cleanup call generated for I/O statements with 1009ERR= or END= clauses to catch the unlikely event that the cleanup 1010routine encounters an error. 1011 1012Mon Feb 4 08:00:58 EST 1991: 1013 Minor cleanup: omit unneeded jumps and labels from code generated for 1014some NAMELIST READs and WRITEs with IOSTAT=, ERR=, and/or END=. 1015 1016Tue Feb 5 01:39:36 EST 1991: 1017 Change Mktemp to mktmp (for the benefit of systems so brain-damaged 1018that they do not distinguish case in external names -- and that for 1019some reason want to load mktemp). Try to get xsum0.out right this 1020time (it somehow didn't get updated on 4 Feb. 1991). 1021 Add note to libi77/README about adjusting the interpretation of 1022RECL= specifiers in OPENs for direct unformatted I/O. 1023 1024Thu Feb 7 17:24:42 EST 1991: 1025 New option -r casts values of REAL functions, including intrinsics, 1026to REAL. This only matters for unportable code like 1027 real r 1028 r = asin(1.) 1029 if (r .eq. asin(1.)) ... 1030[The behavior of such code varies with the Fortran compiler used -- 1031and sometimes is affected by compiler options.] For now, the man page 1032at the end of f2c.ps is the only part of f2c.ps that reflects this new 1033option. 1034 1035Fri Feb 8 18:12:51 EST 1991: 1036 Cast pointer differences passed as arguments to the appropriate type. 1037This matters, e.g., with MSDOS compilers that yield a long pointer 1038difference but have int == short. 1039 Disallow nonpositive dimensions. 1040 1041Fri Feb 15 12:24:15 EST 1991: 1042 Change %d to %ld in sprintf call in putpower in putpcc.c. 1043 Free more memory (e.g. allowing translation of larger Fortran 1044files under MS-DOS). 1045 Recognize READ (character expression) and WRITE (character expression) 1046as formatted I/O with the format given by the character expression. 1047 Update year in Notice. 1048 1049Sat Feb 16 00:42:32 EST 1991: 1050 Recant recognizing WRITE(character expression) as formatted output 1051-- Fortran 77 is not symmetric in its syntax for READ and WRITE. 1052 1053Mon Mar 4 15:19:42 EST 1991: 1054 Fix bug in passing the real part of a complex argument to an intrinsic 1055function. Omit unneeded parentheses in nested calls to intrinsics. 1056Example: 1057 subroutine foo(x, y) 1058 complex y 1059 x = exp(sin(real(y))) + exp(imag(y)) 1060 end 1061 1062Fri Mar 8 15:05:42 EST 1991: 1063 Fix a comment in expr.c; omit safstrncpy.c (which had bugs in 1064cases not used by f2c). 1065 1066Wed Mar 13 02:27:23 EST 1991: 1067 Initialize firstmemblock->next in mem_init in mem.c . [On most 1068systems it was fortuituously 0, but with System V, -lmalloc could 1069trip on this missed initialization.] 1070 1071Wed Mar 13 11:47:42 EST 1991: 1072 Fix a reference to freed memory. 1073 1074Wed Mar 27 00:42:19 EST 1991: 1075 Fix a memory fault caused by such illegal Fortran as 1076 function foo 1077 x = 3 1078 logical foo ! declaration among executables 1079 foo=.false. ! used to suffer memory fault 1080 end 1081 1082Fri Apr 5 08:30:31 EST 1991: 1083 Fix loss of % in some format expressions, e.g. 1084 write(*,'(1h%)') 1085 Fix botch introduced 27 March 1991 that caused subroutines with 1086multiple entry points to have extraneous declarations of ret_val. 1087 1088Fri Apr 5 12:44:02 EST 1991 1089 Try again to omit extraneous ret_val declarations -- this morning's 1090fix was sometimes wrong. 1091 1092Mon Apr 8 13:47:06 EDT 1991: 1093 Arrange for s_rnge to have the right prototype under -A -C . 1094 1095Wed Apr 17 13:36:03 EDT 1991: 1096 New fatal error message for apparent invocation of a recursive 1097statement function. 1098 1099Thu Apr 25 15:13:37 EDT 1991: 1100 F2c and libi77 adjusted so NAMELIST works with -i2. (I forgot 1101about -i2 when adding NAMELIST.) This required a change to f2c.h 1102(that only affects NAMELIST I/O under -i2.) Man-page description of 1103-i2 adjusted to reflect that -i2 stores array lengths in short ints. 1104 1105Fri Apr 26 02:54:41 EDT 1991: 1106 Libi77: fix some bugs in NAMELIST reading of multi-dimensional arrays 1107(file rsne.c). 1108 1109Thu May 9 02:13:51 EDT 1991: 1110 Omit a trailing space in expr.c (could cause a false xsum value if 1111a mailer drops the trailing blank). 1112 1113Thu May 16 13:14:59 EDT 1991: 1114 Libi77: increase LEFBL in lio.h to overcome a NeXT bug. 1115 Tweak for compilers that recognize "nested" comments: inside comments, 1116turn /* into /+ (as well as */ into +/). 1117 1118Sat May 25 11:44:25 EDT 1991: 1119 libf77: s_rnge: declare line long int rather than int. 1120 1121Fri May 31 07:51:50 EDT 1991: 1122 libf77: system_: officially return status. 1123 1124Mon Jun 17 16:52:53 EDT 1991: 1125 Minor tweaks: omit unnecessary declaration of strcmp (that caused 1126trouble on a system where strcmp was a macro) from misc.c; add 1127SHELL = /bin/sh to makefiles. 1128 Fix a dereference of null when a CHARACTER*(*) declaration appears 1129(illegally) after DATA. Complain only once per subroutine about 1130declarations appearing after DATA. 1131 1132Mon Jul 1 00:28:13 EDT 1991: 1133 Add test and error message for illegal use of subroutine names, e.g. 1134 SUBROUTINE ZAP(A) 1135 ZAP = A 1136 END 1137 1138Mon Jul 8 21:49:20 EDT 1991: 1139 Issue a warning about things like 1140 integer i 1141 i = 'abc' 1142(which is treated as i = ichar('a')). [It might be nice to treat 'abc' 1143as an integer initialized (in a DATA statement) with 'abc', but 1144other matters have higher priority.] 1145 Render 1146 i = ichar('A') 1147as 1148 i = 'A'; 1149rather than 1150 i = 65; 1151(which assumes ASCII). 1152 1153Fri Jul 12 07:41:30 EDT 1991: 1154 Note added to README about erroneous definitions of __STDC__ . 1155 1156Sat Jul 13 13:38:54 EDT 1991: 1157 Fix bugs in double type convesions of complex values, e.g. 1158sngl(real(...)) or dble(real(...)) (where ... is complex). 1159 1160Mon Jul 15 13:21:42 EDT 1991: 1161 Fix bug introduced 8 July 1991 that caused erroneous warnings 1162"ichar([first char. of] char. string) assumed for conversion to numeric" 1163when a subroutine had an array of character strings as an argument. 1164 1165Wed Aug 28 01:12:17 EDT 1991: 1166 Omit an unused function in format.c, an unused variable in proc.c . 1167 Under -r8, promote complex to double complex (as the man page claims). 1168 1169Fri Aug 30 17:19:17 EDT 1991: 1170 f2c.ps updated: slightly expand description of intrinsics and,or,xor, 1171not; add mention of intrinsics lshift, rshift; add note about f2c 1172accepting Fortran 90 inline comments (starting with !); update Cobalt 1173Blue address. 1174 1175Tue Sep 17 07:17:33 EDT 1991: 1176 libI77: err.c and open.c modified to use modes "rb" and "wb" 1177when (f)opening unformatted files; README updated to point out 1178that it may be necessary to change these modes to "r" and "w" 1179on some non-ANSI systems. 1180 1181Tue Oct 15 10:25:49 EDT 1991: 1182 Minor tweaks that make some PC compilers happier: insert some 1183casts, add args to signal functions. 1184 Change -g to emit uncommented #line lines -- and to emit more of them; 1185update fc, f2c.1, f2c.1t, f2c.ps to reflect this. 1186 Change uchar to Uchar in xsum.c . 1187 Bring gram.c up to date. 1188 1189Thu Oct 17 09:22:05 EDT 1991: 1190 libi77: README, fio.h, sue.c, uio.c changed so the length field 1191in unformatted sequential records has type long rather than int 1192(unless UIOLEN_int is #defined). This is for systems where sizeof(int) 1193can vary, depending on the compiler or compiler options. 1194 1195Thu Oct 17 13:42:59 EDT 1991: 1196 libi77: inquire.c: when MSDOS is defined, don't strcmp units[i].ufnm 1197when it is NULL. 1198 1199Fri Oct 18 15:16:00 EDT 1991: 1200 Correct xsum0.out in "all from f2c/src" (somehow botched on 15 Oct.). 1201 1202Tue Oct 22 18:12:56 EDT 1991: 1203 Fix memory fault when a character*(*) argument is used (illegally) 1204as a dummy variable in the definition of a statement function. (The 1205memory fault occurred when the statement function was invoked.) 1206 Complain about implicit character*(*). 1207 1208Thu Nov 14 08:50:42 EST 1991: 1209 libi77: change uint to Uint in fmt.h, rdfmt.c, wrtfmt.c; this change 1210should be invisible unless you're running a brain-damaged system. 1211 1212Mon Nov 25 19:04:40 EST 1991: 1213 libi77: correct botches introduced 17 Oct. 1991 and 14 Nov. 1991 1214(change uint to Uint in lwrite.c; other changes that only matter if 1215sizeof(int) != sizeof(long)). 1216 Add a more meaningful error message when bailing out due to an attempt 1217to invoke a COMMON variable as a function. 1218 1219Sun Dec 1 19:29:24 EST 1991: 1220 libi77: uio.c: add test for read failure (seq. unformatted reads); 1221adjust an error return from EOF to off end of record. 1222 1223Tue Dec 10 17:42:28 EST 1991: 1224 Add tests to prevent memory faults with bad uses of character*(*). 1225 1226Thu Dec 12 11:24:41 EST 1991: 1227 libi77: fix bug with internal list input that caused the last 1228character of each record to be ignored; adjust error message in 1229internal formatted input from "end-of-file" to "off end of record" 1230if the format specifies more characters than the record contains. 1231 1232Wed Dec 18 17:48:11 EST 1991: 1233 Fix bug in translating nonsensical ichar invocations involving 1234concatenations. 1235 Fix bug in passing intrinsics lle, llt, lge, lgt as arguments; 1236hl_le was being passed rather than l_le, etc. 1237 libf77: adjust length parameters from long to ftnlen, for 1238compiling with f2c_i2 defined. 1239 1240Sat Dec 21 15:30:57 EST 1991: 1241 Allow DO nnn ... to end with an END DO statement labelled nnn. 1242 1243Tue Dec 31 13:53:47 EST 1991: 1244 Fix bug in handling dimension a(n**3,2) -- pow_ii was called 1245incorrectly. 1246 Fix bug in translating 1247 subroutine x(abc,n) 1248 character abc(n) 1249 write(abc,'(i10)') 123 1250 end 1251(omitted declaration and initialiation of abc_dim1). 1252 Complain about dimension expressions of such invalid types 1253as complex and logical. 1254 1255Fri Jan 17 11:54:20 EST 1992: 1256 Diagnose some illegal uses of main program name (rather than 1257memory faulting). 1258 libi77: (1) In list and namelist input, treat "r* ," and "r*," 1259alike (where r is a positive integer constant), and fix a bug in 1260handling null values following items with repeat counts (e.g., 12612*1,,3). (2) For namelist reading of a numeric array, allow a new 1262name-value subsequence to terminate the current one (as though the 1263current one ended with the right number of null values). 1264(3) [lio.h, lwrite.c]: omit insignificant zeros in list and namelist 1265output. (Compile with -DOld_list_output to get the old behavior.) 1266 1267Sat Jan 18 15:58:01 EST 1992: 1268 libi77: make list output consistent with F format by printing .1 1269rather than 0.1 (introduced yesterday). 1270 1271Wed Jan 22 08:32:43 EST 1992: 1272 libi77: add comment to README pointing out preconnection of 1273Fortran units 5, 6, 0 to stdin, stdout, stderr (respectively). 1274 1275Mon Feb 3 11:57:53 EST 1992: 1276 libi77: fix namelist read bug that caused the character following 1277a comma to be ignored. 1278 1279Fri Feb 28 01:04:26 EST 1992: 1280 libf77: fix buggy z_sqrt.c (double precision square root), which 1281misbehaved for arguments in the southwest quadrant. 1282 1283Thu Mar 19 15:05:18 EST 1992: 1284 Fix bug (introduced 17 Jan 1992) in handling multiple entry points 1285of differing types (with implicitly typed entries appearing after 1286the first executable statement). 1287 Fix memory fault in the following illegal Fortran: 1288 double precision foo(i) 1289* illegal: above should be "double precision function foo(i)" 1290 foo = i * 3.2 1291 entry moo(i) 1292 end 1293 Note about ANSI_Libraries (relevant, e.g., to IRIX 4.0.1 and AIX) 1294added to README. 1295 Abort zero divides during constant simplification. 1296 1297Sat Mar 21 01:27:09 EST 1992: 1298 Tweak ckalloc (misc.c) for systems where malloc(0) = 0; this matters 1299for subroutines with multiple entry points but no arguments. 1300 Add "struct memblock;" to init.c (irrelevant to most compilers). 1301 1302Wed Mar 25 13:31:05 EST 1992: 1303 Fix bug with IMPLICIT INTEGER*4(...): under -i2 or -I2, the *4 was 1304ignored. 1305 1306Tue May 5 09:53:55 EDT 1992: 1307 Tweaks to README; e.g., ANSI_LIbraries changed to ANSI_Libraries . 1308 1309Wed May 6 23:49:07 EDT 1992 1310 Under -A and -C++, have subroutines return 0 (even if they have 1311no * arguments). 1312 Adjust libi77 (rsne.c and lread.c) for systems where ungetc is 1313a macro. Tweak lib[FI]77/makefile to use unique intermediate file 1314names (for parallel makes). 1315 1316Tue May 19 09:03:05 EDT 1992: 1317 Adjust libI77 to make err= work with internal list and formatted I/O. 1318 1319Sat May 23 18:17:42 EDT 1992: 1320 Under -A and -C++, supply "return 0;" after the code generated for 1321a STOP statement -- the C compiler doesn't know that s_stop won't 1322return. 1323 New (mutually exclusive) options: 1324 -f treats all input lines as free-format lines, 1325 honoring text that appears after column 72 1326 and not padding lines shorter than 72 characters 1327 with blanks (which matters if a character string 1328 is continued across 2 or more lines). 1329 -72 treats text appearing after column 72 as an error. 1330 1331Sun May 24 09:45:37 EDT 1992: 1332 Tweak description of -f in f2c.1 and f2c.1t; update f2c.ps . 1333 1334Fri May 29 01:17:15 EDT 1992: 1335 Complain about externals used as variables. Example 1336 subroutine foo(a,b) 1337 external b 1338 a = a*b ! illegal use of b; perhaps should be b() 1339 end 1340 1341Mon Jun 15 11:15:27 EDT 1992: 1342 Fix bug in handling namelists with names that have underscores. 1343 1344Sat Jun 27 17:30:59 EDT 1992: 1345 Under -A and -C++, end Main program aliases with "return 0;". 1346 Under -A and -C++, use .P files and usage in previous subprograms 1347in the current file to give prototypes for functions declared EXTERNAL 1348but not invoked. 1349 Fix memory fault under -d1 -P . 1350 Under -A and -C++, cast arguments to the right types in calling 1351a function that has been defined in the current file or in a .P file. 1352 Fix bug in handling multi-dimensional arrays with array references 1353in their leading dimensions. 1354 Fix bug in the intrinsic cmplx function when the first argument 1355involves an expression for which f2c generates temporary variables, 1356e.g. cmplx(abs(real(a)),1.) . 1357 1358Sat Jul 18 07:36:58 EDT 1992: 1359 Fix buglet with -e1c (invisible on most systems) temporary file 1360f2c_functions was unlinked before being closed. 1361 libf77: fix bugs in evaluating m**n for integer n < 0 and m an 1362integer different from 1 or a real or double precision 0. 1363Catch SIGTRAP (to print "Trace trap" before aborting). Programs 1364that previously erroneously computed 1 for 0**-1 may now fault. 1365Relevant routines: main.c pow_di.c pow_hh.c pow_ii.c pow_ri.c . 1366 1367Sat Jul 18 08:40:10 EDT 1992: 1368 libi77: allow namelist input to end with & (e.g. &end). 1369 1370Thu Jul 23 00:14:43 EDT 1992 1371 Append two underscores rather than one to C keywords used as 1372local variables to avoid conflicts with similarly named COMMON blocks. 1373 1374Thu Jul 23 11:20:55 EDT 1992: 1375 libf77, libi77 updated to assume ANSI prototypes unless KR_headers 1376is #defined. 1377 libi77 now recognizes a Z format item as in Fortran 90; 1378the implementation assumes 8-bit bytes and botches character strings 1379on little-endian machines (by printing their bytes from right to 1380left): expect this bug to persist; fixing it would require a 1381change to the I/O calling sequences. 1382 1383Tue Jul 28 15:18:33 EDT 1992: 1384 libi77: insert missed "#ifdef KR_headers" lines around getnum 1385header in rsne.c. Version not updated. 1386 1387NOTE: "index from f2c" now ends with current timestamps of files in 1388"all from f2c/src", sorted by time. To bring your source up to date, 1389obtain source files with a timestamp later than the time shown in your 1390version.c. 1391 1392Fri Aug 14 08:07:09 EDT 1992: 1393 libi77: tweak wrt_E in wref.c to avoid signing NaNs. 1394 1395Sun Aug 23 19:05:22 EDT 1992: 1396 fc: supply : after O in getopt invocation (for -O1 -O2 -O3). 1397 1398Mon Aug 24 18:37:59 EDT 1992: 1399 Recant above tweak to fc: getopt is dumber than I thought; 1400it's necessary to say -O 1 (etc.). 1401 libF77/README: add comments about ABORT, ERF, DERF, ERFC, DERFC, 1402GETARG, GETENV, IARGC, SIGNAL, and SYSTEM. 1403 1404Tue Oct 27 01:57:42 EST 1992: 1405 libf77, libi77: 1406 1. Fix botched indirection in signal_.c. 1407 2. Supply missing l_eof = 0 assignment to s_rsne() in rsne.c (so 1408end-of-file on other files won't confuse namelist reads of external 1409files). 1410 3. Prepend f__ to external names that are only of internal 1411interest to lib[FI]77. 1412 1413Thu Oct 29 12:37:18 EST 1992: 1414 libf77: Fix botch in signal_.c when KR_headers is #defined; 1415add CFLAGS to makefile. 1416 libi77: trivial change to makefile for consistency with 1417libF77/makefile. 1418 1419Wed Feb 3 02:05:16 EST 1993: 1420 Recognize types INTEGER*1, LOGICAL*1, LOGICAL*2, INTEGER*8. 1421INTEGER*8 is not well tested and will only work reasonably on 1422systems where int = 4 bytes, long = 8 bytes; on such systems, 1423you'll have to modify f2c.h appropriately, changing integer 1424from long to int and adding typedef long longint. You'll also 1425have to compile libI77 with Allow_TYQUAD #defined and adjust 1426libF77/makefile to compile pow_qq.c. In the f2c source, changes 1427for INTEGER*8 are delimited by #ifdef TYQUAD ... #endif. You 1428can omit the INTEGER*8 changes by compiling with NO_TYQUAD 1429#defined. Otherwise, the new command-line option -!i8 1430disables recognition of INTEGER*8. 1431 libf77: add pow_qq.c 1432 libi77: add #ifdef Allow_TYQUAD stuff. Changes for INTEGER*1, 1433LOGICAL*1, and LOGICAL*2 came last 23 July 1992. Fix bug in 1434backspace (that only bit when the last character of the second 1435or subsequent buffer read was the previous newline). Guard 1436against L_tmpnam being too small in endfile.c. For MSDOS, 1437close and reopen files when copying to truncate. Lengthen 1438LINTW (buffer size in lwrite.c). 1439 Add \ to the end of #define lines that get broken. 1440 Fix bug in handling NAMELIST of items in EQUIVALENCE. 1441 Under -h (or -hd), convert Hollerith to integer in general expressions 1442(e.g., assignments), not just when they're passed as arguments, and 1443blank-pad rather than 0-pad the Hollerith to a multiple of 1444sizeof(integer) or sizeof(doublereal). 1445 Add command-line option -s, which instructs f2c preserve multi- 1446dimensional subscripts (by emitting and using appropriate #defines). 1447 Fix glitch (with default type inferences) in examples like 1448 call foo('abc') 1449 end 1450 subroutine foo(goo) 1451 end 1452This gave two warning messages: 1453 Warning on line 4 of y.f: inconsistent calling sequences for foo: 1454 here 1, previously 2 args and string lengths. 1455 Warning on line 4 of y.f: inconsistent calling sequences for foo: 1456 here 2, previously 1 args and string lengths. 1457Now the second Warning is suppressed. 1458 Complain about all inconsistent arguments, not just the first. 1459 Switch to automatic creation of "all from f2c/src". For folks 1460getting f2c source via ftp, this means f2c/src/all.Z is now an 1461empty file rather than a bundle. 1462 Separate -P and -A: -P no longer implies -A. 1463 1464Thu Feb 4 00:32:20 EST 1993: 1465 Fix some glitches (introduced yesterday) with -h . 1466 1467Fri Feb 5 01:40:38 EST 1993: 1468 Fix bug in types conveyed for namelists (introduced 3 Feb. 1993). 1469 1470Fri Feb 5 21:26:43 EST 1993: 1471 libi77: tweaks to NAMELIST and open (after comments by Harold 1472Youngren): 1473 1. Reading a ? instead of &name (the start of a namelist) causes 1474 the namelist being sought to be written to stdout (unit 6); 1475 to omit this feature, compile rsne.c with -DNo_Namelist_Questions. 1476 2. Reading the wrong namelist name now leads to an error message 1477 and an attempt to skip input until the right namelist name is found; 1478 to omit this feature, compile rsne.c with -DNo_Bad_Namelist_Skip. 1479 3. Namelist writes now insert newlines before each variable; to omit 1480 this feature, compile xwsne.c with -DNo_Extra_Namelist_Newlines. 1481 4. For OPEN of sequential files, ACCESS='APPEND' (or 1482 access='anything else starting with "A" or "a"') causes the file to 1483 be positioned at end-of-file, so a write will append to the file. 1484 (This is nonstandard, but does not require modifying data 1485 structures.) 1486 1487Mon Feb 8 14:40:37 EST 1993: 1488 Increase number of continuation lines allowed from 19 to 99, 1489and allow changing this limit with -NC (e.g. -NC200 for 200 lines). 1490 Treat control-Z (at the beginning of a line) as end-of-file: see 1491the new penultimate paragraph of README. 1492 Fix a rarely seen glitch that could make an error messages to say 1493"line 0". 1494 1495Tue Feb 9 02:05:40 EST 1993 1496 libi77: change some #ifdef MSDOS lines to #ifdef NON_UNIX_STDIO, 1497and, in err.c under NON_UNIX_STDIO, avoid close(creat(name,0666)) 1498when the unit has another file descriptor for name. 1499 1500Tue Feb 9 17:12:49 EST 1993 1501 libi77: more tweaks for NON_UNIX_STDIO: use stdio routines 1502rather than open, close, creat, seek, fdopen (except for f__isdev). 1503 1504Fri Feb 12 15:49:33 EST 1993 1505 Update src/gram.c (which was forgotten in the recent updates). 1506Most folks regenerate it anyway (wity yacc or bison). 1507 1508Thu Mar 4 17:07:38 EST 1993 1509 Increase default max labels in computed gotos and alternate returns 1510to 257, and allow -Nl1234 to specify this number. 1511 Tweak put.c to check p->tag == TADDR in realpart() and imagpart(). 1512 Adjust fc script to allow .r (RATFOR) files and -C (check subscripts). 1513 Avoid declaring strchr in niceprintf.c under -DANSI_Libraries . 1514 gram.c updated again. 1515 libi77: err.c, open.c: take declaration of fdopen from rawio.h. 1516 1517Sat Mar 6 07:09:11 EST 1993 1518 libi77: uio.c: adjust off-end-of-record test for sequential 1519unformatted reads to respond to err= rather than end= . 1520 1521Sat Mar 6 16:12:47 EST 1993 1522 Treat scalar arguments of the form (v) and v+0, where v is a variable, 1523as expressions: assign to a temporary variable, and pass the latter. 1524 gram.c updated. 1525 1526Mon Mar 8 09:35:38 EST 1993 1527 "f2c.h from f2c" updated to add types logical1 and integer1 for 1528LOGICAL*1 and INTEGER*1. ("f2c.h from f2c" is supposed to be the 1529same as "f2c.h from f2c/src", which was updated 3 Feb. 1993.) 1530 1531Mon Mar 8 17:57:55 EST 1993 1532 Fix rarely seen bug that could cause strange casts in function 1533invocations (revealed by an example with msdos/f2c.exe). 1534 msdos/f2cx.exe.Z and msdos/f2c.exe.Z updated (ftp access only). 1535 1536Fri Mar 12 12:37:01 EST 1993 1537 Fix bug with -s in handling subscripts involving min, max, and 1538complicated expressions requiring temporaries. 1539 Fix bug in handling COMMONs that need padding by a char array. 1540 msdos/f2cx.exe.Z and msdos/f2c.exe.Z updated (ftp access only). 1541 1542Fri Mar 12 17:16:16 EST 1993 1543 libf77, libi77: updated for compiling under C++. 1544 1545Mon Mar 15 16:21:37 EST 1993 1546 libi77: more minor tweaks (for -DKR_headers); Version.c not changed. 1547 1548Thu Mar 18 12:37:30 EST 1993 1549 Flag -r (for discarding carriage-returns on systems that end lines 1550with carriage-return/newline pairs, e.g. PCs) added to xsum, and 1551xsum.c converted to ANSI/ISO syntax (with K&R syntax available with 1552-DKR_headers). [When time permits, the f2c source will undergo a 1553similar conversion.] 1554 libi77: tweaks to #includes in endfile.c, err.c, open.c, rawio.h; 1555Version.c not changed. 1556 f2c.ps updated (to pick up revision of 2 Feb. 1993 to f2c.1). 1557 1558Fri Mar 19 09:19:26 EST 1993 1559 libi77: add (char *) casts to malloc and realloc invocations 1560in err.c, open.c; Version.c not changed. 1561 1562Tue Mar 30 07:17:15 EST 1993 1563 Fix bug introduced 6 March 1993: possible memory corruption when 1564loops in data statements involve constant subscripts, as in 1565 DATA (GUNIT(1,I),I=0,14)/15*-1/ 1566 1567Tue Mar 30 16:17:42 EST 1993 1568 Fix bug with -s: (floating-point array item)*(complex item) 1569generates an _subscr() reference for the floating-point array, 1570but a #define for the _subscr() was omitted. 1571 1572Tue Apr 6 12:11:22 EDT 1993 1573 libi77: adjust error returns for formatted inputs to flush the current 1574input line when err= is specified. To restore the old behavior (input 1575left mid-line), either adjust the #definition of errfl in fio.h or omit 1576the invocation of f__doend in err__fl (in err.c). 1577 1578Tue Apr 6 13:30:04 EDT 1993 1579 Fix bug revealed in 1580 subroutine foo(i) 1581 call goo(int(i)) 1582 end 1583which now passes a copy of i, rather than i itself. 1584 1585Sat Apr 17 11:41:02 EDT 1993 1586 Adjust appending of underscores to conform with f2c.ps ("A Fortran 1587to C Converter"): names that conflict with C keywords or f2c type 1588names now have just one underscore appended (rather than two); add 1589"integer1", "logical1", "longint" to the keyword list. 1590 Append underscores to names that appear in EQUIVALENCE and are 1591component names in a structure declared in f2c.h, thus avoiding a 1592problem caused by the #defines emitted for equivalences. Example: 1593 complex a 1594 equivalence (i,j) 1595 a = 1 ! a.i went awry because of #define i 1596 j = 2 1597 write(*,*) a, i 1598 end 1599 Adjust line-breaking logic to avoid splitting very long constants 1600(and names). Example: 1601 ! The next line starts with tab and thus is a free-format line. 1602 a=.012345689012345689012345689012345689012345689012345689012345689012345689 1603 end 1604 Omit extraneous "return 0;" from entry stubs emitted for multiple 1605entry points of type character, complex, or double complex. 1606 1607Sat Apr 17 14:35:05 EDT 1993 1608 Fix bug (introduced 4 Feb.) in separating -P from -A that kept f2c 1609from re-reading a .P file written without -A or -C++ describing a 1610routine with an external argument. [See the just-added note about 1611separating -P from -A in the changes above for 3 Feb. 1993.] 1612 Fix bug (type UNKNOWN for V in the example below) revealed by 1613 subroutine a() 1614 external c 1615 call b(c) 1616 end 1617 subroutine b(v) 1618 end 1619 1620Sun Apr 18 19:55:26 EDT 1993 1621 Fix wrong calling sequence for mem() in yesterday's addition to 1622equiv.c . 1623 1624Wed Apr 21 17:39:46 EDT 1993 1625 Fix bug revealed in 1626 1627 ASSIGN 10 TO L1 1628 GO TO 20 1629 10 ASSIGN 30 TO L2 1630 STOP 10 1631 1632 20 ASSIGN 10 TO L2 ! Bug here because 10 had been assigned 1633 ! to another label, then defined. 1634 GO TO L2 1635 30 END 1636 1637Fri Apr 23 18:38:50 EDT 1993 1638 Fix bug with -h revealed in 1639 CHARACTER*9 FOO 1640 WRITE(FOO,'(I6)') 1 1641 WRITE(FOO,'(I6)') 2 ! struct icilist io___3 botched 1642 END 1643 1644Tue Apr 27 16:08:28 EDT 1993 1645 Tweak to makefile: remove "size f2c". 1646 1647Tue May 4 23:48:20 EDT 1993 1648 libf77: tweak signal_ line of f2ch.add . 1649 1650Tue Jun 1 13:47:13 EDT 1993 1651 Fix bug introduced 3 Feb. 1993 in handling multiple entry 1652points with differing return types -- the postfix array in proc.c 1653needed a new entry for integer*8 (which resulted in wrong 1654Multitype suffixes for non-integral types). 1655 For (default) K&R C, generate VOID rather than int functions for 1656functions of Fortran type character, complex, and double complex. 1657 msdos/f2cx.exe.Z and msdos/f2c.exe.Z updated (ftp access only). 1658 1659Tue Jun 1 23:11:15 EDT 1993 1660 f2c.h: add Multitype component g and commented type longint. 1661 proc.c: omit "return 0;" from stubs for complex and double complex 1662entries (when entries have multiple types); add test to avoid memory 1663fault with illegal combinations of entry types. 1664 1665Mon Jun 7 12:00:47 EDT 1993 1666 Fix memory fault in 1667 common /c/ m 1668 integer m(1) 1669 data m(1)/1/, m(2)/2/ ! one too many initializers 1670 end 1671 msdos/f2cx.exe.Z and msdos/f2c.exe.Z updated (ftp access only). 1672 1673Fri Jun 18 13:55:51 EDT 1993 1674 libi77: change type of signal_ in f2ch.add; change type of il in 1675union Uint from long to integer (for machines like the DEC Alpha, 1676where integer should be the same as int). Version.c not changed. 1677 Tweak gram.dcl and gram.head: add semicolons after some rules that 1678lacked them, and remove an extraneous semicolon. These changes are 1679completely transparent to our local yacc programs, but apparently 1680matter on some VMS systems. 1681 1682Wed Jun 23 01:02:56 EDT 1993 1683 Update "fc" shell script, and bring f2c.1 and f2c.1t up to date: 1684they're meant to be linked with (i.e., the same as) src/f2c.1 and 1685src/f2c.1t . [In the last update of f2c.1* (2 Feb. 1993), only 1686src/f2c.1 and src/f2c.1t got changed -- a mistake.] 1687 1688Wed Jun 23 09:04:31 EDT 1993 1689 libi77: fix bug in format reversions for internal writes. 1690Example: 1691 character*60 lines(2) 1692 write(lines,"('n =',i3,2(' more text',i3))") 3, 4, 5, 6 1693 write(*,*) 'lines(1) = ', lines(1) 1694 write(*,*) 'lines(2) = ', lines(2) 1695 end 1696gave an error message that began "iio: off end of record", rather 1697than giving the correct output: 1698 1699 lines(1) = n = 3 more text 4 more text 5 1700 lines(2) = more text 6 more text 1701 1702Thu Aug 5 11:31:14 EDT 1993 1703 libi77: lread.c: fix bug in handling repetition counts for logical 1704data (during list or namelist input). Change struct f__syl to 1705struct syl (for buggy compilers). 1706 1707Sat Aug 7 16:05:30 EDT 1993 1708 libi77: lread.c (again): fix bug in namelist reading of incomplete 1709logical arrays. 1710 Fix minor calling-sequence errors in format.c, output.c, putpcc.c: 1711should be invisible. 1712 1713Mon Aug 9 09:12:38 EDT 1993 1714 Fix erroneous cast under -A in translating 1715 character*(*) function getc() 1716 getc(2:3)=' ' !wrong cast in first arg to s_copy 1717 end 1718 libi77: lread.c: fix bug in namelist reading of an incomplete array 1719of numeric data followed by another namelist item whose name starts 1720with 'd', 'D', 'e', or 'E'. 1721 1722Fri Aug 20 13:22:10 EDT 1993 1723 Fix bug in do while revealed by 1724 subroutine skdig (line, i) 1725 character line*(*), ch*1 1726 integer i 1727 logical isdigit 1728 isdigit(ch) = ch.ge.'0' .and. ch.le.'9' 1729 do while (isdigit(line(i:i))) ! ch__1[0] was set before 1730 ! "while(...) {...}" 1731 i = i + 1 1732 enddo 1733 end 1734 1735Fri Aug 27 08:22:54 EDT 1993 1736 Add #ifdefs to avoid declaring atol when it is a macro; version.c 1737not updated. 1738 1739Wed Sep 8 12:24:26 EDT 1993 1740 libi77: open.c: protect #include "sys/..." with 1741#ifndef NON_UNIX_STDIO; Version date not changed. 1742 1743Thu Sep 9 08:51:21 EDT 1993 1744 Adjust "include" to interpret file names relative to the directory 1745of the file that contains the "include". 1746 1747Fri Sep 24 00:56:12 EDT 1993 1748 Fix offset error resulting from repeating the same equivalence 1749statement twice. Example: 1750 real a(2), b(2) 1751 equivalence (a(2), b(2)) 1752 equivalence (a(2), b(2)) 1753 end 1754 Increase MAXTOKENLEN (to roughly the largest allowed by ANSI C). 1755 1756Mon Sep 27 08:55:09 EDT 1993 1757 libi77: endfile.c: protect #include "sys/types.h" with 1758#ifndef NON_UNIX_STDIO; Version.c not changed. 1759 1760Fri Oct 15 15:37:26 EDT 1993 1761 Fix rarely seen parsing bug illustrated by 1762 subroutine foo(xabcdefghij) 1763 character*(*) xabcdefghij 1764 IF (xabcdefghij.NE.'##') GOTO 40 1765 40 end 1766in which the spacing in the IF line is crucial. 1767 1768Thu Oct 21 13:55:11 EDT 1993 1769 Give more meaningful error message (then "unexpected character in 1770cds") when constant simplification leads to Infinity or NaN. 1771 1772Wed Nov 10 15:01:05 EST 1993 1773 libi77: backspace.c: adjust, under -DMSDOS, to cope with MSDOS 1774text files, as handled by some popular PC C compilers. Beware: 1775the (defective) libraries associated with these compilers assume lines 1776end with \r\n (conventional MS-DOS text files) -- and ftell (and 1777hence the current implementation of backspace) screws up if lines with 1778just \n. 1779 1780Thu Nov 18 09:37:47 EST 1993 1781 Give a better error (than "control stack empty") for an extraneous 1782ENDDO. Example: 1783 enddo 1784 end 1785 Update comments about ftp in "readme from f2c". 1786 1787Sun Nov 28 17:26:50 EST 1993 1788 Change format of time stamp in version.c to yyyymmdd. 1789 Sort parameter adjustments (or complain of impossible dependencies) 1790so that dummy arguments are referenced only after being adjusted. 1791Example: 1792 subroutine foo(a,b) 1793 integer a(2) ! a must be adjusted before b 1794 double precision b(a(1),a(2)) 1795 call goo(b(3,4)) 1796 end 1797 Adjust structs for initialized common blocks and equivalence classes 1798to omit the trailing struct component added to force alignment when 1799padding already forces the desired alignment. Example: 1800 PROGRAM TEST 1801 COMMON /Z/ A, CC 1802 CHARACTER*4 CC 1803 DATA cc /'a'/ 1804 END 1805now gives 1806 struct { 1807 integer fill_1[1]; 1808 char e_2[4]; 1809 } z_ = { {0}, {'a', ' ', ' ', ' '} }; 1810rather than 1811struct { 1812 integer fill_1[1]; 1813 char e_2[4]; 1814 real e_3; 1815 } z_ = { {0}, {'a', ' ', ' ', ' '}, (float)0. }; 1816 1817Wed Dec 8 16:24:43 EST 1993 1818 Adjust lex.c to recognize # nnn "filename" lines emitted by cpp; 1819this affects the file names and line numbers in error messages and 1820the #line lines emitted under -g. 1821 Under -g, arrange for a file that starts with an executable 1822statement to have the first #line line indicate line 1, rather 1823than the line number of the END statement ending the main program. 1824 Adjust fc script to run files ending in .F through /lib/cpp. 1825 Fix bug ("Impossible tag 2") in 1826 if (t .eq. (0,2)) write(*,*) 'Bug!' 1827 end 1828 libi77: iio.c: adjust internal formatted reads to treat short records 1829as though padded with blanks (rather than causing an "off end of record" 1830error). 1831 1832Wed Dec 15 15:19:15 EST 1993 1833 fc: adjusted for .F files to pass -D and -I options to cpp. 1834 1835Fri Dec 17 20:03:38 EST 1993 1836 Fix botch introduced 28 Nov. 1993 in vax.c; change "version of" 1837to "version". 1838 1839Tue Jan 4 15:39:52 EST 1994 1840 msdos/f2cx.exe.Z and msdos/f2c.exe.Z updated (ftp access only). 1841 1842Wed Jan 19 08:55:19 EST 1994 1843 Arrange to accept 1844 integer Nx, Ny, Nz 1845 parameter (Nx = 10, Ny = 20) 1846 parameter (Nz = max(Nx, Ny)) 1847 integer c(Nz) 1848 call foo(c) 1849 end 1850rather than complaining "Declaration error for c: adjustable dimension 1851on non-argument". The necessary changes cause some hitherto unfolded 1852constant expressions to be folded. 1853 Accept BYTE as a synonym for INTEGER*1. 1854 1855Thu Jan 27 08:57:40 EST 1994 1856 Fix botch in changes of 19 Jan. 1994 that broke entry points with 1857multi-dimensional array arguments that did not appear in the subprogram 1858argument list and whose leading dimensions depend on arguments. 1859 1860Mon Feb 7 09:24:30 EST 1994 1861 Remove artifact in "fc" script that caused -O to be ignored: 1862 87c87 1863 < # lcc ignores -O... 1864 --- 1865 > CFLAGS="$CFLAGS $O" 1866 1867Sun Feb 20 17:04:58 EST 1994 1868 Fix bugs reading .P files for routines with arguments of type 1869INTEGER*1, INTEGER*8, LOGICAL*2. 1870 Fix glitch in reporting inconsistent arguments for routines involving 1871character arguments: "arg n" had n too large by the number of 1872character arguments. 1873 1874Tue Feb 22 20:50:08 EST 1994 1875 Trivial changes to data.c format.c main.c niceprintf.c output.h and 1876sysdep.h (consistency improvements). 1877 libI77: lread.c: check for NULL return from realloc. 1878 1879Fri Feb 25 23:56:08 EST 1994 1880 output.c, sysdep.h: arrange for -DUSE_DTOA to use dtoa.c and g_fmt.c 1881for correctly rounded decimal values on IEEE-arithmetic machines 1882(plus machines with VAX and IBM-mainframe arithmetic). These 1883routines are available from netlib's fp directory. 1884 msdos/f2cx.exe.Z and msdos/f2c.exe.Z updated (ftp access only); the 1885former uses -DUSE_DTOA to keep 12 from printing as 12.000000000000001. 1886 vax.c: fix wrong arguments to badtag and frchain introduced 188728 Nov. 1993. 1888 Source for f2c converted to ANSI/ISO format, with the K&R format 1889available by compilation with -DKR_headers . 1890 Arrange for (double precision expression) relop (single precision 1891constant) to retain the single-precision nature of the constant. 1892Example: 1893 double precision t 1894 if (t .eq. 0.3) ... 1895 1896Mon Feb 28 11:40:24 EST 1994 1897 README updated to reflect a modification just made to netlib's 1898"dtoa.c from fp": 189996a97,105 1900> Also add the rule 1901> 1902> dtoa.o: dtoa.c 1903> $(CC) -c $(CFLAGS) -DMALLOC=ckalloc -DIEEE... dtoa.c 1904> 1905> (without the initial tab) to the makefile, where IEEE... is one of 1906> IEEE_MC68k, IEEE_8087, VAX, or IBM, depending on your machine's 1907> arithmetic. See the comments near the start of dtoa.c. 1908> 1909 1910Sat Mar 5 09:41:52 EST 1994 1911 Complain about functions with the name of a previously declared 1912common block (which is illegal). 1913 New option -d specifies the directory for output .c and .P files; 1914f2c.1 and f2c.1t updated. The former undocumented debug option -dnnn 1915is now -Dnnn. 1916 1917Thu Mar 10 10:21:44 EST 1994 1918 libf77: add #undef min and #undef max lines to s_paus.c s_stop.c 1919and system_.c; Version.c not changed. 1920 libi77: add -DPad_UDread lines to uio.c and explanation to README: 1921 Some buggy Fortran programs use unformatted direct I/O to write 1922 an incomplete record and later read more from that record than 1923 they have written. For records other than the last, the unwritten 1924 portion of the record reads as binary zeros. The last record is 1925 a special case: attempting to read more from it than was written 1926 gives end-of-file -- which may help one find a bug. Some other 1927 Fortran I/O libraries treat the last record no differently than 1928 others and thus give no help in finding the bug of reading more 1929 than was written. If you wish to have this behavior, compile 1930 uio.c with -DPad_UDread . 1931Version.c not changed. 1932 1933Tue Mar 29 17:27:54 EST 1994 1934 Adjust make_param so dimensions involving min, max, and other 1935complicated constant expressions do not provoke error messages 1936about adjustable dimensions on non-arguments. 1937 Fix botch introduced 19 Jan 1994: "adjustable dimension on non- 1938argument" messages could cause some things to be freed twice. 1939 1940Tue May 10 07:55:12 EDT 1994 1941 Trivial changes to exec.c, p1output.c, parse_args.c, proc.c, 1942and putpcc.c: change arguments from 1943 type foo[] 1944to 1945 type *foo 1946for consistency with defs.h. For most compilers, this makes no 1947difference. 1948 1949Thu Jun 2 12:18:18 EDT 1994 1950 Fix bug in handling FORMAT statements that have adjacent character 1951(or Hollerith) strings: an extraneous \002 appeared between the 1952strings. 1953 libf77: under -DNO_ONEXIT, arrange for f_exit to be called just 1954once; previously, upon abnormal termination (including stop statements), 1955it was called twice. 1956 1957Mon Jun 6 15:52:57 EDT 1994 1958 libf77: Avoid references to SIGABRT and SIGIOT if neither is defined; 1959Version.c not changed. 1960 libi77: Add cast to definition of errfl() in fio.h; this only matters 1961on systems with sizeof(int) < sizeof(long). Under -DNON_UNIX_STDIO, 1962use binary mode for direct formatted files (to avoid any confusion 1963connected with \n characters). 1964 1965Fri Jun 10 16:47:31 EDT 1994 1966 Fix bug under -A in handling unreferenced (and undeclared) 1967external arguments in subroutines with multiple entry points. Example: 1968 subroutine m(fcn,futil) 1969 external fcn,futil 1970 call fcn 1971 entry mintio(i1) ! (D_fp)0 rather than (U_fp)0 for futil 1972 end 1973 1974Wed Jun 15 10:38:14 EDT 1994 1975 Allow char(constant expression) function in parameter declarations. 1976(This was probably broken in the changes of 29 March 1994.) 1977 1978Fri Jul 1 23:54:00 EDT 1994 1979 Minor adjustments to makefile (rule for f2c.1 commented out) and 1980sysdep.h (#undef KR_headers if __STDC__ is #defined, and base test 1981for ANSI_Libraries and ANSI_Prototypes on KR_headers rather than 1982__STDC__); version.c touched but not changed. 1983 libi77: adjust fp.h so local.h is only needed under -DV10; 1984Version.c not changed. 1985 1986Tue Jul 5 03:05:46 EDT 1994 1987 Fix segmentation fault in 1988 subroutine foo(a,b,k) 1989 data i/1/ 1990 double precision a(k,1) ! sequence error: must precede data 1991 b = a(i,1) 1992 end 1993 libi77: Fix bug (introduced 6 June 1994?) in reopening files under 1994NON_UNIX_STDIO. 1995 Fix some error messages caused by illegal Fortran. Examples: 1996* 1. 1997 x(i) = 0 !Missing declaration for array x 1998 call f(x) !Said Impossible storage class 8 in routine mkaddr 1999 end !Now says invalid use of statement function x 2000* 2. 2001 f = g !No declaration for g; by default it's a real variable 2002 call g !Said invalid class code 2 for function g 2003 end !Now says g cannot be called 2004* 3. 2005 intrinsic foo !Invalid intrinsic name 2006 a = foo(b) !Said intrcall: bad intrgroup 0 2007 end !Now just complains about line 1 2008 2009Tue Jul 5 11:14:26 EDT 1994 2010 Fix glitch in handling erroneous statement function declarations. 2011Example: 2012 a(j(i) - i) = a(j(i) - i) + 1 ! bad statement function 2013 call foo(a(3)) ! Said Impossible type 0 in routine mktmpn 2014 end ! Now warns that i and j are not used 2015 2016Wed Jul 6 17:31:25 EDT 1994 2017 Tweak test for statement functions that (illegally) call themselves; 2018f2c will now proceed to check for other errors, rather than bailing 2019out at the first recursive statement function reference. 2020 Warn about but retain divisions by 0 (instead of calling them 2021"compiler errors" and quiting). On IEEE machines, this permits 2022 double precision nan, ninf, pinf 2023 nan = 0.d0/0.d0 2024 pinf = 1.d0/0.d0 2025 ninf = -1.d0/0.d0 2026 write(*,*) 'nan, pinf, ninf = ', nan, pinf, ninf 2027 end 2028to print 2029 nan, pinf, ninf = NaN Infinity -Infinity 2030 libi77: wref.c: protect with #ifdef GOOD_SPRINTF_EXPONENT an 2031optimization that requires exponents to have 2 digits when 2 digits 2032suffice. lwrite.c wsfe.c (list and formatted external output): 2033omit ' ' carriage-control when compiled with -DOMIT_BLANK_CC . 2034Off-by-one bug fixed in character count for list output of character 2035strings. Omit '.' in list-directed printing of Nan, Infinity. 2036 2037Mon Jul 11 13:05:33 EDT 1994 2038 src/gram.c updated. 2039 2040Tue Jul 12 10:24:42 EDT 1994 2041 libi77: wrtfmt.c: under G11.4, write 0. as " .0000 " rather 2042than " .0000E+00". 2043 2044Thu Jul 14 17:55:46 EDT 1994 2045 Fix glitch in changes of 6 July 1994 that could cause erroneous 2046"division by zero" warnings (or worse). Example: 2047 subroutine foo(a,b) 2048 y = b 2049 a = a / y ! erroneous warning of division by zero 2050 end 2051 2052Mon Aug 1 16:45:17 EDT 1994 2053 libi77: lread.c rsne.c: for benefit of systems with a buggy stdio.h, 2054declare ungetc when neither KR_headers nor ungetc is #defined. 2055Version.c not changed. 2056 2057Wed Aug 3 01:53:00 EDT 1994 2058 libi77: lwrite.c (list output): do not insert a newline when 2059appending an oversize item to an empty line. 2060 2061Mon Aug 8 00:51:01 EDT 1994 2062 Fix bug (introduced 3 Feb. 1993) that, under -i2, kept LOGICAL*2 2063variables from appearing in INQUIRE statements. Under -I2, allow 2064LOGICAL*4 variables to appear in INQUIRE. Fix intrinsic function 2065LEN so it returns a short value under -i2, a long value otherwise. 2066 exec.c: fix obscure memory fault possible with bizarre (and highly 2067erroneous) DO-loop syntax. 2068 2069Fri Aug 12 10:45:57 EDT 1994 2070 libi77: fix glitch that kept ERR= (in list- or format-directed input) 2071from working after a NAMELIST READ. 2072 2073Thu Aug 25 13:58:26 EDT 1994 2074 Suppress -s when -C is specified. 2075 Give full pathname (netlib@research.att.com) for netlib in readme and 2076src/README. 2077 2078Wed Sep 7 22:13:20 EDT 1994 2079 libi77: typesize.c: adjust to allow types LOGICAL*1, LOGICAL*2, 2080INTEGER*1, and (under -DAllow_TYQUAD) INTEGER*8 in NAMELISTs. 2081 2082Fri Sep 16 17:50:18 EDT 1994 2083 Change name adjustment for reserved words: instead of just appending 2084"_" (a single underscore), append "_a_" to local variable names to avoid 2085trouble when a common block is named a reserved word and the same 2086reserved word is also a local variable name. Example: 2087 common /const/ a,b,c 2088 real const(3) 2089 equivalence (const(1),a) 2090 a = 1.234 2091 end 2092 Arrange for ichar() to treat characters as unsigned. 2093 libf77: s_cmp.c: treat characters as unsigned in comparisons. 2094These changes for unsignedness only matter for strings that contain 2095non-ASCII characters. Now ichar() should always be >= 0. 2096 2097Sat Sep 17 11:19:32 EDT 1994 2098 fc: set rc=$? before exit (to get exit code right in trap code). 2099 2100Mon Sep 19 17:49:43 EDT 1994 2101 libf77: s_paus.c: flush stderr after PAUSE; add #ifdef MSDOS stuff. 2102 libi77: README: point out general need for -DMSDOS under MS-DOS. 2103 2104Tue Sep 20 11:42:30 EDT 1994 2105 Fix bug in comparing identically named common blocks, in which 2106all components have the same names and types, but at least one is 2107dimensioned (1) and the other is not dimensioned. Example: 2108 subroutine foo 2109 common /ab/ a 2110 a=1. !!! translated correctly to ab_1.a = (float)1.; 2111 end 2112 subroutine goo 2113 common /ab/ a(1) 2114 a(1)=2. !!! translated erroneously to ab_1.a[0] = (float)2. 2115 end 2116 2117Tue Sep 27 23:47:34 EDT 1994 2118 Fix bug introduced 16 Sept. 1994: don't add _a_ to C keywords 2119used as external names. In fact, return to earlier behavior of 2120appending __ to C keywords unless they are used as external names, 2121in which case they get just one underscore appended. 2122 Adjust constant handling so integer and logical PARAMETERs retain 2123type information, particularly under -I2. Example: 2124 SUBROUTINE FOO 2125 INTEGER I 2126 INTEGER*1 I1 2127 INTEGER*2 I2 2128 INTEGER*4 I4 2129 LOGICAL L 2130 LOGICAL*1 L1 2131 LOGICAL*2 L2 2132 LOGICAL*4 L4 2133 PARAMETER (L=.FALSE., L1=.FALSE., L2=.FALSE., L4=.FALSE.) 2134 PARAMETER (I=0,I1=0,I2=0,I4=0) 2135 CALL DUMMY(I, I1, I2, I4, L, L1, L2, L4) 2136 END 2137 f2c.1t: Change f\^2c to f2c (omit half-narrow space) in line following 2138".SH NAME" for benefit of systems that cannot cope with troff commands 2139in this context. 2140 2141Wed Sep 28 12:45:19 EDT 1994 2142 libf77: s_cmp.c fix glitch in -DKR_headers version introduced 214312 days ago. 2144 2145Thu Oct 6 09:46:53 EDT 1994 2146 libi77: util.c: omit f__mvgbt (which is never used). 2147 f2c.h: change "long" to "long int" to facilitate the adjustments 2148by means of sed described above. Comment out unused typedef of Long. 2149 2150Fri Oct 21 18:02:24 EDT 1994 2151 libf77: add s_catow.c and adjust README to point out that changing 2152"s_cat.o" to "s_catow.o" in the makefile will permit the target of a 2153concatenation to appear on its right-hand side (contrary to the 2154Fortran 77 Standard and at the cost of some run-time efficiency). 2155 2156Wed Nov 2 00:03:58 EST 1994 2157 Adjust -g output to contain only one #line line per statement, 2158inserting \ before the \n ending lines broken because of their 2159length [this insertion was recanted 10 Dec. 1994]. This change 2160accommodates an idiocy in the ANSI/ISO C standard, which leaves 2161undefined the behavior of #line lines that occur within the arguments 2162to a macro call. 2163 2164Wed Nov 2 14:44:27 EST 1994 2165 libi77: under compilation with -DALWAYS_FLUSH, flush buffers at 2166the end of each write statement, and test (via the return from 2167fflush) for write failures, which can be caught with an ERR= 2168specifier in the write statement. This extra flushing slows 2169execution, but can abort execution or alter the flow of control 2170when a disk fills up. 2171 f2c/src/io.c: Add ERR= test to e_wsle invocation (end of 2172list-directed external output) to catch write failures when libI77 2173is compiled with -DALWAYS_FLUSH. 2174 2175Thu Nov 3 10:59:13 EST 1994 2176 Fix bug in handling dimensions involving certain intrinsic 2177functions of constant expressions: the expressions, rather than 2178pointers to them, were passed. Example: 2179 subroutine subtest(n,x) 2180 real x(2**n,n) ! pow_ii(2,n) was called; now it's pow_ii(&c__2,n) 2181 x(2,2)=3. 2182 end 2183 2184Tue Nov 8 23:56:30 EST 1994 2185 malloc.c: remove assumption that only malloc calls sbrk. This 2186appears to make malloc.c useful on RS6000 systems. 2187 2188Sun Nov 13 13:09:38 EST 1994 2189 Turn off constant folding of integers used in floating-point 2190expressions, so the assignment in 2191 subroutine foo(x) 2192 double precision x 2193 x = x*1000000*500000 2194 end 2195is rendered as 2196 *x = *x * 1000000 * 500000; 2197rather than as 2198 *x *= 1783793664; 2199 2200Sat Dec 10 16:31:40 EST 1994 2201 Supply a better error message (than "Impossible type 14") for 2202 subroutine foo 2203 foo = 3 2204 end 2205 Under -g, convey name of included files to #line lines. 2206 Recant insertion of \ introduced (under -g) 2 Nov. 1994. 2207 2208Thu Dec 15 14:33:55 EST 1994 2209 New command-line option -Idir specifies directories in which to 2210look for non-absolute include files (after looking in the directory 2211of the current input file). There can be several -Idir options, each 2212specifying one directory. All -Idir options are considered, from 2213left to right, until a suitably named file is found. The -I2 and -I4 2214command-line options have precedence, so directories named 2 or 4 2215must be spelled by some circumlocation, such as -I./2 . 2216 f2c.ps updated to mention the new -Idir option, correct a typo, 2217and bring the man page at the end up to date. 2218 lex.c: fix bug in reading line numbers in #line lines. 2219 fc updated to pass -Idir options to f2c. 2220 2221Thu Dec 29 09:48:03 EST 1994 2222 Fix bug (e.g., addressing fault) in diagnosing inconsistency in 2223the type of function eta in the following example: 2224 function foo(c1,c2) 2225 double complex foo,c1,c2 2226 double precision eta 2227 foo = eta(c1,c2) 2228 end 2229 function eta(c1,c2) 2230 double complex eta,c1,c2 2231 eta = c1*c2 2232 end 2233 2234Mon Jan 2 13:27:26 EST 1995 2235 Retain casts for SNGL (or FLOAT) that were erroneously optimized 2236away. Example: 2237 subroutine foo(a,b) 2238 double precision a,b 2239 a = float(b) ! now rendered as *a = (real) (*b); 2240 end 2241 Use float (rather than double) temporaries in certain expressions 2242of type complex. Example: the temporary for sngl(b) in 2243 complex a 2244 double precision b 2245 a = sngl(b) - (3.,4.) 2246is now of type float. 2247 2248Fri Jan 6 00:00:27 EST 1995 2249 Adjust intrinsic function cmplx to act as dcmplx (returning 2250double complex rather than complex) if either of its args is of 2251type double precision. The double temporaries used prior to 2 Jan. 22521995 previously gave it this same behavior. 2253 2254Thu Jan 12 12:31:35 EST 1995 2255 Adjust -krd to use double temporaries in some calculations of 2256type complex. 2257 libf77: pow_[dhiqrz][hiq].c: adjust x**i to work on machines 2258that sign-extend right shifts when i is the most negative integer. 2259 2260Wed Jan 25 00:14:42 EST 1995 2261 Fix memory fault in handling overlapping initializations in 2262 block data 2263 common /zot/ d 2264 double precision d(3) 2265 character*6 v(4) 2266 real r(2) 2267 equivalence (d(3),r(1)), (d(1),v(1)) 2268 data v/'abcdef', 'ghijkl', 'mnopqr', 'stuvwx'/ 2269 data r/4.,5./ 2270 end 2271 names.c: add "far", "huge", "near" to c_keywords (causing them 2272to have __ appended when used as local variables). 2273 libf77: add s_copyow.c, an alternative to s_copy.c for handling 2274(illegal) character assignments where the right- and left-hand 2275sides overlap, as in a(2:4) = a(1:3). 2276 2277Thu Jan 26 14:21:19 EST 1995 2278 libf77: roll s_catow.c and s_copyow.c into s_cat.c and s_copy.c, 2279respectively, allowing the left-hand side of a character assignment 2280to appear on its right-hand side unless s_cat.c and s_copy.c are 2281compiled with -DNO_OVERWRITE (which is a bit more efficient). 2282Fortran 77 forbids the left-hand side from participating in the 2283right-hand side (of a character assignment), but Fortran 90 allows it. 2284 libi77: wref.c: fix glitch in printing the exponent of 0 when 2285GOOD_SPRINTF_EXPONENT is not #defined. 2286 2287Fri Jan 27 12:25:41 EST 1995 2288 Under -C++ -ec (or -C++ -e1c), surround struct declarations with 2289 #ifdef __cplusplus 2290 extern "C" { 2291 #endif 2292and 2293 #ifdef __cplusplus 2294 } 2295 #endif 2296(This isn't needed with cfront, but apparently is necessary with 2297some other C++ compilers.) 2298 libf77: minor tweak to s_copy.c: copy forward whenever possible 2299(for better cache behavior). 2300 2301Wed Feb 1 10:26:12 EST 1995 2302 Complain about parameter statements that assign values to dummy 2303arguments, as in 2304 subroutine foo(x) 2305 parameter(x = 3.4) 2306 end 2307 2308Sat Feb 4 20:22:02 EST 1995 2309 fc: omit "lib=/lib/num/lib.lo". 2310 2311Wed Feb 8 08:41:14 EST 1995 2312 Minor changes to exec.c, putpcc.c to avoid "bad tag" or "error 2313in frexpr" with certain invalid Fortran. 2314 2315Sat Feb 11 08:57:39 EST 1995 2316 Complain about integer overflows, both in simplifying integer 2317expressions, and in converting integers from decimal to binary. 2318 Fix a memory fault in putcx1() associated with invalid input. 2319 2320Thu Feb 23 11:20:59 EST 1995 2321 Omit MAXTOKENLEN; realloc token if necessary (to handle very long 2322strings). 2323 2324Fri Feb 24 11:02:00 EST 1995 2325 libi77: iio.c: z_getc: insert (unsigned char *) to allow internal 2326reading of characters with high-bit set (on machines that sign-extend 2327characters). 2328 2329Tue Mar 14 18:22:42 EST 1995 2330 Fix glitch (in io.c) in handling 0-length strings in format 2331statements, as in 2332 write(*,10) 2333 10 format(' ab','','cd') 2334 libi77: lread.c and rsfe.c: adjust s_rsle and s_rsfe to check for 2335end-of-file (to prevent infinite loops with empty read statements). 2336 2337Wed Mar 22 10:01:46 EST 1995 2338 f2c.ps: adjust discussion of -P on p. 7 to reflect a change made 23393 Feb. 1993: -P no longer implies -A. 2340 2341Fri Apr 21 18:35:00 EDT 1995 2342 fc script: remove absolute paths (since PATH specifies only standard 2343places). On most systems, it's still necessary to adjust the PATH 2344assignment at the start of fc to fit the local conventions. 2345 2346Fri May 26 10:03:17 EDT 1995 2347 fc script: add recognition of -P and .P files. 2348 libi77: iio.c: z_wnew: fix bug in handling T format items in internal 2349writes whose last item is written to an earlier position than some 2350previous item. 2351 2352Wed May 31 11:39:48 EDT 1995 2353 libf77: added subroutine exit(rc) (with integer return code rc), 2354which works like a stop statement but supplies rc as the program's 2355return code. 2356 2357Fri Jun 2 11:56:50 EDT 1995 2358 Fix memory fault in 2359 parameter (x=2.) 2360 data x /2./ 2361 end 2362This now elicits two error messages; the second ("too many 2363initializers"), though not desirable, seems hard to eliminate 2364without considerable hassle. 2365 2366Mon Jul 17 23:24:20 EDT 1995 2367 Fix botch in simplifying constants in certain complex 2368expressions. Example: 2369 subroutine foo(s,z) 2370 double complex z 2371 double precision s, M, P 2372 parameter ( M = 100.d0, P = 2.d0 ) 2373 z = M * M / s * dcmplx (1.d0, P/M) 2374*** The imaginary part of z was miscomputed *** 2375 end 2376 Under -ext, complain about nonintegral dimensions. 2377 2378Fri Jul 21 11:18:36 EDT 1995 2379 Fix glitch on line 159 of init.c: change 2380 "(shortlogical *)0)", 2381to 2382 "(shortlogical *)0", 2383This affects multiple entry points when some but not all have 2384arguments of type logical*2. 2385 libi77: adjust lwrite.c, wref.c, wrtfmt.c so compiling with 2386-DWANT_LEAD_0 causes formatted writes of floating-point numbers of 2387magnitude < 1 to have an explicit 0 before the decimal point (if the 2388field-width permits it). Note that the Fortran 77 Standard leaves it 2389up to the implementation whether to supply these superfluous zeros. 2390 2391Tue Aug 1 09:25:56 EDT 1995 2392 Permit real (or double precision) parameters in dimension expressions. 2393 2394Mon Aug 7 08:04:00 EDT 1995 2395 Append "_eqv" rather than just "_" to names that that appear in 2396EQUIVALENCE statements as well as structs in f2c.h (to avoid a 2397conflict when these names also name common blocks). 2398 2399Tue Aug 8 12:49:02 EDT 1995 2400 Modify yesterday's change: merge st_fields with c_keywords, to 2401cope with equivalences introduced to permit initializing numeric 2402variables with character data. DATA statements causing these 2403equivalences can appear after executable statements, so the only 2404safe course is to rename all local variable with names in the 2405former st_fields list. This has the unfortunate side effect that 2406the common local variable "i" will henceforth be renamed "i__". 2407 2408Wed Aug 30 00:19:32 EDT 1995 2409 libf77: add F77_aloc, now used in s_cat and system_ (to allocate 2410memory and check for failure in so doing). 2411 libi77: improve MSDOS logic in backspace.c. 2412 2413Wed Sep 6 09:06:19 EDT 1995 2414 libf77: Fix return type of system_ (integer) under -DKR_headers. 2415 libi77: Move some f_init calls around for people who do not use 2416libF77's main(); now open and namelist read statements that are the 2417first I/O statements executed should work right in that context. 2418Adjust namelist input to treat a subscripted name whose subscripts do 2419not involve colons similarly to the name without a subscript: accept 2420several values, stored in successive elements starting at the 2421indicated subscript. Adjust namelist output to quote character 2422strings (avoiding confusion with arrays of character strings). 2423 2424Thu Sep 7 00:36:04 EDT 1995 2425 Fix glitch in integer*8 exponentiation function: it's pow_qq, not 2426pow_qi. 2427 libi77: fix some bugs with -DAllow_TYQUAD (for integer*8); when 2428looking for the &name that starts NAMELIST input, treat lines whose 2429first nonblank character is something other than &, $, or ? as 2430comment lines (i.e., ignore them), unless rsne.c is compiled with 2431-DNo_Namelist_Comments. 2432 2433Thu Sep 7 09:05:40 EDT 1995 2434 libi77: rdfmt.c: one more tweak for -DAllow_TYQUAD. 2435 2436Tue Sep 19 00:03:02 EDT 1995 2437 Adjust handling of floating-point subscript bounds (a questionable 2438f2c extension) so subscripts in the generated C are of integral type. 2439 Move #define of roundup to proc.c (where its use is commented out); 2440version.c left at 19950918. 2441 2442Wed Sep 20 17:24:19 EDT 1995 2443 Fix bug in handling ichar() under -h. 2444 2445Thu Oct 5 07:52:56 EDT 1995 2446 libi77: wrtfmt.c: fix bug with t editing (f__cursor was not always 2447zeroed in mv_cur). 2448 2449Tue Oct 10 10:47:54 EDT 1995 2450 Under -ext, warn about X**-Y and X**+Y. Following the original f77, 2451f2c treats these as X**(-Y) and X**(+Y), respectively. (They are not 2452allowed by the official Fortran 77 Standard.) Some Fortran compilers 2453give a bizarre interpretation to larger contexts, making multiplication 2454noncommutative: they treat X**-Y*Z as X**(-Y*Z) rather than X**(-Y)*Z, 2455which, following the rules of Fortran 77, is the same as (X**(-Y))*Z. 2456 2457Wed Oct 11 13:27:05 EDT 1995 2458 libi77: move defs of f__hiwater, f__svic, f__icptr from wrtfmt.c 2459to err.c. This should work around a problem with buggy loaders and 2460sometimes leads to smaller executable programs. 2461 2462Sat Oct 21 23:54:22 EDT 1995 2463 Under -h, fix bug in the treatment of ichar('0') in arithmetic 2464expressions. 2465 Demote to -dneg (a new command-line option not mentioned in the 2466man page) imitation of the original f77's treatment of unary minus 2467applied to a REAL operand (yielding a DOUBLE PRECISION result). 2468Previously this imitation (which was present for debugging) occurred 2469under (the default) -!R. It is still suppressed by -R. 2470 2471Tue Nov 7 23:52:57 EST 1995 2472 Adjust assigned GOTOs to honor SAVE declarations. 2473 Add comments about ranlib to lib[FI]77/README and makefile. 2474 2475Tue Dec 19 22:54:06 EST 1995 2476 libf77: s_cat.c: fix bug when 2nd or later arg overlaps lhs. 2477 2478Tue Jan 2 17:54:00 EST 1996 2479 libi77: rdfmt.c: move #include "ctype.h" up before "stdlib.h"; no 2480change to Version.c. 2481 2482Sun Feb 25 22:20:20 EST 1996 2483 Adjust expr.c to permit raising the integer constants 1 and -1 to 2484negative constant integral powers. 2485 Avoid faulting when -T and -d are not followed by a directory name 2486(immediately, without intervening spaces). 2487 2488Wed Feb 28 12:49:01 EST 1996 2489 Fix a glitch in handling complex parameters assigned a "wrong" type. 2490Example: 2491 complex d, z 2492 parameter(z = (0d0,0d0)) 2493 data d/z/ ! elicited "non-constant initializer" 2494 call foo(d) 2495 end 2496 2497Thu Feb 29 00:53:12 EST 1996 2498 Fix bug in handling character parameters assigned a char() value. 2499Example: 2500 character*2 b,c 2501 character*1 esc 2502 parameter(esc = char(27)) 2503 integer i 2504 data (b(i:i),i=1,2)/esc,'a'/ 2505 data (c(i:i),i=1,2)/esc,'b'/ ! memory fault 2506 call foo(b,c) 2507 end 2508 2509Fri Mar 1 23:44:51 EST 1996 2510 Fix glitch in evaluating .EQ. and .NE. when both operands are 2511logical constants (.TRUE. or .FALSE.). 2512 2513Fri Mar 15 17:29:54 EST 1996 2514 libi77: lread.c, rsfe.c: honor END= in READ stmts with empty iolist. 2515 2516Tue Mar 19 23:08:32 EST 1996 2517 lex.c: arrange for a "statement" consisting of a single short bogus 2518keyword to elicit an error message showing the whole keyword. The 2519error message formerly omitted the last letter of the bad keyword. 2520 libf77: s_cat.c: supply missing break after overlap detection. 2521 2522Mon May 13 23:35:26 EDT 1996 2523 Recognize Fortran 90's /= as a synonym for .NE.. (<> remains a 2524synonym for .NE..) 2525 Emit an empty int function of no arguments to supply an external 2526name to named block data subprograms (so they can be called somewhere 2527to force them to be loaded from a library). 2528 Fix bug (memory fault) in handling the following illegal Fortran: 2529 parameter(i=1) 2530 equivalence(i,j) 2531 end 2532 Treat cdabs, cdcos, cdexp, cdlog, cdsin, and cdsqrt as synonyms for 2533the double complex intrinsics zabs, zcos, zexp, zlog, zsin, and zsqrt, 2534respectively, unless -cd is specified. 2535 Recognize the Fortran 90 bit-manipulation intrinsics btest, iand, 2536ibclr, ibits, ibset, ieor, ior, ishft, and ishftc, unless -i90 is 2537specified. Note that iand, ieor, and ior are thus now synonyms for 2538"and", "xor", and "or", respectively. 2539 Add three macros (bit_test, bit_clear, bit_set) to f2c.h for use 2540with btest, ibclr, and ibset, respectively. Add new functions 2541[lq]bit_bits, [lq]bit_shift, and [lq]_bit_cshift to libF77 for 2542use with ibits, ishft, and ishftc, respectively. 2543 Add integer function ftell(unit) (returning -1 on error) and 2544subroutine fseek(unit, offset, whence, *) to libI77 (with branch to 2545label * on error). 2546 2547Tue May 14 23:21:12 EDT 1996 2548 Fix glitch (possible memory fault, or worse) in handling multiple 2549entry points with names over 28 characters long. 2550 2551Mon Jun 10 01:20:16 EDT 1996 2552 Update netlib E-mail and ftp addresses in f2c/readme and 2553f2c/src/readme (which are different files) -- to reflect the upcoming 2554breakup of AT&T. 2555 libf77: trivial tweaks to F77_aloc.c and system_.c; Version.c not 2556changed. 2557 libi77: Adjust rsli.c and lread.c so internal list input with too 2558few items in the input string will honor end= . 2559 2560Mon Jun 10 22:59:57 EDT 1996 2561 Add Bits_per_Byte to sysdep.h and adjust definition of Table_size 2562to depend on Bits_per_Byte (forcing Table_size to be a power of 2); in 2563lex.c, change "comstart[c & 0xfff]" to "comstart[c & (Table_size-1)]" 2564to avoid an out-of-range subscript on end-of-file. 2565 2566Wed Jun 12 00:24:28 EDT 1996 2567 Fix bug in output.c (dereferencing a freed pointer) revealed in 2568 print * !np in out_call in output.c clobbered by free 2569 end !during out_expr. 2570 2571Wed Jun 19 08:12:47 EDT 1996 2572 f2c.h: add types uinteger, ulongint (for libF77); add qbit_clear 2573and qbit_set macros (in a commented-out section) for integer*8. 2574 For integer*8, use qbit_clear and qbit_set for ibclr and ibset. 2575 libf77: add casts to unsigned in [lq]bitshft.c. 2576 2577Thu Jun 20 13:30:43 EDT 1996 2578 Complain at character*(*) in common (rather than faulting). 2579 Fix bug in recognizing hex constants that start with "16#" (e.g., 258016#1234abcd, which is a synonym for z'1234abcd'). 2581 Fix bugs in constant folding of expressions involving btest, ibclr, 2582and ibset. 2583 Fix bug in constant folding of rshift(16#80000000, -31) (on a 32-bit 2584machine; more generally, the bug was in constant folding of 2585rshift(ibset(0,NBITS-1), 1-NBITS) when f2c runs on a machine with 2586long ints having NBITS bits. 2587 2588Mon Jun 24 07:58:53 EDT 1996 2589 Adjust struct Literal and newlabel() function to accommodate huge 2590source files (with more than 32767 newlabel() invocations). 2591 Omit .c file when the .f file has a missing final end statement. 2592 2593Wed Jun 26 14:00:02 EDT 1996 2594 libi77: Add discussion of MXUNIT (highest allowed Fortran unit number) 2595to libI77/README. 2596 2597Fri Jun 28 14:16:11 EDT 1996 2598 Fix glitch with -onetrip: the temporary variable used for nonconstant 2599initial loop variable values was recycled too soon. Example: 2600 do i = j+1, k 2601 call foo(i+1) ! temp for j+1 was reused here 2602 enddo 2603 end 2604 2605Tue Jul 2 16:11:27 EDT 1996 2606 formatdata.c: add a 0 to the end of the basetype array (for TYBLANK) 2607(an omission that was harmless on most machines). 2608 expr.c: fix a dereference of NULL that was only possible with buggy 2609input, such as 2610 subroutine $sub(s) ! the '$' is erroneous 2611 character s*(*) 2612 s(1:) = ' ' 2613 end 2614 2615Sat Jul 6 00:44:56 EDT 1996 2616 Fix glitch in the intrinsic "real" function when applied to a 2617complex (or double complex) variable and passed as an argument to 2618some intrinsic functions. Example: 2619 complex a 2620 b = sqrt(a) 2621 end 2622 Fix glitch (only visible if you do not use f2c's malloc and the 2623malloc you do use is defective in the sense that malloc(0) returns 0) 2624in handling include files that end with another include (perhaps 2625followed by comments). 2626 Fix glitch with character*(*) arguments named "h" and "i" when 2627the body of the subroutine invokes the intrinsic LEN function. 2628 Arrange that after a previous "f2c -P foo.f" has produced foo.P, 2629running "f2c foo.P foo.f" will produce valid C when foo.f contains 2630 call sub('1234') 2631 end 2632 subroutine sub(msg) 2633 end 2634Specifically, the length argument in "call sub" is now suppressed. 2635With or without foo.P, it is also now suppressed when the order of 2636subprograms in file foo.f is reversed: 2637 subroutine sub(msg) 2638 end 2639 call sub('1234') 2640 end 2641 Adjust copyright notices to reflect AT&T breakup. 2642 2643Wed Jul 10 09:25:49 EDT 1996 2644 Fix bug (possible memory fault) in handling erroneously placed 2645and inconsistent declarations. Example that faulted: 2646 character*1 w(8) 2647 call foo(w) 2648 end 2649 subroutine foo(m) 2650 data h /0.5/ 2651 integer m(2) ! should be before data 2652 end 2653 Fix bug (possible fault) in handling illegal "if" constructions. 2654Example (that faulted): 2655 subroutine foo(i,j) 2656 if (i) then ! bug: i is integer, not logical 2657 else if (j) then ! bug: j is integer, not logical 2658 endif 2659 end 2660 Fix glitch with character*(*) argument named "ret_len" to a 2661character*(*) function. 2662 2663Wed Jul 10 23:04:16 EDT 1996 2664 Fix more glitches in the intrinsic "real" function when applied to a 2665complex (or double complex) variable and passed as an argument to 2666some intrinsic functions. Example: 2667 complex a, b 2668 r = sqrt(real(conjg(a))) + sqrt(real(a*b)) 2669 end 2670 2671Thu Jul 11 17:27:16 EDT 1996 2672 Fix a memory fault associated with complicated, illegal input. 2673Example: 2674 subroutine goo 2675 character a 2676 call foo(a) ! inconsistent with subsequent def and call 2677 end 2678 subroutine foo(a) 2679 end 2680 call foo(a) 2681 end 2682 2683Wed Jul 17 19:18:28 EDT 1996 2684 Fix yet another case of intrinsic "real" applied to a complex 2685argument. Example: 2686 complex a(3) 2687 x = sqrt(real(a(2))) ! gave error message about bad tag 2688 end 2689 2690Mon Aug 26 11:28:57 EDT 1996 2691 Tweak sysdep.c for non-Unix systems in which process ID's can be 2692over 5 digits long. 2693 2694Tue Aug 27 08:31:32 EDT 1996 2695 Adjust the ishft intrinsic to use unsigned right shifts. (Previously, 2696a negative constant second operand resulted in a possibly signed shift.) 2697 2698Thu Sep 12 14:04:07 EDT 1996 2699 equiv.c: fix glitch with -DKR_headers. 2700 libi77: fmtlib.c: fix bug in printing the most negative integer. 2701 2702Fri Sep 13 08:54:40 EDT 1996 2703 Diagnose some illegal appearances of substring notation. 2704 2705Tue Sep 17 17:48:09 EDT 1996 2706 Fix fault in handling some complex parameters. Example: 2707 subroutine foo(a) 2708 double complex a, b 2709 parameter(b = (0,1)) 2710 a = b ! f2c faulted here 2711 end 2712 2713Thu Sep 26 07:47:10 EDT 1996 2714 libi77: fmt.h: for formatted writes of negative integer*1 values, 2715make ic signed on ANSI systems. If formatted writes of integer*1 2716values trouble you when using a K&R C compiler, switch to an ANSI 2717compiler or use a compiler flag that makes characters signed. 2718 2719Tue Oct 1 14:41:36 EDT 1996 2720 Give a better error message when dummy arguments appear in data 2721statements. 2722 2723Thu Oct 17 13:37:22 EDT 1996 2724 Fix bug in typechecking arguments to character and complex (or 2725double complex) functions; the bug could cause length arguments 2726for character arguments to be omitted on invocations appearing 2727textually after the first invocation. For example, in 2728 subroutine foo 2729 character c 2730 complex zot 2731 call goo(zot(c), zot(c)) 2732 end 2733the length was omitted from the second invocation of zot, and 2734there was an erroneous error message about inconsistent calling 2735sequences. 2736 2737Wed Dec 4 13:59:14 EST 1996 2738 Fix bug revealed by 2739 subroutine test(cdum,rdum) 2740 complex cdum 2741 rdum=cos(real(cdum)) ! "Unexpected tag 3 in opconv_fudge" 2742 end 2743 Fix glitch in parsing "DO 10 D0 = 1, 10". 2744 Fix glitch in parsing 2745 real*8 x 2746 real*8 x ! erroneous "incompatible type" message 2747 call foo(x) 2748 end 2749 2750Mon Dec 9 23:15:02 EST 1996 2751 Fix glitch in parameter adjustments for arrays whose lower 2752bound depends on a scalar argument. Example: 2753 subroutine bug(p,z,m,n) 2754 integer z(*),m,n 2755 double precision p(z(m):z(m) + n) ! p_offset botched 2756 call foo(p(0), p(n)) 2757 end 2758 libi77: complain about non-positive rec= in direct read and write 2759statements. 2760 libf77: trivial adjustments; Version.c not changed. 2761 2762Wed Feb 12 00:18:03 EST 1997 2763 output.c: fix (seldom problematic) glitch in out_call: put parens 2764around the ... in a test of the form "if (q->tag == TADDR && ...)". 2765 vax.c: fix bug revealed in the "psi_offset =" assignment in the 2766following example: 2767 subroutine foo(psi,m) 2768 integer z(100),m 2769 common /a/ z 2770 double precision psi(z(m):z(m) + 10) 2771 call foo(m+1, psi(0),psi(10)) 2772 end 2773 2774Mon Feb 24 23:44:54 EST 1997 2775 For consistency with f2c's current treatment of adjacent character 2776strings in FORMAT statements, recognize a Hollerith string following 2777a string (and merge adjacent strings in FORMAT statements). 2778 2779Wed Feb 26 13:41:11 EST 1997 2780 New libf2c.zip, a combination of the libf77 and libi77 bundles (and 2781available only by ftp). 2782 libf77: adjust functions with a complex output argument to permit 2783aliasing it with input arguments. (For now, at least, this is just 2784for possible benefit of g77.) 2785 libi77: tweak to ftell_.c for systems with strange definitions of 2786SEEK_SET, etc. 2787 2788Tue Apr 8 20:57:08 EDT 1997 2789 libf77: [cz]_div.c: tweaks invisible on most systems (that may 2790improve things slightly with optimized compilation on systems that use 2791gratuitous extra precision). 2792 libi77: fmt.c: adjust to complain at missing numbers in formats 2793(but still treat missing ".nnn" as ".0"). 2794 2795Fri Apr 11 14:05:57 EDT 1997 2796 libi77: err.c: attempt to make stderr line buffered rather than 2797fully buffered. (Buffering is needed for format items T and TR.) 2798 2799Thu Apr 17 22:42:43 EDT 1997 2800 libf77: add F77_aloc.o to makefile (and makefile.u in libf2c.zip). 2801 2802Fri Apr 25 19:32:09 EDT 1997 2803 libf77: add [de]time_.c (which may give trouble on some systems). 2804 2805Tue May 27 09:18:52 EDT 1997 2806 libi77: ftell_.c: fix typo that caused the third argument to be 2807treated as 2 on some systems. 2808 2809Mon Jun 9 00:04:37 EDT 1997 2810 libi77 (and libf2c.zip): adjust include order in err.c lread.c wref.c 2811rdfmt.c to include fmt.h (etc.) after system includes. Version.c not 2812changed. 2813 2814Mon Jul 21 16:04:54 EDT 1997 2815 proc.c: fix glitch in logic for "nonpositive dimension" message. 2816 libi77: inquire.c: always include string.h (for possible use with 2817-DNON_UNIX_STDIO); Version.c not changed. 2818 2819Thu Jul 24 17:11:23 EDT 1997 2820 Tweak "Notice" to reflect the AT&T breakup -- we missed it when 2821updating the copyright notices in the source files last summer. 2822 Adjust src/makefile so malloc.o is not used by default, but can 2823be specified with "make MALLOC=malloc.o". 2824 Add comments to src/README about the "CRAY" T3E. 2825 2826Tue Aug 5 14:53:25 EDT 1997 2827 Add definition of calloc to malloc.c; this makes f2c's malloc 2828work on some systems where trouble hitherto arose because references 2829to calloc brought in the system's malloc. (On sensible systems, 2830calloc is defined separately from malloc. To avoid confusion on 2831other systems, f2c/malloc.c now defines calloc.) 2832 libi77: lread.c: adjust to accord with a change to the Fortran 8X 2833draft (in 1990 or 1991) that rescinded permission to elide quote marks 2834in namelist input of character data; to get the old behavior, compile 2835with F8X_NML_ELIDE_QUOTES #defined. wrtfmt.o: wrt_G: tweak to print 2836the right number of 0's for zero under G format. 2837 2838Sat Aug 16 05:45:32 EDT 1997 2839 libi77: iio.c: fix bug in internal writes to an array of character 2840strings that sometimes caused one more array element than required by 2841the format to be blank-filled. Example: format(1x). 2842 2843Wed Sep 17 00:39:29 EDT 1997 2844 libi77: fmt.[ch] rdfmt.c wrtfmt.c: tweak struct syl for machines 2845with 64-bit pointers and 32-bit ints that did not 64-bit align 2846struct syl (e.g., Linux on the DEC Alpha). This change should be 2847invisible on other machines. 2848 2849Sun Sep 21 22:05:19 EDT 1997 2850 libf77: [de]time_.c (Unix systems only): change return type to double. 2851 2852Thu Dec 4 22:10:09 EST 1997 2853 Fix bug with handling large blocks of comments (over 4k); parts of the 2854second and subsequent blocks were likely to be lost (not copied into 2855comments in the resulting C). Allow comment lines to be longer before 2856breaking them. 2857 2858Mon Jan 19 17:19:27 EST 1998 2859 makefile: change the rule for making gram.c to one for making gram1.c; 2860henceforth, asking netlib to "send all from f2c/src" will bring you a 2861working gram.c. Nowadays there are simply too many broken versions of 2862yacc floating around. 2863 libi77: backspace.c: for b->ufmt==0, change sizeof(int) to 2864sizeof(uiolen). On machines where this would make a difference, it is 2865best for portability to compile libI77 with -DUIOLEN_int, which will 2866render the change invisible. 2867 2868Tue Feb 24 08:35:33 EST 1998 2869 makefile: remove gram.c from the "make clean" rule. 2870 2871Wed Feb 25 08:29:39 EST 1998 2872 makefile: change CFLAGS assignment to -O; add "veryclean" rule. 2873 2874Wed Mar 4 13:13:21 EST 1998 2875 libi77: open.c: fix glitch in comparing file names under 2876-DNON_UNIX_STDIO. 2877 2878Mon Mar 9 23:56:56 EST 1998 2879 putpcc.c: omit an unnecessary temporary variable in computing 2880(expr)**3. 2881 libf77, libi77: minor tweaks to make some C++ compilers happy; 2882Version.c not changed. 2883 2884Wed Mar 18 18:08:47 EST 1998 2885 libf77: minor tweaks to [ed]time_.c; Version.c not changed. 2886 libi77: endfile.c, open.c: acquire temporary files from tmpfile(), 2887unless compiled with -DNON_ANSI_STDIO, which uses mktemp(). 2888New buffering scheme independent of NON_UNIX_STDIO for handling T 2889format items. Now -DNON_UNIX_STDIO is no longer be necessary for 2890Linux, and libf2c no longer causes stderr to be buffered -- the former 2891setbuf or setvbuf call for stderr was to make T format items work. 2892open.c: use the Posix access() function to check existence or 2893nonexistence of files, except under -DNON_POSIX_STDIO, where trial 2894fopen calls are used. In open.c, fix botch in changes of 19980304. 2895 libf2c.zip: the PC makefiles are now set for NT/W95, with comments 2896about changes for DOS. 2897 2898Fri Apr 3 17:22:12 EST 1998 2899 Adjust fix of 19960913 to again permit substring notation on 2900character variables in data statements. 2901 2902Sun Apr 5 19:26:50 EDT 1998 2903 libi77: wsfe.c: make $ format item work: this was lost in the changes 2904of 17 March 1998. 2905 2906Sat May 16 19:08:51 EDT 1998 2907 Adjust output of ftnlen constants: rather than appending L, 2908prepend (ftnlen). This should make the resulting C more portable, 2909e.g., to systems (such as DEC Alpha Unix systems) on which long 2910may be longer than ftnlen. 2911 Adjust -r so it also casts REAL expressions passed to intrinsic 2912functions to REAL. 2913 2914Wed May 27 16:02:35 EDT 1998 2915 libf2c.zip: tweak description of compiling libf2c for INTEGER*8 2916to accord with makefile.u rather than libF77/makefile. 2917 2918Thu May 28 22:45:59 EDT 1998 2919 libi77: backspace.c dfe.c due.c iio.c lread.c rsfe.c sue.c wsfe.c: 2920set f__curunit sooner so various error messages will correctly 2921identify the I/O unit involved. 2922 libf2c.zip: above, plus tweaks to PC makefiles: for some purposes, 2923it's still best to compile with -DMSDOS (even for use with NT). 2924 2925Thu Jun 18 01:22:52 EDT 1998 2926 libi77: lread.c: modified so floating-point numbers (containing 2927either a decimal point or an exponent field) are treated as errors 2928when they appear as list input for integer data. Compile lread.c with 2929-DALLOW_FLOAT_IN_INTEGER_LIST_INPUT to restore the old behavior. 2930 2931Mon Aug 31 10:38:54 EDT 1998 2932 formatdata.c: if possible, and assuming doubles must be aligned on 2933double boundaries, use existing holes in DATA for common blocks to 2934force alignment of the block. For example, 2935 block data 2936 common /abc/ a, b 2937 double precision a 2938 integer b(2) 2939 data b(2)/1/ 2940 end 2941used to generate 2942 struct { 2943 integer fill_1[3]; 2944 integer e_2; 2945 doublereal e_3; 2946 } abc_ = { {0}, 1, 0. }; 2947and now generates 2948 struct { 2949 doublereal fill_1[1]; 2950 integer fill_2[1]; 2951 integer e_3; 2952 } abc_ = { {0}, {0}, 1 }; 2953In the old generated C, e_3 was added to force alignment; in the new C, 2954fill_1 does this job. 2955 2956Mon Sep 7 19:48:51 EDT 1998 2957 libi77: move e_wdfe from sfe.c to dfe.c, where it was originally. 2958Why did it ever move to sfe.c? 2959 2960Tue Sep 8 10:22:50 EDT 1998 2961 Treat dreal as a synonym for dble unless -cd is specified on the 2962command line. 2963 2964Sun Sep 13 22:23:41 EDT 1998 2965 format.c: fix bug in writing prototypes under f2c -A ... *.P: 2966under some circumstances involving external functions with no known 2967type, a null pointer was passed to printf. 2968 2969Tue Oct 20 23:25:54 EDT 1998 2970 Comments added to libf2c/README and libF77/README, pointing out 2971the need to modify signal1.h on some systems. 2972 2973Wed Feb 10 22:59:52 EST 1999 2974 defs.h lex.c: permit long names (up to at least roughly 2975MAX_SHARPLINE_LEN = 1000 characters long) in #line lines (which only 2976matters under -g). 2977 fc: add -U option; recognize .so files. 2978 2979Sat Feb 13 10:18:27 EST 1999 2980 libf2c: endfile.c, lread.c, signal1.h0: minor tweaks to make some 2981(C++) compilers happier; f77_aloc.c: make exit_() visible to C++ 2982compilers. Version strings not changed. 2983 2984Thu Mar 11 23:14:02 EST 1999 2985 Modify f2c (exec.c, expr.c) to diagnose incorrect mixing of types 2986when (f2c extended) intrinsic functions are involved, as in 2987(not(17) .and. 4). Catching this in the first executable statement 2988is a bit tricky, as some checking must be postponed until all statement 2989function declarations have been parsed. Thus there is a chance of 2990today's changes introducing bugs under (let us hope) unusual conditions. 2991 2992Sun Mar 28 13:17:44 EST 1999 2993 lex.c: tweak to get the file name right in error messages caused 2994by statements just after a # nnn "filename" line emitted by the C 2995preprocessor. (The trouble is that the line following the # nnn line 2996must be read to see if it is a continuation of the stuff that preceded 2997the # nnn line.) When # nnn "filename" lines appear among the lines 2998for a Fortran statement, the filename reported in an error message for 2999the statement should now be the file that was current when the first 3000line of the statement was read. 3001 3002Sun May 2 22:38:25 EDT 1999 3003 libf77, libi77, libf2c.zip: make getenv_() more portable (call 3004getenv() rather than knowing about char **environ); adjust some 3005complex intrinsics to work with overlapping arguments (caused by 3006inappropriate use of equivalence); open.c: get "external" versus 3007"internal" right in the error message if a file cannot be opened; 3008err.c: cast a pointer difference to (int) for %d; rdfmt.c: omit 3009fixed-length buffer that could be overwritten by formats Inn or Lnn 3010with nn > 83. 3011 3012Mon May 3 13:14:07 EDT 1999 3013 "Invisible" changes to omit a few compiler warnings in f2c and 3014libf2c; two new casts in libf2c/open.c that matter with 64-bit longs, 3015and one more tweak (libf2c/c_log.c) for pathological equivalences. 3016 Minor update to "fc" script: new -L flag and comment correction. 3017 3018Fri Jun 18 02:33:08 EDT 1999 3019 libf2c.zip: rename backspace.c backspac.c, and fix a glitch in it 3020-- b->ufd may change in t_runc(). (For now, it's still backspace.c 3021in the libi77 bundle.) 3022 3023Sun Jun 27 22:05:47 EDT 1999 3024 libf2c.zip, libi77: rsne.c: fix bug in namelist input: a misplaced 3025increment could cause wrong array elements to be assigned; e.g., 3026"&input k(5)=10*1 &end" assigned k(5) and k(15 .. 23). 3027 3028Tue Sep 7 14:10:24 EDT 1999 3029 f2c.h, libf2c/f2c.h0, libf2c/README: minor tweaks so a simple 3030sed command converts f2c.h == libf2c/f2c.h0 to a form suitable for 3031machines with 8-byte longs and doubles, 4-byte int's and floats, 3032while working with a forthcoming (ill-advised) update to the C 3033standard that outlaws plain "unsigned". 3034 f2c.h, libf2c/f2c.h0: change "if 0" to "#ifdef INTEGER_STAR_8". 3035 libf77, libf2c.zip: [cz]_div.c and README: arrange for compilation 3036under -DIEEE_COMPLEX_DIVIDE to make these routines avoid calling sig_die 3037when the denominator of a complex or double complex division vanishes; 3038instead, they return pairs of NaNs or Infinities, depending whether the 3039numerator also vanishes or not. 3040 3041Tue Oct 5 23:50:14 EDT 1999 3042 formatdata.c, io.c, output.c, sysdep.c: adjust to make format 3043strings legal when they contain 8-bit characters with the high bit on. 3044(For many C compilers, this is not necessary, but it the ANSI/ISO C 3045standard does not require this to work.) 3046 libf2c.zip: tweak README and correct xsum0.out. 3047 3048Mon Oct 25 17:30:54 EDT 1999 3049 io.c: fix glitch introduced in the previous change (19991005) that 3050caused format(' %') to print "%%" rather than "%". 3051 3052Mon Nov 15 12:10:35 EST 1999 3053 libf2c.zip: fix bug with the sequence backspace(n); endfile(n); 3054rewind(n); read(n). Supply missing (long) casts in a couple of places 3055where they matter when size(ftnint) == sizeof(int) < sizeof(long). 3056 3057Tue Jan 18 19:22:24 EST 2000 3058 Arrange for parameter statements involving min(...) and max(...) 3059functions of three or more arguments to work. 3060 Warn about text after "end" (rather than reporting a syntax error 3061with a surprising line number). 3062 Accept preprocessor line numbers of the form "# 1234" (possibly 3063with trailing blanks). 3064 Accept a comma after write(...) and before a list of things to write. 3065 3066Fri Jan 21 17:26:27 EST 2000 3067 Minor updates to make compiling Win32 console binaries easier. A 3068side effect is that the MSDOS restriction of only one Fortran file 3069per invocation is lifted (and "f2c *.f") works. 3070 3071Tue Feb 1 18:38:32 EST 2000 3072 f2c/src/tokdefs.h added (to help people on non-Unix systems -- the 3073makefile has always had a rule for generating tokdefs.h). 3074 3075Fri Mar 10 18:48:17 EST 2000 3076 libf77, libf2c.zip: z_log.c: the real part of the double complex log 3077of numbers near, e.g., (+-1,eps) with |eps| small is now more accurate. 3078For example if z = (1,1d-7), then "write(*,*) z" now writes 3079"(5.E-15,1.E-07" rather than the previous "(4.88498131E-15,1.E-07)". 3080 3081Thu Apr 20 13:02:54 EDT 2000 3082 libf77, libi77, libf2c.zip: s_cat.c, rsne.c, xwsne.c: fix type 3083errors that only matter if sizeof(ftnint) != sizeof(ftnlen). 3084 3085Tue May 30 23:36:18 EDT 2000 3086 expr.c: adjust subcheck() to use a temporary variable of type TYLONG 3087rather than TYSHORT under -C -I2. 3088 3089Wed May 31 08:48:03 EDT 2000 3090 Simplify yesterday's adjustment; today's change should be invisible. 3091 3092Tue Jul 4 22:52:21 EDT 2000 3093 misc.c, function "addressable": fix fault with "f2c -I2 foo.f" when 3094foo.f consists of the 4 lines 3095 subroutine foo(c) 3096 character*(*) c 3097 i = min(len(c),23) 3098 end 3099 Sundry files: tweaks for portability, e.g., for compilation by overly 3100fastidious C++ compilers; "false" and "true" now treated as C keywords 3101(so they get two underscores appended). 3102 libf77, libi77, libf2c.zip: "invisible" adjustments to permit 3103compilation by C++ compilers; version numbers not changed. 3104 3105Thu Jul 6 23:46:07 EDT 2000 3106 Various files: tweaks to banish more compiler warnings. 3107 lib?77, libf2c.zip/makefile.u: add "|| true" to ranlib invocations. 3108 Thanks to Nelson H. F. Beebe for messages leading to these changes 3109(and to many of the ones two days ago). 3110 xsum.c: tweak include order. 3111 3112Fri Jul 7 18:01:25 EDT 2000 3113 fc: accept -m xxx or -mxxx, pass them to the compiler as -mxxx 3114(suggestion of Nelson Beebe). Note that fc simply appends to CFLAGS, 3115so system-specific stuff can be supplied in the environment variable 3116CFLAGS. With some shells, invocations of the form 3117 CFLAGS='system-specific stuff' fc ... 3118are one way to do this. 3119 3120Thu Aug 17 21:38:36 EDT 2000 3121 Fix obscure glitch: in "Error on line nnn of ...: Bad # line:...", 3122get nnn right. 3123 3124Sat Sep 30 00:28:30 EDT 2000 3125 libf77, libf2c.zip: dtime_.c, etime_.c: use floating-point divide; 3126dtime_.d, erf_.c, erfc_.c, etime.c: for use with "f2c -R", compile with 3127-DREAL=float. 3128 3129Tue Dec 5 22:55:56 EST 2000 3130 lread.c: under namelist input, when reading a logical array, treat 3131Tstuff= and Fstuff= as new assignments rather than as logical constants. 3132 3133Fri Feb 23 00:43:56 EST 2001 3134 libf2c: endfile.c: adjust to use truncate() unless compiled with 3135-DNO_TRUNCATE (or with -DMSDOS). Add libf2c/mkfile.plan9. 3136 3137Sat Feb 24 21:14:24 EST 2001 3138 Prevent malloc(0) when a subroutine of no arguments has an entry 3139with no arguments, as in 3140 subroutine foo 3141 entry goo 3142 end 3143 Fix a fault that was possible when MAIN (illegally) had entry points. 3144 Fix a buffer overflow connected with the error message for names more 3145than MAXNAMELEN (i.e., 50) bytes long. 3146 Fix a bug in command-line argument passing that caused the invocation 3147"f2c -!czork foo.f" to complain about two invalid flags ('-ork' and 3148'-oo.f') instead of just one ('-ork'). 3149 fc: add -s option (strip executable); portability tweaks. 3150 Adjustments to handing of integer*8 to permit processing 8-byte hex, 3151binary, octal, and decimal constants. The adjustments are only 3152available when type long long (for >= 64 bit integers) is available to 3153f2c; they are assumed available unless f2c is compiled with either 3154-DNO_TYQUAD or -DNO_LONGLONG. As has long been the case, compilation 3155of f2c itself with -DNO_TYQUAD eliminates recognition of integer*8 3156altogether. Compilation with just -DNO_LONGLONG permits the previous 3157handling of integer*8, which could only handle 32-bit constants 3158associated with integer*8 variables. 3159 New command-line argument -i8const (available only when f2c itself 3160is compiled with neither -DNO_TYQUAD nor -DNO_LONGLONG) suppresses 3161the new automatic promotion of integer constants too long to express 3162as 32-bit values to type integer*8. There are corresponding updates 3163to f2c.1 and f2c.1t. 3164 3165Wed Feb 28 00:50:04 EST 2001 3166 Adjust misc.c for (older) systems that recognize long long but do not 3167have LLONG_MAX or LONGLONG_MAX in limits.h. 3168 main.c: filter out bad files before dofork loop to avoid trouble 3169in Win32 "f2c.exe" binaries. 3170 3171Thu Mar 1 16:25:19 EST 2001 3172 Cosmetic change for consistency with some other netlib directories: 3173change NO_LONGLONG to NO_LONG_LONG. (This includes adjusting the above 3174entry for Feb 23 2001.) No change (other than timestamp) to version.c. 3175 libf2c: endfile.c: switch to ftruncate (absent -DNO_TRUNCATE), 3176thus permitting truncation of scratch files on true Unix systems, 3177where scratch files have no name. Add an fflush() (surprisingly) 3178needed on some Linux systems. 3179 3180Tue Mar 20 22:03:23 EST 2001 3181 expr.c: complain ("impossible conversion") about attempts to assign 3182character expressions ... to integer variables, rather than implicitly 3183assigning ichar(...). 3184 3185Sat Jun 23 23:08:22 EDT 2001 3186 New command-line option -trapuv adds calls on _uninit_f2c() to prologs 3187to dynamically initialize local variables, except those appearing in 3188SAVE or DATA statements, with values that may help find references to 3189uninitialized variables. For example, with IEEE arithmetic, floating- 3190point variables are initialized to signaling NaNs. 3191 expr.c: new warning for out-of-bounds constant substring expressions. 3192Under -C, such expressions now inhibit C output. 3193 libf2c/mkfile.plan9: fix glitch with rule for "check" (or xsum.out). 3194 libf2c.zip: add uninit.c (for _uninit_f2c()) in support of -trapuv. 3195 fc, f2c.1, f2c.1t: adjust for -trapuv. 3196 3197Thu Jul 5 22:00:51 EDT 2001 3198 libf2c.zip: modify uninit.c for __mc68k__ under Linux. 3199 3200Wed Aug 22 08:01:37 EDT 2001 3201 cds.c, expr.c: in constants, preserve the sign of 0. 3202 expr.c: fix some glitches in folding constants to integer*8 3203(when NO_LONG_LONG is not #defined). 3204 intr.c: fold constant min(...) and max(...) expressions. 3205 3206Fri Nov 16 02:00:03 EST 2001 3207 libf2c.zip: tweak to permit handling files over 2GB long where 3208possible, with suitable -D options, provided for some systems in 3209new header file sysdep1.h (copied from sysdep1.h0 by default). 3210Add an fseek to endfile.c to fix a glitch on some systems. 3211 3212Wed Nov 28 17:58:12 EST 2001 3213 libf2c.zip: on IEEE systems, print -0 as -0 when the relevant 3214libf2c/makefile.* is suitably adjusted: see comments about 3215-DSIGNED_ZEROS in libf2c/makefile.*. 3216 3217Fri Jan 18 16:17:44 EST 2002 3218 libf2c.zip: fix bugs (reported by Holger Helmke) in qbit_bits(): 3219wrong return type, missing ~ on y in return value. This affects 3220the intrinsic ibits function for first argument of type integer*8. 3221 3222Thu Feb 7 17:14:43 EST 2002 3223 Fix bug handling leading array dimensions in common: invalid C 3224resulted. Example (after one provided by Dmitry G. Baksheyev): 3225 3226 subroutine foo(a) 3227 common/c/m 3228 integer m, n 3229 equivalence(m,n) 3230 integer a(n,2) 3231 a(1,2) = 3 3232 end 3233 3234 Fix a bug, apparently introduced sometime after 19980913, in 3235handling certain substring expressions that involve temporary 3236assignments and the first invocation of an implicitly typed function. 3237When the expressions appeared in "else if (...)" and "do while(...)", 3238the temporary assignments appeared too soon. Examples are hard to 3239find, but here is one (after an example provided by Nat Bachman): 3240 3241 subroutine foo(n) 3242 character*8 s 3243 do while (moo(s(n+1:n+2)) .ge. 2) 3244 n = n + 1 3245 enddo 3246 end 3247 3248It is hard for f2c to get this sort of example correct when the 3249"untyped" function is a generic intrinsic. When incorrect code would 3250otherwise result, f2c now issues an error message and declines to 3251produce C. For example, 3252 3253 subroutine foo(n) 3254 character*8 s 3255 double precision goo 3256 do while (sin(goo(s(n+1:n+2))) .ge. 2) 3257 n = n + 1 3258 enddo 3259 end 3260 3261gives the new error message, but both 3262 3263 subroutine foo(n) 3264 character*8 s 3265 double precision goo 3266 do while (dsin(goo(s(n+1:n+2))) .ge. 2) 3267 n = n + 1 3268 enddo 3269 end 3270and 3271 subroutine foo(n) 3272 character*8 s 3273 double precision goo 3274 do while (sin(goo(min(n, (n-3)**2))) .ge. 2) 3275 n = n + 1 3276 enddo 3277 end 3278 3279give correct C. 3280 3281Fri Feb 8 08:43:40 EST 2002 3282 Make a cleaner fix of the bug fixed yesterday in handling certain 3283"do while(...)" and "else if (...)" constructs involving auxiliary 3284assignments. (Yesterday's changes to expr.c are recanted; expr.c 3285is now restored to that of 20010820.) Now 3286 3287 subroutine foo(n) 3288 character*8 s 3289 double precision goo 3290 do while (sin(goo(s(n+1:n+2))) .ge. 0.2) 3291 n = n + 1 3292 enddo 3293 end 3294 3295is correctly translated. 3296 3297Thu Mar 14 12:53:08 EST 2002 3298 lex.c: adjust to avoid an error message under -72 when source files 3299are in CRLF form ("text mode" on Microsoft systems), a source line is 3300exactly 72 characters long, and f2c is run on a system (such as a Unix 3301or Linux system) that does not distinguish text and binary modes. 3302Example (in CRLF form): 3303 write(*,*)"Hello world, with a source line that is 72 chars long." 3304 end 3305 libf2c/z_log.c: add code to cope with buggy compilers (e.g., some 3306versions of gcc under -O2 or -O3) that do floating-point comparisons 3307against values computed into extended-precision registers on some 3308systems (such as Intel IA32 systems). Compile with 3309-DNO_DOUBLE_EXTENDED to omit the kludge that circumvents this bug. 3310 3311Thu May 2 19:09:01 EDT 2002 3312 src/misc.c, src/sysdep.h, src/gram.c: tweaks for KR_headers (a rare 3313concern today); version.c touched but left unchanged. 3314 libf2c: fix glitch in makefile.vc; KR_header tweaks in s_stop.c 3315and uninit.c (which also had a misplaced #endif). 3316 3317Wed Jun 5 16:13:34 EDT 2002 3318 libf2c: uninit.c: for Linux on an ARM processor, add some 3319#ifndef _FPU... tests; f77vers.c not changed. 3320 3321Tue Jun 25 15:13:32 EDT 2002 3322 New command-line option -K requests old-style ("K&R") C. The 3323default is changed to -A (ANSI/ISO style). 3324 Under -K, cast string-length arguments to (ftnlen). This should 3325matter only in the unusual case that "readme" instructs obtaining 3326f2c.h by 3327 sed 's/long int /long long /' f2c.h0 >f2c.h 3328 Increase defaults for some table sizes: make -Nn802 -Nq300 -Nx400 3329the default. 3330 3331Fri Sep 6 18:39:24 EDT 2002 3332 libf2c.zip: rsne.c: fix bug with multiple repeat counts in reading 3333namelists, e.g., &nl a(2) = 3*1.0, 2*2.0, 3*3.0 / 3334(Bug found by Jim McDonald, reported by Toon Moene.) 3335 3336Fri Oct 4 10:23:51 EDT 2002 3337 libf2c.zip: uninit.c: on IRIX systems, omit references to shell 3338variables (a dreg). This only matters with f2c -trapuv . 3339 3340Thu Dec 12 22:16:00 EST 2002 3341 proc.c: tweak to omit "* 1" from "a_offset = 1 + a_dim1 * 1;". 3342 libf2c.zip: uninit.c: adjust to work with HP-UX B.11.11 as well as 3343HP-UX B.10.20; f77vers.c not changed. 3344 3345Tue Feb 11 08:19:54 EST 2003 3346 Fix a fault with f2c -s on the following example of invalid Fortran 3347(reported by Nickolay A. Khokhlov); "function" should appear before 3348"cat" on the first line: 3349 character*(*) cat(a, b) 3350 character*(*) a, b 3351 cat = a // b 3352 end 3353 Issue warnings about inappropriate uses of arrays a, b, c and pass 3354a temporary for d in 3355 real a(2), b(2), c(2), d 3356 call foo((a), 1*b, +c, +d) 3357 end 3358(correcting bugs reported by Arnaud Desitter). 3359 3360Thu Mar 6 22:48:08 EST 2003 3361 output.c: fix a bug leading to "Unexpected tag 4 in opconv_fudge" 3362when f2c -s processes the real part of a complex array reference. 3363Example (simplified from netlib/linpack/zchdc.f): 3364 3365 subroutine foo(a,work,n,k) 3366 integer k, n 3367 complex*16 a(n,n), work(n) 3368 work(k) = dcmplx(dsqrt(dreal(a(k,k))),0.0d0) 3369 end 3370 3371(Thanks to Nickolay A. Khokhlov for the bug report.) 3372 3373Thu Mar 20 13:50:12 EST 2003 3374 format.c: code around a bug (reported by Nelson H. F. Beebe) in 3375some versions of FreeBSD. Compiling with __FreeBSD__ but not 3376NO_FSCANF_LL_BUG #defined or with FSCANF_LL_BUG #defined causes 3377special logic to replace fscanf(infile, "%llx", result) with 3378custom logic. Here's an example (from Beebe) where the bug bit: 3379 integer*8 m, n 3380 m = 9223372036854775807 3381 end 3382 3383Fri Mar 21 13:14:05 EST 2003 3384 libf2c.zip: err.c: before writing to a file after reading from it, 3385do an f_seek(file, 0, SEEK_CUR) to make writing legal in ANSI C. 3386 3387Fri Jun 6 14:56:44 EDT 2003 3388libf2c.zip: add comments about libf2c.so (and a rule that works under 3389Linux, after an adjustment to the CFLAGS = line) to libf2c/makefile.u. 3390 3391Sat Oct 25 07:57:53 MDT 2003 3392README, main.c, sysdep.c: adjust comments about libf2c and expand the 3393comments thereon in the C that f2c writes (since too few people read 3394the README files). Change makefile to makefile.u (with the 3395expectation that people will "cp makefile.u makefile" and edit 3396makefile if necessary) and add makefile.vc (for Microsoft Visual C++). 3397 3398Thu Oct 7 23:25:28 MDT 2004 3399names.c: for convenience of MSVC++ users, map "cdecl" to "cdecl__". 3400 3401Fri Mar 4 18:40:48 MST 2005 3402sysdep.c, makefile.u, new file sysdeptest.c: changes in response to a 3403message forwarded by Eric Grosse from Thierry Carrez <koon@gentoo.org> 3404(who is apparently unaware of f2c's -T option) about an unlikely 3405security issue: that a local attacker could plant symbolic links in 3406/tmp corresponding to temporary file names that f2c generates and thus 3407cause overwriting of arbitrary files. Today's change is that if 3408neither -T nor the unusual debugging flag -Dn is specified and the 3409system is not an MS-Windows system (which cannot have symbolic links, 3410as far as I know), then f2c's temporary files will be written in a 3411temporary directory that is readable and writable only by the user and 3412that is removed at the end of f2c's execution. To disable today's 3413change, compile sysdep.c with -DNO_TEMPDIR (i.e., with NO_TEMPDIR 3414#defined). 3415 3416Sun Mar 27 20:06:49 MST 2005 3417sysdep.c: in set_tmp_names(), fix botched placement of 3418"if (debugflag == 1) return;": move it below declarations. 3419 3420Sun May 1 21:45:46 MDT 2005 3421sysdep.c: fix a possible fault under -DMSDOS and improper handling 3422of a tmpnam failure under the unusual combination of both -DNO_MKDTEMP 3423and -DNO_MKSTEMP (without -DNO_TEMPDIR). 3424 3425Tue Oct 4 23:38:54 MDT 2005 3426libf2c.zip: uninit.c: on IA32 Linux systems, leave the rounding 3427precision alone rather than forcing it to 53 bits; compile with 3428-DUNINIT_F2C_PRECISION_53 to get the former behavior. This only 3429affects Fortran files translated by f2c -trapuv . 3430 3431Sun May 7 00:38:59 MDT 2006 3432 main.c, version.c: add options -? (or --help) that print out 3433pointers to usage documentation and -v (or --version) that print 3434the current version. 3435 fc script: fix botch with -O[123]; recognize --version (or -v) 3436and --help (or -?). 3437 Add f2c.pdf == PDF version of f2c.ps. 3438 3439Sun Oct 8 02:45:04 MDT 2006 3440 putpcc.c: fix glitch in subscripting complex variables: subscripts 3441of type integer*8 were converted to integer*4, which causes trouble 3442when 32-bit addressing does not suffice. 3443 3444Tue Sep 11 23:54:05 MDT 2007 3445 xsum.c: insert explicit "int" before main. 3446 3447Mon Dec 3 20:53:24 MST 2007 3448 libf2c/main.c: insert explicit "int" before main. 3449 3450Sat Apr 5 21:39:57 MDT 2008 3451 libf2c.zip: tweaks for political C++ and const correctness, and 3452to fix ctype trouble in some recent Linux versions. No behavior 3453should change. 3454 3455Sun Apr 6 22:38:56 MDT 2008 3456 libf2c.zip: adjust alternate makefiles to reflect yesterday's change. 3457 3458Wed Nov 26 23:23:27 MST 2008 3459 libf2c.zip: add brief discussion of MacOSX to comments in makefile.u. 3460 3461Fri Jan 2 23:13:25 MST 2009 3462 libf2c.zip: add -DNO_ISATTY to CFLAGS assignment in makefile.vc. 3463 3464Sat Apr 11 18:06:00 MDT 2009 3465 src/sysdep.c src/sysdeptest.c: tweak for MacOSX (include <unistd.h>). 3466 3467Wed Jul 7 10:51:12 MDT 2010 3468 src/data.c, src/format.c, src/p1output.c: "invisible" tweaks to 3469silence warnings seen in compilation under Ubuntu; version.c not changed. 3470 3471Fri Aug 27 09:14:17 MDT 2010 3472 format.c: make sizeof(buf) depend on MAXNAMELEN to fix a bug with long 3473names. Update mswin/f2c.exe.gz accordingly. 3474 3475Fri Sep 3 16:03:24 MDT 2010 3476 fc: have "-m ..." modify CC rather than CFLAGS (to affect linking). 3477 3478Mon Aug 1 13:46:40 MDT 2011 3479 README, README in libf2c.zip: update some netlib pointers. 3480 3481NOTE: the old libf77 and libi77 bundles are no longer being updated. 3482Use libf2c.zip instead. 3483