Compare commits
2 Commits
main
...
migrate_fo
Author | SHA1 | Date |
---|---|---|
|
152328936e | 3 years ago |
|
7b104e9ef9 | 3 years ago |
@ -0,0 +1,13 @@
|
||||
all: conec2d conec3d
|
||||
libf2c.a:
|
||||
cd libf2c && make
|
||||
connec2d.o:
|
||||
gcc ./src/connec2d.c -c -o connec2d.o
|
||||
connec3d.o:
|
||||
gcc ./src/connec3d.c -c -o connec3d.o
|
||||
conec2d: connec2d.o libf2c.a
|
||||
gcc connec2d.o ./libf2c/libf2c.a -lm -o conec2d
|
||||
conec3d: connec3d.o libf2c.a
|
||||
gcc connec3d.o ./libf2c/libf2c.a -lm -o conec3d
|
||||
clean:
|
||||
rm -f conec2d conec3d
|
Binary file not shown.
Binary file not shown.
@ -0,0 +1,23 @@
|
||||
/****************************************************************
|
||||
Copyright 1990 - 1997 by AT&T, Lucent Technologies and Bellcore.
|
||||
|
||||
Permission to use, copy, modify, and distribute this software
|
||||
and its documentation for any purpose and without fee is hereby
|
||||
granted, provided that the above copyright notice appear in all
|
||||
copies and that both that the copyright notice and this
|
||||
permission notice and warranty disclaimer appear in supporting
|
||||
documentation, and that the names of AT&T, Bell Laboratories,
|
||||
Lucent or Bellcore or any of their entities not be used in
|
||||
advertising or publicity pertaining to distribution of the
|
||||
software without specific, written prior permission.
|
||||
|
||||
AT&T, Lucent and Bellcore disclaim all warranties with regard to
|
||||
this software, including all implied warranties of
|
||||
merchantability and fitness. In no event shall AT&T, Lucent or
|
||||
Bellcore be liable for any special, indirect or consequential
|
||||
damages or any damages whatsoever resulting from loss of use,
|
||||
data or profits, whether in an action of contract, negligence or
|
||||
other tortious action, arising out of or in connection with the
|
||||
use or performance of this software.
|
||||
****************************************************************/
|
||||
|
@ -0,0 +1,374 @@
|
||||
As shipped, "makefile" is a copy of "makefile.u", a Unix makefile.
|
||||
Variants for other systems have names of the form makefile.* and
|
||||
have initial comments saying how to invoke them. You may wish to
|
||||
copy one of the other makefile.* files to makefile.
|
||||
|
||||
If you use a C++ compiler, first say
|
||||
|
||||
make hadd
|
||||
|
||||
to create a suitable f2c.h from f2c.h0 and f2ch.add. Otherwise,
|
||||
|
||||
make f2c.h
|
||||
|
||||
will just copy f2c.h0 to f2c.h .
|
||||
|
||||
If your compiler does not recognize ANSI C headers,
|
||||
compile with KR_headers defined: either add -DKR_headers
|
||||
to the definition of CFLAGS in the makefile, or insert
|
||||
|
||||
#define KR_headers
|
||||
|
||||
at the top of f2c.h .
|
||||
|
||||
If your system lacks onexit() and you are not using an ANSI C
|
||||
compiler, then you should compile main.c with NO_ONEXIT defined.
|
||||
See the comments about onexit in makefile.u.
|
||||
|
||||
If your system has a double drem() function such that drem(a,b)
|
||||
is the IEEE remainder function (with double a, b), then you may
|
||||
wish to compile r_mod.c and d_mod.c with IEEE_drem defined.
|
||||
|
||||
To check for transmission errors, issue the command
|
||||
make check
|
||||
or
|
||||
make -f makefile.u check
|
||||
|
||||
This assumes you have the xsum program whose source, xsum.c,
|
||||
is distributed as part of "all from f2c/src", and that it
|
||||
is installed somewhere in your search path. If you do not
|
||||
have xsum, you can obtain xsum.c by sending the following E-mail
|
||||
message to netlib@netlib.org
|
||||
send xsum.c from f2c/src
|
||||
|
||||
For convenience, the f2c.h0 in this directory is a copy of netlib's
|
||||
"f2c.h from f2c". It is best to install f2c.h in a standard place,
|
||||
so "include f2c.h" will work in any directory without further ado.
|
||||
Beware that the makefiles do not cause recompilation when f2c.h is
|
||||
changed.
|
||||
|
||||
On machines, such as those using a DEC Alpha processor, on which
|
||||
sizeof(short) == 2, sizeof(int) == sizeof(float) == 4, and
|
||||
sizeof(long) == sizeof(double) == 8, it suffices to modify f2c.h by
|
||||
removing the first occurrence of "long " on each line containing
|
||||
"long ". On Unix systems, you can do this by issuing the commands
|
||||
mv f2c.h f2c.h0
|
||||
sed 's/long int /int /' f2c.h0 >f2c.h
|
||||
On such machines, one can enable INTEGER*8 by uncommenting the typedefs
|
||||
of longint and ulongint in f2c.h and adjusting them, so they read
|
||||
typedef long longint;
|
||||
typedef unsigned long ulongint;
|
||||
and by compiling libf2c with -DAllow_TYQUAD, as discussed below.
|
||||
|
||||
|
||||
Most of the routines in libf2c are support routines for Fortran
|
||||
intrinsic functions or for operations that f2c chooses not
|
||||
to do "in line". There are a few exceptions, summarized below --
|
||||
functions and subroutines that appear to your program as ordinary
|
||||
external Fortran routines.
|
||||
|
||||
If you use the REAL valued functions listed below (ERF, ERFC,
|
||||
DTIME, and ETIME) with "f2c -R", then you need to compile the
|
||||
corresponding source files with -DREAL=float. To do this, it is
|
||||
perhaps simplest to add "-DREAL=float" to CFLAGS in the makefile.
|
||||
|
||||
1. CALL ABORT prints a message and causes a core dump.
|
||||
|
||||
2. ERF(r) and DERF(d) and the REAL and DOUBLE PRECISION
|
||||
error functions (with x REAL and d DOUBLE PRECISION);
|
||||
DERF must be declared DOUBLE PRECISION in your program.
|
||||
Both ERF and DERF assume your C library provides the
|
||||
underlying erf() function (which not all systems do).
|
||||
|
||||
3. ERFC(r) and DERFC(d) are the complementary error functions:
|
||||
ERFC(r) = 1 - ERF(r) and DERFC(d) = 1.d0 - DERFC(d)
|
||||
(except that their results may be more accurate than
|
||||
explicitly evaluating the above formulae would give).
|
||||
Again, ERFC and r are REAL, and DERFC and d are DOUBLE
|
||||
PRECISION (and must be declared as such in your program),
|
||||
and ERFC and DERFC rely on your system's erfc().
|
||||
|
||||
4. CALL GETARG(n,s), where n is an INTEGER and s is a CHARACTER
|
||||
variable, sets s to the n-th command-line argument (or to
|
||||
all blanks if there are fewer than n command-line arguments);
|
||||
CALL GETARG(0,s) sets s to the name of the program (on systems
|
||||
that support this feature). See IARGC below.
|
||||
|
||||
5. CALL GETENV(name, value), where name and value are of type
|
||||
CHARACTER, sets value to the environment value, $name, of
|
||||
name (or to blanks if $name has not been set).
|
||||
|
||||
6. NARGS = IARGC() sets NARGS to the number of command-line
|
||||
arguments (an INTEGER value).
|
||||
|
||||
7. CALL SIGNAL(n,func), where n is an INTEGER and func is an
|
||||
EXTERNAL procedure, arranges for func to be invoked when n
|
||||
occurs (on systems where this makes sense).
|
||||
|
||||
If your compiler complains about the signal calls in main.c, s_paus.c,
|
||||
and signal_.c, you may need to adjust signal1.h suitably. See the
|
||||
comments in signal1.h.
|
||||
|
||||
8. ETIME(ARR) and DTIME(ARR) are REAL functions that return
|
||||
execution times. ARR is declared REAL ARR(2). The elapsed
|
||||
user and system CPU times are stored in ARR(1) and ARR(2),
|
||||
respectively. ETIME returns the total elapsed CPU time,
|
||||
i.e., ARR(1) + ARR(2). DTIME returns total elapsed CPU
|
||||
time since the previous call on DTIME.
|
||||
|
||||
9. CALL SYSTEM(cmd), where cmd is of type CHARACTER, passes
|
||||
cmd to the system's command processor (on systems where
|
||||
this can be done).
|
||||
|
||||
10. CALL FLUSH flushes all buffers.
|
||||
|
||||
11. FTELL(i) is an INTEGER function that returns the current
|
||||
offset of Fortran unit i (or -1 if unit i is not open).
|
||||
|
||||
12. CALL FSEEK(i, offset, whence, *errlab) attemps to move
|
||||
Fortran unit i to the specified offset: absolute offset
|
||||
if whence = 0; relative to the current offset if whence = 1;
|
||||
relative to the end of the file if whence = 2. It branches
|
||||
to label errlab if unit i is not open or if the call
|
||||
otherwise fails.
|
||||
|
||||
The routines whose objects are makefile.u's $(I77) are for I/O.
|
||||
The following comments apply to them.
|
||||
|
||||
If your system lacks /usr/include/local.h ,
|
||||
then you should create an appropriate local.h in
|
||||
this directory. An appropriate local.h may simply
|
||||
be empty, or it may #define VAX or #define CRAY
|
||||
(or whatever else you must do to make fp.h work right).
|
||||
Alternatively, edit fp.h to suite your machine.
|
||||
|
||||
If your system lacks /usr/include/fcntl.h , then you
|
||||
should simply create an empty fcntl.h in this directory.
|
||||
If your compiler then complains about creat and open not
|
||||
having a prototype, compile with OPEN_DECL defined.
|
||||
On many systems, open and creat are declared in fcntl.h .
|
||||
|
||||
If your system's sprintf does not work the way ANSI C
|
||||
specifies -- specifically, if it does not return the
|
||||
number of characters transmitted -- then insert the line
|
||||
|
||||
#define USE_STRLEN
|
||||
|
||||
at the end of fmt.h . This is necessary with
|
||||
at least some versions of Sun software.
|
||||
In particular, if you get a warning about an improper
|
||||
pointer/integer combination in compiling wref.c, then
|
||||
you need to compile with -DUSE_STRLEN .
|
||||
|
||||
If your system's fopen does not like the ANSI binary
|
||||
reading and writing modes "rb" and "wb", then you should
|
||||
compile open.c with NON_ANSI_RW_MODES #defined.
|
||||
|
||||
If you get error messages about references to cf->_ptr
|
||||
and cf->_base when compiling wrtfmt.c and wsfe.c or to
|
||||
stderr->_flag when compiling err.c, then insert the line
|
||||
|
||||
#define NON_UNIX_STDIO
|
||||
|
||||
at the beginning of fio.h, and recompile everything (or
|
||||
at least those modules that contain NON_UNIX_STDIO).
|
||||
|
||||
Unformatted sequential records consist of a length of record
|
||||
contents, the record contents themselves, and the length of
|
||||
record contents again (for backspace). Prior to 17 Oct. 1991,
|
||||
the length was of type int; now it is of type long, but you
|
||||
can change it back to int by inserting
|
||||
|
||||
#define UIOLEN_int
|
||||
|
||||
at the beginning of fio.h. This affects only sue.c and uio.c .
|
||||
|
||||
If you have a really ancient K&R C compiler that does not understand
|
||||
void, add -Dvoid=int to the definition of CFLAGS in the makefile.
|
||||
|
||||
On VAX, Cray, or Research Tenth-Edition Unix systems, you may
|
||||
need to add -DVAX, -DCRAY, or -DV10 (respectively) to CFLAGS
|
||||
to make fp.h work correctly. Alternatively, you may need to
|
||||
edit fp.h to suit your machine.
|
||||
|
||||
If your compiler complains about the signal calls in main.c, s_paus.c,
|
||||
and signal_.c, you may need to adjust signal1.h suitably. See the
|
||||
comments in signal1.h.
|
||||
|
||||
You may need to supply the following non-ANSI routines:
|
||||
|
||||
fstat(int fileds, struct stat *buf) is similar
|
||||
to stat(char *name, struct stat *buf), except that
|
||||
the first argument, fileds, is the file descriptor
|
||||
returned by open rather than the name of the file.
|
||||
fstat is used in the system-dependent routine
|
||||
canseek (in the libf2c source file err.c), which
|
||||
is supposed to return 1 if it's possible to issue
|
||||
seeks on the file in question, 0 if it's not; you may
|
||||
need to suitably modify err.c . On non-UNIX systems,
|
||||
you can avoid references to fstat and stat by compiling
|
||||
with NON_UNIX_STDIO defined; in that case, you may need
|
||||
to supply access(char *Name,0), which is supposed to
|
||||
return 0 if file Name exists, nonzero otherwise.
|
||||
|
||||
char * mktemp(char *buf) is supposed to replace the
|
||||
6 trailing X's in buf with a unique number and then
|
||||
return buf. The idea is to get a unique name for
|
||||
a temporary file.
|
||||
|
||||
On non-UNIX systems, you may need to change a few other,
|
||||
e.g.: the form of name computed by mktemp() in endfile.c and
|
||||
open.c; the use of the open(), close(), and creat() system
|
||||
calls in endfile.c, err.c, open.c; and the modes in calls on
|
||||
fopen() and fdopen() (and perhaps the use of fdopen() itself
|
||||
-- it's supposed to return a FILE* corresponding to a given
|
||||
an integer file descriptor) in err.c and open.c (component ufmt
|
||||
of struct unit is 1 for formatted I/O -- text mode on some systems
|
||||
-- and 0 for unformatted I/O -- binary mode on some systems).
|
||||
Compiling with -DNON_UNIX_STDIO omits all references to creat()
|
||||
and almost all references to open() and close(), the exception
|
||||
being in the function f__isdev() (in open.c).
|
||||
|
||||
If you wish to use translated Fortran that has funny notions
|
||||
of record length for direct unformatted I/O (i.e., that assumes
|
||||
RECL= values in OPEN statements are not bytes but rather counts
|
||||
of some other units -- e.g., 4-character words for VMS), then you
|
||||
should insert an appropriate #define for url_Adjust at the
|
||||
beginning of open.c . For VMS Fortran, for example,
|
||||
#define url_Adjust(x) x *= 4
|
||||
would suffice.
|
||||
|
||||
By default, Fortran I/O units 5, 6, and 0 are pre-connected to
|
||||
stdin, stdout, and stderr, respectively. You can change this
|
||||
behavior by changing f_init() in err.c to suit your needs.
|
||||
Note that f2c assumes READ(*... means READ(5... and WRITE(*...
|
||||
means WRITE(6... . Moreover, an OPEN(n,... statement that does
|
||||
not specify a file name (and does not specify STATUS='SCRATCH')
|
||||
assumes FILE='fort.n' . You can change this by editing open.c
|
||||
and endfile.c suitably.
|
||||
|
||||
Unless you adjust the "#define MXUNIT" line in fio.h, Fortran units
|
||||
0, 1, ..., 99 are available, i.e., the highest allowed unit number
|
||||
is MXUNIT - 1.
|
||||
|
||||
Lines protected from compilation by #ifdef Allow_TYQUAD
|
||||
are for a possible extension to 64-bit integers in which
|
||||
integer = int = 32 bits and longint = long = 64 bits.
|
||||
|
||||
The makefile does not attempt to compile pow_qq.c, qbitbits.c,
|
||||
and qbitshft.c, which are meant for use with INTEGER*8. To use
|
||||
INTEGER*8, you must modify f2c.h to declare longint and ulongint
|
||||
appropriately; then add $(QINT) to the end of the makefile's
|
||||
dependency list for libf2c.a (if makefile is a copy of makefile.u;
|
||||
for the PC makefiles, add pow_qq.obj qbitbits.obj qbitshft.obj
|
||||
to the library's dependency list and adjust libf2c.lbc or libf2c.sy
|
||||
accordingly). Also add -DAllow_TYQUAD to the makefile's CFLAGS
|
||||
assignment. To make longint and ulongint available, it may suffice
|
||||
to add -DINTEGER_STAR_8 to the CFLAGS assignment.
|
||||
|
||||
Following Fortran 90, s_cat.c and s_copy.c allow the target of a
|
||||
(character string) assignment to be appear on its right-hand, at
|
||||
the cost of some extra overhead for all run-time concatenations.
|
||||
If you prefer the extra efficiency that comes with the Fortran 77
|
||||
requirement that the left-hand side of a character assignment not
|
||||
be involved in the right-hand side, compile s_cat.c and s_copy.c
|
||||
with -DNO_OVERWRITE .
|
||||
|
||||
Extensions (Feb. 1993) to NAMELIST processing:
|
||||
1. Reading a ? instead of &name (the start of a namelist) causes
|
||||
the namelist being sought to be written to stdout (unit 6);
|
||||
to omit this feature, compile rsne.c with -DNo_Namelist_Questions.
|
||||
2. Reading the wrong namelist name now leads to an error message
|
||||
and an attempt to skip input until the right namelist name is found;
|
||||
to omit this feature, compile rsne.c with -DNo_Bad_Namelist_Skip.
|
||||
3. Namelist writes now insert newlines before each variable; to omit
|
||||
this feature, compile xwsne.c with -DNo_Extra_Namelist_Newlines.
|
||||
4. (Sept. 1995) When looking for the &name that starts namelist
|
||||
input, lines whose first non-blank character is something other
|
||||
than &, $, or ? are treated as comment lines and ignored, unless
|
||||
rsne.c is compiled with -DNo_Namelist_Comments.
|
||||
|
||||
Nonstandard extension (Feb. 1993) to open: for sequential files,
|
||||
ACCESS='APPEND' (or access='anything else starting with "A" or "a"')
|
||||
causes the file to be positioned at end-of-file, so a write will
|
||||
append to the file.
|
||||
|
||||
Some buggy Fortran programs use unformatted direct I/O to write
|
||||
an incomplete record and later read more from that record than
|
||||
they have written. For records other than the last, the unwritten
|
||||
portion of the record reads as binary zeros. The last record is
|
||||
a special case: attempting to read more from it than was written
|
||||
gives end-of-file -- which may help one find a bug. Some other
|
||||
Fortran I/O libraries treat the last record no differently than
|
||||
others and thus give no help in finding the bug of reading more
|
||||
than was written. If you wish to have this behavior, compile
|
||||
uio.c with -DPad_UDread .
|
||||
|
||||
If you want to be able to catch write failures (e.g., due to a
|
||||
disk being full) with an ERR= specifier, compile dfe.c, due.c,
|
||||
sfe.c, sue.c, and wsle.c with -DALWAYS_FLUSH. This will lead to
|
||||
slower execution and more I/O, but should make ERR= work as
|
||||
expected, provided fflush returns an error return when its
|
||||
physical write fails.
|
||||
|
||||
Carriage controls are meant to be interpreted by the UNIX col
|
||||
program (or a similar program). Sometimes it's convenient to use
|
||||
only ' ' as the carriage control character (normal single spacing).
|
||||
If you compile lwrite.c and wsfe.c with -DOMIT_BLANK_CC, formatted
|
||||
external output lines will have an initial ' ' quietly omitted,
|
||||
making use of the col program unnecessary with output that only
|
||||
has ' ' for carriage control.
|
||||
|
||||
The Fortran 77 Standard leaves it up to the implementation whether
|
||||
formatted writes of floating-point numbers of absolute value < 1 have
|
||||
a zero before the decimal point. By default, libI77 omits such
|
||||
superfluous zeros, but you can cause them to appear by compiling
|
||||
lwrite.c, wref.c, and wrtfmt.c with -DWANT_LEAD_0 .
|
||||
|
||||
If your (Unix) system lacks a ranlib command, you don't need it.
|
||||
Either comment out the makefile's ranlib invocation, or install
|
||||
a harmless "ranlib" command somewhere in your PATH, such as the
|
||||
one-line shell script
|
||||
|
||||
exit 0
|
||||
|
||||
or (on some systems)
|
||||
|
||||
exec /usr/bin/ar lts $1 >/dev/null
|
||||
|
||||
By default, the routines that implement complex and double complex
|
||||
division, c_div.c and z_div.c, call sig_die to print an error message
|
||||
and exit if they see a divisor of 0, as this is sometimes helpful for
|
||||
debugging. On systems with IEEE arithmetic, compiling c_div.c and
|
||||
z_div.c with -DIEEE_COMPLEX_DIVIDE causes them instead to set both
|
||||
the real and imaginary parts of the result to +INFINITY if the
|
||||
numerator is nonzero, or to NaN if it vanishes.
|
||||
|
||||
Nowadays most Unix and Linux systems have function
|
||||
int ftruncate(int fildes, off_t len);
|
||||
defined in system header file unistd.h that adjusts the length of file
|
||||
descriptor fildes to length len. Unless endfile.c is compiled with
|
||||
-DNO_TRUNCATE, endfile.c #includes "unistd.h" and calls ftruncate() if
|
||||
necessary to shorten files. If your system lacks ftruncate(), compile
|
||||
endfile.c with -DNO_TRUNCATE to make endfile.c use the older and more
|
||||
portable scheme of shortening a file by copying to a temporary file
|
||||
and back again.
|
||||
|
||||
The initializations for "f2c -trapuv" are done by _uninit_f2c(),
|
||||
whose source is uninit.c, introduced June 2001. On IEEE-arithmetic
|
||||
systems, _uninit_f2c should initialize floating-point variables to
|
||||
signaling NaNs and, at its first invocation, should enable the
|
||||
invalid operation exception. Alas, the rules for distinguishing
|
||||
signaling from quiet NaNs were not specified in the IEEE P754 standard,
|
||||
nor were the precise means of enabling and disabling IEEE-arithmetic
|
||||
exceptions, and these details are thus system dependent. There are
|
||||
#ifdef's in uninit.c that specify them for some popular systems. If
|
||||
yours is not one of these systems, it may take some detective work to
|
||||
discover the appropriate details for your system. Sometimes it helps
|
||||
to look in the standard include directories for header files with
|
||||
relevant-sounding names, such as ieeefp.h, nan.h, or trap.h, and
|
||||
it may be simplest to run experiments to see what distinguishes a
|
||||
signaling from a quiet NaN. (If x is initialized to a signaling
|
||||
NaN and the invalid operation exception is masked off, as it should
|
||||
be by default on IEEE-arithmetic systems, then computing, say,
|
||||
y = x + 1 will yield a quiet NaN.)
|
@ -0,0 +1,22 @@
|
||||
#include "stdio.h"
|
||||
#include "f2c.h"
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#ifdef KR_headers
|
||||
extern VOID sig_die();
|
||||
|
||||
int abort_()
|
||||
#else
|
||||
extern void sig_die(const char*,int);
|
||||
|
||||
int abort_(void)
|
||||
#endif
|
||||
{
|
||||
sig_die("Fortran abort routine called", 1);
|
||||
return 0; /* not reached */
|
||||
}
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
Binary file not shown.
@ -0,0 +1,8 @@
|
||||
#define IEEE_8087
|
||||
#define Arith_Kind_ASL 1
|
||||
#define Long int
|
||||
#define Intcast (int)(long)
|
||||
#define Double_Align
|
||||
#define X64_bit_pointers
|
||||
#define QNaN0 0x0
|
||||
#define QNaN1 0xfff80000
|
@ -0,0 +1,267 @@
|
||||
/****************************************************************
|
||||
Copyright (C) 1997, 1998, 2000 Lucent Technologies
|
||||
All Rights Reserved
|
||||
|
||||
Permission to use, copy, modify, and distribute this software and
|
||||
its documentation for any purpose and without fee is hereby
|
||||
granted, provided that the above copyright notice appear in all
|
||||
copies and that both that the copyright notice and this
|
||||
permission notice and warranty disclaimer appear in supporting
|
||||
documentation, and that the name of Lucent or any of its entities
|
||||
not be used in advertising or publicity pertaining to
|
||||
distribution of the software without specific, written prior
|
||||
permission.
|
||||
|
||||
LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
|
||||
INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.
|
||||
IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY
|
||||
SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
|
||||
IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
|
||||
ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
|
||||
THIS SOFTWARE.
|
||||
****************************************************************/
|
||||
|
||||
/* Try to deduce arith.h from arithmetic properties. */
|
||||
|
||||
#include <stdio.h>
|
||||
#include <string.h> /* possibly for ssize_t */
|
||||
#include <math.h>
|
||||
#include <errno.h>
|
||||
#include <sys/types.h> /* another possible place for ssize_t */
|
||||
|
||||
#ifdef NO_FPINIT
|
||||
#define fpinit_ASL()
|
||||
#else
|
||||
#ifndef KR_headers
|
||||
extern
|
||||
#ifdef __cplusplus
|
||||
"C"
|
||||
#endif
|
||||
void fpinit_ASL(void);
|
||||
#endif /*KR_headers*/
|
||||
#endif /*NO_FPINIT*/
|
||||
|
||||
static int dalign;
|
||||
typedef struct
|
||||
Akind {
|
||||
char *name;
|
||||
int kind;
|
||||
} Akind;
|
||||
|
||||
static Akind
|
||||
IEEE_8087 = { "IEEE_8087", 1 },
|
||||
IEEE_MC68k = { "IEEE_MC68k", 2 },
|
||||
IBM = { "IBM", 3 },
|
||||
VAX = { "VAX", 4 },
|
||||
CRAY = { "CRAY", 5};
|
||||
|
||||
static double t_nan;
|
||||
|
||||
static Akind *
|
||||
Lcheck(void)
|
||||
{
|
||||
union {
|
||||
double d;
|
||||
long L[2];
|
||||
} u;
|
||||
struct {
|
||||
double d;
|
||||
long L;
|
||||
} x[2];
|
||||
|
||||
if (sizeof(x) > 2*(sizeof(double) + sizeof(long)))
|
||||
dalign = 1;
|
||||
u.L[0] = u.L[1] = 0;
|
||||
u.d = 1e13;
|
||||
if (u.L[0] == 1117925532 && u.L[1] == -448790528)
|
||||
return &IEEE_MC68k;
|
||||
if (u.L[1] == 1117925532 && u.L[0] == -448790528)
|
||||
return &IEEE_8087;
|
||||
if (u.L[0] == -2065213935 && u.L[1] == 10752)
|
||||
return &VAX;
|
||||
if (u.L[0] == 1267827943 && u.L[1] == 704643072)
|
||||
return &IBM;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static Akind *
|
||||
icheck(void)
|
||||
{
|
||||
union {
|
||||
double d;
|
||||
int L[2];
|
||||
} u;
|
||||
struct {
|
||||
double d;
|
||||
int L;
|
||||
} x[2];
|
||||
|
||||
if (sizeof(x) > 2*(sizeof(double) + sizeof(int)))
|
||||
dalign = 1;
|
||||
u.L[0] = u.L[1] = 0;
|
||||
u.d = 1e13;
|
||||
if (u.L[0] == 1117925532 && u.L[1] == -448790528)
|
||||
return &IEEE_MC68k;
|
||||
if (u.L[1] == 1117925532 && u.L[0] == -448790528)
|
||||
return &IEEE_8087;
|
||||
if (u.L[0] == -2065213935 && u.L[1] == 10752)
|
||||
return &VAX;
|
||||
if (u.L[0] == 1267827943 && u.L[1] == 704643072)
|
||||
return &IBM;
|
||||
return 0;
|
||||
}
|
||||
|
||||
char *emptyfmt = ""; /* avoid possible warning message with printf("") */
|
||||
|
||||
static Akind *
|
||||
ccheck(void)
|
||||
{
|
||||
union {
|
||||
double d;
|
||||
long L;
|
||||
} u;
|
||||
long Cray1;
|
||||
|
||||
/* Cray1 = 4617762693716115456 -- without overflow on non-Crays */
|
||||
Cray1 = printf(emptyfmt) < 0 ? 0 : 4617762;
|
||||
if (printf(emptyfmt, Cray1) >= 0)
|
||||
Cray1 = 1000000*Cray1 + 693716;
|
||||
if (printf(emptyfmt, Cray1) >= 0)
|
||||
Cray1 = 1000000*Cray1 + 115456;
|
||||
u.d = 1e13;
|
||||
if (u.L == Cray1)
|
||||
return &CRAY;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
fzcheck(void)
|
||||
{
|
||||
double a, b;
|
||||
int i;
|
||||
|
||||
a = 1.;
|
||||
b = .1;
|
||||
for(i = 155;; b *= b, i >>= 1) {
|
||||
if (i & 1) {
|
||||
a *= b;
|
||||
if (i == 1)
|
||||
break;
|
||||
}
|
||||
}
|
||||
b = a * a;
|
||||
return b == 0.;
|
||||
}
|
||||
|
||||
static int
|
||||
need_nancheck(void)
|
||||
{
|
||||
double t;
|
||||
|
||||
errno = 0;
|
||||
t = log(t_nan);
|
||||
if (errno == 0)
|
||||
return 1;
|
||||
errno = 0;
|
||||
t = sqrt(t_nan);
|
||||
return errno == 0;
|
||||
}
|
||||
|
||||
void
|
||||
get_nanbits(unsigned int *b, int k)
|
||||
{
|
||||
union { double d; unsigned int z[2]; } u, u1, u2;
|
||||
|
||||
k = 2 - k;
|
||||
u1.z[k] = u2.z[k] = 0x7ff00000;
|
||||
u1.z[1-k] = u2.z[1-k] = 0;
|
||||
u.d = u1.d - u2.d; /* Infinity - Infinity */
|
||||
b[0] = u.z[0];
|
||||
b[1] = u.z[1];
|
||||
}
|
||||
|
||||
int
|
||||
main(void)
|
||||
{
|
||||
FILE *f;
|
||||
Akind *a = 0;
|
||||
int Ldef = 0;
|
||||
size_t sa, sb;
|
||||
unsigned int nanbits[2];
|
||||
|
||||
fpinit_ASL();
|
||||
#ifdef WRITE_ARITH_H /* for Symantec's buggy "make" */
|
||||
f = fopen("arith.h", "w");
|
||||
if (!f) {
|
||||
printf("Cannot open arith.h\n");
|
||||
return 1;
|
||||
}
|
||||
#else
|
||||
f = stdout;
|
||||
#endif
|
||||
|
||||
if (sizeof(double) == 2*sizeof(long))
|
||||
a = Lcheck();
|
||||
else if (sizeof(double) == 2*sizeof(int)) {
|
||||
Ldef = 1;
|
||||
a = icheck();
|
||||
}
|
||||
else if (sizeof(double) == sizeof(long))
|
||||
a = ccheck();
|
||||
if (a) {
|
||||
fprintf(f, "#define %s\n#define Arith_Kind_ASL %d\n",
|
||||
a->name, a->kind);
|
||||
if (Ldef)
|
||||
fprintf(f, "#define Long int\n#define Intcast (int)(long)\n");
|
||||
if (dalign)
|
||||
fprintf(f, "#define Double_Align\n");
|
||||
if (sizeof(char*) == 8)
|
||||
fprintf(f, "#define X64_bit_pointers\n");
|
||||
#ifndef NO_LONG_LONG
|
||||
if (sizeof(long long) > sizeof(long)
|
||||
&& sizeof(long long) == sizeof(void*))
|
||||
fprintf(f, "#define LONG_LONG_POINTERS\n");
|
||||
if (sizeof(long long) < 8)
|
||||
#endif
|
||||
fprintf(f, "#define NO_LONG_LONG\n");
|
||||
#ifdef NO_SSIZE_T /*{{*/
|
||||
if (sizeof(size_t) == sizeof(long))
|
||||
fprintf(f, "#define ssize_t long\n");
|
||||
else if (sizeof(size_t) == sizeof(int))
|
||||
fprintf(f, "#define ssize_t int\n");
|
||||
#ifndef NO_LONG_LONG
|
||||
else if (sizeof(size_t) == sizeof(long long))
|
||||
fprintf(f, "#define ssize_t long long\n");
|
||||
#endif
|
||||
else
|
||||
fprintf(f, "#define ssize_t signed size_t\n"); /* punt */
|
||||
#else /*}{*/
|
||||
if (sizeof(size_t) != sizeof(ssize_t))
|
||||
fprintf(f, "/* sizeof(size_t) = %d but sizeof(ssize_t) = %d */\n",
|
||||
(int)sizeof(size_t), (int)sizeof(ssize_t));
|
||||
#endif /*}}*/
|
||||
if (a->kind <= 2) {
|
||||
if (fzcheck())
|
||||
fprintf(f, "#define Sudden_Underflow\n");
|
||||
t_nan = -a->kind;
|
||||
if (need_nancheck())
|
||||
fprintf(f, "#define NANCHECK\n");
|
||||
if (sizeof(double) == 2*sizeof(unsigned int)) {
|
||||
get_nanbits(nanbits, a->kind);
|
||||
fprintf(f, "#define QNaN0 0x%x\n", nanbits[0]);
|
||||
fprintf(f, "#define QNaN1 0x%x\n", nanbits[1]);
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
fprintf(f, "/* Unknown arithmetic */\n");
|
||||
return 1;
|
||||
}
|
||||
|
||||
#ifdef __sun
|
||||
#ifdef __i386
|
||||
/* kludge for Intel Solaris */
|
||||
void fpsetprec(int x) { }
|
||||
#endif
|
||||
#endif
|
@ -0,0 +1,76 @@
|
||||
#include "f2c.h"
|
||||
#include "fio.h"
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
#ifdef KR_headers
|
||||
integer f_back(a) alist *a;
|
||||
#else
|
||||
integer f_back(alist *a)
|
||||
#endif
|
||||
{ unit *b;
|
||||
OFF_T v, w, x, y, z;
|
||||
uiolen n;
|
||||
FILE *f;
|
||||
|
||||
f__curunit = b = &f__units[a->aunit]; /* curunit for error messages */
|
||||
if(a->aunit >= MXUNIT || a->aunit < 0)
|
||||
err(a->aerr,101,"backspace")
|
||||
if(b->useek==0) err(a->aerr,106,"backspace")
|
||||
if(b->ufd == NULL) {
|
||||
fk_open(1, 1, a->aunit);
|
||||
return(0);
|
||||
}
|
||||
if(b->uend==1)
|
||||
{ b->uend=0;
|
||||
return(0);
|
||||
}
|
||||
if(b->uwrt) {
|
||||
t_runc(a);
|
||||
if (f__nowreading(b))
|
||||
err(a->aerr,errno,"backspace")
|
||||
}
|
||||
f = b->ufd; /* may have changed in t_runc() */
|
||||
if(b->url>0)
|
||||
{
|
||||
x=FTELL(f);
|
||||
y = x % b->url;
|
||||
if(y == 0) x--;
|
||||
x /= b->url;
|
||||
x *= b->url;
|
||||
(void) FSEEK(f,x,SEEK_SET);
|
||||
return(0);
|
||||
}
|
||||
|
||||
if(b->ufmt==0)
|
||||
{ FSEEK(f,-(OFF_T)sizeof(uiolen),SEEK_CUR);
|
||||
fread((char *)&n,sizeof(uiolen),1,f);
|
||||
FSEEK(f,-(OFF_T)n-2*sizeof(uiolen),SEEK_CUR);
|
||||
return(0);
|
||||
}
|
||||
w = x = FTELL(f);
|
||||
z = 0;
|
||||
loop:
|
||||
while(x) {
|
||||
x -= x < 64 ? x : 64;
|
||||
FSEEK(f,x,SEEK_SET);
|
||||
for(y = x; y < w; y++) {
|
||||
if (getc(f) != '\n')
|
||||
continue;
|
||||
v = FTELL(f);
|
||||
if (v == w) {
|
||||
if (z)
|
||||
goto break2;
|
||||
goto loop;
|
||||
}
|
||||
z = v;
|
||||
}
|
||||
err(a->aerr,(EOF),"backspace")
|
||||
}
|
||||
break2:
|
||||
FSEEK(f, z, SEEK_SET);
|
||||
return 0;
|
||||
}
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
Binary file not shown.
@ -0,0 +1,20 @@
|
||||
#include "f2c.h"
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#ifdef KR_headers
|
||||
extern double f__cabs();
|
||||
|
||||
double c_abs(z) complex *z;
|
||||
#else
|
||||
extern double f__cabs(double, double);
|
||||
|
||||
double c_abs(complex *z)
|
||||
#endif
|
||||
{
|
||||
return( f__cabs( z->r, z->i ) );
|
||||
}
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
Binary file not shown.
@ -0,0 +1,23 @@
|
||||
#include "f2c.h"
|
||||
|
||||
#ifdef KR_headers
|
||||
extern double sin(), cos(), sinh(), cosh();
|
||||
|
||||
VOID c_cos(r, z) complex *r, *z;
|
||||
#else
|
||||
#undef abs
|
||||
#include "math.h"
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
void c_cos(complex *r, complex *z)
|
||||
#endif
|
||||
{
|
||||
double zi = z->i, zr = z->r;
|
||||
r->r = cos(zr) * cosh(zi);
|
||||
r->i = - sin(zr) * sinh(zi);
|
||||
}
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
Binary file not shown.
@ -0,0 +1,53 @@
|
||||
#include "f2c.h"
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#ifdef KR_headers
|
||||
extern VOID sig_die();
|
||||
VOID c_div(c, a, b)
|
||||
complex *a, *b, *c;
|
||||
#else
|
||||
extern void sig_die(const char*,int);
|
||||
void c_div(complex *c, complex *a, complex *b)
|
||||
#endif
|
||||
{
|
||||
double ratio, den;
|
||||
double abr, abi, cr;
|
||||
|
||||
if( (abr = b->r) < 0.)
|
||||
abr = - abr;
|
||||
if( (abi = b->i) < 0.)
|
||||
abi = - abi;
|
||||
if( abr <= abi )
|
||||
{
|
||||
if(abi == 0) {
|
||||
#ifdef IEEE_COMPLEX_DIVIDE
|
||||
float af, bf;
|
||||
af = bf = abr;
|
||||
if (a->i != 0 || a->r != 0)
|
||||
af = 1.;
|
||||
c->i = c->r = af / bf;
|
||||
return;
|
||||
#else
|
||||
sig_die("complex division by zero", 1);
|
||||
#endif
|
||||
}
|
||||
ratio = (double)b->r / b->i ;
|
||||
den = b->i * (1 + ratio*ratio);
|
||||
cr = (a->r*ratio + a->i) / den;
|
||||
c->i = (a->i*ratio - a->r) / den;
|
||||
}
|
||||
|
||||
else
|
||||
{
|
||||
ratio = (double)b->i / b->r ;
|
||||
den = b->r * (1 + ratio*ratio);
|
||||
cr = (a->r + a->i*ratio) / den;
|
||||
c->i = (a->i - a->r*ratio) / den;
|
||||
}
|
||||
c->r = cr;
|
||||
}
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
Binary file not shown.
@ -0,0 +1,25 @@
|
||||
#include "f2c.h"
|
||||
|
||||
#ifdef KR_headers
|
||||
extern double exp(), cos(), sin();
|
||||
|
||||
VOID c_exp(r, z) complex *r, *z;
|
||||
#else
|
||||
#undef abs
|
||||
#include "math.h"
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
void c_exp(complex *r, complex *z)
|
||||
#endif
|
||||
{
|
||||
double expx, zi = z->i;
|
||||
|
||||
expx = exp(z->r);
|
||||
r->r = expx * cos(zi);
|
||||
r->i = expx * sin(zi);
|
||||
}
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
Binary file not shown.
@ -0,0 +1,23 @@
|
||||
#include "f2c.h"
|
||||
|
||||
#ifdef KR_headers
|
||||
extern double log(), f__cabs(), atan2();
|
||||
VOID c_log(r, z) complex *r, *z;
|
||||
#else
|
||||
#undef abs
|
||||
#include "math.h"
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
extern double f__cabs(double, double);
|
||||
|
||||
void c_log(complex *r, complex *z)
|
||||
#endif
|
||||
{
|
||||
double zi, zr;
|
||||
r->i = atan2(zi = z->i, zr = z->r);
|
||||
r->r = log( f__cabs(zr, zi) );
|
||||
}
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
Binary file not shown.
@ -0,0 +1,23 @@
|
||||
#include "f2c.h"
|
||||
|
||||
#ifdef KR_headers
|
||||
extern double sin(), cos(), sinh(), cosh();
|
||||
|
||||
VOID c_sin(r, z) complex *r, *z;
|
||||
#else
|
||||
#undef abs
|
||||
#include "math.h"
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
void c_sin(complex *r, complex *z)
|
||||
#endif
|
||||
{
|
||||
double zi = z->i, zr = z->r;
|
||||
r->r = sin(zr) * cosh(zi);
|
||||
r->i = cos(zr) * sinh(zi);
|
||||
}
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
Binary file not shown.
@ -0,0 +1,41 @@
|
||||
#include "f2c.h"
|
||||
|
||||
#ifdef KR_headers
|
||||
extern double sqrt(), f__cabs();
|
||||
|
||||
VOID c_sqrt(r, z) complex *r, *z;
|
||||
#else
|
||||
#undef abs
|
||||
#include "math.h"
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
extern double f__cabs(double, double);
|
||||
|
||||
void c_sqrt(complex *r, complex *z)
|
||||
#endif
|
||||
{
|
||||
double mag, t;
|
||||
double zi = z->i, zr = z->r;
|
||||
|
||||
if( (mag = f__cabs(zr, zi)) == 0.)
|
||||
r->r = r->i = 0.;
|
||||
else if(zr > 0)
|
||||
{
|
||||
r->r = t = sqrt(0.5 * (mag + zr) );
|
||||
t = zi / t;
|
||||
r->i = 0.5 * t;
|
||||
}
|
||||
else
|
||||
{
|
||||
t = sqrt(0.5 * (mag - zr) );
|
||||
if(zi < 0)
|
||||
t = -t;
|
||||
r->i = t;
|
||||
t = zi / t;
|
||||
r->r = 0.5 * t;
|
||||
}
|
||||
}
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
Binary file not shown.
@ -0,0 +1,33 @@
|
||||
#ifdef KR_headers
|
||||
extern double sqrt();
|
||||
double f__cabs(real, imag) double real, imag;
|
||||
#else
|
||||
#undef abs
|
||||
#include "math.h"
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
double f__cabs(double real, double imag)
|
||||
#endif
|
||||
{
|
||||
double temp;
|
||||
|
||||
if(real < 0)
|
||||
real = -real;
|
||||
if(imag < 0)
|
||||
imag = -imag;
|
||||
if(imag > real){
|
||||
temp = real;
|
||||
real = imag;
|
||||
imag = temp;
|
||||
}
|
||||
if((real+imag) == real)
|
||||
return(real);
|
||||
|
||||
temp = imag/real;
|
||||
temp = real*sqrt(1.0 + temp*temp); /*overflow!!*/
|
||||
return(temp);
|
||||
}
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
Binary file not shown.
@ -0,0 +1,101 @@
|
||||
#include "f2c.h"
|
||||
#include "fio.h"
|
||||
#ifdef KR_headers
|
||||
integer f_clos(a) cllist *a;
|
||||
#else
|
||||
#undef abs
|
||||
#undef min
|
||||
#undef max
|
||||
#include "stdlib.h"
|
||||
#ifdef NON_UNIX_STDIO
|
||||
#ifndef unlink
|
||||
#define unlink remove
|
||||
#endif
|
||||
#else
|
||||
#ifdef MSDOS
|
||||
#include "io.h"
|
||||
#else
|
||||
#ifdef __cplusplus
|
||||
extern "C" int unlink(const char*);
|
||||
#else
|
||||
extern int unlink(const char*);
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
integer f_clos(cllist *a)
|
||||
#endif
|
||||
{ unit *b;
|
||||
|
||||
if(a->cunit >= MXUNIT) return(0);
|
||||
b= &f__units[a->cunit];
|
||||
if(b->ufd==NULL)
|
||||
goto done;
|
||||
if (b->uscrtch == 1)
|
||||
goto Delete;
|
||||
if (!a->csta)
|
||||
goto Keep;
|
||||
switch(*a->csta) {
|
||||
default:
|
||||
Keep:
|
||||
case 'k':
|
||||
case 'K':
|
||||
if(b->uwrt == 1)
|
||||
t_runc((alist *)a);
|
||||
if(b->ufnm) {
|
||||
fclose(b->ufd);
|
||||
free(b->ufnm);
|
||||
}
|
||||
break;
|
||||
case 'd':
|
||||
case 'D':
|
||||
Delete:
|
||||
fclose(b->ufd);
|
||||
if(b->ufnm) {
|
||||
unlink(b->ufnm); /*SYSDEP*/
|
||||
free(b->ufnm);
|
||||
}
|
||||
}
|
||||
b->ufd=NULL;
|
||||
done:
|
||||
b->uend=0;
|
||||
b->ufnm=NULL;
|
||||
return(0);
|
||||
}
|
||||
void
|
||||
#ifdef KR_headers
|
||||
f_exit()
|
||||
#else
|
||||
f_exit(void)
|
||||
#endif
|
||||
{ int i;
|
||||
static cllist xx;
|
||||
if (!xx.cerr) {
|
||||
xx.cerr=1;
|
||||
xx.csta=NULL;
|
||||
for(i=0;i<MXUNIT;i++)
|
||||
{
|
||||
xx.cunit=i;
|
||||
(void) f_clos(&xx);
|
||||
}
|
||||
}
|
||||
}
|
||||
int
|
||||
#ifdef KR_headers
|
||||
flush_()
|
||||
#else
|
||||
flush_(void)
|
||||
#endif
|
||||
{ int i;
|
||||
for(i=0;i<MXUNIT;i++)
|
||||
if(f__units[i].ufd != NULL && f__units[i].uwrt)
|
||||
fflush(f__units[i].ufd);
|
||||
return 0;
|
||||
}
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
Binary file not shown.
@ -0,0 +1,13 @@
|
||||
%*
|
||||
if errorlevel 1 goto nolonglong
|
||||
exit 0
|
||||
:nolonglong
|
||||
%* -DNO_LONG_LONG
|
||||
if errorlevel 1 goto nossizet
|
||||
exit 0
|
||||
:nossizet
|
||||
%* -DNO_SSIZE_T
|
||||
if errorlevel 1 goto noboth
|
||||
exit 0
|
||||
:noboth
|
||||
%* -DNO_LONG_LONG -DNO_SSIZE_T
|
@ -0,0 +1,2 @@
|
||||
#define My_ctype_DEF
|
||||
#include "ctype.h"
|
@ -0,0 +1,47 @@
|
||||
/* Custom ctype.h to overcome trouble with recent versions of Linux libc.a */
|
||||
|
||||
#ifdef NO_My_ctype
|
||||
#include <ctype.h>
|
||||
#else /*{*/
|
||||
#ifndef My_ctype_DEF
|
||||
extern char My_ctype[];
|
||||
#else /*{*/
|
||||
char My_ctype[264] = {
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 2, 2, 2, 2, 2, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
2, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
1, 1, 1, 1, 1, 1, 1, 1,
|
||||
1, 1, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0};
|
||||
#endif /*}*/
|
||||
|
||||
#define isdigit(x) (My_ctype[(x)+8] & 1)
|
||||
#define isspace(x) (My_ctype[(x)+8] & 2)
|
||||
#endif
|
Binary file not shown.
@ -0,0 +1,18 @@
|
||||
#include "f2c.h"
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#ifdef KR_headers
|
||||
double d_abs(x) doublereal *x;
|
||||
#else
|
||||
double d_abs(doublereal *x)
|
||||
#endif
|
||||
{
|
||||
if(*x >= 0)
|
||||
return(*x);
|
||||
return(- *x);
|
||||
}
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
Binary file not shown.
@ -0,0 +1,19 @@
|
||||
#include "f2c.h"
|
||||
|
||||
#ifdef KR_headers
|
||||
double acos();
|
||||
double d_acos(x) doublereal *x;
|
||||
#else
|
||||
#undef abs
|
||||
#include "math.h"
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
double d_acos(doublereal *x)
|
||||
#endif
|
||||
{
|
||||
return( acos(*x) );
|
||||
}
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
Binary file not shown.
@ -0,0 +1,19 @@
|
||||
#include "f2c.h"
|
||||
|
||||
#ifdef KR_headers
|
||||
double asin();
|
||||
double d_asin(x) doublereal *x;
|
||||
#else
|
||||
#undef abs
|
||||
#include "math.h"
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
double d_asin(doublereal *x)
|
||||
#endif
|
||||
{
|
||||
return( asin(*x) );
|
||||
}
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
Binary file not shown.
@ -0,0 +1,19 @@
|
||||
#include "f2c.h"
|
||||
|
||||
#ifdef KR_headers
|
||||
double atan();
|
||||
double d_atan(x) doublereal *x;
|
||||
#else
|
||||
#undef abs
|
||||
#include "math.h"
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
double d_atan(doublereal *x)
|
||||
#endif
|
||||
{
|
||||
return( atan(*x) );
|
||||
}
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
Binary file not shown.
@ -0,0 +1,19 @@
|
||||
#include "f2c.h"
|
||||
|
||||
#ifdef KR_headers
|
||||
double atan2();
|
||||
double d_atn2(x,y) doublereal *x, *y;
|
||||
#else
|
||||
#undef abs
|
||||
#include "math.h"
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
double d_atn2(doublereal *x, doublereal *y)
|
||||
#endif
|
||||
{
|
||||
return( atan2(*x,*y) );
|
||||
}
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
Binary file not shown.
@ -0,0 +1,19 @@
|
||||
#include "f2c.h"
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
VOID
|
||||
#ifdef KR_headers
|
||||
d_cnjg(r, z) doublecomplex *r, *z;
|
||||
#else
|
||||
d_cnjg(doublecomplex *r, doublecomplex *z)
|
||||
#endif
|
||||
{
|
||||
doublereal zi = z->i;
|
||||
r->r = z->r;
|
||||
r->i = -zi;
|
||||
}
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
Binary file not shown.
@ -0,0 +1,19 @@
|
||||
#include "f2c.h"
|
||||
|
||||
#ifdef KR_headers
|
||||
double cos();
|
||||
double d_cos(x) doublereal *x;
|
||||
#else
|
||||
#undef abs
|
||||
#include "math.h"
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
double d_cos(doublereal *x)
|
||||
#endif
|
||||
{
|
||||
return( cos(*x) );
|
||||
}
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
Binary file not shown.
@ -0,0 +1,19 @@
|
||||
#include "f2c.h"
|
||||
|
||||
#ifdef KR_headers
|
||||
double cosh();
|
||||
double d_cosh(x) doublereal *x;
|
||||
#else
|
||||
#undef abs
|
||||
#include "math.h"
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
double d_cosh(doublereal *x)
|
||||
#endif
|
||||
{
|
||||
return( cosh(*x) );
|
||||
}
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
Binary file not shown.
@ -0,0 +1,16 @@
|
||||
#include "f2c.h"
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#ifdef KR_headers
|
||||
double d_dim(a,b) doublereal *a, *b;
|
||||
#else
|
||||
double d_dim(doublereal *a, doublereal *b)
|
||||
#endif
|
||||
{
|
||||
return( *a > *b ? *a - *b : 0);
|
||||
}
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
Binary file not shown.
@ -0,0 +1,19 @@
|
||||
#include "f2c.h"
|
||||
|
||||
#ifdef KR_headers
|
||||
double exp();
|
||||
double d_exp(x) doublereal *x;
|
||||
#else
|
||||
#undef abs
|
||||
#include "math.h"
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
double d_exp(doublereal *x)
|
||||
#endif
|
||||
{
|
||||
return( exp(*x) );
|
||||
}
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
Binary file not shown.
@ -0,0 +1,16 @@
|
||||
#include "f2c.h"
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#ifdef KR_headers
|
||||
double d_imag(z) doublecomplex *z;
|
||||
#else
|
||||
double d_imag(doublecomplex *z)
|
||||
#endif
|
||||
{
|
||||
return(z->i);
|
||||
}
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
Binary file not shown.
@ -0,0 +1,19 @@
|
||||
#include "f2c.h"
|
||||
|
||||
#ifdef KR_headers
|
||||
double floor();
|
||||
double d_int(x) doublereal *x;
|
||||
#else
|
||||
#undef abs
|
||||
#include "math.h"
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
double d_int(doublereal *x)
|
||||
#endif
|
||||
{
|
||||
return( (*x>0) ? floor(*x) : -floor(- *x) );
|
||||
}
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
Binary file not shown.
@ -0,0 +1,21 @@
|
||||
#include "f2c.h"
|
||||
|
||||
#define log10e 0.43429448190325182765
|
||||
|
||||
#ifdef KR_headers
|
||||
double log();
|
||||
double d_lg10(x) doublereal *x;
|
||||
#else
|
||||
#undef abs
|
||||
#include "math.h"
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
double d_lg10(doublereal *x)
|
||||
#endif
|
||||
{
|
||||
return( log10e * log(*x) );
|
||||
}
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
Binary file not shown.
@ -0,0 +1,19 @@
|
||||
#include "f2c.h"
|
||||
|
||||
#ifdef KR_headers
|
||||
double log();
|
||||
double d_log(x) doublereal *x;
|
||||
#else
|
||||
#undef abs
|
||||
#include "math.h"
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
double d_log(doublereal *x)
|
||||
#endif
|
||||
{
|
||||
return( log(*x) );
|
||||
}
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
Binary file not shown.
@ -0,0 +1,46 @@
|
||||
#include "f2c.h"
|
||||
|
||||
#ifdef KR_headers
|
||||
#ifdef IEEE_drem
|
||||
double drem();
|
||||
#else
|
||||
double floor();
|
||||
#endif
|
||||
double d_mod(x,y) doublereal *x, *y;
|
||||
#else
|
||||
#ifdef IEEE_drem
|
||||
double drem(double, double);
|
||||
#else
|
||||
#undef abs
|
||||
#include "math.h"
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
#endif
|
||||
double d_mod(doublereal *x, doublereal *y)
|
||||
#endif
|
||||
{
|
||||
#ifdef IEEE_drem
|
||||
double xa, ya, z;
|
||||
if ((ya = *y) < 0.)
|
||||
ya = -ya;
|
||||
z = drem(xa = *x, ya);
|
||||
if (xa > 0) {
|
||||
if (z < 0)
|
||||
z += ya;
|
||||
}
|
||||
else if (z > 0)
|
||||
z -= ya;
|
||||
return z;
|
||||
#else
|
||||
double quotient;
|
||||
if( (quotient = *x / *y) >= 0)
|
||||
quotient = floor(quotient);
|
||||
else
|
||||
quotient = -floor(-quotient);
|
||||
return(*x - (*y) * quotient );
|
||||
#endif
|
||||
}
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
Binary file not shown.
@ -0,0 +1,20 @@
|
||||
#include "f2c.h"
|
||||
|
||||
#ifdef KR_headers
|
||||
double floor();
|
||||
double d_nint(x) doublereal *x;
|
||||
#else
|
||||
#undef abs
|
||||
#include "math.h"
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
double d_nint(doublereal *x)
|
||||
#endif
|
||||
{
|
||||
return( (*x)>=0 ?
|
||||
floor(*x + .5) : -floor(.5 - *x) );
|
||||
}
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
Binary file not shown.
@ -0,0 +1,16 @@
|
||||
#include "f2c.h"
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#ifdef KR_headers
|
||||
double d_prod(x,y) real *x, *y;
|
||||
#else
|
||||
double d_prod(real *x, real *y)
|
||||
#endif
|
||||
{
|
||||
return( (*x) * (*y) );
|
||||
}
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
Binary file not shown.
@ -0,0 +1,18 @@
|
||||
#include "f2c.h"
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#ifdef KR_headers
|
||||
double d_sign(a,b) doublereal *a, *b;
|
||||
#else
|
||||
double d_sign(doublereal *a, doublereal *b)
|
||||
#endif
|
||||
{
|
||||
double x;
|
||||
x = (*a >= 0 ? *a : - *a);
|
||||
return( *b >= 0 ? x : -x);
|
||||
}
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
Binary file not shown.
@ -0,0 +1,19 @@
|
||||
#include "f2c.h"
|
||||
|
||||
#ifdef KR_headers
|
||||
double sin();
|
||||
double d_sin(x) doublereal *x;
|
||||
#else
|
||||
#undef abs
|
||||
#include "math.h"
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
double d_sin(doublereal *x)
|
||||
#endif
|
||||
{
|
||||
return( sin(*x) );
|
||||
}
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
Binary file not shown.
@ -0,0 +1,19 @@
|
||||
#include "f2c.h"
|
||||
|
||||
#ifdef KR_headers
|
||||
double sinh();
|
||||
double d_sinh(x) doublereal *x;
|
||||
#else
|
||||
#undef abs
|
||||
#include "math.h"
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
double d_sinh(doublereal *x)
|
||||
#endif
|
||||
{
|
||||
return( sinh(*x) );
|
||||
}
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
Binary file not shown.
@ -0,0 +1,19 @@
|
||||
#include "f2c.h"
|
||||
|
||||
#ifdef KR_headers
|
||||
double sqrt();
|
||||
double d_sqrt(x) doublereal *x;
|
||||
#else
|
||||
#undef abs
|
||||
#include "math.h"
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
double d_sqrt(doublereal *x)
|
||||
#endif
|
||||
{
|
||||
return( sqrt(*x) );
|
||||
}
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
Binary file not shown.
@ -0,0 +1,19 @@
|
||||
#include "f2c.h"
|
||||
|
||||
#ifdef KR_headers
|
||||
double tan();
|
||||
double d_tan(x) doublereal *x;
|
||||
#else
|
||||
#undef abs
|
||||
#include "math.h"
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
double d_tan(doublereal *x)
|
||||
#endif
|
||||
{
|
||||
return( tan(*x) );
|
||||
}
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
Binary file not shown.
@ -0,0 +1,19 @@
|
||||
#include "f2c.h"
|
||||
|
||||
#ifdef KR_headers
|
||||
double tanh();
|
||||
double d_tanh(x) doublereal *x;
|
||||
#else
|
||||
#undef abs
|
||||
#include "math.h"
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
double d_tanh(doublereal *x)
|
||||
#endif
|
||||
{
|
||||
return( tanh(*x) );
|
||||
}
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
Binary file not shown.
@ -0,0 +1,18 @@
|
||||
#include "f2c.h"
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#ifdef KR_headers
|
||||
double erf();
|
||||
double derf_(x) doublereal *x;
|
||||
#else
|
||||
extern double erf(double);
|
||||
double derf_(doublereal *x)
|
||||
#endif
|
||||
{
|
||||
return( erf(*x) );
|
||||
}
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
Binary file not shown.
@ -0,0 +1,20 @@
|
||||
#include "f2c.h"
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#ifdef KR_headers
|
||||
extern double erfc();
|
||||
|
||||
double derfc_(x) doublereal *x;
|
||||
#else
|
||||
extern double erfc(double);
|
||||
|
||||
double derfc_(doublereal *x)
|
||||
#endif
|
||||
{
|
||||
return( erfc(*x) );
|
||||
}
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
Binary file not shown.
@ -0,0 +1,151 @@
|
||||
#include "f2c.h"
|
||||
#include "fio.h"
|
||||
#include "fmt.h"
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
int
|
||||
y_rsk(Void)
|
||||
{
|
||||
if(f__curunit->uend || f__curunit->url <= f__recpos
|
||||
|| f__curunit->url == 1) return 0;
|
||||
do {
|
||||
getc(f__cf);
|
||||
} while(++f__recpos < f__curunit->url);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int
|
||||
y_getc(Void)
|
||||
{
|
||||
int ch;
|
||||
if(f__curunit->uend) return(-1);
|
||||
if((ch=getc(f__cf))!=EOF)
|
||||
{
|
||||
f__recpos++;
|
||||
if(f__curunit->url>=f__recpos ||
|
||||
f__curunit->url==1)
|
||||
return(ch);
|
||||
else return(' ');
|
||||
}
|
||||
if(feof(f__cf))
|
||||
{
|
||||
f__curunit->uend=1;
|
||||
errno=0;
|
||||
return(-1);
|
||||
}
|
||||
err(f__elist->cierr,errno,"readingd");
|
||||
}
|
||||
|
||||
static int
|
||||
y_rev(Void)
|
||||
{
|
||||
if (f__recpos < f__hiwater)
|
||||
f__recpos = f__hiwater;
|
||||
if (f__curunit->url > 1)
|
||||
while(f__recpos < f__curunit->url)
|
||||
(*f__putn)(' ');
|
||||
if (f__recpos)
|
||||
f__putbuf(0);
|
||||
f__recpos = 0;
|
||||
return(0);
|
||||
}
|
||||
|
||||
static int
|
||||
y_err(Void)
|
||||
{
|
||||
err(f__elist->cierr, 110, "dfe");
|
||||
}
|
||||
|
||||
static int
|
||||
y_newrec(Void)
|
||||
{
|
||||
y_rev();
|
||||
f__hiwater = f__cursor = 0;
|
||||
return(1);
|
||||
}
|
||||
|
||||
int
|
||||
#ifdef KR_headers
|
||||
c_dfe(a) cilist *a;
|
||||
#else
|
||||
c_dfe(cilist *a)
|
||||
#endif
|
||||
{
|
||||
f__sequential=0;
|
||||
f__formatted=f__external=1;
|
||||
f__elist=a;
|
||||
f__cursor=f__scale=f__recpos=0;
|
||||
f__curunit = &f__units[a->ciunit];
|
||||
if(a->ciunit>MXUNIT || a->ciunit<0)
|
||||
err(a->cierr,101,"startchk");
|
||||
if(f__curunit->ufd==NULL && fk_open(DIR,FMT,a->ciunit))
|
||||
err(a->cierr,104,"dfe");
|
||||
f__cf=f__curunit->ufd;
|
||||
if(!f__curunit->ufmt) err(a->cierr,102,"dfe")
|
||||
if(!f__curunit->useek) err(a->cierr,104,"dfe")
|
||||
f__fmtbuf=a->cifmt;
|
||||
if(a->cirec <= 0)
|
||||
err(a->cierr,130,"dfe")
|
||||
FSEEK(f__cf,(OFF_T)f__curunit->url * (a->cirec-1),SEEK_SET);
|
||||
f__curunit->uend = 0;
|
||||
return(0);
|
||||
}
|
||||
#ifdef KR_headers
|
||||
integer s_rdfe(a) cilist *a;
|
||||
#else
|
||||
integer s_rdfe(cilist *a)
|
||||
#endif
|
||||
{
|
||||
int n;
|
||||
if(!f__init) f_init();
|
||||
f__reading=1;
|
||||
if(n=c_dfe(a))return(n);
|
||||
if(f__curunit->uwrt && f__nowreading(f__curunit))
|
||||
err(a->cierr,errno,"read start");
|
||||
f__getn = y_getc;
|
||||
f__doed = rd_ed;
|
||||
f__doned = rd_ned;
|
||||
f__dorevert = f__donewrec = y_err;
|
||||
f__doend = y_rsk;
|
||||
if(pars_f(f__fmtbuf)<0)
|
||||
err(a->cierr,100,"read start");
|
||||
fmt_bg();
|
||||
return(0);
|
||||
}
|
||||
#ifdef KR_headers
|
||||
integer s_wdfe(a) cilist *a;
|
||||
#else
|
||||
integer s_wdfe(cilist *a)
|
||||
#endif
|
||||
{
|
||||
int n;
|
||||
if(!f__init) f_init();
|
||||
f__reading=0;
|
||||
if(n=c_dfe(a)) return(n);
|
||||
if(f__curunit->uwrt != 1 && f__nowwriting(f__curunit))
|
||||
err(a->cierr,errno,"startwrt");
|
||||
f__putn = x_putc;
|
||||
f__doed = w_ed;
|
||||
f__doned= w_ned;
|
||||
f__dorevert = y_err;
|
||||
f__donewrec = y_newrec;
|
||||
f__doend = y_rev;
|
||||
if(pars_f(f__fmtbuf)<0)
|
||||
err(a->cierr,100,"startwrt");
|
||||
fmt_bg();
|
||||
return(0);
|
||||
}
|
||||
integer e_rdfe(Void)
|
||||
{
|
||||
en_fio();
|
||||
return 0;
|
||||
}
|
||||
integer e_wdfe(Void)
|
||||
{
|
||||
return en_fio();
|
||||
}
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
Binary file not shown.
@ -0,0 +1,26 @@
|
||||
#include "f2c.h"
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
#ifdef KR_headers
|
||||
extern int (*f__lioproc)();
|
||||
|
||||
integer do_lio(type,number,ptr,len) ftnint *number,*type; char *ptr; ftnlen len;
|
||||
#else
|
||||
extern int (*f__lioproc)(ftnint*, char*, ftnlen, ftnint);
|
||||
|
||||
integer do_lio(ftnint *type, ftnint *number, char *ptr, ftnlen len)
|
||||
#endif
|
||||
{
|
||||
return((*f__lioproc)(number,ptr,len,*type));
|
||||
}
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
Binary file not shown.
@ -0,0 +1,63 @@
|
||||
#include "time.h"
|
||||
|
||||
#ifdef MSDOS
|
||||
#undef USE_CLOCK
|
||||
#define USE_CLOCK
|
||||
#endif
|
||||
|
||||
#ifndef REAL
|
||||
#define REAL double
|
||||
#endif
|
||||
|
||||
#ifndef USE_CLOCK
|
||||
#define _INCLUDE_POSIX_SOURCE /* for HP-UX */
|
||||
#define _INCLUDE_XOPEN_SOURCE /* for HP-UX */
|
||||
#include "sys/types.h"
|
||||
#include "sys/times.h"
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#undef Hz
|
||||
#ifdef CLK_TCK
|
||||
#define Hz CLK_TCK
|
||||
#else
|
||||
#ifdef HZ
|
||||
#define Hz HZ
|
||||
#else
|
||||
#define Hz 60
|
||||
#endif
|
||||
#endif
|
||||
|
||||
REAL
|
||||
#ifdef KR_headers
|
||||
dtime_(tarray) float *tarray;
|
||||
#else
|
||||
dtime_(float *tarray)
|
||||
#endif
|
||||
{
|
||||
#ifdef USE_CLOCK
|
||||
#ifndef CLOCKS_PER_SECOND
|
||||
#define CLOCKS_PER_SECOND Hz
|
||||
#endif
|
||||
static double t0;
|
||||
double t = clock();
|
||||
tarray[1] = 0;
|
||||
tarray[0] = (t - t0) / CLOCKS_PER_SECOND;
|
||||
t0 = t;
|
||||
return tarray[0];
|
||||
#else
|
||||
struct tms t;
|
||||
static struct tms t0;
|
||||
|
||||
times(&t);
|
||||
tarray[0] = (double)(t.tms_utime - t0.tms_utime) / Hz;
|
||||
tarray[1] = (double)(t.tms_stime - t0.tms_stime) / Hz;
|
||||
t0 = t;
|
||||
return tarray[0] + tarray[1];
|
||||
#endif
|
||||
}
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
Binary file not shown.
@ -0,0 +1,77 @@
|
||||
#include "f2c.h"
|
||||
#include "fio.h"
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
int
|
||||
#ifdef KR_headers
|
||||
c_due(a) cilist *a;
|
||||
#else
|
||||
c_due(cilist *a)
|
||||
#endif
|
||||
{
|
||||
if(!f__init) f_init();
|
||||
f__sequential=f__formatted=f__recpos=0;
|
||||
f__external=1;
|
||||
f__curunit = &f__units[a->ciunit];
|
||||
if(a->ciunit>=MXUNIT || a->ciunit<0)
|
||||
err(a->cierr,101,"startio");
|
||||
f__elist=a;
|
||||
if(f__curunit->ufd==NULL && fk_open(DIR,UNF,a->ciunit) ) err(a->cierr,104,"due");
|
||||
f__cf=f__curunit->ufd;
|
||||
if(f__curunit->ufmt) err(a->cierr,102,"cdue")
|
||||
if(!f__curunit->useek) err(a->cierr,104,"cdue")
|
||||
if(f__curunit->ufd==NULL) err(a->cierr,114,"cdue")
|
||||
if(a->cirec <= 0)
|
||||
err(a->cierr,130,"due")
|
||||
FSEEK(f__cf,(OFF_T)(a->cirec-1)*f__curunit->url,SEEK_SET);
|
||||
f__curunit->uend = 0;
|
||||
return(0);
|
||||
}
|
||||
#ifdef KR_headers
|
||||
integer s_rdue(a) cilist *a;
|
||||
#else
|
||||
integer s_rdue(cilist *a)
|
||||
#endif
|
||||
{
|
||||
int n;
|
||||
f__reading=1;
|
||||
if(n=c_due(a)) return(n);
|
||||
if(f__curunit->uwrt && f__nowreading(f__curunit))
|
||||
err(a->cierr,errno,"read start");
|
||||
return(0);
|
||||
}
|
||||
#ifdef KR_headers
|
||||
integer s_wdue(a) cilist *a;
|
||||
#else
|
||||
integer s_wdue(cilist *a)
|
||||
#endif
|
||||
{
|
||||
int n;
|
||||
f__reading=0;
|
||||
if(n=c_due(a)) return(n);
|
||||
if(f__curunit->uwrt != 1 && f__nowwriting(f__curunit))
|
||||
err(a->cierr,errno,"write start");
|
||||
return(0);
|
||||
}
|
||||
integer e_rdue(Void)
|
||||
{
|
||||
if(f__curunit->url==1 || f__recpos==f__curunit->url)
|
||||
return(0);
|
||||
FSEEK(f__cf,(OFF_T)(f__curunit->url-f__recpos),SEEK_CUR);
|
||||
if(FTELL(f__cf)%f__curunit->url)
|
||||
err(f__elist->cierr,200,"syserr");
|
||||
return(0);
|
||||
}
|
||||
integer e_wdue(Void)
|
||||
{
|
||||
#ifdef ALWAYS_FLUSH
|
||||
if (fflush(f__cf))
|
||||
err(f__elist->cierr,errno,"write end");
|
||||
#endif
|
||||
return(e_rdue());
|
||||
}
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
Binary file not shown.
@ -0,0 +1,25 @@
|
||||
/* EFL support routine to copy string b to string a */
|
||||
|
||||
#include "f2c.h"
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
|
||||
#define M ( (long) (sizeof(long) - 1) )
|
||||
#define EVEN(x) ( ( (x)+ M) & (~M) )
|
||||
|
||||
#ifdef KR_headers
|
||||
extern VOID s_copy();
|
||||
ef1asc_(a, la, b, lb) ftnint *a, *b; ftnlen *la, *lb;
|
||||
#else
|
||||
extern void s_copy(char*,char*,ftnlen,ftnlen);
|
||||
int ef1asc_(ftnint *a, ftnlen *la, ftnint *b, ftnlen *lb)
|
||||
#endif
|
||||
{
|
||||
s_copy( (char *)a, (char *)b, EVEN(*la), *lb );
|
||||
return 0; /* ignored return value */
|
||||
}
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
Binary file not shown.
@ -0,0 +1,20 @@
|
||||
/* EFL support routine to compare two character strings */
|
||||
|
||||
#include "f2c.h"
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#ifdef KR_headers
|
||||
extern integer s_cmp();
|
||||
integer ef1cmc_(a, la, b, lb) ftnint *a, *b; ftnlen *la, *lb;
|
||||
#else
|
||||
extern integer s_cmp(char*,char*,ftnlen,ftnlen);
|
||||
integer ef1cmc_(ftnint *a, ftnlen *la, ftnint *b, ftnlen *lb)
|
||||
#endif
|
||||
{
|
||||
return( s_cmp( (char *)a, (char *)b, *la, *lb) );
|
||||
}
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
Binary file not shown.
@ -0,0 +1,160 @@
|
||||
#include "f2c.h"
|
||||
#include "fio.h"
|
||||
|
||||
/* Compile this with -DNO_TRUNCATE if unistd.h does not exist or */
|
||||
/* if it does not define int truncate(const char *name, off_t). */
|
||||
|
||||
#ifdef MSDOS
|
||||
#undef NO_TRUNCATE
|
||||
#define NO_TRUNCATE
|
||||
#endif
|
||||
|
||||
#ifndef NO_TRUNCATE
|
||||
#include "unistd.h"
|
||||
#endif
|
||||
|
||||
#ifdef KR_headers
|
||||
extern char *strcpy();
|
||||
extern FILE *tmpfile();
|
||||
#else
|
||||
#undef abs
|
||||
#undef min
|
||||
#undef max
|
||||
#include "stdlib.h"
|
||||
#include "string.h"
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
#endif
|
||||
|
||||
extern char *f__r_mode[], *f__w_mode[];
|
||||
|
||||
#ifdef KR_headers
|
||||
integer f_end(a) alist *a;
|
||||
#else
|
||||
integer f_end(alist *a)
|
||||
#endif
|
||||
{
|
||||
unit *b;
|
||||
FILE *tf;
|
||||
|
||||
if(a->aunit>=MXUNIT || a->aunit<0) err(a->aerr,101,"endfile");
|
||||
b = &f__units[a->aunit];
|
||||
if(b->ufd==NULL) {
|
||||
char nbuf[10];
|
||||
sprintf(nbuf,"fort.%ld",(long)a->aunit);
|
||||
if (tf = FOPEN(nbuf, f__w_mode[0]))
|
||||
fclose(tf);
|
||||
return(0);
|
||||
}
|
||||
b->uend=1;
|
||||
return(b->useek ? t_runc(a) : 0);
|
||||
}
|
||||
|
||||
#ifdef NO_TRUNCATE
|
||||
static int
|
||||
#ifdef KR_headers
|
||||
copy(from, len, to) FILE *from, *to; register long len;
|
||||
#else
|
||||
copy(FILE *from, register long len, FILE *to)
|
||||
#endif
|
||||
{
|
||||
int len1;
|
||||
char buf[BUFSIZ];
|
||||
|
||||
while(fread(buf, len1 = len > BUFSIZ ? BUFSIZ : (int)len, 1, from)) {
|
||||
if (!fwrite(buf, len1, 1, to))
|
||||
return 1;
|
||||
if ((len -= len1) <= 0)
|
||||
break;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
#endif /* NO_TRUNCATE */
|
||||
|
||||
int
|
||||
#ifdef KR_headers
|
||||
t_runc(a) alist *a;
|
||||
#else
|
||||
t_runc(alist *a)
|
||||
#endif
|
||||
{
|
||||
OFF_T loc, len;
|
||||
unit *b;
|
||||
int rc;
|
||||
FILE *bf;
|
||||
#ifdef NO_TRUNCATE
|
||||
FILE *tf;
|
||||
#endif
|
||||
|
||||
b = &f__units[a->aunit];
|
||||
if(b->url)
|
||||
return(0); /*don't truncate direct files*/
|
||||
loc=FTELL(bf = b->ufd);
|
||||
FSEEK(bf,(OFF_T)0,SEEK_END);
|
||||
len=FTELL(bf);
|
||||
if (loc >= len || b->useek == 0)
|
||||
return(0);
|
||||
#ifdef NO_TRUNCATE
|
||||
if (b->ufnm == NULL)
|
||||
return 0;
|
||||
rc = 0;
|
||||
fclose(b->ufd);
|
||||
if (!loc) {
|
||||
if (!(bf = FOPEN(b->ufnm, f__w_mode[b->ufmt])))
|
||||
rc = 1;
|
||||
if (b->uwrt)
|
||||
b->uwrt = 1;
|
||||
goto done;
|
||||
}
|
||||
if (!(bf = FOPEN(b->ufnm, f__r_mode[0]))
|
||||
|| !(tf = tmpfile())) {
|
||||
#ifdef NON_UNIX_STDIO
|
||||
bad:
|
||||
#endif
|
||||
rc = 1;
|
||||
goto done;
|
||||
}
|
||||
if (copy(bf, (long)loc, tf)) {
|
||||
bad1:
|
||||
rc = 1;
|
||||
goto done1;
|
||||
}
|
||||
if (!(bf = FREOPEN(b->ufnm, f__w_mode[0], bf)))
|
||||
goto bad1;
|
||||
rewind(tf);
|
||||
if (copy(tf, (long)loc, bf))
|
||||
goto bad1;
|
||||
b->uwrt = 1;
|
||||
b->urw = 2;
|
||||
#ifdef NON_UNIX_STDIO
|
||||
if (b->ufmt) {
|
||||
fclose(bf);
|
||||
if (!(bf = FOPEN(b->ufnm, f__w_mode[3])))
|
||||
goto bad;
|
||||
FSEEK(bf,(OFF_T)0,SEEK_END);
|
||||
b->urw = 3;
|
||||
}
|
||||
#endif
|
||||
done1:
|
||||
fclose(tf);
|
||||
done:
|
||||
f__cf = b->ufd = bf;
|
||||
#else /* NO_TRUNCATE */
|
||||
if (b->urw & 2)
|
||||
fflush(b->ufd); /* necessary on some Linux systems */
|
||||
#ifndef FTRUNCATE
|
||||
#define FTRUNCATE ftruncate
|
||||
#endif
|
||||
rc = FTRUNCATE(fileno(b->ufd), loc);
|
||||
/* The following FSEEK is unnecessary on some systems, */
|
||||
/* but should be harmless. */
|
||||
FSEEK(b->ufd, (OFF_T)0, SEEK_END);
|
||||
#endif /* NO_TRUNCATE */
|
||||
if (rc)
|
||||
err(a->aerr,111,"endfile");
|
||||
return 0;
|
||||
}
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
Binary file not shown.
@ -0,0 +1,22 @@
|
||||
#include "f2c.h"
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#ifndef REAL
|
||||
#define REAL double
|
||||
#endif
|
||||
|
||||
#ifdef KR_headers
|
||||
double erf();
|
||||
REAL erf_(x) real *x;
|
||||
#else
|
||||
extern double erf(double);
|
||||
REAL erf_(real *x)
|
||||
#endif
|
||||
{
|
||||
return( erf((double)*x) );
|
||||
}
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue