1 Update info on the f77 I/O library 2 6 June, 1985 3 In order of fix (not in reverse order) 4 501 Feb, 1980 6 All instances of: 7 if(!init) f_init(); 8 have been removed. f_init() is called from main.c on startup in the new 9 libF77.a . 10 1101 Feb, 1980 12 Backspace now allows non-seek files to reset the EOF flag. 13 1420 Mar, 1980 15 The way SIGINT is handled in libF77/main.c has been changed. 16 If the signal is not SIG_DFL, it is left alone as otherwise the 17 program will be killed if run in the background and the user types DEL. 18 The signal trap that used to be in the I/O lib has been removed. 19 2020 Mar, 1980 21 The ANSI fortran standard requires that I/O routines return to the caller 22 on any error condition if iostat= is specified even if no err= or end= 23 trap is specified. The implication of this is that the program must 24 be prepared to deal with ALL I/O errors if iostat= is specified. 25 If only one trap is specified, end= for example, the program must test the 26 iostat variable for positive/non-zero after the I/O call since return 27 will occur on any error. This seems awkward and I've chosen to make this 28 feature optional. I am interested in other views on this. 29 30 In the current version of the compiler (using the modified io.c), 31 iostat= is used only to return status information from 32 I/O calls but does not itself cause return on any I/O error. Only 33 the traps, err= and end=, will cause a return/branch, and only for 34 the specified trap(s). 35 36 This feature has been made a compile time option in the current version 37 of (modified) io.c It implements the standard correctly if compiled 38 with -DKOSHER or -DIOSRETURN. Otherwise it executes as currently 39 implemented. 40 4118 Apr, 1980 42 As originally implemented the '$' specification caused a NULL to be 43 output (inplace of the \n) Actually NULL's should never appear in the 44 formatted output streams. Therefore in "sfe.c" in x_putc() and pr_put() 45 add if (c) before the instances of putc(c,cf) 46 4712 May, 1980 48 Spaces (ASCII 040) do not have significance in FORMAT statements except 49 within strings. In order to accomodate old programs that may have 50 arbitrary occurances of spaces, all spaces are now ignored. Thus the 51 format ( 1 0 X , 1 2 F 1 0 . 4 / ) is accepted. 52 5312 May, 1980 54 A bug in handling partially filled "unformatted direct" records has been 55 fixed by ensuring that all records are complete when written. The bug was 56 that the last record of such a file would cause EOF if a read was attempted 57 for a full record. Existing files of this form should be "fixed" by 58 reading and rewriting the last record using the new version of libI77.a 59 6012 May, 1980 61 BACKSPACE will now open a default file (fort.N) if the specified logical 62 unit is not open. REWIND and other I/O already did this. CLOSE and 63 ENDFILE do not open a default file. 64 65?? November, 1980 66 The modified io.c no longer supported. SIF feels it should conform 67 exactly with the standard. This means that iostat= will cause return 68 in all cases, regardless of the presence or absence of err= or end=. 69 70?? February, 1981 71 Backspace will reset EOF on any unit, even if it can't "seek". 72 You still can't "rewind" non-seekable units. 73 7425 March, 1981 75 There is now a f77 I/O error list available in the lib. libU77.a routines 76 use it. All error numbers have symbollic values. 77 7818 April, 1981 79 Zero fill can be forced on output of true zero by the BZ format control. 80 8128 April, 1981 82 It is now possible to read into a hollerith field in a format string. 83 This is not encouraged! 84 858 May, 1981 86 There is a pseudo-lib to force ANSI-fortran-66 I/O to logical unit 6: 87 carriage control will be interpreted, and blanks will be '0's. 88 Include -lI66 on the command line. 89 908 May, 1981 91 The error report will show non-graphic chars as ^X a la vi. 92 9311 August, 1981 94 SFE read with a null list at EOF now takes the error branch. 95 All routines check the return value of 'nowreading/nowwriting'; this 96 should fix the bug causing infinite looping on close of a write 97 protected file on which writing had been attempted (it will take the err= 98 branch, if any) 99 1006 December, 1981 101 t_runc now looks for current pos >= EOF. This solves the bug where 102 it loops indefinitely in close if written to /dev/null. 103 10412 May, 1982 105 backspace on a lu at EOF now clears the stdio flags as well as the libI77 106 EOF flag. This fixes the problem of spurious EOF branches on terminal 107 input. 108 109 open now checks for a non-zero recl argument on sequential access files. 110 It complains and ignores the recl spec. 111 11210 January, 1983 113 Mag tape I/O routines added. See topen.3f. The reason is that Fortran-77 114 I/O requirements are very difficult (or impossible) to meet on mag tape. 115 11615 April, 1983 117 new routine, ioinit, allows specifying "open at beginning" for files, 118 carriage control on unit 6, and preset association of logical units 119 with file pathnames from the environment. 120 12128 April, 1983 122 The new kernel features of 4.2bsd have been incorporated. A number 123 of obscure bugs fixed. 124 125 Files are now opened at the BEGINNING!! 126 1274.3 BSD, Mar-June, 1985: 128 129 Appropriately named environment variables now override default file 130 names and names in open statements. See "Intro. to I/O lib." for details. 131 132 Unit numbers can vary from 0-99, number simultaneously open varies by 133 system - I/O lib. doesn't check this. No longer explicitly initialize 134 unit table to zero, it's global so C guarantees zeros; why waste space 135 in the modules? 136 137 Much of input scanning for formatted reads has been rewritten; illegal 138 data will now be caught! On list directed reads, tabs are now fully 139 equivalent to blanks; <count>* followed by blanks now skips <count> 140 items in the list as the standard requires & counts work with complex data. 141 142 Formats in format statements are compiled; those in character constants 143 and variables in I/O statements are not. 144 145 All errors call f77_abort() in libF77 for centralized error handling. 146 147 Now attempt to get to next record if doing 'err=' branch on error. 148 Standard does not require this, but it is nice not to leave the 149 system hanging in mid record. 150 151 Lot's of routines and variables made static; number of T,C, and D 152 symbols in the library went from about 230 to 130. 153 154 .c files reorganized so only get whats needed loaded; e.g. 155 you no longer get formatted read routines loaded if you only do 156 formatted writes. 157 158 the library now checks for infinite loops in formats - printing multiple 159 records after the list is exhausted. 160 161 standard error is now buffered. 162 163 error messages have been improved. 164 165July 12, 1985: 166 Moved f77_abort() and patch it here from libF77/main.c so that C programs 167 which call Fortran programs which do Fortran I/O will load properly. 168 169July 25, 1985: 170 fixed auxilliary I/O to be closer to standard: close is no-op on non-existent 171 unit or not connected unit; rewind & backspace are no-ops on non-connected 172 units; endfile opens non-connected unit. inquire returns true when asked 173 if units 0-MAXUNIT exist, false for other integers, it used to return 174 false for legal but unconnected & error for illegal #s. 175 176 Inquire now fills in all requested fields, even if file or unit doesn't 177 exist or is not connected. inquire by unit now correctly returns unit 178 number. 179 180 Added Namelist I/O - mostly like IBM, but similar to VMS. 181 182 Cosmetic change - 'sequential' and 'external' are now set only to YES and NO. 183