diff options
author | emaste <emaste@FreeBSD.org> | 2010-09-14 01:40:59 +0000 |
---|---|---|
committer | emaste <emaste@FreeBSD.org> | 2010-09-14 01:40:59 +0000 |
commit | 362fdc76797715c62d6ca52e360da11de80f8220 (patch) | |
tree | 5b8ae9a5b5762e50b7919f16ec28a8fba2867dcf /contrib/libf2c/libI77/lread.c | |
parent | 8f31ef9b337a5ba8eeaefa1a731fc3200cad5ecf (diff) | |
download | FreeBSD-src-362fdc76797715c62d6ca52e360da11de80f8220.zip FreeBSD-src-362fdc76797715c62d6ca52e360da11de80f8220.tar.gz |
Remove libf2c. It hasn't been used for more than 11 years, since revision
1.90 (CVS; SVN r45770) of lib/Makefile.
Diffstat (limited to 'contrib/libf2c/libI77/lread.c')
-rw-r--r-- | contrib/libf2c/libI77/lread.c | 845 |
1 files changed, 0 insertions, 845 deletions
diff --git a/contrib/libf2c/libI77/lread.c b/contrib/libf2c/libI77/lread.c deleted file mode 100644 index b926367..0000000 --- a/contrib/libf2c/libI77/lread.c +++ /dev/null @@ -1,845 +0,0 @@ -#include "config.h" -#include <ctype.h> -#include "f2c.h" -#include "fio.h" - -/* Compile with -DF8X_NML_ELIDE_QUOTES to permit eliding quotation */ -/* marks in namelist input a la the Fortran 8X Draft published in */ -/* the May 1989 issue of Fortran Forum. */ - - -extern char *f__fmtbuf; -extern int f__fmtlen; - -#ifdef Allow_TYQUAD -static longint f__llx; -#endif - -#undef abs -#undef min -#undef max -#include <stdlib.h> - -#include "fmt.h" -#include "lio.h" -#include "fp.h" - -int (*f__lioproc) (ftnint *, char *, ftnlen, ftnint), (*l_getc) (void), - (*l_ungetc) (int, FILE *); - -int l_eof; - -#define isblnk(x) (f__ltab[x+1]&B) -#define issep(x) (f__ltab[x+1]&SX) -#define isapos(x) (f__ltab[x+1]&AX) -#define isexp(x) (f__ltab[x+1]&EX) -#define issign(x) (f__ltab[x+1]&SG) -#define iswhit(x) (f__ltab[x+1]&WH) -#define SX 1 -#define B 2 -#define AX 4 -#define EX 8 -#define SG 16 -#define WH 32 -char f__ltab[128 + 1] = { /* offset one for EOF */ - 0, - 0, 0, AX, 0, 0, 0, 0, 0, 0, WH | B, SX | WH, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - SX | B | WH, 0, AX, 0, 0, 0, 0, AX, 0, 0, 0, SG, SX, SG, 0, SX, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, EX, EX, 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, - AX, 0, 0, 0, EX, EX, 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 -}; - -#ifdef ungetc -static int -un_getc (int x, FILE * f__cf) -{ - return ungetc (x, f__cf); -} -#else -#define un_getc ungetc -extern int ungetc (int, FILE *); /* for systems with a buggy stdio.h */ -#endif - -int -t_getc (void) -{ - int ch; - if (f__curunit->uend) - return (EOF); - if ((ch = getc (f__cf)) != EOF) - return (ch); - if (feof (f__cf)) - f__curunit->uend = l_eof = 1; - return (EOF); -} - -integer -e_rsle (void) -{ - int ch; - f__init = 1; - if (f__curunit->uend) - return (0); - while ((ch = t_getc ()) != '\n') - if (ch == EOF) - { - if (feof (f__cf)) - f__curunit->uend = l_eof = 1; - return EOF; - } - return (0); -} - -flag f__lquit; -int f__lcount, f__ltype, nml_read; -char *f__lchar; -double f__lx, f__ly; -#define ERR(x) if((n=(x))) {f__init &= ~2; return(n);} -#define GETC(x) (x=(*l_getc)()) -#define Ungetc(x,y) (*l_ungetc)(x,y) - -static int -l_R (int poststar, int reqint) -{ - char s[FMAX + EXPMAXDIGS + 4]; - register int ch; - register char *sp, *spe, *sp1; - long e, exp; - int havenum, havestar, se; - - if (!poststar) - { - if (f__lcount > 0) - return (0); - f__lcount = 1; - } -#ifdef Allow_TYQUAD - f__llx = 0; -#endif - f__ltype = 0; - exp = 0; - havestar = 0; -retry: - sp1 = sp = s; - spe = sp + FMAX; - havenum = 0; - - switch (GETC (ch)) - { - case '-': - *sp++ = ch; - sp1++; - spe++; - case '+': - GETC (ch); - } - while (ch == '0') - { - ++havenum; - GETC (ch); - } - while (isdigit (ch)) - { - if (sp < spe) - *sp++ = ch; - else - ++exp; - GETC (ch); - } - if (ch == '*' && !poststar) - { - if (sp == sp1 || exp || *s == '-') - { - errfl (f__elist->cierr, 112, "bad repetition count"); - } - poststar = havestar = 1; - *sp = 0; - f__lcount = atoi (s); - goto retry; - } - if (ch == '.') - { -#ifndef ALLOW_FLOAT_IN_INTEGER_LIST_INPUT - if (reqint) - errfl (f__elist->cierr, 115, "invalid integer"); -#endif - GETC (ch); - if (sp == sp1) - while (ch == '0') - { - ++havenum; - --exp; - GETC (ch); - } - while (isdigit (ch)) - { - if (sp < spe) - { - *sp++ = ch; - --exp; - } - GETC (ch); - } - } - havenum += sp - sp1; - se = 0; - if (issign (ch)) - goto signonly; - if (havenum && isexp (ch)) - { -#ifndef ALLOW_FLOAT_IN_INTEGER_LIST_INPUT - if (reqint) - errfl (f__elist->cierr, 115, "invalid integer"); -#endif - GETC (ch); - if (issign (ch)) - { - signonly: - if (ch == '-') - se = 1; - GETC (ch); - } - if (!isdigit (ch)) - { - bad: - errfl (f__elist->cierr, 112, "exponent field"); - } - - e = ch - '0'; - while (isdigit (GETC (ch))) - { - e = 10 * e + ch - '0'; - if (e > EXPMAX) - goto bad; - } - if (se) - exp -= e; - else - exp += e; - } - (void) Ungetc (ch, f__cf); - if (sp > sp1) - { - ++havenum; - while (*--sp == '0') - ++exp; - if (exp) - sprintf (sp + 1, "e%ld", exp); - else - sp[1] = 0; - f__lx = atof (s); -#ifdef Allow_TYQUAD - if (reqint & 2 && (se = sp - sp1 + exp) > 14 && se < 20) - { - /* Assuming 64-bit longint and 32-bit long. */ - if (exp < 0) - sp += exp; - if (sp1 <= sp) - { - f__llx = *sp1 - '0'; - while (++sp1 <= sp) - f__llx = 10 * f__llx + (*sp1 - '0'); - } - while (--exp >= 0) - f__llx *= 10; - if (*s == '-') - f__llx = -f__llx; - } -#endif - } - else - f__lx = 0.; - if (havenum) - f__ltype = TYLONG; - else - switch (ch) - { - case ',': - case '/': - break; - default: - if (havestar && (ch == ' ' || ch == '\t' || ch == '\n')) - break; - if (nml_read > 1) - { - f__lquit = 2; - return 0; - } - errfl (f__elist->cierr, 112, "invalid number"); - } - return 0; -} - -static int -rd_count (register int ch) -{ - if (ch < '0' || ch > '9') - return 1; - f__lcount = ch - '0'; - while (GETC (ch) >= '0' && ch <= '9') - f__lcount = 10 * f__lcount + ch - '0'; - Ungetc (ch, f__cf); - return f__lcount <= 0; -} - -static int -l_C (void) -{ - int ch, nml_save; - double lz; - if (f__lcount > 0) - return (0); - f__ltype = 0; - GETC (ch); - if (ch != '(') - { - if (nml_read > 1 && (ch < '0' || ch > '9')) - { - Ungetc (ch, f__cf); - f__lquit = 2; - return 0; - } - if (rd_count (ch)) - { - if (!f__cf || !feof (f__cf)) - errfl (f__elist->cierr, 112, "complex format"); - else - err (f__elist->cierr, (EOF), "lread"); - } - if (GETC (ch) != '*') - { - if (!f__cf || !feof (f__cf)) - errfl (f__elist->cierr, 112, "no star"); - else - err (f__elist->cierr, (EOF), "lread"); - } - if (GETC (ch) != '(') - { - Ungetc (ch, f__cf); - return (0); - } - } - else - f__lcount = 1; - while (iswhit (GETC (ch))); - Ungetc (ch, f__cf); - nml_save = nml_read; - nml_read = 0; - if ((ch = l_R (1, 0))) - return ch; - if (!f__ltype) - errfl (f__elist->cierr, 112, "no real part"); - lz = f__lx; - while (iswhit (GETC (ch))); - if (ch != ',') - { - (void) Ungetc (ch, f__cf); - errfl (f__elist->cierr, 112, "no comma"); - } - while (iswhit (GETC (ch))); - (void) Ungetc (ch, f__cf); - if ((ch = l_R (1, 0))) - return ch; - if (!f__ltype) - errfl (f__elist->cierr, 112, "no imaginary part"); - while (iswhit (GETC (ch))); - if (ch != ')') - errfl (f__elist->cierr, 112, "no )"); - f__ly = f__lx; - f__lx = lz; -#ifdef Allow_TYQUAD - f__llx = 0; -#endif - nml_read = nml_save; - return (0); -} - -static char nmLbuf[256], *nmL_next; -static int (*nmL_getc_save) (void); -static int (*nmL_ungetc_save) (int, FILE *); - -static int -nmL_getc (void) -{ - int rv; - if ((rv = *nmL_next++)) - return rv; - l_getc = nmL_getc_save; - l_ungetc = nmL_ungetc_save; - return (*l_getc) (); -} - -static int -nmL_ungetc (int x, FILE * f) -{ - f = f; /* banish non-use warning */ - return *--nmL_next = x; -} - -static int -Lfinish (int ch, int dot, int *rvp) -{ - char *s, *se; - static char what[] = "namelist input"; - - s = nmLbuf + 2; - se = nmLbuf + sizeof (nmLbuf) - 1; - *s++ = ch; - while (!issep (GETC (ch)) && ch != EOF) - { - if (s >= se) - { - nmLbuf_ovfl: - return *rvp = err__fl (f__elist->cierr, 131, what); - } - *s++ = ch; - if (ch != '=') - continue; - if (dot) - return *rvp = err__fl (f__elist->cierr, 112, what); - got_eq: - *s = 0; - nmL_getc_save = l_getc; - l_getc = nmL_getc; - nmL_ungetc_save = l_ungetc; - l_ungetc = nmL_ungetc; - nmLbuf[1] = *(nmL_next = nmLbuf) = ','; - *rvp = f__lcount = 0; - return 1; - } - if (dot) - goto done; - for (;;) - { - if (s >= se) - goto nmLbuf_ovfl; - *s++ = ch; - if (!isblnk (ch)) - break; - if (GETC (ch) == EOF) - goto done; - } - if (ch == '=') - goto got_eq; -done: - Ungetc (ch, f__cf); - return 0; -} - -static int -l_L (void) -{ - int ch, rv, sawdot; - if (f__lcount > 0) - return (0); - f__lcount = 1; - f__ltype = 0; - GETC (ch); - if (isdigit (ch)) - { - rd_count (ch); - if (GETC (ch) != '*') - { - if (!f__cf || !feof (f__cf)) - errfl (f__elist->cierr, 112, "no star"); - else - err (f__elist->cierr, (EOF), "lread"); - } - GETC (ch); - } - sawdot = 0; - if (ch == '.') - { - sawdot = 1; - GETC (ch); - } - switch (ch) - { - case 't': - case 'T': - if (nml_read && Lfinish (ch, sawdot, &rv)) - return rv; - f__lx = 1; - break; - case 'f': - case 'F': - if (nml_read && Lfinish (ch, sawdot, &rv)) - return rv; - f__lx = 0; - break; - default: - if (isblnk (ch) || issep (ch) || ch == EOF) - { - (void) Ungetc (ch, f__cf); - return (0); - } - if (nml_read > 1) - { - Ungetc (ch, f__cf); - f__lquit = 2; - return 0; - } - errfl (f__elist->cierr, 112, "logical"); - } - f__ltype = TYLONG; - while (!issep (GETC (ch)) && ch != EOF); - (void) Ungetc (ch, f__cf); - return (0); -} - -#define BUFSIZE 128 - -static int -l_CHAR (void) -{ - int ch, size, i; - static char rafail[] = "realloc failure"; - char quote, *p; - if (f__lcount > 0) - return (0); - f__ltype = 0; - if (f__lchar != NULL) - free (f__lchar); - size = BUFSIZE; - p = f__lchar = (char *) malloc ((unsigned int) size); - if (f__lchar == NULL) - errfl (f__elist->cierr, 113, "no space"); - - GETC (ch); - if (isdigit (ch)) - { - /* allow Fortran 8x-style unquoted string... */ - /* either find a repetition count or the string */ - f__lcount = ch - '0'; - *p++ = ch; - for (i = 1;;) - { - switch (GETC (ch)) - { - case '*': - if (f__lcount == 0) - { - f__lcount = 1; -#ifndef F8X_NML_ELIDE_QUOTES - if (nml_read) - goto no_quote; -#endif - goto noquote; - } - p = f__lchar; - goto have_lcount; - case ',': - case ' ': - case '\t': - case '\n': - case '/': - Ungetc (ch, f__cf); - /* no break */ - case EOF: - f__lcount = 1; - f__ltype = TYCHAR; - return *p = 0; - } - if (!isdigit (ch)) - { - f__lcount = 1; -#ifndef F8X_NML_ELIDE_QUOTES - if (nml_read) - { - no_quote: - errfl (f__elist->cierr, 112, - "undelimited character string"); - } -#endif - goto noquote; - } - *p++ = ch; - f__lcount = 10 * f__lcount + ch - '0'; - if (++i == size) - { - f__lchar = (char *) realloc (f__lchar, - (unsigned int) (size += BUFSIZE)); - if (f__lchar == NULL) - errfl (f__elist->cierr, 113, rafail); - p = f__lchar + i; - } - } - } - else - (void) Ungetc (ch, f__cf); -have_lcount: - if (GETC (ch) == '\'' || ch == '"') - quote = ch; - else if (isblnk (ch) || (issep (ch) && ch != '\n') || ch == EOF) - { - Ungetc (ch, f__cf); - return 0; - } -#ifndef F8X_NML_ELIDE_QUOTES - else if (nml_read > 1) - { - Ungetc (ch, f__cf); - f__lquit = 2; - return 0; - } -#endif - else - { - /* Fortran 8x-style unquoted string */ - *p++ = ch; - for (i = 1;;) - { - switch (GETC (ch)) - { - case ',': - case ' ': - case '\t': - case '\n': - case '/': - Ungetc (ch, f__cf); - /* no break */ - case EOF: - f__ltype = TYCHAR; - return *p = 0; - } - noquote: - *p++ = ch; - if (++i == size) - { - f__lchar = (char *) realloc (f__lchar, - (unsigned int) (size += BUFSIZE)); - if (f__lchar == NULL) - errfl (f__elist->cierr, 113, rafail); - p = f__lchar + i; - } - } - } - f__ltype = TYCHAR; - for (i = 0;;) - { - while (GETC (ch) != quote && ch != '\n' && ch != EOF && ++i < size) - *p++ = ch; - if (i == size) - { - newone: - f__lchar = (char *) realloc (f__lchar, - (unsigned int) (size += BUFSIZE)); - if (f__lchar == NULL) - errfl (f__elist->cierr, 113, rafail); - p = f__lchar + i - 1; - *p++ = ch; - } - else if (ch == EOF) - return (EOF); - else if (ch == '\n') - { - if (*(p - 1) != '\\') - continue; - i--; - p--; - if (++i < size) - *p++ = ch; - else - goto newone; - } - else if (GETC (ch) == quote) - { - if (++i < size) - *p++ = ch; - else - goto newone; - } - else - { - (void) Ungetc (ch, f__cf); - *p = 0; - return (0); - } - } -} - -int -c_le (cilist * a) -{ - if (f__init != 1) - f_init (); - f__init = 3; - f__fmtbuf = "list io"; - f__curunit = &f__units[a->ciunit]; - f__fmtlen = 7; - if (a->ciunit >= MXUNIT || a->ciunit < 0) - err (a->cierr, 101, "stler"); - f__scale = f__recpos = 0; - f__elist = a; - if (f__curunit->ufd == NULL && fk_open (SEQ, FMT, a->ciunit)) - err (a->cierr, 102, "lio"); - f__cf = f__curunit->ufd; - if (!f__curunit->ufmt) - err (a->cierr, 103, "lio"); - return (0); -} - -int -l_read (ftnint * number, char *ptr, ftnlen len, ftnint type) -{ -#define Ptr ((flex *)ptr) - int i, n, ch; - doublereal *yy; - real *xx; - for (i = 0; i < *number; i++) - { - if (f__lquit) - return (0); - if (l_eof) - err (f__elist->ciend, EOF, "list in"); - if (f__lcount == 0) - { - f__ltype = 0; - for (;;) - { - GETC (ch); - switch (ch) - { - case EOF: - err (f__elist->ciend, (EOF), "list in"); - case ' ': - case '\t': - case '\n': - continue; - case '/': - f__lquit = 1; - goto loopend; - case ',': - f__lcount = 1; - goto loopend; - default: - (void) Ungetc (ch, f__cf); - goto rddata; - } - } - } - rddata: - switch ((int) type) - { - case TYINT1: - case TYSHORT: - case TYLONG: -#ifndef ALLOW_FLOAT_IN_INTEGER_LIST_INPUT - ERR (l_R (0, 1)); - break; -#endif - case TYREAL: - case TYDREAL: - ERR (l_R (0, 0)); - break; -#ifdef TYQUAD - case TYQUAD: - n = l_R (0, 2); - if (n) - return n; - break; -#endif - case TYCOMPLEX: - case TYDCOMPLEX: - ERR (l_C ()); - break; - case TYLOGICAL1: - case TYLOGICAL2: - case TYLOGICAL: - ERR (l_L ()); - break; - case TYCHAR: - ERR (l_CHAR ()); - break; - } - while (GETC (ch) == ' ' || ch == '\t'); - if (ch != ',' || f__lcount > 1) - Ungetc (ch, f__cf); - loopend: - if (f__lquit) - return (0); - if (f__cf && ferror (f__cf)) - { - clearerr (f__cf); - errfl (f__elist->cierr, errno, "list in"); - } - if (f__ltype == 0) - goto bump; - switch ((int) type) - { - case TYINT1: - case TYLOGICAL1: - Ptr->flchar = (char) f__lx; - break; - case TYLOGICAL2: - case TYSHORT: - Ptr->flshort = (short) f__lx; - break; - case TYLOGICAL: - case TYLONG: - Ptr->flint = (ftnint) f__lx; - break; -#ifdef Allow_TYQUAD - case TYQUAD: - if (!(Ptr->fllongint = f__llx)) - Ptr->fllongint = f__lx; - break; -#endif - case TYREAL: - Ptr->flreal = f__lx; - break; - case TYDREAL: - Ptr->fldouble = f__lx; - break; - case TYCOMPLEX: - xx = (real *) ptr; - *xx++ = f__lx; - *xx = f__ly; - break; - case TYDCOMPLEX: - yy = (doublereal *) ptr; - *yy++ = f__lx; - *yy = f__ly; - break; - case TYCHAR: - b_char (f__lchar, ptr, len); - break; - } - bump: - if (f__lcount > 0) - f__lcount--; - ptr += len; - if (nml_read) - nml_read++; - } - return (0); -#undef Ptr -} - -integer -s_rsle (cilist * a) -{ - int n; - - f__reading = 1; - f__external = 1; - f__formatted = 1; - if ((n = c_le (a))) - return (n); - f__lioproc = l_read; - f__lquit = 0; - f__lcount = 0; - l_eof = 0; - if (f__curunit->uwrt && f__nowreading (f__curunit)) - err (a->cierr, errno, "read start"); - if (f__curunit->uend) - err (f__elist->ciend, (EOF), "read start"); - l_getc = t_getc; - l_ungetc = un_getc; - f__doend = xrd_SL; - return (0); -} |