Download src/util/f2c_lite.c from camenduru/pocketsphinx: direct link, hf CLI and curl.
- Browser
- Download file 9.42 kB
-
https://huggingface.co/camenduru/pocketsphinx/resolve/main/src/util/f2c_lite.c
- Command line
-
hf download hf://camenduru/pocketsphinx/src/util/f2c_lite.c
-
curl -L -o f2c_lite.c https://huggingface.co/camenduru/pocketsphinx/resolve/main/src/util/f2c_lite.c
9.42 kB
| 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; | |
| } | |
| /* You'll want this if you redo the *_lite.c files with the -C option | |
| * to f2c for checking array subscripts. (It's not suggested you do that | |
| * for production use, of course.) */ | |
| 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; | |
| } | |
| extern double sqrt(); | |
| float | |
| f__cabs(real, imag) | |
| float real, imag; | |
| float | |
| f__cabs(float real, float imag) | |
| { | |
| 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); /*overflow!! */ | |
| return (temp); | |
| } | |
| VOID | |
| s_cnjg(r, z) | |
| complex *r, *z; | |
| s_cnjg(complex * r, complex * z) | |
| { | |
| r->r = z->r; | |
| r->i = -z->i; | |
| } | |
| float | |
| r_imag(z) | |
| complex *z; | |
| float | |
| r_imag(complex * z) | |
| { | |
| return (z->i); | |
| } | |
| double log(); | |
| float | |
| r_lg10(x) | |
| real *x; | |
| float | |
| r_lg10(real * x) | |
| { | |
| return (log10e * log(*x)); | |
| } | |
| float | |
| r_sign(a, b) | |
| real *a, *b; | |
| float | |
| r_sign(real * a, real * b) | |
| { | |
| float x; | |
| x = (*a >= 0 ? *a : -*a); | |
| return (*b >= 0 ? x : -x); | |
| } | |
| double floor(); | |
| integer | |
| i_dnnt(x) | |
| real *x; | |
| integer | |
| i_dnnt(real * x) | |
| { | |
| return ((*x) >= 0 ? floor(*x + .5) : -floor(.5 - *x)); | |
| } | |
| double pow(); | |
| double | |
| pow_dd(ap, bp) | |
| doublereal *ap, *bp; | |
| double | |
| pow_dd(doublereal * ap, doublereal * bp) | |
| { | |
| return (pow(*ap, *bp)); | |
| } | |
| float | |
| pow_ri(ap, bp) | |
| real *ap; | |
| integer *bp; | |
| float | |
| pow_ri(real * ap, integer * bp) | |
| { | |
| 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); | |
| } | |
| /* Unless compiled with -DNO_OVERWRITE, this variant of s_cat allows the | |
| * target of a concatenation to appear on its right-hand side (contrary | |
| * to the Fortran 77 Standard, but in accordance with Fortran 90). | |
| */ | |
| extern char *F77_aloc(); | |
| extern void free(); | |
| extern void exit_(); | |
| extern char *F77_aloc(ftnlen, char *); | |
| VOID | |
| s_cat(lp, rpp, rnp, np, ll) | |
| char *lp, *rpp[]; | |
| ftnlen rnp[], *np, ll; | |
| s_cat(char *lp, char *rpp[], ftnlen rnp[], ftnlen * np, ftnlen ll) | |
| { | |
| ftnlen i, nc; | |
| char *rp; | |
| ftnlen n = *np; | |
| 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; | |
| 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++ = ' '; | |
| if (lp0) { | |
| memmove(lp0, lp1, L); | |
| free(lp1); | |
| } | |
| } | |
| /* compare two strings */ | |
| integer | |
| s_cmp(a0, b0, la, lb) | |
| char *a0, *b0; | |
| ftnlen la, lb; | |
| integer | |
| s_cmp(char *a0, char *b0, ftnlen la, ftnlen lb) | |
| { | |
| 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); | |
| } | |
| /* Unless compiled with -DNO_OVERWRITE, this variant of s_copy allows the | |
| * target of an assignment to appear on its right-hand side (contrary | |
| * to the Fortran 77 Standard, but in accordance with Fortran 90), | |
| * as in a(2:5) = a(4:7) . | |
| */ | |
| /* assign strings: a = b */ | |
| VOID | |
| s_copy(a, b, la, lb) | |
| register char *a, *b; | |
| ftnlen la, lb; | |
| void | |
| s_copy(register char *a, register char *b, ftnlen la, ftnlen lb) | |
| { | |
| register char *aend, *bend; | |
| aend = a + la; | |
| if (la <= lb) | |
| if (a <= b || a >= b + la) | |
| while (a < aend) | |
| *a++ = *b++; | |
| else | |
| for (b += la; a < aend;) | |
| *--aend = *--b; | |
| else { | |
| bend = b + lb; | |
| if (a <= b || a >= bend) | |
| while (b < bend) | |
| *a++ = *b++; | |
| else { | |
| a += lb; | |
| while (b < bend) | |
| *--a = *--bend; | |
| a += lb; | |
| } | |
| while (a < aend) | |
| *a++ = ' '; | |
| } | |
| } | |
| float f__cabs(); | |
| float | |
| z_abs(z) | |
| complex *z; | |
| float f__cabs(float, float); | |
| float | |
| z_abs(complex * z) | |
| { | |
| return (f__cabs(z->r, z->i)); | |
| } | |
| extern void sig_die(); | |
| VOID | |
| z_div(c, a, b) | |
| complex *a, *b, *c; | |
| extern void sig_die(char *, int); | |
| void | |
| z_div(complex * c, complex * a, complex * b) | |
| { | |
| float ratio, den; | |
| float abr, abi; | |
| if ((abr = b->r) < 0.) | |
| abr = -abr; | |
| if ((abi = b->i) < 0.) | |
| abi = -abi; | |
| if (abr <= abi) { | |
| /*Let IEEE Infinties handle this ;( */ | |
| /*if(abi == 0) | |
| sig_die("complex division by zero", 1); */ | |
| 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; | |
| } | |
| } | |
| double sqrt(); | |
| double f__cabs(); | |
| VOID | |
| z_sqrt(r, z) | |
| complex *r, *z; | |
| extern float f__cabs(float, float); | |
| void | |
| z_sqrt(complex * r, complex * z) | |
| { | |
| 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; | |
| } | |
| } | |
| extern "C" { | |
| integer pow_ii(ap, bp) integer *ap, *bp; | |
| integer pow_ii(integer * ap, integer * bp) | |
| { | |
| 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); | |
| } | |
| } | |
| extern void f_exit(); | |
| VOID | |
| s_stop(s, n) | |
| char *s; | |
| ftnlen n; | |
| extern "C" { | |
| extern "C" { | |
| void f_exit(void); | |
| int s_stop(char *s, ftnlen n) | |
| { | |
| int i; | |
| if (n > 0) { | |
| fprintf(stderr, "STOP "); | |
| for (i = 0; i < n; ++i) | |
| putc(*s++, stderr); | |
| fprintf(stderr, " statement executed\n"); | |
| } | |
| f_exit(); | |
| exit(0); | |
| /* We cannot avoid (useless) compiler diagnostics here: */ | |
| /* some compilers complain if there is no return statement, */ | |
| /* and others complain that this one cannot be reached. */ | |
| return 0; /* NOT REACHED */ | |
| } | |
| } | |
| } | |