38d2602fc1
the function naming problem for complex double function i've recently aksed for in -committers. (The recently committed rev 1.5 of proc.c was actually also part of this update.) Should the mailing lists come to an agreement that f2c better belongs into the ports, this could be done nevertheless. For the time being, we've at least got a current version now. Thanks, Steve! Submitted by: Steve Kargl <sgk@troutmask.apl.washington.edu>
293 lines
15 KiB
C
293 lines
15 KiB
C
static char junk[] = "\n@(#) LIBI77 VERSION pjw,dmg-mods 19980907\n";
|
|
|
|
/*
|
|
2.01 $ format added
|
|
2.02 Coding bug in open.c repaired
|
|
2.03 fixed bugs in lread.c (read * with negative f-format) and lio.c
|
|
and lio.h (e-format conforming to spec)
|
|
2.04 changed open.c and err.c (fopen and freopen respectively) to
|
|
update to new c-library (append mode)
|
|
2.05 added namelist capability
|
|
2.06 allow internal list and namelist I/O
|
|
*/
|
|
|
|
/*
|
|
close.c:
|
|
allow upper-case STATUS= values
|
|
endfile.c
|
|
create fort.nnn if unit nnn not open;
|
|
else if (file length == 0) use creat() rather than copy;
|
|
use local copy() rather than forking /bin/cp;
|
|
rewind, fseek to clear buffer (for no reading past EOF)
|
|
err.c
|
|
use neither setbuf nor setvbuf; make stderr buffered
|
|
fio.h
|
|
#define _bufend
|
|
inquire.c
|
|
upper case responses;
|
|
omit byfile test from SEQUENTIAL=
|
|
answer "YES" to DIRECT= for unopened file (open to debate)
|
|
lio.c
|
|
flush stderr, stdout at end of each stmt
|
|
space before character strings in list output only at line start
|
|
lio.h
|
|
adjust LEW, LED consistent with old libI77
|
|
lread.c
|
|
use atof()
|
|
allow "nnn*," when reading complex constants
|
|
open.c
|
|
try opening for writing when open for read fails, with
|
|
special uwrt value (2) delaying creat() to first write;
|
|
set curunit so error messages don't drop core;
|
|
no file name ==> fort.nnn except for STATUS='SCRATCH'
|
|
rdfmt.c
|
|
use atof(); trust EOF == end-of-file (so don't read past
|
|
end-of-file after endfile stmt)
|
|
sfe.c
|
|
flush stderr, stdout at end of each stmt
|
|
wrtfmt.c:
|
|
use upper case
|
|
put wrt_E and wrt_F into wref.c, use sprintf()
|
|
rather than ecvt() and fcvt() [more accurate on VAX]
|
|
*/
|
|
|
|
/* 16 Oct. 1988: uwrt = 3 after write, rewind, so close won't zap the file. */
|
|
|
|
/* 10 July 1989: change _bufend to buf_end in fio.h, wsfe.c, wrtfmt.c */
|
|
|
|
/* 28 Nov. 1989: corrections for IEEE and Cray arithmetic */
|
|
/* 29 Nov. 1989: change various int return types to long for f2c */
|
|
/* 30 Nov. 1989: various types from f2c.h */
|
|
/* 6 Dec. 1989: types corrected various places */
|
|
/* 19 Dec. 1989: make iostat= work right for internal I/O */
|
|
/* 8 Jan. 1990: add rsne, wsne -- routines for handling NAMELIST */
|
|
/* 28 Jan. 1990: have NAMELIST read treat $ as &, general white
|
|
space as blank */
|
|
/* 27 Mar. 1990: change an = to == in rd_L(rdfmt.c) so formatted reads
|
|
of logical values reject letters other than fFtT;
|
|
have nowwriting reset cf */
|
|
/* 14 Aug. 1990: adjust lread.c to treat tabs as spaces in list input */
|
|
/* 17 Aug. 1990: adjust open.c to recognize blank='Z...' as well as
|
|
blank='z...' when reopening an open file */
|
|
/* 30 Aug. 1990: prevent embedded blanks in list output of complex values;
|
|
omit exponent field in list output of values of
|
|
magnitude between 10 and 1e8; prevent writing stdin
|
|
and reading stdout or stderr; don't close stdin, stdout,
|
|
or stderr when reopening units 5, 6, 0. */
|
|
/* 18 Sep. 1990: add component udev to unit and consider old == new file
|
|
iff uinode and udev values agree; use stat rather than
|
|
access to check existence of file (when STATUS='OLD')*/
|
|
/* 2 Oct. 1990: adjust rewind.c so two successive rewinds after a write
|
|
don't clobber the file. */
|
|
/* 9 Oct. 1990: add #include "fcntl.h" to endfile.c, err.c, open.c;
|
|
adjust g_char in util.c for segmented memories. */
|
|
/* 17 Oct. 1990: replace abort() and _cleanup() with calls on
|
|
sig_die(...,1) (defined in main.c). */
|
|
/* 5 Nov. 1990: changes to open.c: complain if new= is specified and the
|
|
file already exists; allow file= to be omitted in open stmts
|
|
and allow status='replace' (Fortran 90 extensions). */
|
|
/* 11 Dec. 1990: adjustments for POSIX. */
|
|
/* 15 Jan. 1991: tweak i_ungetc in rsli.c to allow reading from
|
|
strings in read-only memory. */
|
|
/* 25 Apr. 1991: adjust namelist stuff to work with f2c -i2 */
|
|
/* 26 Apr. 1991: fix some bugs with NAMELIST read of multi-dim. arrays */
|
|
/* 16 May 1991: increase LEFBL in lio.h to bypass NeXT bug */
|
|
/* 17 Oct. 1991: change type of length field in sequential unformatted
|
|
records from int to long (for systems where sizeof(int)
|
|
can vary, depending on the compiler or compiler options). */
|
|
/* 14 Nov. 1991: change uint to Uint in fmt.h, rdfmt.c, wrtfmt.c. */
|
|
/* 25 Nov. 1991: change uint to Uint in lwrite.c; change sizeof(int) to
|
|
sizeof(uioint) in fseeks in sue.c (missed on 17 Oct.). */
|
|
/* 1 Dec. 1991: uio.c: add test for read failure (seq. unformatted reads);
|
|
adjust an error return from EOF to off end of record */
|
|
/* 12 Dec. 1991: rsli.c: fix bug with internal list input that caused
|
|
the last character of each record to be ignored.
|
|
iio.c: adjust error message in internal formatted
|
|
input from "end-of-file" to "off end of record" if
|
|
the format specifies more characters than the
|
|
record contains. */
|
|
/* 17 Jan. 1992: lread.c, rsne.c: in list and namelist input,
|
|
treat "r* ," and "r*," alike (where r is a
|
|
positive integer constant), and fix a bug in
|
|
handling null values following items with repeat
|
|
counts (e.g., 2*1,,3); for namelist reading
|
|
of a numeric array, allow a new name-value subsequence
|
|
to terminate the current one (as though the current
|
|
one ended with the right number of null values).
|
|
lio.h, lwrite.c: omit insignificant zeros in
|
|
list and namelist output. To get the old
|
|
behavior, compile with -DOld_list_output . */
|
|
/* 18 Jan. 1992: make list output consistent with F format by
|
|
printing .1 rather than 0.1 (introduced yesterday). */
|
|
/* 3 Feb. 1992: rsne.c: fix namelist read bug that caused the
|
|
character following a comma to be ignored. */
|
|
/* 19 May 1992: adjust iio.c, ilnw.c, rdfmt.c and rsli.c to make err=
|
|
work with internal list and formatted I/O. */
|
|
/* 18 July 1992: adjust rsne.c to allow namelist input to stop at
|
|
an & (e.g. &end). */
|
|
/* 23 July 1992: switch to ANSI prototypes unless KR_headers is #defined ;
|
|
recognize Z format (assuming 8-bit bytes). */
|
|
/* 14 Aug. 1992: tweak wrt_E in wref.c to avoid -NaN */
|
|
/* 23 Oct. 1992: Supply missing l_eof = 0 assignment to s_rsne() in rsne.c
|
|
(so end-of-file on other files won't confuse namelist
|
|
reads of external files). Prepend f__ to external
|
|
names that are only of internal interest to lib[FI]77. */
|
|
/* 1 Feb. 1993: backspace.c: fix bug that bit when last char of 2nd
|
|
buffer == '\n'.
|
|
endfile.c: guard against tiny L_tmpnam; close and reopen
|
|
files in t_runc().
|
|
lio.h: lengthen LINTW (buffer size in lwrite.c).
|
|
err.c, open.c: more prepending of f__ (to [rw]_mode). */
|
|
/* 5 Feb. 1993: tweaks to NAMELIST: rsne.c: ? prints the namelist being
|
|
sought; namelists of the wrong name are skipped (after
|
|
an error message; xwsne.c: namelist writes have a
|
|
newline before each new variable.
|
|
open.c: ACCESS='APPEND' positions sequential files
|
|
at EOF (nonstandard extension -- that doesn't require
|
|
changing data structures). */
|
|
/* 9 Feb. 1993: Change some #ifdef MSDOS lines to #ifdef NON_UNIX_STDIO.
|
|
err.c: under NON_UNIX_STDIO, avoid close(creat(name,0666))
|
|
when the unit has another file descriptor for name. */
|
|
/* 4 March 1993: err.c, open.c: take declaration of fdopen from rawio.h;
|
|
open.c: always give f__w_mode[] 4 elements for use
|
|
in t_runc (in endfile.c -- for change of 1 Feb. 1993). */
|
|
/* 6 March 1993: uio.c: adjust off-end-of-record test for sequential
|
|
unformatted reads to respond to err= rather than end=. */
|
|
/* 12 March 1993: various tweaks for C++ */
|
|
/* 6 April 1993: adjust error returns for formatted inputs to flush
|
|
the current input line when err=label is specified.
|
|
To restore the old behavior (input left mid-line),
|
|
either adjust the #definition of errfl in fio.h or
|
|
omit the invocation of f__doend in err__fl (in err.c). */
|
|
/* 23 June 1993: iio.c: fix bug in format reversions for internal writes. */
|
|
/* 5 Aug. 1993: lread.c: fix bug in handling repetition counts for
|
|
logical data (during list or namelist input).
|
|
Change struct f__syl to struct syl (for buggy compilers). */
|
|
/* 7 Aug. 1993: lread.c: fix bug in namelist reading of incomplete
|
|
logical arrays. */
|
|
/* 9 Aug. 1993: lread.c: fix bug in namelist reading of an incomplete
|
|
array of numeric data followed by another namelist
|
|
item whose name starts with 'd', 'D', 'e', or 'E'. */
|
|
/* 8 Sept. 1993: open.c: protect #include "sys/..." with
|
|
#ifndef NON_UNIX_STDIO; Version date not changed. */
|
|
/* 10 Nov. 1993: backspace.c: add nonsense for #ifdef MSDOS */
|
|
/* 8 Dec. 1993: iio.c: adjust internal formatted reads to treat
|
|
short records as though padded with blanks
|
|
(rather than causing an "off end of record" error). */
|
|
/* 22 Feb. 1994: lread.c: check that realloc did not return NULL. */
|
|
/* 6 June 1994: Under NON_UNIX_STDIO, use binary mode for direct
|
|
formatted files (avoiding any confusion regarding \n). */
|
|
/* 5 July 1994: Fix bug (introduced 6 June 1994?) in reopening files
|
|
under NON_UNIX_STDIO. */
|
|
/* 6 July 1994: wref.c: protect with #ifdef GOOD_SPRINTF_EXPONENT an
|
|
optimization that requires exponents to have 2 digits
|
|
when 2 digits suffice.
|
|
lwrite.c wsfe.c (list and formatted external output):
|
|
omit ' ' carriage-control when compiled with
|
|
-DOMIT_BLANK_CC . Off-by-one bug fixed in character
|
|
count for list output of character strings.
|
|
Omit '.' in list-directed printing of Nan, Infinity. */
|
|
/* 12 July 1994: wrtfmt.c: under G11.4, write 0. as " .0000 " rather
|
|
than " .0000E+00". */
|
|
/* 3 Aug. 1994: lwrite.c: do not insert a newline when appending an
|
|
oversize item to an empty line. */
|
|
/* 12 Aug. 1994: rsli.c rsne.c: fix glitch (reset nml_read) that kept
|
|
ERR= (in list- or format-directed input) from working
|
|
after a NAMELIST READ. */
|
|
/* 7 Sept. 1994: typesize.c: adjust to allow types LOGICAL*1, LOGICAL*2,
|
|
INTEGER*1, and (under -DAllow_TYQUAD) INTEGER*8
|
|
in NAMELISTs. */
|
|
/* 6 Oct. 1994: util.c: omit f__mvgbt, as it is never used. */
|
|
/* 2 Nov. 1994: add #ifdef ALWAYS_FLUSH logic. */
|
|
/* 26 Jan. 1995: wref.c: fix glitch in printing the exponent of 0 when
|
|
GOOD_SPRINTF_EXPONENT is not #defined. */
|
|
/* 24 Feb. 1995: iio.c: z_getc: insert (unsigned char *) to allow
|
|
internal reading of characters with high-bit set
|
|
(on machines that sign-extend characters). */
|
|
/* 14 March 1995:lread.c and rsfe.c: adjust s_rsle and s_rsfe to
|
|
check for end-of-file (to prevent infinite loops
|
|
with empty read statements). */
|
|
/* 26 May 1995: iio.c: z_wnew: fix bug in handling T format items
|
|
in internal writes whose last item is written to
|
|
an earlier position than some previous item. */
|
|
/* 29 Aug. 1995: backspace.c: adjust MSDOS logic. */
|
|
/* 6 Sept. 1995: Adjust namelist input to treat a subscripted name
|
|
whose subscripts do not involve colons similarly
|
|
to the name without a subscript: accept several
|
|
values, stored in successive elements starting at
|
|
the indicated subscript. Adjust namelist output
|
|
to quote character strings (avoiding confusion with
|
|
arrays of character strings). Adjust f_init calls
|
|
for people who don't use libF77's main(); now open and
|
|
namelist read statements invoke f_init if needed. */
|
|
/* 7 Sept. 1995: Fix some bugs with -DAllow_TYQUAD (for integer*8).
|
|
Add -DNo_Namelist_Comments lines to rsne.c. */
|
|
/* 5 Oct. 1995: wrtfmt.c: fix bug with t editing (f__cursor was not
|
|
always zeroed in mv_cur). */
|
|
/* 11 Oct. 1995: move defs of f__hiwater, f__svic, f__icptr from wrtfmt.c
|
|
to err.c */
|
|
/* 15 Mar. 1996: lread.c, rsfe.c: honor END= in READ stmt with empty iolist */
|
|
|
|
/* 13 May 1996: add ftell_.c and fseek_.c */
|
|
/* 9 June 1996: Adjust rsli.c and lread.c so internal list input with
|
|
too few items in the input string will honor end= . */
|
|
/* 12 Sept. 1995:fmtlib.c: fix glitch in printing the most negative integer. */
|
|
/* 25 Sept. 1995:fmt.h: for formatted writes of negative integer*1 values,
|
|
make ic signed on ANSI systems. If formatted writes of
|
|
integer*1 values trouble you when using a K&R C compiler,
|
|
switch to an ANSI compiler or use a compiler flag that
|
|
makes characters signed. */
|
|
/* 9 Dec. 1996: d[fu]e.c, err.c: complain about non-positive rec=
|
|
in direct read and write statements.
|
|
ftell_.c: change param "unit" to "Unit" for -DKR_headers. */
|
|
/* 26 Feb. 1997: ftell_.c: on systems that define SEEK_SET, etc., use
|
|
SEEK_SET, SEEK_CUR, SEEK_END for *whence = 0, 1, 2. */
|
|
/* 7 Apr. 1997: fmt.c: adjust to complain at missing numbers in formats
|
|
(but still treat missing ".nnn" as ".0"). */
|
|
/* 11 Apr. 1997: err.c: attempt to make stderr line buffered rather
|
|
than fully buffered. (Buffering is needed for format
|
|
items T and TR.) */
|
|
/* 27 May 1997: ftell_.c: fix typo (that caused the third argument to be
|
|
treated as 2 on some systems). */
|
|
/* 5 Aug. 1997: lread.c: adjust to accord with a change to the Fortran 8X
|
|
draft (in 1990 or 1991) that rescinded permission to elide
|
|
quote marks in namelist input of character data; compile
|
|
with -DF8X_NML_ELIDE_QUOTES to get the old behavior.
|
|
wrtfmt.o: wrt_G: tweak to print the right number of 0's
|
|
for zero under G format. */
|
|
/* 16 Aug. 1997: iio.c: fix bug in internal writes to an array of character
|
|
strings that sometimes caused one more array element than
|
|
required by the format to be blank-filled. Example:
|
|
format(1x). */
|
|
/* 16 Sept. 1997:fmt.[ch] rdfmt.c wrtfmt.c: tweak struct syl for machines
|
|
with 64-bit pointers and 32-bit ints that did not 64-bit
|
|
align struct syl (e.g., Linux on the DEC Alpha). */
|
|
/* 19 Jan. 1998: backspace.c: for b->ufmt==0, change sizeof(int) to
|
|
sizeof(uiolen). On machines where this would make a
|
|
difference, it is best for portability to compile libI77 with
|
|
-DUIOLEN_int (which will render the change invisible). */
|
|
/* 4 March 1998: open.c: fix glitch in comparing file names under
|
|
-DNON_UNIX_STDIO */
|
|
/* 17 March 1998: endfile.c, open.c: acquire temporary files from tmpfile(),
|
|
unless compiled with -DNON_ANSI_STDIO, which uses mktemp().
|
|
New buffering scheme independent of NON_UNIX_STDIO for
|
|
handling T format items. Now -DNON_UNIX_STDIO is no
|
|
longer be necessary for Linux, and libf2c no longer
|
|
causes stderr to be buffered -- the former setbuf or
|
|
setvbuf call for stderr was to make T format items work.
|
|
open.c: use the Posix access() function to check existence
|
|
or nonexistence of files, except under -DNON_POSIX_STDIO,
|
|
where trial fopen calls are used. */
|
|
/* 5 April 1998: wsfe.c: make $ format item work: this was lost in the
|
|
changes of 17 March 1998. */
|
|
/* 28 May 1998: backspace.c dfe.c due.c iio.c lread.c rsfe.c sue.c wsfe.c:
|
|
set f__curunit sooner so various error messages will
|
|
correctly identify the I/O unit involved. */
|
|
/* 17 June 1998: lread.c: unless compiled with
|
|
ALLOW_FLOAT_IN_INTEGER_LIST_INPUT #defined, treat
|
|
floating-point numbers (containing either a decimal point
|
|
or an exponent field) as errors when they appear as list
|
|
input for integer data. */
|
|
/* 7 Sept. 1998: move e_wdfe from sfe.c to dfe.c, where it was originally.
|
|
Why did it ever move to sfe.c? */
|