| | #include <math.h> |
| | #include <stdio.h> |
| | #include <stdlib.h> |
| | #include <string.h> |
| | #include <assert.h> |
| |
|
| | #include "util/f2c.h" |
| |
|
| | #ifdef _MSC_VER |
| | #pragma warning (disable: 4244) |
| | #endif |
| |
|
| |
|
| | extern void |
| | s_wsfe(cilist * f) |
| | {(void)f; |
| | } |
| | extern void |
| | e_wsfe(void) |
| | {; |
| | } |
| | extern void |
| | do_fio(integer * c, char *s, ftnlen l) |
| | {(void)c;(void)s;(void)l; |
| | } |
| |
|
| | |
| | |
| | |
| | extern int |
| | s_rnge(char *var, int index, char *routine, int lineno) |
| | { |
| | fprintf(stderr, |
| | "array index out-of-bounds for %s[%d] in routine %s:%d\n", var, |
| | index, routine, lineno); |
| | fflush(stderr); |
| | assert(2+2 == 5); |
| | return 0; |
| | } |
| |
|
| |
|
| | #ifdef KR_headers |
| | extern double sqrt(); |
| | float |
| | f__cabs(real, imag) |
| | float real, imag; |
| | #else |
| | #undef abs |
| |
|
| | float |
| | f__cabs(float real, float imag) |
| | #endif |
| | { |
| | float temp; |
| |
|
| | if (real < 0) |
| | real = -real; |
| | if (imag < 0) |
| | imag = -imag; |
| | if (imag > real) { |
| | temp = real; |
| | real = imag; |
| | imag = temp; |
| | } |
| | if ((imag + real) == real) |
| | return ((float) real); |
| |
|
| | temp = imag / real; |
| | temp = real * sqrt(1.0 + temp * temp); |
| | return (temp); |
| | } |
| |
|
| |
|
| | VOID |
| | #ifdef KR_headers |
| | s_cnjg(r, z) |
| | complex *r, *z; |
| | #else |
| | s_cnjg(complex * r, complex * z) |
| | #endif |
| | { |
| | r->r = z->r; |
| | r->i = -z->i; |
| | } |
| |
|
| |
|
| | #ifdef KR_headers |
| | float |
| | r_imag(z) |
| | complex *z; |
| | #else |
| | float |
| | r_imag(complex * z) |
| | #endif |
| | { |
| | return (z->i); |
| | } |
| |
|
| |
|
| | #define log10e 0.43429448190325182765 |
| |
|
| | #ifdef KR_headers |
| | double log(); |
| | float |
| | r_lg10(x) |
| | real *x; |
| | #else |
| | #undef abs |
| |
|
| | float |
| | r_lg10(real * x) |
| | #endif |
| | { |
| | return (log10e * log(*x)); |
| | } |
| |
|
| |
|
| | #ifdef KR_headers |
| | float |
| | r_sign(a, b) |
| | real *a, *b; |
| | #else |
| | float |
| | r_sign(real * a, real * b) |
| | #endif |
| | { |
| | float x; |
| | x = (*a >= 0 ? *a : -*a); |
| | return (*b >= 0 ? x : -x); |
| | } |
| |
|
| |
|
| | #ifdef KR_headers |
| | double floor(); |
| | integer |
| | i_dnnt(x) |
| | real *x; |
| | #else |
| | #undef abs |
| |
|
| | integer |
| | i_dnnt(real * x) |
| | #endif |
| | { |
| | return ((*x) >= 0 ? floor(*x + .5) : -floor(.5 - *x)); |
| | } |
| |
|
| |
|
| | #ifdef KR_headers |
| | double pow(); |
| | double |
| | pow_dd(ap, bp) |
| | doublereal *ap, *bp; |
| | #else |
| | #undef abs |
| |
|
| | double |
| | pow_dd(doublereal * ap, doublereal * bp) |
| | #endif |
| | { |
| | return (pow(*ap, *bp)); |
| | } |
| |
|
| |
|
| | #ifdef KR_headers |
| | float |
| | pow_ri(ap, bp) |
| | real *ap; |
| | integer *bp; |
| | #else |
| | float |
| | pow_ri(real * ap, integer * bp) |
| | #endif |
| | { |
| | float pow, x; |
| | integer n; |
| | unsigned long u; |
| |
|
| | pow = 1; |
| | x = *ap; |
| | n = *bp; |
| |
|
| | if (n != 0) { |
| | if (n < 0) { |
| | n = -n; |
| | x = 1 / x; |
| | } |
| | for (u = n;;) { |
| | if (u & 01) |
| | pow *= x; |
| | if (u >>= 1) |
| | x *= x; |
| | else |
| | break; |
| | } |
| | } |
| | return (pow); |
| | } |
| |
|
| | |
| | |
| | |
| | |
| | #define NO_OVERWRITE |
| |
|
| |
|
| | #ifndef NO_OVERWRITE |
| |
|
| | #undef abs |
| | #ifdef KR_headers |
| | extern char *F77_aloc(); |
| | extern void free(); |
| | extern void exit_(); |
| | #else |
| |
|
| | extern char *F77_aloc(ftnlen, char *); |
| | #endif |
| |
|
| | #endif |
| |
|
| | VOID |
| | #ifdef KR_headers |
| | s_cat(lp, rpp, rnp, np, ll) |
| | char *lp, *rpp[]; |
| | ftnlen rnp[], *np, ll; |
| | #else |
| | s_cat(char *lp, char *rpp[], ftnlen rnp[], ftnlen * np, ftnlen ll) |
| | #endif |
| | { |
| | ftnlen i, nc; |
| | char *rp; |
| | ftnlen n = *np; |
| | #ifndef NO_OVERWRITE |
| | ftnlen L, m; |
| | char *lp0, *lp1; |
| |
|
| | lp0 = 0; |
| | lp1 = lp; |
| | L = ll; |
| | i = 0; |
| | while (i < n) { |
| | rp = rpp[i]; |
| | m = rnp[i++]; |
| | if (rp >= lp1 || rp + m <= lp) { |
| | if ((L -= m) <= 0) { |
| | n = i; |
| | break; |
| | } |
| | lp1 += m; |
| | continue; |
| | } |
| | lp0 = lp; |
| | lp = lp1 = F77_aloc(L = ll, "s_cat"); |
| | break; |
| | } |
| | lp1 = lp; |
| | #endif |
| | for (i = 0; i < n; ++i) { |
| | nc = ll; |
| | if (rnp[i] < nc) |
| | nc = rnp[i]; |
| | ll -= nc; |
| | rp = rpp[i]; |
| | while (--nc >= 0) |
| | *lp++ = *rp++; |
| | } |
| | while (--ll >= 0) |
| | *lp++ = ' '; |
| | #ifndef NO_OVERWRITE |
| | if (lp0) { |
| | memmove(lp0, lp1, L); |
| | free(lp1); |
| | } |
| | #endif |
| | } |
| |
|
| |
|
| | |
| |
|
| | #ifdef KR_headers |
| | integer |
| | s_cmp(a0, b0, la, lb) |
| | char *a0, *b0; |
| | ftnlen la, lb; |
| | #else |
| | integer |
| | s_cmp(char *a0, char *b0, ftnlen la, ftnlen lb) |
| | #endif |
| | { |
| | register unsigned char *a, *aend, *b, *bend; |
| | a = (unsigned char *) a0; |
| | b = (unsigned char *) b0; |
| | aend = a + la; |
| | bend = b + lb; |
| |
|
| | if (la <= lb) { |
| | while (a < aend) |
| | if (*a != *b) |
| | return (*a - *b); |
| | else { |
| | ++a; |
| | ++b; |
| | } |
| |
|
| | while (b < bend) |
| | if (*b != ' ') |
| | return (' ' - *b); |
| | else |
| | ++b; |
| | } |
| |
|
| | else { |
| | while (b < bend) |
| | if (*a == *b) { |
| | ++a; |
| | ++b; |
| | } |
| | else |
| | return (*a - *b); |
| | while (a < aend) |
| | if (*a != ' ') |
| | return (*a - ' '); |
| | else |
| | ++a; |
| | } |
| | return (0); |
| | } |
| |
|
| | |
| | |
| | |
| | |
| | |
| |
|
| |
|
| |
|
| | |
| |
|
| | #ifdef KR_headers |
| | VOID |
| | s_copy(a, b, la, lb) |
| | register char *a, *b; |
| | ftnlen la, lb; |
| | #else |
| | void |
| | s_copy(register char *a, register char *b, ftnlen la, ftnlen lb) |
| | #endif |
| | { |
| | register char *aend, *bend; |
| |
|
| | aend = a + la; |
| |
|
| | if (la <= lb) |
| | #ifndef NO_OVERWRITE |
| | if (a <= b || a >= b + la) |
| | #endif |
| | while (a < aend) |
| | *a++ = *b++; |
| | #ifndef NO_OVERWRITE |
| | else |
| | for (b += la; a < aend;) |
| | *--aend = *--b; |
| | #endif |
| |
|
| | else { |
| | bend = b + lb; |
| | #ifndef NO_OVERWRITE |
| | if (a <= b || a >= bend) |
| | #endif |
| | while (b < bend) |
| | *a++ = *b++; |
| | #ifndef NO_OVERWRITE |
| | else { |
| | a += lb; |
| | while (b < bend) |
| | *--a = *--bend; |
| | a += lb; |
| | } |
| | #endif |
| | while (a < aend) |
| | *a++ = ' '; |
| | } |
| | } |
| |
|
| |
|
| | #ifdef KR_headers |
| | float f__cabs(); |
| | float |
| | z_abs(z) |
| | complex *z; |
| | #else |
| | float f__cabs(float, float); |
| | float |
| | z_abs(complex * z) |
| | #endif |
| | { |
| | return (f__cabs(z->r, z->i)); |
| | } |
| |
|
| |
|
| | #ifdef KR_headers |
| | extern void sig_die(); |
| | VOID |
| | z_div(c, a, b) |
| | complex *a, *b, *c; |
| | #else |
| | extern void sig_die(char *, int); |
| | void |
| | z_div(complex * c, complex * a, complex * b) |
| | #endif |
| | { |
| | float ratio, den; |
| | float abr, abi; |
| |
|
| | if ((abr = b->r) < 0.) |
| | abr = -abr; |
| | if ((abi = b->i) < 0.) |
| | abi = -abi; |
| | if (abr <= abi) { |
| | |
| | |
| | |
| | ratio = b->r / b->i; |
| | den = b->i * (1 + ratio * ratio); |
| | c->r = (a->r * ratio + a->i) / den; |
| | c->i = (a->i * ratio - a->r) / den; |
| | } |
| |
|
| | else { |
| | ratio = b->i / b->r; |
| | den = b->r * (1 + ratio * ratio); |
| | c->r = (a->r + a->i * ratio) / den; |
| | c->i = (a->i - a->r * ratio) / den; |
| | } |
| |
|
| | } |
| |
|
| |
|
| | #ifdef KR_headers |
| | double sqrt(); |
| | double f__cabs(); |
| | VOID |
| | z_sqrt(r, z) |
| | complex *r, *z; |
| | #else |
| | #undef abs |
| |
|
| | extern float f__cabs(float, float); |
| | void |
| | z_sqrt(complex * r, complex * z) |
| | #endif |
| | { |
| | float mag; |
| |
|
| | if ((mag = f__cabs(z->r, z->i)) == 0.) |
| | r->r = r->i = 0.; |
| | else if (z->r > 0) { |
| | r->r = sqrt(0.5 * (mag + z->r)); |
| | r->i = z->i / r->r / 2; |
| | } |
| | else { |
| | r->i = sqrt(0.5 * (mag - z->r)); |
| | if (z->i < 0) |
| | r->i = -r->i; |
| | r->r = z->i / r->i / 2; |
| | } |
| | } |
| |
|
| | #ifdef __cplusplus |
| | extern "C" { |
| | #endif |
| |
|
| | #ifdef KR_headers |
| | integer pow_ii(ap, bp) integer *ap, *bp; |
| | #else |
| | integer pow_ii(integer * ap, integer * bp) |
| | #endif |
| | { |
| | integer pow, x, n; |
| | unsigned long u; |
| |
|
| | x = *ap; |
| | n = *bp; |
| |
|
| | if (n <= 0) { |
| | if (n == 0 || x == 1) |
| | return 1; |
| | if (x != -1) |
| | return x != 0 ? 1 / x : 0; |
| | n = -n; |
| | } u = n; |
| | for (pow = 1;;) { |
| | if (u & 01) |
| | pow *= x; |
| | if (u >>= 1) |
| | x *= x; |
| | else |
| | break; |
| | } |
| | return (pow); |
| | } |
| | #ifdef __cplusplus |
| | } |
| | #endif |
| |
|
| | #ifdef KR_headers |
| | extern void f_exit(); |
| | VOID |
| | s_stop(s, n) |
| | char *s; |
| | ftnlen n; |
| | #else |
| | #undef abs |
| | #undef min |
| | #undef max |
| | #ifdef __cplusplus |
| | extern "C" { |
| | #endif |
| | #ifdef __cplusplus |
| | extern "C" { |
| | #endif |
| | void f_exit(void); |
| |
|
| | int s_stop(char *s, ftnlen n) |
| | #endif |
| | { |
| | int i; |
| |
|
| | if (n > 0) { |
| | fprintf(stderr, "STOP "); |
| | for (i = 0; i < n; ++i) |
| | putc(*s++, stderr); |
| | fprintf(stderr, " statement executed\n"); |
| | } |
| | #ifdef NO_ONEXIT |
| | f_exit(); |
| | #endif |
| | exit(0); |
| |
|
| | |
| | |
| | |
| |
|
| | return 0; |
| | } |
| | #ifdef __cplusplus |
| | } |
| | #endif |
| | #ifdef __cplusplus |
| | } |
| | #endif |
| |
|