1 | If your compiler does not recognize ANSI C headers,
|
---|
2 | compile with KR_headers defined: either add -DKR_headers
|
---|
3 | to the definition of CFLAGS in the makefile, or insert
|
---|
4 |
|
---|
5 | #define KR_headers
|
---|
6 |
|
---|
7 | at the top of f2c.h , cabs.c , main.c , and sig_die.c .
|
---|
8 |
|
---|
9 | Under MS-DOS, compile s_paus.c with -DMSDOS.
|
---|
10 |
|
---|
11 | If you have a really ancient K&R C compiler that does not understand
|
---|
12 | void, add -Dvoid=int to the definition of CFLAGS in the makefile.
|
---|
13 |
|
---|
14 | If you use a C++ compiler, first create a local f2c.h by appending
|
---|
15 | f2ch.add to the usual f2c.h, e.g., by issuing the command
|
---|
16 | make f2c.h
|
---|
17 | which assumes f2c.h is installed in /usr/include .
|
---|
18 |
|
---|
19 | If your system lacks onexit() and you are not using an ANSI C
|
---|
20 | compiler, then you should compile main.c, s_paus.c, s_stop.c, and
|
---|
21 | sig_die.c with NO_ONEXIT defined. See the comments about onexit in
|
---|
22 | the makefile.
|
---|
23 |
|
---|
24 | If your system has a double drem() function such that drem(a,b)
|
---|
25 | is the IEEE remainder function (with double a, b), then you may
|
---|
26 | wish to compile r_mod.c and d_mod.c with IEEE_drem defined.
|
---|
27 | On some systems, you may also need to compile with -Ddrem=remainder .
|
---|
28 |
|
---|
29 | To check for transmission errors, issue the command
|
---|
30 | make check
|
---|
31 | This assumes you have the xsum program whose source, xsum.c,
|
---|
32 | is distributed as part of "all from f2c/src". If you do not
|
---|
33 | have xsum, you can obtain xsum.c by sending the following E-mail
|
---|
34 | message to netlib@netlib.bell-labs.com
|
---|
35 | send xsum.c from f2c/src
|
---|
36 |
|
---|
37 | The makefile assumes you have installed f2c.h in a standard
|
---|
38 | place (and does not cause recompilation when f2c.h is changed);
|
---|
39 | f2c.h comes with "all from f2c" (the source for f2c) and is
|
---|
40 | available separately ("f2c.h from f2c").
|
---|
41 |
|
---|
42 | Most of the routines in libF77 are support routines for Fortran
|
---|
43 | intrinsic functions or for operations that f2c chooses not
|
---|
44 | to do "in line". There are a few exceptions, summarized below --
|
---|
45 | functions and subroutines that appear to your program as ordinary
|
---|
46 | external Fortran routines.
|
---|
47 |
|
---|
48 | 1. CALL ABORT prints a message and causes a core dump.
|
---|
49 |
|
---|
50 | 2. ERF(r) and DERF(d) and the REAL and DOUBLE PRECISION
|
---|
51 | error functions (with x REAL and d DOUBLE PRECISION);
|
---|
52 | DERF must be declared DOUBLE PRECISION in your program.
|
---|
53 | Both ERF and DERF assume your C library provides the
|
---|
54 | underlying erf() function (which not all systems do).
|
---|
55 |
|
---|
56 | 3. ERFC(r) and DERFC(d) are the complementary error functions:
|
---|
57 | ERFC(r) = 1 - ERF(r) and DERFC(d) = 1.d0 - DERFC(d)
|
---|
58 | (except that their results may be more accurate than
|
---|
59 | explicitly evaluating the above formulae would give).
|
---|
60 | Again, ERFC and r are REAL, and DERFC and d are DOUBLE
|
---|
61 | PRECISION (and must be declared as such in your program),
|
---|
62 | and ERFC and DERFC rely on your system's erfc().
|
---|
63 |
|
---|
64 | 4. CALL GETARG(n,s), where n is an INTEGER and s is a CHARACTER
|
---|
65 | variable, sets s to the n-th command-line argument (or to
|
---|
66 | all blanks if there are fewer than n command-line arguments);
|
---|
67 | CALL GETARG(0,s) sets s to the name of the program (on systems
|
---|
68 | that support this feature). See IARGC below.
|
---|
69 |
|
---|
70 | 5. CALL GETENV(name, value), where name and value are of type
|
---|
71 | CHARACTER, sets value to the environment value, $name, of
|
---|
72 | name (or to blanks if $name has not been set).
|
---|
73 |
|
---|
74 | 6. NARGS = IARGC() sets NARGS to the number of command-line
|
---|
75 | arguments (an INTEGER value).
|
---|
76 |
|
---|
77 | 7. CALL SIGNAL(n,func), where n is an INTEGER and func is an
|
---|
78 | EXTERNAL procedure, arranges for func to be invoked when
|
---|
79 | signal n occurs (on systems where this makes sense).
|
---|
80 |
|
---|
81 | 8. CALL SYSTEM(cmd), where cmd is of type CHARACTER, passes
|
---|
82 | cmd to the system's command processor (on systems where
|
---|
83 | this can be done).
|
---|
84 |
|
---|
85 | The makefile does not attempt to compile pow_qq.c, qbitbits.c,
|
---|
86 | and qbitshft.c, which are meant for use with INTEGER*8. To use
|
---|
87 | INTEGER*8, you must modify f2c.h to declare longint and ulongint
|
---|
88 | appropriately; then add pow_qq.o to the POW = line in the makefile,
|
---|
89 | and add " qbitbits.o qbitshft.o" to the makefile's F90BIT = line.
|
---|
90 |
|
---|
91 | Following Fortran 90, s_cat.c and s_copy.c allow the target of a
|
---|
92 | (character string) assignment to be appear on its right-hand, at
|
---|
93 | the cost of some extra overhead for all run-time concatenations.
|
---|
94 | If you prefer the extra efficiency that comes with the Fortran 77
|
---|
95 | requirement that the left-hand side of a character assignment not
|
---|
96 | be involved in the right-hand side, compile s_cat.c and s_copy.c
|
---|
97 | with -DNO_OVERWRITE .
|
---|
98 |
|
---|
99 | If your system lacks a ranlib command, you don't need it.
|
---|
100 | Either comment out the makefile's ranlib invocation, or install
|
---|
101 | a harmless "ranlib" command somewhere in your PATH, such as the
|
---|
102 | one-line shell script
|
---|
103 |
|
---|
104 | exit 0
|
---|
105 |
|
---|
106 | or (on some systems)
|
---|
107 |
|
---|
108 | exec /usr/bin/ar lts $1 >/dev/null
|
---|
109 |
|
---|
110 | If your compiler complains about the signal calls in main.c, s_paus.c,
|
---|
111 | and signal_.c, you may need to adjust signal1.h suitably. See the
|
---|
112 | comments in signal1.h.
|
---|