|
|
1.1 ! root 1: 31 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: ! 11: 5 Sept. 1989: ! 12: Fixed botch in argument passing of substrings of equivalenced ! 13: variables. ! 14: ! 15: 15 Sept. 1989: ! 16: Warn about incorrect code generated when a character-valued ! 17: function is not declared external and is passed as a parameter ! 18: (in violation of the Fortran 77 standard) before it is invoked. ! 19: Example: ! 20: ! 21: subroutine foo(a,b) ! 22: character*10 a,b ! 23: call goo(a,b) ! 24: b = a(3) ! 25: end ! 26: ! 27: 18 Sept. 1989: ! 28: Complain about overlapping initializations. ! 29: ! 30: 20 Sept. 1989: ! 31: Warn about names declared EXTERNAL but never referenced; ! 32: include such names as externs in the generated C (even ! 33: though most C compilers will discard them). ! 34: ! 35: 24 Sept. 1989: ! 36: New option -w8 to suppress complaint when COMMON or EQUIVALENCE ! 37: forces word alignment of a double. ! 38: Under -A (for ANSI C), ensure that floating constants (terminated ! 39: by 'f') contain either a decimal point or an exponent field. ! 40: Repair bugs sometimes encountered with CHAR and ICHAR intrinsic ! 41: functions. ! 42: Restore f77's optimizations for copying and comparing character ! 43: strings of length 1. ! 44: Always assume floating-point valued routines in libF77 return ! 45: doubles, even under -R. ! 46: Repair occasional omission of arguments in routines having multiple ! 47: entry points. ! 48: Repair bugs in computing offsets of character strings involved ! 49: in EQUIVALENCE. ! 50: Don't omit structure qualification when COMMON variables are used ! 51: as FORMATs or internal files. ! 52: ! 53: 2 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 ! 56: involved in EQUIVALENCE. ! 57: Treat noncharacter variables initialized (at least partly) with ! 58: character data as though they were equivalenced -- put out a struct ! 59: and #define the variables. This eliminates the hideous and nonportable ! 60: numeric values that were used to initialize such variables. ! 61: Treat IMPLICIT NONE as IMPLICIT UNDEFINED(A-Z) . ! 62: Quit when given invalid options. ! 63: ! 64: 8 Oct. 1989: ! 65: Modified naming scheme for generated intermediate variables; ! 66: more are recycled, fewer distinct ones used. ! 67: New option -W nn specifies nn characters/word for Hollerith ! 68: data 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 ! 71: i is a scalar integer variable, are now simplified to (const1-const2); ! 72: this leads to simpler translation of some substring expressions. ! 73: Initialize uninitialized portions of character string arrays to 0 ! 74: rather than to blanks. ! 75: ! 76: 9 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: ! 80: 10 Oct. 1989: ! 81: ! recognized as in-line comment delimiter (a la Fortran 88). ! 82: ! 83: 24 Oct. 1989: ! 84: New options to ease coping with systems that want the structs ! 85: that result from COMMON blocks to be defined just once: ! 86: -E causes uninitialized COMMON blocks to be declared Extern; ! 87: if Extern is undefined, f2c.h #defines it to be extern. ! 88: -ec causes a separate .c file to be emitted for each ! 89: uninitialized COMMON block: COMMON /ABC/ yields abc_com.c; ! 90: thus one can compile *_com.c into a library to ensure ! 91: precisely one definition. ! 92: -e1c is similar to -ec, except that everything goes into ! 93: one file, along with comments that give a sed script for ! 94: splitting the file into the pieces that -ec would give. ! 95: This is for use with netlib's "execute f2c" service (for which ! 96: -ec is coerced into -e1c, and the sed script will put everything ! 97: but the COMMON definitions into f2c_out.c ). ! 98: ! 99: 28 Oct. 1989: ! 100: Convert "i = i op ..." into "i op= ...;" even when i is a ! 101: dummy argument. ! 102: ! 103: 13 Nov. 1989: ! 104: Name integer constants (passed as arguments) c__... rather ! 105: than c_... so ! 106: common /c/stuff ! 107: call foo(1) ! 108: ... ! 109: is translated correctly. ! 110: ! 111: 19 Nov. 1989: ! 112: Floating-point constants are now kept as strings unless they ! 113: are involved in constant expressions that get simplified. The ! 114: floating-point constants kept as strings can have arbitrarily ! 115: many significant figures and a very large exponent field (as ! 116: large as long int allows on the machine on which f2c runs). ! 117: Thus, 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: ! 130: now 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: ! 139: rather 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., ! 149: epbase, epprec, epemin, epemax, eptiny, ephuge, epmrsp. ! 150: ! 151: 22 Nov. 1989: ! 152: Workarounds for glitches on some Sun systems... ! 153: libf77: libF77/makefile modified to point out possible need ! 154: to compile libF77/main.c with -Donexit=on_exit . ! 155: libi77: libI77/wref.c (and libI77/README) modified so non-ANSI ! 156: systems can compile with USE_STRLEN defined, which will cause ! 157: sprintf(b = buf, "%#.*f", d, x); ! 158: n = strlen(b) + d1; ! 159: rather than ! 160: n = sprintf(b = buf, "%#.*f", d, x) + d1; ! 161: to be compiled. ! 162: ! 163: 26 Nov. 1989: ! 164: Longer names are now accepted (up to 50 characters); names may ! 165: contain underscores (in which case they will have two underscores ! 166: appended, to avoid clashes with library names). ! 167: ! 168: 28 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: ! 173: 29 Nov. 1989: ! 174: Supplied missing semicolon in parameterless subroutines that ! 175: have multiple entry points (all of them parameterless). ! 176: ! 177: 30 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" ! 180: rather than "doublereal" (for use with nonstandard C compilers for ! 181: which "double" is IEEE double extended). ! 182: ! 183: 1 Dec. 1989: ! 184: f2c.h updated to eliminate #defines rendered unnecessary (and, ! 185: indeed, dangerous) by change of 26 Nov. to long names possibly ! 186: containing 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 ! 189: different types). ! 190: ! 191: 2 Dec. 1989: ! 192: Better error message (than "bad tag") for NAMELIST, which no longer ! 193: inhibits C output. ! 194: ! 195: 4 Dec. 1989: ! 196: Allow capital letters in hex constants (f77 extension; e.g., ! 197: x'a012BCd', X'A012BCD' and x'a012bcd' are all treated as the integer ! 198: 167848909). ! 199: libi77 further revised: lio.c lio.h lread.c wref.c wrtfmt.c tweaked ! 200: again to allow float and real or double and doublereal to be different. ! 201: ! 202: 6 Dec. 1989: ! 203: Revised f2c.h -- required for the following... ! 204: Simpler looking translations for abs, min, max, using #defines in ! 205: revised 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 ! 209: libi77 gives you a run-time error message if you attempt NAMELIST I/O. ! 210: ! 211: 7 Dec. 1989: ! 212: Fixed bug that prevented local integer variables that appear in DATA ! 213: stmts from being ASSIGNed statement labels. ! 214: Fillers (for DATA statements initializing EQUIVALENCEd variables and ! 215: variables in COMMON) typed integer rather than doublereal (for slightly ! 216: more portability, e.g. to Crays). ! 217: libi77: missing return values supplied in a few places; some tests ! 218: reordered for better working on the Cray. ! 219: libf77: better accuracy for complex divide, complex square root, ! 220: real mod function (casts to double; double temporaries). ! 221: ! 222: 9 Dec. 1989: ! 223: Fixed bug that caused needless (albeit harmless) empty lines to be ! 224: inserted in the C output when a comment line contained trailing blanks. ! 225: Further tweak to type of fillers: allow doublereal fillers if the ! 226: struct has doublereal data. ! 227: ! 228: 11 Dec. 1989: ! 229: Alteration of rule for producing external (C) names from names that ! 230: contain underscores. Now the external name is always obtained by ! 231: appending a pair of underscores. ! 232: ! 233: 12 Dec. 1989: ! 234: C production inhibited after most errors. ! 235: ! 236: 15 Dec. 1989: ! 237: Fixed bug in headers for subroutines having two or more character ! 238: strings arguments: the length arguments were reversed. ! 239: ! 240: 19 Dec. 1989: ! 241: f2c.h libf77 libi77: adjusted so #undefs in f2c.h should not foil ! 242: compilation 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: ! 246: 20 Dec. 1989: ! 247: f2c bugs fixed: In the absence of an err= specifier, the iostat= ! 248: specifier was generally set wrong. Character strings containing ! 249: explicit 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: ! 253: 29 Dec. 1989: ! 254: Nested unlabeled DO loops now handled properly; new warning for ! 255: extraneous text at end of FORMAT. ! 256: ! 257: 30 Dec. 1989: ! 258: Fixed bug in translating dble(real(...)), dble(sngl(...)), and ! 259: dble(float(...)), where ... is either of type double complex or ! 260: is an expression requiring assignment to intermediate variables (e.g., ! 261: dble(real(foo(x+1))), where foo is a function and x is a variable). ! 262: Regard nonblank label fields on continuation lines as an error. ! 263: ! 264: 3 Jan. 1990: ! 265: New option -C++ yields output that should be understood ! 266: by C++ compilers. ! 267: ! 268: 6 Jan. 1989: ! 269: -a now excludes variables that appear in a namelist from those ! 270: that it makes automatic. (As before, it also excludes variables ! 271: that appear in a common, data, equivalence, or save statement.) ! 272: The syntactically correct Fortran ! 273: read(*,i) x ! 274: end ! 275: now yields syntactically correct C (even though both the Fortran ! 276: and C are buggy -- no FORMAT has not been ASSIGNed to i). ! 277: ! 278: 7 Jan. 1990: ! 279: libi77: routines supporting NAMELIST added. Surrounding quotes ! 280: made optional when no ambiguity arises in a list or namelist READ ! 281: of a character-string value. ! 282: ! 283: 9 Jan. 1990: ! 284: f2c.src made available. ! 285: ! 286: 16 Jan. 1990: ! 287: New options -P to produce ANSI C or C++ prototypes for procedures ! 288: defined. Change to -A and -C++: f2c tries to infer prototypes for ! 289: invoked procedures unless the new -!P option is given. New warning ! 290: messages for inconsistent calling sequences among procedures within ! 291: a single file. Most of f2c/src is affected. ! 292: f2c.h: typedefs for procedure arguments added; netlib's f2c service ! 293: will insert appropriate typedefs for use with older versions of f2c.h. ! 294: ! 295: 17 Jan. 1990: ! 296: f2c/src: defs.h exec.c format.c proc.c putpcc.c version.c xsum0.out ! 297: updated. Castargs and protofile made extern in defs.h; exec.c ! 298: modified so superfluous else clauses are diagnosed; unused variables ! 299: omitted from declarations in format.c proc.c putpcc.c . ! 300: ! 301: 21 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; ! 305: such files are assumed to be prototype files, such as produced by ! 306: the -P option. All prototype files are read before any Fortran files ! 307: and apply globally to all Fortran files. Suitable prototypes help f2c ! 308: warn about calling-sequence errors and can tell f2c how to type ! 309: procedures declared external but not explicitly typed; the latter is ! 310: mainly of interest for users of the -A and -C++ options. (Prototype ! 311: arguments are not available to netlib's "execute f2c" service.) ! 312: New option -it tells f2c to try to infer types of untyped external ! 313: arguments from their use as parameters to prototyped or previously ! 314: defined procedures. ! 315: f2c/src: many minor cleanups; most modules changed. Individual ! 316: files in f2c/src are now in "bundle" format. The former f2c.1 is ! 317: now f2c.1t; "f2c.1t from f2c" and "f2c.1t from f2c/src" are now the ! 318: same, as are "f2c.1 from f2c" and "f2c.1 from f2c/src". People who ! 319: do not obtain a new copy of "all from f2c/src" should at least add ! 320: fclose(sortfp); ! 321: after the call on do_init_data(outfile, sortfp) in format_data.c . ! 322: ! 323: 22 Jan. 1990: ! 324: Cleaner man page wording (thanks to Doug McIlroy). ! 325: -it now also applies to all untyped EXTERNAL procedures, not just ! 326: arguments. ! 327: ! 328: 23 Jan. 01:34:00 EST 1990: ! 329: Bug fixes: under -A and -C++, incorrect C was generated for ! 330: subroutines having multiple entries but no arguments. ! 331: Under -A -P, subroutines of no arguments were given prototype ! 332: calling sequence () rather than (void). ! 333: Character-valued functions elicited erroneous warning messages ! 334: about inconsistent calling sequences when referenced by another ! 335: procedure in the same file. ! 336: f2c.1t: omit first appearance of libF77.a in FILES section; ! 337: load order of libraries is -lF77 -lI77, not vice versa (bug ! 338: introduced in yesterday's edits); define .F macro for those whose ! 339: -man lacks it. (For a while after yesterday's fixes were posted, ! 340: f2c.1t was out of date. Sorry!) ! 341: ! 342: 23 Jan. 9:53:24 EST 1990: ! 343: Character substring expressions involving function calls having ! 344: character arguments (including the intrinsic len function) yielded ! 345: incorrect C. ! 346: Procedures defined after invocation (in the same file) with ! 347: conflicting argument types also got an erroneous message about ! 348: the wrong number of arguments. ! 349: ! 350: 24 Jan. 11:44:00 EST 1990: ! 351: Bug fixes: -p omitted #undefs; COMMON block names containing ! 352: underscores had their C names incorrectly computed; a COMMON block ! 353: having the name of a previously defined procedure wreaked havoc; ! 354: if all arguments were .P files, f2c tried reading the second as a ! 355: Fortran file. ! 356: New feature: -P emits comments showing COMMON block lengths, so one ! 357: can get warnings of incompatible COMMON block lengths by having f2c ! 358: read .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 ! 360: inconsistent COMMON usage, and COMMON blocks having inconsistent ! 361: lengths will be given the maximum length. (The latter always did ! 362: happen within each input file; now -P lets you extend this behavior ! 363: across files.) ! 364: ! 365: 26 Jan. 16:44:00 EST 1990: ! 366: Option -it made less aggressive: untyped external procedures that ! 367: are invoked are now typed by the rules of Fortran, rather than by ! 368: previous use of procedures to which they are passed as arguments ! 369: before being invoked. ! 370: Option -P now includes information about references, i.e., called ! 371: procedures, in the prototype files (in the form of special comments). ! 372: This allows iterative invocations of f2c to infer more about untyped ! 373: external names, particularly when multiple Fortran files are involved. ! 374: As usual, there are some obscure bug fixes: ! 375: 1. Repair of erroneous warning messages about inconsistent number of ! 376: arguments that arose when a character dummy parameter was discovered ! 377: to be a function or when multiple entry points involved character ! 378: variables appearing in a previous entry point. ! 379: 2. Repair of memory fault after error msg about "adjustable character ! 380: function". ! 381: 3. Under -U, allow MAIN_ as a subroutine name (in the same file as a ! 382: main program). ! 383: 4. Change for consistency: a known function invoked as a subroutine, ! 384: then as a function elicits a warning rather than an error. ! 385: ! 386: 26 Jan. 22:32:00 EST 1990: ! 387: Fixed two bugs that resulted in incorrect C for substrings, within ! 388: the body of a character-valued function, of the function's name, when ! 389: those substrings were arguments to another function (even implicitly, ! 390: as in character-string assignment). ! 391: ! 392: 28 Jan. 18:32:00 EST 1990: ! 393: libf77, libi77: checksum files added; "make check" looks for ! 394: transmission errors. NAMELIST read modified to allow $ rather than & ! 395: to precede a namelist name, to allow $ rather than / to terminate ! 396: input where the name of another variable would otherwise be expected, ! 397: and to regard all nonprinting ASCII characters <= ' ' as spaces. ! 398: ! 399: 29 Jan. 02:11:00 EST 1990: ! 400: "fc from f2c" added. ! 401: -it option made the default; -!it turns it off. Type information is ! 402: now updated in a previously missed case. ! 403: -P option tweaked again; message about when rerunning f2c may change ! 404: prototypes or declarations made more accurate. ! 405: New option -Ps implies -P and returns exit status 4 if rerunning ! 406: f2c -P with prototype inputs might change prototypes or declarations. ! 407: Now 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: ! 416: to get a file zap.P of the best prototypes f2c can determine for *.f . ! 417: ! 418: Jan. 29 07:30:21 EST 1990: ! 419: Forgot to check for error status when setting return code 4 under -Ps; ! 420: error status (1, 2, 3, or, for caught signal, 126) now takes precedence. ! 421: ! 422: Jan 29 14:17:00 EST 1990: ! 423: Incorrect handling of ! 424: open(n,'filename') ! 425: repaired -- 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 ! 429: provide memset, memcmp, and memcpy; #include <string.h> in mem.c ! 430: changed to #include "string.h" so BSD people can create a local ! 431: string.h that simply says #include <strings.h> . ! 432: ! 433: Jan 30 10:34:00 EST 1990: ! 434: Fix erroneous warning at end of definition of a procedure with ! 435: character arguments when the procedure had previously been called with ! 436: a numeric argument instead of a character argument. (There were two ! 437: warnings, the second one incorrectly complaining of a wrong number of ! 438: arguments.) ! 439: ! 440: Jan 30 16:29:41 EST 1990: ! 441: Fix case where -P and -Ps erroneously reported another iteration ! 442: necessary. (Only harm is the extra iteration.) ! 443: ! 444: Feb 3 01:40:00 EST 1990: ! 445: Supply semicolon occasionally omitted under -c . ! 446: Try to force correct alignment when numeric variables are initialized ! 447: with character data (a non-standard and non-portable practice). You ! 448: must use the -W option if your code has such data statements and is ! 449: meant to run on a machine with other than 4 characters/word; e.g., for ! 450: code meant to run on a Cray, you would specify -W8 . ! 451: Allow parentheses around expressions in output lists (in write and ! 452: print 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); ! 455: renamed 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: ! 459: Feb 3 03:49:00 EST 1990: ! 460: Repair memory fault that arose from use (in an assignment or ! 461: call) of a non-argument variable declared CHARACTER*(*). ! 462: ! 463: Feb 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) ! 469: in the expression part of a computed goto. ! 470: Fix botched calling sequences in array references involving ! 471: functions having character args. ! 472: Fix memory fault caused by invocation of character-valued functions ! 473: of no arguments. ! 474: Fix botched calling sequence of a character*1-valued function ! 475: assigned 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, ! 478: but give exit code 8. ! 479: Simplify include logic (by removing some bogus logic); never ! 480: prepend "/usr/include/" to file names. ! 481: Minor cleanups (that should produce no visible change in f2c's ! 482: behavior) in intr.c parse.h main.c defs.h formatdata.c p1output.c . ! 483: ! 484: Feb 10 00:19:38 EST 1990: ! 485: Insert (integer) casts when floating-point expressions are used ! 486: as subscripts. ! 487: Make SAVE stmt (with no variable list) override -a . ! 488: Minor cleanups: change field to Field in struct Addrblock (for the ! 489: benefit of buggy C compilers); omit system("/bin/cp ...") in misc.c . ! 490: ! 491: Feb 13 00:39:00 EST 1990: ! 492: Error msg fix in gram.dcl: change "cannot make %s parameter" ! 493: to "cannot make into parameter". ! 494: ! 495: Feb 14 14:02:00 EST 1990: ! 496: Various cleanups (invisible on systems with 4-byte ints), thanks ! 497: to Dave Regan: vaxx.c eliminated; %d changed to %ld various places; ! 498: external names adjusted for the benefit of stupid systems (that ignore ! 499: case and recognize only 6 significant characters in external names); ! 500: buffer shortened in xsum.c (e.g. for MS-DOS); fopen modes distinguish ! 501: text and binary files; several unused functions eliminated; missing ! 502: arg supplied to an unlikely fatalstr invocation. ! 503: ! 504: Thu Feb 15 19:15:53 EST 1990: ! 505: More cleanups (invisible on systems with 4 byte ints); casts inserted ! 506: so most complaints from cyntax(1) and lint(1) go away; a few (int) ! 507: versus (long) casts corrected. ! 508: ! 509: Fri 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 ! 512: strings. ! 513: New error message for attempts to provide DATA in a type-declaration ! 514: statement. ! 515: ! 516: Sat 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)" ! 519: in 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: ! 523: Sun Feb 18 18:07:00 EST 1990: ! 524: Detect overlapping initializations of arrays and scalar variables ! 525: in 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. ! 529: on a Cray. ! 530: Attempt to isolate UNIX-specific things in sysdep.c (a new source ! 531: file). Unless sysdep.c is compiled with SYSTEM_SORT defined, the ! 532: intermediate files created for DATA statements are now sorted in-core ! 533: without invoking system(). ! 534: ! 535: Tue 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: ! 542: Tue Feb 20 21:44:07 EST 1990: ! 543: Minor cleanups for the benefit of EBCDIC machines -- try to remove ! 544: the assumption that 'a' through 'z' are contiguous. (Thanks again to ! 545: Gary Word.) Also, change log2 to log_2 (shouldn't be necessary). ! 546: ! 547: Wed Feb 21 06:24:56 EST 1990: ! 548: Fix botch in init.c introduced in previous change; only matters ! 549: to non-ASCII machines. ! 550: ! 551: Thu Feb 22 17:29:12 EST 1990: ! 552: Allow several entry points to mention the same array. Protect ! 553: parameter adjustments with if's (for the case that an array is not ! 554: an 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 ! 560: at 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 ! 566: executable stmt -- not wonderful, but not worth fixing.) ! 567: Minor cleanup of min/max computation (sometimes slightly simpler). ! 568: ! 569: Sun Feb 25 09:39:01 EST 1990: ! 570: Minor tweak to multiple entry points: protect parameter adjustments ! 571: with 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 ! 573: complained at the duplicate #defines of IOSUNIT and IOSFMT or at ! 574: comparisons of p1gets(...) with NULL). ! 575: ! 576: Sun Feb 25 18:40:10 EST 1990: ! 577: Fix bug introduced Feb. 22: if a subprogram contained DATA and the ! 578: first executable statement was labeled, then the label got lost. ! 579: (Just change INEXEC to INDATA in p1output.c; it occurs just once.) ! 580: ! 581: Mon Feb 26 17:45:10 EST 1990: ! 582: Fix bug in handling of " and ' in comments. ! 583: ! 584: Wed Mar 28 01:43:06 EST 1990: ! 585: libI77: ! 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 ! 588: the last buffer of the second to be lost. ! 589: 2. Formatted reads of logical values treated all letters other than ! 590: t 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: ! 594: f2c 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 ! 600: bug made f2c produce invalid C. ! 601: Correct a memory fault that occurred (on some machines) when the ! 602: error message "adjustable dimension on non-argument" should be given. ! 603: Minor tweaks to remove some harmless warnings by overly chatty C ! 604: compilers. ! 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 ! 607: the array offset computation. ! 608: ! 609: Wed Mar 28 18:47:59 EST 1990: ! 610: libf77: add exit(0) to end of main [return(0) encounters a Cray bug] ! 611: ! 612: Sun Apr 1 16:20:58 EDT 1990: ! 613: Avoid dereferencing null when processing equivalences after an error. ! 614: ! 615: Fri Apr 6 08:29:49 EDT 1990: ! 616: Calls involving alternate return specifiers omitted processing ! 617: needed 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: ! 621: Tue Apr 10 20:07:02 EDT 1990: ! 622: When inconsistent calling sequences involve differing numbers of ! 623: arguments, report the first differing argument rather than the numbers ! 624: of arguments. ! 625: Fix bug under -a: formatted I/O in which either the unit or the ! 626: format 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 ! 630: looping. (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) ! 633: boundaries 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 ! 642: elsewhere) that one may need to modify on some systems. ! 643: Some large arrays that were previously statically allocated are now ! 644: dynamically 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: ! 651: Wed Apr 11 18:27:12 EDT 1990: ! 652: Fix bug in argument consistency checking of character, complex, and ! 653: double complex valued functions. If the same source file contained a ! 654: definition of such a function with arguments not explicitly typed, ! 655: then subsequent references to the function might get erroneous ! 656: warnings 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 ! 659: enforce Fortran evaluation-order rules with pernicious, old-style C ! 660: compilers that apply the associative law to floating-point operations. ! 661: ! 662: Sat Apr 14 15:50:15 EDT 1990: ! 663: libi77: libI77 adjusted to allow list-directed and namelist I/O ! 664: of internal files; bug in namelist I/O of logical and character arrays ! 665: fixed; list input of complex numbers adjusted to permit d or D to ! 666: denote the start of the exponent field of a component. ! 667: f2c itself: fix bug in handling complicated lower-bound ! 668: expressions for character substrings; e.g., min and max did not work ! 669: right, nor did function invocations involving character arguments. ! 670: Switch to octal notation, rather than hexadecimal, for nonprinting ! 671: characters in character and string constants. ! 672: Fix bug (when neither -A nor -C++ was specified) in typing of ! 673: external arguments of type complex, double complex, or character: ! 674: subroutine foo(c) ! 675: external c ! 676: complex c ! 677: now results in ! 678: /* Complex */ int (*c) (); ! 679: (as, indeed, it once did) rather than ! 680: complex (*c) (); ! 681: ! 682: Sat 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 ! 686: files from lib[FI]77.) ! 687: ! 688: Wed Apr 18 00:56:37 EDT 1990: ! 689: Move declaration of atof() from defs.h to sysdep.h, where it is ! 690: now 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") ! 693: for an attempt to define a function without specifying its type. ! 694: ! 695: Wed Apr 18 17:26:27 EDT 1990: ! 696: Recognize \v (vertical tab) in Hollerith as well as quoted strings; ! 697: add 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 ! 701: assumed ASCII; #define Table_size in sysdep.h rather than using ! 702: hard-coded 256 in allocating arrays of size 1 << (bits/byte). ! 703: ! 704: Thu 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 ! 707: systems that erroneously #define max in stdlib.h). ! 708: ! 709: Mon Apr 23 22:24:51 EDT 1990: ! 710: When producing default-style C (no -A or -C++), cast switch ! 711: expressions 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 ! 714: formatdata.c, so that people who have systems like VMS that would ! 715: otherwise create multiple versions of intermediate files can ! 716: #define scrub(x) unlink(x) ! 717: ! 718: Tue Apr 24 18:28:36 EDT 1990: ! 719: Pass string lengths once rather than twice to a function of character ! 720: arguments involved in comparison of character strings of length 1. ! 721: ! 722: Fri Apr 27 13:11:52 EDT 1990: ! 723: Fix bug that made f2c gag on concatenations involving char(...) on ! 724: some systems. ! 725: ! 726: Sat 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 ! 733: variable, e.g., max(a*b,c)). ! 734: ! 735: Mon 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 ! 738: funny padding rules for substructures, e.g., Sun C compilers). ! 739: Minor cleanup of exec.c (should not affect generated C). ! 740: ! 741: Mon Apr 30 23:13:51 EDT 1990: ! 742: Fix bug in handling return values of functions having multiple ! 743: entry points of differing return types. ! 744: ! 745: Sat 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 ! 753: Instead of warning of inconsistent calling sequences for goo, ! 754: f2c was simply making i a real variable; now i is correctly ! 755: typed as an integer variable, and f2c issues an error message. ! 756: Adjust error messages issued at end of declarations so they ! 757: don't blame the first executable statement. ! 758: ! 759: Sun May 6 01:29:07 EDT 1990: ! 760: Fix bug in -P and -Ps: warn when the definition of a subprogram adds ! 761: information that would change prototypes or previous declarations. ! 762: ! 763: Thu May 10 18:09:15 EDT 1990: ! 764: Fix further obscure bug with (default) -it: inconsistent calling ! 765: sequences and I/O statements could interact to cause a memory fault. ! 766: Example: ! 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: ! 775: Fri 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 ! 778: Fortran on stdin. ! 779: ! 780: Wed May 16 18:24:42 EDT 1990: ! 781: f2c.ps made available. ! 782: ! 783: Mon 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: ! 787: Wed Jun 13 12:43:17 EDT 1990: ! 788: Under -A, supply a missing "[1]" for CHARACTER*1 variables that appear ! 789: both in a DATA statement and in either COMMON or EQUIVALENCE. ! 790: ! 791: Mon 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: ! 795: Tue Jun 19 07:36:32 EDT 1990: ! 796: Fix incorrect code generated for ELSE IF(expression involving ! 797: function call passing non-constant substring). ! 798: Under -h, preserve the property that strings are null-terminated ! 799: where possible. ! 800: Remove spaces between # and define in lex.c output.c parse.h . ! 801: ! 802: Mon Jun 25 07:22:59 EDT 1990: ! 803: Minor tweak to makefile to reduce unnecessary recompilations. ! 804: ! 805: Tue Jun 26 11:49:53 EDT 1990: ! 806: Fix unintended truncation of some integer constants on machines ! 807: where casting a long to (int) may change the value. E.g., when f2c ! 808: ran on machines with 16-bit ints, "i = 99999" was being translated ! 809: to "i = -31073;". ! 810: ! 811: Wed Jun 27 11:05:32 EDT 1990: ! 812: Arrange for CHARACTER-valued PARAMETERs to honor their length ! 813: specifications. Allow CHAR(nn) in expressions defining such PARAMETERs. ! 814: ! 815: Fri Jul 20 09:17:30 EDT 1990: ! 816: Avoid dereferencing 0 when a FORMAT statement has no label. ! 817: ! 818: Thu 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 ! 821: complained at (short)*store. ! 822: ! 823: Thu Aug 2 02:07:58 EDT 1990: ! 824: f2c.ps: change the first line of page 5 from ! 825: include stuff ! 826: to ! 827: include 'stuff' ! 828: ! 829: Tue Aug 14 13:21:24 EDT 1990: ! 830: libi77: libI77 adjusted to treat tabs as spaces in list input. ! 831: ! 832: Fri Aug 17 07:24:53 EDT 1990: ! 833: libi77: libI77 adjusted so a blank='ZERO' clause (upper case Z) ! 834: in an open of a currently open file works right. ! 835: ! 836: Tue Aug 28 01:56:44 EDT 1990: ! 837: Fix bug in warnings of inconsistent calling sequences: if an ! 838: argument to a subprogram was never referenced, then a previous ! 839: invocation of the subprogram (in the same source file) that ! 840: passed something of the wrong type for that argument did not ! 841: elicit a warning message. ! 842: ! 843: Thu Aug 30 09:46:12 EDT 1990: ! 844: libi77: prevent embedded blanks in list output of complex values; ! 845: omit exponent field in list output of values of magnitude between ! 846: 10 and 1e8; prevent writing stdin and reading stdout or stderr; ! 847: don't close stdin, stdout, or stderr when reopening units 5, 6, 0. ! 848: ! 849: Tue 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: ! 853: Fri Sep 7 13:55:34 EDT 1990: ! 854: Remark about "make xsum.out" and "make f2c" added to README. ! 855: ! 856: Tue Sep 18 23:50:01 EDT 1990: ! 857: Fix null dereference (and, on some systems, writing of bogus *_com.c ! 858: files) under -ec or -e1c when a prototype file (*.p or *.P) describes ! 859: COMMON blocks that do not appear in the Fortran source. ! 860: libi77: ! 861: Add some #ifdef lines (#ifdef MSDOS, #ifndef MSDOS) to avoid ! 862: references to stat and fstat on non-UNIX systems. ! 863: On UNIX systems, add component udev to unit; decide that old ! 864: and new files are the same iff both the uinode and udev components ! 865: of unit agree. ! 866: When an open stmt specifies STATUS='OLD', use stat rather than ! 867: access (on UNIX systems) to check the existence of the file (in case ! 868: directories leading to the file have funny permissions and this is ! 869: a setuid or setgid program). ! 870: ! 871: Thu 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: ! 875: Tue 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 ! 878: don't clobber the file. ! 879: ! 880: Thu Oct 11 18:00:14 EDT 1990: ! 881: libi77: minor cleanups: add #include "fcntl.h" to endfile.c, err.c, ! 882: open.c; adjust g_char in util.c for segmented memories; in f_inqu ! 883: (inquire.c), define x appropriately when MSDOS is defined. ! 884: ! 885: Mon Oct 15 20:02:11 EDT 1990: ! 886: Add #ifdef MSDOS pointer adjustments to mem.c; treat NAME= as a ! 887: synonym for FILE= in OPEN statements. ! 888: ! 889: Wed Oct 17 16:40:37 EDT 1990: ! 890: libf77, libi77: minor cleanups: _cleanup() and abort() invocations ! 891: replaced by invocations of sig_die in main.c; some error messages ! 892: previously lost in buffers will now appear. ! 893: ! 894: Mon Oct 22 16:11:27 EDT 1990: ! 895: libf77: separate sig_die from main (for folks who don't want to use ! 896: the main in libF77). ! 897: libi77: minor tweak to comments in README. ! 898: ! 899: Fri Nov 2 13:49:35 EST 1990: ! 900: Use two underscores rather than one in generated temporary variable ! 901: names to avoid conflict with COMMON names. f2c.ps updated to reflect ! 902: this change and the NAME= extension introduced 15 Oct. ! 903: Repair a rare memory fault in io.c . ! 904: ! 905: Mon Nov 5 16:43:55 EST 1990: ! 906: libi77: changes to open.c (and err.c): complain if an open stmt ! 907: specifies new= and the file already exists (as specified by Fortrans 77 ! 908: and 90); allow file= to be omitted in open stmts and allow ! 909: status='replace' (Fortran 90 extensions). ! 910: ! 911: Fri Nov 30 10:10:14 EST 1990: ! 912: Adjust malloc.c for unusual systems whose sbrk() can return values ! 913: not properly aligned for doubles. ! 914: Arrange for slightly more helpful and less repetitive warnings for ! 915: non-character variables initialized with character data; these warnings ! 916: are (still) suppressed by -w66. ! 917: ! 918: Fri Nov 30 15:57:59 EST 1990: ! 919: Minor tweak to README (about changing VOID in f2c.h). ! 920: ! 921: Mon Dec 3 07:36:20 EST 1990: ! 922: Fix spelling of "character" in f2c.1t. ! 923: ! 924: Tue Dec 4 09:48:56 EST 1990: ! 925: Remark about link_msg and libf2c added to f2c/README. ! 926: ! 927: Thu Dec 6 08:33:24 EST 1990: ! 928: Under -U, render label nnn as L_nnn rather than Lnnn. ! 929: ! 930: Fri Dec 7 18:05:00 EST 1990: ! 931: Add more names from f2c.h (e.g. integer, real) to the c_keywords ! 932: list of names to which an underscore is appended to avoid confusion. ! 933: ! 934: Mon 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 ! 937: elsewhere. ! 938: ! 939: Sun 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 ! 948: data statement.) ! 949: Use decimal rather than hex constants in xsum.c (to prevent ! 950: erroneous warning messages about constant overflow). ! 951: ! 952: Mon Dec 17 12:26:40 EST 1990: ! 953: Fix rare extra underscore in character length parameters passed ! 954: for multiple entry points. ! 955: ! 956: Wed Dec 19 17:19:26 EST 1990: ! 957: Allow generation of C despite error messages about bad alignment ! 958: forced by equivalence. ! 959: Allow variable-length concatenations in I/O statements, such as ! 960: open(3, file=bletch(1:n) // '.xyz') ! 961: ! 962: Fri Dec 28 17:08:30 EST 1990: ! 963: Fix bug under -p with formats and internal I/O "units" in COMMON, ! 964: as in ! 965: COMMON /FIGLEA/F ! 966: CHARACTER*20 F ! 967: F = '(A)' ! 968: WRITE (*,FMT=F) 'Hello, world!' ! 969: END ! 970: ! 971: Tue Jan 15 12:00:24 EST 1991: ! 972: Fix bug when two equivalence groups are merged, the second with ! 973: nonzero offset, and the result is then merged into a common block. ! 974: Example: ! 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 ! 981: error message if, e.g., NML= specifies a format.) ! 982: libi77: minor adjustment to allow internal READs from character ! 983: string constants in read-only memory. ! 984: ! 985: Fri Jan 18 22:56:15 EST 1991: ! 986: Add comment to README about needing to comment out the typedef of ! 987: size_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: ! 990: Wed 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 ! 993: digits. For now this change will not be reflected in f2c.ps . ! 994: ! 995: Tue Jan 29 16:23:45 EST 1991: ! 996: Arrange for character-valued statement functions to give results of ! 997: the right length (that of the statement function's name). ! 998: ! 999: Wed Jan 30 07:05:32 EST 1991: ! 1000: More tweaks for character-valued statement functions: an error ! 1001: check and an adjustment so a right-hand side of nonconstant length ! 1002: (e.g., a substring) is handled right. ! 1003: ! 1004: Wed Jan 30 09:49:36 EST 1991: ! 1005: Fix p1_head to avoid printing (char *)0 with %s. ! 1006: ! 1007: Thu Jan 31 13:53:44 EST 1991: ! 1008: Add a test after the cleanup call generated for I/O statements with ! 1009: ERR= or END= clauses to catch the unlikely event that the cleanup ! 1010: routine encounters an error. ! 1011: ! 1012: Mon Feb 4 08:00:58 EST 1991: ! 1013: Minor cleanup: omit unneeded jumps and labels from code generated for ! 1014: some NAMELIST READs and WRITEs with IOSTAT=, ERR=, and/or END=. ! 1015: ! 1016: Tue Feb 5 01:39:36 EST 1991: ! 1017: Change Mktemp to mktmp (for the benefit of systems so brain-damaged ! 1018: that they do not distinguish case in external names -- and that for ! 1019: some reason want to load mktemp). Try to get xsum0.out right this ! 1020: time (it somehow didn't get updated on 4 Feb. 1991). ! 1021: Add note to libi77/README about adjusting the interpretation of ! 1022: RECL= specifiers in OPENs for direct unformatted I/O. ! 1023: ! 1024: Thu Feb 7 17:24:42 EST 1991: ! 1025: New option -r casts values of REAL functions, including intrinsics, ! 1026: to 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 -- ! 1031: and sometimes is affected by compiler options.] For now, the man page ! 1032: at the end of f2c.ps is the only part of f2c.ps that reflects this new ! 1033: option. ! 1034: ! 1035: Fri Feb 8 18:12:51 EST 1991: ! 1036: Cast pointer differences passed as arguments to the appropriate type. ! 1037: This matters, e.g., with MSDOS compilers that yield a long pointer ! 1038: difference but have int == short. ! 1039: Disallow nonpositive dimensions. ! 1040: ! 1041: Fri 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 ! 1044: files under MS-DOS). ! 1045: Recognize READ (character expression) and WRITE (character expression) ! 1046: as formatted I/O with the format given by the character expression. ! 1047: Update year in Notice. ! 1048: ! 1049: Sat 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: ! 1053: Mon Mar 4 15:19:42 EST 1991: ! 1054: Fix bug in passing the real part of a complex argument to an intrinsic ! 1055: function. Omit unneeded parentheses in nested calls to intrinsics. ! 1056: Example: ! 1057: subroutine foo(x, y) ! 1058: complex y ! 1059: x = exp(sin(real(y))) + exp(imag(y)) ! 1060: end ! 1061: ! 1062: Fri Mar 8 15:05:42 EST 1991: ! 1063: Fix a comment in expr.c; omit safstrncpy.c (which had bugs in ! 1064: cases not used by f2c). ! 1065: ! 1066: Wed Mar 13 02:27:23 EST 1991: ! 1067: Initialize firstmemblock->next in mem_init in mem.c . [On most ! 1068: systems it was fortuituously 0, but with System V, -lmalloc could ! 1069: trip on this missed initialization.] ! 1070: ! 1071: Wed Mar 13 11:47:42 EST 1991: ! 1072: Fix a reference to freed memory. ! 1073: ! 1074: Wed 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: ! 1082: Fri 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 ! 1086: multiple entry points to have extraneous declarations of ret_val. ! 1087: ! 1088: Fri Apr 5 12:44:02 EST 1991 ! 1089: Try again to omit extraneous ret_val declarations -- this morning's ! 1090: fix was sometimes wrong. ! 1091: ! 1092: Mon Apr 8 13:47:06 EDT 1991: ! 1093: Arrange for s_rnge to have the right prototype under -A -C . ! 1094: ! 1095: Wed Apr 17 13:36:03 EDT 1991: ! 1096: New fatal error message for apparent invocation of a recursive ! 1097: statement function. ! 1098: ! 1099: Thu Apr 25 15:13:37 EDT 1991: ! 1100: F2c and libi77 adjusted so NAMELIST works with -i2. (I forgot ! 1101: about -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: ! 1105: Fri Apr 26 02:54:41 EDT 1991: ! 1106: Libi77: fix some bugs in NAMELIST reading of multi-dimensional arrays ! 1107: (file rsne.c). ! 1108: ! 1109: Thu May 9 02:13:51 EDT 1991: ! 1110: Omit a trailing space in expr.c (could cause a false xsum value if ! 1111: a mailer drops the trailing blank). ! 1112: ! 1113: Thu 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, ! 1116: turn /* into /+ (as well as */ into +/). ! 1117: ! 1118: Sat May 25 11:44:25 EDT 1991: ! 1119: libf77: s_rnge: declare line long int rather than int. ! 1120: ! 1121: Fri May 31 07:51:50 EDT 1991: ! 1122: libf77: system_: officially return status. ! 1123: ! 1124: Mon Jun 17 16:52:53 EDT 1991: ! 1125: Minor tweaks: omit unnecessary declaration of strcmp (that caused ! 1126: trouble on a system where strcmp was a macro) from misc.c; add ! 1127: SHELL = /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 ! 1130: declarations appearing after DATA. ! 1131: ! 1132: Mon 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: ! 1138: Mon 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' ! 1143: as an integer initialized (in a DATA statement) with 'abc', but ! 1144: other matters have higher priority.] ! 1145: Render ! 1146: i = ichar('A') ! 1147: as ! 1148: i = 'A'; ! 1149: rather than ! 1150: i = 65; ! 1151: (which assumes ASCII). ! 1152: ! 1153: Fri Jul 12 07:41:30 EDT 1991: ! 1154: Note added to README about erroneous definitions of __STDC__ . ! 1155: ! 1156: Sat Jul 13 13:38:54 EDT 1991: ! 1157: Fix bugs in double type convesions of complex values, e.g. ! 1158: sngl(real(...)) or dble(real(...)) (where ... is complex). ! 1159: ! 1160: Mon 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" ! 1163: when a subroutine had an array of character strings as an argument. ! 1164: ! 1165: Wed 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: ! 1169: Fri Aug 30 17:19:17 EDT 1991: ! 1170: f2c.ps updated: slightly expand description of intrinsics and,or,xor, ! 1171: not; add mention of intrinsics lshift, rshift; add note about f2c ! 1172: accepting Fortran 90 inline comments (starting with !); update Cobalt ! 1173: Blue address. ! 1174: ! 1175: Tue Sep 17 07:17:33 EDT 1991: ! 1176: libI77: err.c and open.c modified to use modes "rb" and "wb" ! 1177: when (f)opening unformatted files; README updated to point out ! 1178: that it may be necessary to change these modes to "r" and "w" ! 1179: on some non-ANSI systems. ! 1180: ! 1181: Tue Oct 15 10:25:49 EDT 1991: ! 1182: Minor tweaks that make some PC compilers happier: insert some ! 1183: casts, add args to signal functions. ! 1184: Change -g to emit uncommented #line lines -- and to emit more of them; ! 1185: update 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: ! 1189: Thu Oct 17 09:22:05 EDT 1991: ! 1190: libi77: README, fio.h, sue.c, uio.c changed so the length field ! 1191: in unformatted sequential records has type long rather than int ! 1192: (unless UIOLEN_int is #defined). This is for systems where sizeof(int) ! 1193: can vary, depending on the compiler or compiler options. ! 1194: ! 1195: Thu Oct 17 13:42:59 EDT 1991: ! 1196: libi77: inquire.c: when MSDOS is defined, don't strcmp units[i].ufnm ! 1197: when it is NULL. ! 1198: ! 1199: Fri Oct 18 15:16:00 EDT 1991: ! 1200: Correct xsum0.out in "all from f2c/src" (somehow botched on 15 Oct.). ! 1201: ! 1202: Tue Oct 22 18:12:56 EDT 1991: ! 1203: Fix memory fault when a character*(*) argument is used (illegally) ! 1204: as a dummy variable in the definition of a statement function. (The ! 1205: memory fault occurred when the statement function was invoked.) ! 1206: Complain about implicit character*(*). ! 1207: ! 1208: Thu Nov 14 08:50:42 EST 1991: ! 1209: libi77: change uint to Uint in fmt.h, rdfmt.c, wrtfmt.c; this change ! 1210: should be invisible unless you're running a brain-damaged system. ! 1211: ! 1212: Mon 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 ! 1215: sizeof(int) != sizeof(long)). ! 1216: Add a more meaningful error message when bailing out due to an attempt ! 1217: to invoke a COMMON variable as a function. ! 1218: ! 1219: Sun Dec 1 19:29:24 EST 1991: ! 1220: libi77: uio.c: add test for read failure (seq. unformatted reads); ! 1221: adjust an error return from EOF to off end of record. ! 1222: ! 1223: Tue Dec 10 17:42:28 EST 1991: ! 1224: Add tests to prevent memory faults with bad uses of character*(*). ! 1225: ! 1226: Thu Dec 12 11:24:41 EST 1991: ! 1227: libi77: fix bug with internal list input that caused the last ! 1228: character of each record to be ignored; adjust error message in ! 1229: internal formatted input from "end-of-file" to "off end of record" ! 1230: if the format specifies more characters than the record contains. ! 1231: ! 1232: Wed Dec 18 17:48:11 EST 1991: ! 1233: Fix bug in translating nonsensical ichar invocations involving ! 1234: concatenations. ! 1235: Fix bug in passing intrinsics lle, llt, lge, lgt as arguments; ! 1236: hl_le was being passed rather than l_le, etc. ! 1237: libf77: adjust length parameters from long to ftnlen, for ! 1238: compiling with f2c_i2 defined. ! 1239: ! 1240: Sat Dec 21 15:30:57 EST 1991: ! 1241: Allow DO nnn ... to end with an END DO statement labelled nnn. ! 1242: ! 1243: Tue Dec 31 13:53:47 EST 1991: ! 1244: Fix bug in handling dimension a(n**3,2) -- pow_ii was called ! 1245: incorrectly. ! 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 ! 1253: as complex and logical. ! 1254: ! 1255: Fri Jan 17 11:54:20 EST 1992: ! 1256: Diagnose some illegal uses of main program name (rather than ! 1257: memory faulting). ! 1258: libi77: (1) In list and namelist input, treat "r* ," and "r*," ! 1259: alike (where r is a positive integer constant), and fix a bug in ! 1260: handling null values following items with repeat counts (e.g., ! 1261: 2*1,,3). (2) For namelist reading of a numeric array, allow a new ! 1262: name-value subsequence to terminate the current one (as though the ! 1263: current one ended with the right number of null values). ! 1264: (3) [lio.h, lwrite.c]: omit insignificant zeros in list and namelist ! 1265: output. (Compile with -DOld_list_output to get the old behavior.) ! 1266: ! 1267: Sat Jan 18 15:58:01 EST 1992: ! 1268: libi77: make list output consistent with F format by printing .1 ! 1269: rather than 0.1 (introduced yesterday). ! 1270: ! 1271: Wed Jan 22 08:32:43 EST 1992: ! 1272: libi77: add comment to README pointing out preconnection of ! 1273: Fortran units 5, 6, 0 to stdin, stdout, stderr (respectively). ! 1274: ! 1275: Mon Feb 3 11:57:53 EST 1992: ! 1276: libi77: fix namelist read bug that caused the character following ! 1277: a comma to be ignored. ! 1278: ! 1279: Fri Feb 28 01:04:26 EST 1992: ! 1280: libf77: fix buggy z_sqrt.c (double precision square root), which ! 1281: misbehaved for arguments in the southwest quadrant. ! 1282: ! 1283: Thu Mar 19 15:05:18 EST 1992: ! 1284: Fix bug (introduced 17 Jan 1992) in handling multiple entry points ! 1285: of differing types (with implicitly typed entries appearing after ! 1286: the 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) ! 1294: added to README. ! 1295: Abort zero divides during constant simplification. ! 1296: ! 1297: Sat Mar 21 01:27:09 EST 1992: ! 1298: Tweak ckalloc (misc.c) for systems where malloc(0) = 0; this matters ! 1299: for subroutines with multiple entry points but no arguments. ! 1300: Add "struct memblock;" to init.c (irrelevant to most compilers). ! 1301: ! 1302: Wed Mar 25 13:31:05 EST 1992: ! 1303: Fix bug with IMPLICIT INTEGER*4(...): under -i2 or -I2, the *4 was ! 1304: ignored. ! 1305: ! 1306: Tue May 5 09:53:55 EDT 1992: ! 1307: Tweaks to README; e.g., ANSI_LIbraries changed to ANSI_Libraries . ! 1308: ! 1309: Wed May 6 23:49:07 EDT 1992 ! 1310: Under -A and -C++, have subroutines return 0 (even if they have ! 1311: no * arguments). ! 1312: Adjust libi77 (rsne.c and lread.c) for systems where ungetc is ! 1313: a macro. Tweak lib[FI]77/makefile to use unique intermediate file ! 1314: names (for parallel makes). ! 1315: ! 1316: Tue May 19 09:03:05 EDT 1992: ! 1317: Adjust libI77 to make err= work with internal list and formatted I/O. ! 1318: ! 1319: Sat May 23 18:17:42 EDT 1992: ! 1320: Under -A and -C++, supply "return 0;" after the code generated for ! 1321: a STOP statement -- the C compiler doesn't know that s_stop won't ! 1322: return. ! 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: ! 1331: Sun May 24 09:45:37 EDT 1992: ! 1332: Tweak description of -f in f2c.1 and f2c.1t; update f2c.ps . ! 1333: ! 1334: Fri 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: ! 1341: Mon Jun 15 11:15:27 EDT 1992: ! 1342: Fix bug in handling namelists with names that have underscores. ! 1343: ! 1344: Sat 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 ! 1347: in the current file to give prototypes for functions declared EXTERNAL ! 1348: but not invoked. ! 1349: Fix memory fault under -d1 -P . ! 1350: Under -A and -C++, cast arguments to the right types in calling ! 1351: a 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 ! 1353: in their leading dimensions. ! 1354: Fix bug in the intrinsic cmplx function when the first argument ! 1355: involves an expression for which f2c generates temporary variables, ! 1356: e.g. cmplx(abs(real(a)),1.) . ! 1357: ! 1358: Sat Jul 18 07:36:58 EDT 1992: ! 1359: Fix buglet with -e1c (invisible on most systems) temporary file ! 1360: f2c_functions was unlinked before being closed. ! 1361: libf77: fix bugs in evaluating m**n for integer n < 0 and m an ! 1362: integer different from 1 or a real or double precision 0. ! 1363: Catch SIGTRAP (to print "Trace trap" before aborting). Programs ! 1364: that previously erroneously computed 1 for 0**-1 may now fault. ! 1365: Relevant routines: main.c pow_di.c pow_hh.c pow_ii.c pow_ri.c . ! 1366: ! 1367: Sat Jul 18 08:40:10 EDT 1992: ! 1368: libi77: allow namelist input to end with & (e.g. &end). ! 1369: ! 1370: Thu Jul 23 00:14:43 EDT 1992 ! 1371: Append two underscores rather than one to C keywords used as ! 1372: local variables to avoid conflicts with similarly named COMMON blocks. ! 1373: ! 1374: Thu Jul 23 11:20:55 EDT 1992: ! 1375: libf77, libi77 updated to assume ANSI prototypes unless KR_headers ! 1376: is #defined. ! 1377: libi77 now recognizes a Z format item as in Fortran 90; ! 1378: the implementation assumes 8-bit bytes and botches character strings ! 1379: on little-endian machines (by printing their bytes from right to ! 1380: left): expect this bug to persist; fixing it would require a ! 1381: change to the I/O calling sequences. ! 1382: ! 1383: Tue Jul 28 15:18:33 EDT 1992: ! 1384: libi77: insert missed "#ifdef KR_headers" lines around getnum ! 1385: header in rsne.c. Version not updated. ! 1386: ! 1387: NOTE: "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, ! 1389: obtain source files with a timestamp later than the time shown in your ! 1390: version.c. ! 1391: ! 1392: Fri Aug 14 08:07:09 EDT 1992: ! 1393: libi77: tweak wrt_E in wref.c to avoid signing NaNs. ! 1394: ! 1395: Sun Aug 23 19:05:22 EDT 1992: ! 1396: fc: supply : after O in getopt invocation (for -O1 -O2 -O3). ! 1397: ! 1398: Mon Aug 24 18:37:59 EDT 1992: ! 1399: Recant above tweak to fc: getopt is dumber than I thought; ! 1400: it's necessary to say -O 1 (etc.). ! 1401: libF77/README: add comments about ABORT, ERF, DERF, ERFC, DERFC, ! 1402: GETARG, GETENV, IARGC, SIGNAL, and SYSTEM. ! 1403: ! 1404: Tue 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 ! 1408: end-of-file on other files won't confuse namelist reads of external ! 1409: files). ! 1410: 3. Prepend f__ to external names that are only of internal ! 1411: interest to lib[FI]77.
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.