Annotation of researchv10no/cmd/f2c/libI77.st, revision 1.1.1.1

1.1       root        1: ./ ADD NAME=libI77/Notice TIME=695663806
                      2: /****************************************************************
                      3: Copyright 1990, 1991, 1992 by AT&T Bell Laboratories and Bellcore.
                      4: 
                      5: Permission to use, copy, modify, and distribute this software
                      6: and its documentation for any purpose and without fee is hereby
                      7: granted, provided that the above copyright notice appear in all
                      8: copies and that both that the copyright notice and this
                      9: permission notice and warranty disclaimer appear in supporting
                     10: documentation, and that the names of AT&T Bell Laboratories or
                     11: Bellcore or any of their entities not be used in advertising or
                     12: publicity pertaining to distribution of the software without
                     13: specific, written prior permission.
                     14: 
                     15: AT&T and Bellcore disclaim all warranties with regard to this
                     16: software, including all implied warranties of merchantability
                     17: and fitness.  In no event shall AT&T or Bellcore be liable for
                     18: any special, indirect or consequential damages or any damages
                     19: whatsoever resulting from loss of use, data or profits, whether
                     20: in an action of contract, negligence or other tortious action,
                     21: arising out of or in connection with the use or performance of
                     22: this software.
                     23: ****************************************************************/
                     24: 
                     25: ./ ADD NAME=libI77/README TIME=711898327
                     26: If your compiler does not recognize ANSI C headers,
                     27: compile with KR_headers defined:  either add -DKR_headers
                     28: to the definition of CFLAGS in the makefile, or insert
                     29: 
                     30: #define KR_headers
                     31: 
                     32: at the top of f2c.h .
                     33: 
                     34: 
                     35: If your system lacks /usr/include/local.h ,
                     36: then you should create an appropriate local.h in
                     37: this directory.  An appropriate local.h may simply
                     38: be empty, or it may #define VAX or #define CRAY
                     39: (or whatever else you must do to make fp.h work right).
                     40: Alternatively, edit fp.h to suite your machine.
                     41: 
                     42: If your system lacks /usr/include/fcntl.h , then you
                     43: should simply create an empty fcntl.h in this directory.
                     44: If your compiler then complains about creat and open not
                     45: having a prototype, compile with OPEN_DECL defined.
                     46: On many systems, open and creat are declared in fcntl.h .
                     47: 
                     48: If your system's sprintf does not work the way ANSI C
                     49: specifies -- specifically, if it does not return the
                     50: number of characters transmitted -- then insert the line
                     51: 
                     52: #define USE_STRLEN
                     53: 
                     54: at the end of fmt.h .  This is necessary with
                     55: at least some versions of Sun software.
                     56: 
                     57: If your system's fopen does not like the ANSI binary
                     58: reading and writing modes "rb" and "wb", then you should
                     59: compile open.c with NON_ANSI_RW_MODES #defined.
                     60: 
                     61: If you get error messages about references to cf->_ptr
                     62: and cf->_base when compiling wrtfmt.c and wsfe.c or to
                     63: stderr->_flag when compiling err.c, then insert the line
                     64: 
                     65: #define NON_UNIX_STDIO
                     66: 
                     67: at the beginning of fio.h, and recompile these modules.
                     68: 
                     69: Unformatted sequential records consist of a length of record
                     70: contents, the record contents themselves, and the length of
                     71: record contents again (for backspace).  Prior to 17 Oct. 1991,
                     72: the length was of type int; now it is of type long, but you
                     73: can change it back to int by inserting
                     74: 
                     75: #define UIOLEN_int
                     76: 
                     77: at the beginning of fio.h.  This affects only sue.c and uio.c .
                     78: 
                     79: You may need to supply the following non-ANSI routines:
                     80: 
                     81:   fstat(int fileds, struct stat *buf) is similar
                     82: to stat(char *name, struct stat *buf), except that
                     83: the first argument, fileds, is the file descriptor
                     84: returned by open rather than the name of the file.
                     85: fstat is used in the system-dependent routine
                     86: canseek (in the libI77 source file err.c), which
                     87: is supposed to return 1 if it's possible to issue
                     88: seeks on the file in question, 0 if it's not; you may
                     89: need to suitably modify err.c .  On non-UNIX systems,
                     90: you can avoid references to fstat and stat by compiling
                     91: err.c, inquire.c, open.c, and util.c with MSDOS defined;
                     92: in that case, you may need to supply access(char *Name,0),
                     93: which is supposed to return 0 if file Name exists,
                     94: nonzero otherwise.
                     95: 
                     96:   char * mktemp(char *buf) is supposed to replace the
                     97: 6 trailing X's in buf with a unique number and then
                     98: return buf.  The idea is to get a unique name for
                     99: a temporary file.
                    100: 
                    101: On non-UNIX systems, you may need to change a few other,
                    102: e.g.: the form of name computed by mktemp() in endfile.c and
                    103: open.c; the use of the open(), close(), and creat() system
                    104: calls in endfile.c, err.c, open.c; and the modes in calls on
                    105: fopen() and fdopen() (and perhaps the use of fdopen() itself
                    106: -- it's supposed to return a FILE* corresponding to a given
                    107: an integer file descriptor) in err.c and open.c (component ufmt
                    108: of struct unit is 1 for formatted I/O -- text mode on some systems
                    109: -- and 0 for unformatted I/O -- binary mode on some systems).
                    110: 
                    111: For Turbo C++, in particular, you need to adjust the mktemp
                    112: invocations and should compile all of libI77 with -DMSDOS .
                    113: You also need to #undef ungetc in lread.c and rsne.c .
                    114: Don't use -mh -- it is horribly broken.
                    115: 
                    116: If you want to be able to load against libI77 but not libF77,
                    117: then you will need to add sig_die.o (from libF77) to libI77.
                    118: 
                    119: If you wish to use translated Fortran that has funny notions
                    120: of record length for direct unformatted I/O (i.e., that assumes
                    121: RECL= values in OPEN statements are not bytes but rather counts
                    122: of some other units -- e.g., 4-character words for VMS), then you
                    123: should insert an appropriate #define for url_Adjust at the
                    124: beginning of open.c .  For VMS Fortran, for example,
                    125: #define url_Adjust(x) x *= 4
                    126: would suffice.
                    127: 
                    128: To check for transmission errors, issue the command
                    129:        make check
                    130: This assumes you have the xsum program whose source, xsum.c,
                    131: is distributed as part of "all from f2c/src".  If you do not
                    132: have xsum, you can obtain xsum.c by sending the following E-mail
                    133: message to [email protected]
                    134:        send xsum.c from f2c/src
                    135: 
                    136: The makefile assumes you have installed f2c.h in a standard
                    137: place (and does not cause recompilation when f2c.h is changed);
                    138: f2c.h comes with "all from f2c" (the source for f2c) and is
                    139: available separately ("f2c.h from f2c").
                    140: 
                    141: By default, Fortran I/O units 5, 6, and 0 are pre-connected to
                    142: stdin, stdout, and stderr, respectively.  You can change this
                    143: behavior by changing f_init() in err.c to suit your needs.
                    144: Note that f2c assumes READ(*... means READ(5... and WRITE(*...
                    145: means WRITE(6... .  Moreover, an OPEN(n,... statement that does
                    146: not specify a file name (and does not specify STATUS='SCRATCH')
                    147: assumes FILE='fort.n' .  You can change this by editing open.c
                    148: and endfile.c suitably.
                    149: ./ ADD NAME=libI77/Version.c TIME=719849651
                    150: static char junk[] = "\n@(#) LIBI77 VERSION pjw,dmg-mods 23 Oct. 1992\n";
                    151: 
                    152: /*
                    153: 2.01   $ format added
                    154: 2.02   Coding bug in open.c repaired
                    155: 2.03   fixed bugs in lread.c (read * with negative f-format) and lio.c
                    156:        and lio.h (e-format conforming to spec)
                    157: 2.04   changed open.c and err.c (fopen and freopen respectively) to
                    158:        update to new c-library (append mode)
                    159: 2.05   added namelist capability
                    160: 2.06   allow internal list and namelist I/O
                    161: */
                    162: 
                    163: /*
                    164: close.c:
                    165:        allow upper-case STATUS= values
                    166: endfile.c
                    167:        create fort.nnn if unit nnn not open;
                    168:        else if (file length == 0) use creat() rather than copy;
                    169:        use local copy() rather than forking /bin/cp;
                    170:        rewind, fseek to clear buffer (for no reading past EOF)
                    171: err.c
                    172:        use neither setbuf nor setvbuf; make stderr buffered
                    173: fio.h
                    174:        #define _bufend
                    175: inquire.c
                    176:        upper case responses;
                    177:        omit byfile test from SEQUENTIAL=
                    178:        answer "YES" to DIRECT= for unopened file (open to debate)
                    179: lio.c
                    180:        flush stderr, stdout at end of each stmt
                    181:        space before character strings in list output only at line start
                    182: lio.h
                    183:        adjust LEW, LED consistent with old libI77
                    184: lread.c
                    185:        use atof()
                    186:        allow "nnn*," when reading complex constants
                    187: open.c
                    188:        try opening for writing when open for read fails, with
                    189:        special uwrt value (2) delaying creat() to first write;
                    190:        set curunit so error messages don't drop core;
                    191:        no file name ==> fort.nnn except for STATUS='SCRATCH'
                    192: rdfmt.c
                    193:        use atof(); trust EOF == end-of-file (so don't read past
                    194:        end-of-file after endfile stmt)
                    195: sfe.c
                    196:        flush stderr, stdout at end of each stmt
                    197: wrtfmt.c:
                    198:        use upper case
                    199:        put wrt_E and wrt_F into wref.c, use sprintf()
                    200:                rather than ecvt() and fcvt() [more accurate on VAX]
                    201: */
                    202: 
                    203: /* 16 Oct. 1988: uwrt = 3 after write, rewind, so close won't zap the file. */
                    204: 
                    205: /* 10 July 1989: change _bufend to buf_end in fio.h, wsfe.c, wrtfmt.c */
                    206: 
                    207: /* 28 Nov. 1989: corrections for IEEE and Cray arithmetic */
                    208: /* 29 Nov. 1989: change various int return types to long for f2c */
                    209: /* 30 Nov. 1989: various types from f2c.h */
                    210: /*  6 Dec. 1989: types corrected various places */
                    211: /* 19 Dec. 1989: make iostat= work right for internal I/O */
                    212: /*  8 Jan. 1990: add rsne, wsne -- routines for handling NAMELIST */
                    213: /* 28 Jan. 1990: have NAMELIST read treat $ as &, general white
                    214:                 space as blank */
                    215: /* 27 Mar. 1990: change an = to == in rd_L(rdfmt.c) so formatted reads
                    216:                 of logical values reject letters other than fFtT;
                    217:                 have nowwriting reset cf */
                    218: /* 14 Aug. 1990: adjust lread.c to treat tabs as spaces in list input */
                    219: /* 17 Aug. 1990: adjust open.c to recognize blank='Z...' as well as
                    220:                 blank='z...' when reopening an open file */
                    221: /* 30 Aug. 1990: prevent embedded blanks in list output of complex values;
                    222:                 omit exponent field in list output of values of
                    223:                 magnitude between 10 and 1e8; prevent writing stdin
                    224:                 and reading stdout or stderr; don't close stdin, stdout,
                    225:                 or stderr when reopening units 5, 6, 0. */
                    226: /* 18 Sep. 1990: add component udev to unit and consider old == new file
                    227:                 iff uinode and udev values agree; use stat rather than
                    228:                 access to check existence of file (when STATUS='OLD')*/
                    229: /* 2 Oct. 1990:  adjust rewind.c so two successive rewinds after a write
                    230:                 don't clobber the file. */
                    231: /* 9 Oct. 1990:  add #include "fcntl.h" to endfile.c, err.c, open.c;
                    232:                 adjust g_char in util.c for segmented memories. */
                    233: /* 17 Oct. 1990: replace abort() and _cleanup() with calls on
                    234:                 sig_die(...,1) (defined in main.c). */
                    235: /* 5 Nov. 1990:  changes to open.c: complain if new= is specified and the
                    236:                 file already exists; allow file= to be omitted in open stmts
                    237:                 and allow status='replace' (Fortran 90 extensions). */
                    238: /* 11 Dec. 1990: adjustments for POSIX. */
                    239: /* 15 Jan. 1991: tweak i_ungetc in rsli.c to allow reading from
                    240:                 strings in read-only memory. */
                    241: /* 25 Apr. 1991: adjust namelist stuff to work with f2c -i2 */
                    242: /* 26 Apr. 1991: fix some bugs with NAMELIST read of multi-dim. arrays */
                    243: /* 16 May 1991:  increase LEFBL in lio.h to bypass NeXT bug */
                    244: /* 17 Oct. 1991: change type of length field in sequential unformatted
                    245:                 records from int to long (for systems where sizeof(int)
                    246:                 can vary, depending on the compiler or compiler options). */
                    247: /* 14 Nov. 1991: change uint to Uint in fmt.h, rdfmt.c, wrtfmt.c.
                    248: /* 25 Nov. 1991: change uint to Uint in lwrite.c; change sizeof(int) to
                    249:                 sizeof(uioint) in fseeks in sue.c (missed on 17 Oct.). */
                    250: /* 1 Dec. 1991:  uio.c: add test for read failure (seq. unformatted reads);
                    251:                 adjust an error return from EOF to off end of record */
                    252: /* 12 Dec. 1991: rsli.c: fix bug with internal list input that caused
                    253:                 the last character of each record to be ignored.
                    254:                 iio.c: adjust error message in internal formatted
                    255:                 input from "end-of-file" to "off end of record" if
                    256:                 the format specifies more characters than the
                    257:                 record contains. */
                    258: /* 17 Jan. 1992: lread.c, rsne.c: in list and namelist input,
                    259:                 treat "r* ," and "r*," alike (where r is a
                    260:                 positive integer constant), and fix a bug in
                    261:                 handling null values following items with repeat
                    262:                 counts (e.g., 2*1,,3); for namelist reading
                    263:                 of a numeric array, allow a new name-value subsequence
                    264:                 to terminate the current one (as though the current
                    265:                 one ended with the right number of null values).
                    266:                 lio.h, lwrite.c: omit insignificant zeros in
                    267:                 list and namelist output. To get the old
                    268:                 behavior, compile with -DOld_list_output . */
                    269: /* 18 Jan. 1992: make list output consistent with F format by
                    270:                 printing .1 rather than 0.1 (introduced yesterday). */
                    271: /* 3 Feb. 1992:  rsne.c: fix namelist read bug that caused the
                    272:                 character following a comma to be ignored. */
                    273: /* 19 May 1992:  adjust iio.c, ilnw.c, rdfmt.c and rsli.c to make err=
                    274:                 work with internal list and formatted I/O. */
                    275: /* 18 July 1992: adjust rsne.c to allow namelist input to stop at
                    276:                 an & (e.g. &end). */
                    277: /* 23 July 1992: switch to ANSI prototypes unless KR_headers is #defined ;
                    278:                 recognize Z format (assuming 8-bit bytes). */
                    279: /* 14 Aug. 1992: tweak wrt_E in wref.c to avoid -NaN */
                    280: /* 23 Oct. 1992: Supply missing l_eof = 0 assignment to s_rsne() in rsne.c
                    281:                 (so end-of-file on other files won't confuse namelist
                    282:                 reads of external files).  Prepend f__ to external
                    283:                 names that are only of internal interest to lib[FI]77. */
                    284: ./ ADD NAME=libI77/backspace.c TIME=719848229
                    285: #include "f2c.h"
                    286: #include "fio.h"
                    287: #ifdef KR_headers
                    288: integer f_back(a) alist *a;
                    289: #else
                    290: integer f_back(alist *a)
                    291: #endif
                    292: {      unit *b;
                    293:        int n,i;
                    294:        long x;
                    295:        char buf[32];
                    296:        if(a->aunit >= MXUNIT || a->aunit < 0)
                    297:                err(a->aerr,101,"backspace")
                    298:        b= &f__units[a->aunit];
                    299:        if(b->useek==0) err(a->aerr,106,"backspace")
                    300:        if(b->ufd==NULL) {
                    301:                fk_open(1, 1, a->aunit);
                    302:                return(0);
                    303:                }
                    304:        if(b->uend==1)
                    305:        {       b->uend=0;
                    306:                return(0);
                    307:        }
                    308:        if(b->uwrt) {
                    309:                (void) t_runc(a);
                    310:                if (f__nowreading(b))
                    311:                        err(a->aerr,errno,"backspace")
                    312:                }
                    313:        if(b->url>0)
                    314:        {       long y;
                    315:                x=ftell(b->ufd);
                    316:                y = x % b->url;
                    317:                if(y == 0) x--;
                    318:                x /= b->url;
                    319:                x *= b->url;
                    320:                (void) fseek(b->ufd,x,SEEK_SET);
                    321:                return(0);
                    322:        }
                    323: 
                    324:        if(b->ufmt==0)
                    325:        {       (void) fseek(b->ufd,-(long)sizeof(int),SEEK_CUR);
                    326:                (void) fread((char *)&n,sizeof(int),1,b->ufd);
                    327:                (void) fseek(b->ufd,-(long)n-2*sizeof(int),SEEK_CUR);
                    328:                return(0);
                    329:        }
                    330:        for(;;)
                    331:        {       long y;
                    332:                y = x=ftell(b->ufd);
                    333:                if(x<sizeof(buf)) x=0;
                    334:                else x -= sizeof(buf);
                    335:                (void) fseek(b->ufd,x,SEEK_SET);
                    336:                n=fread(buf,1,(int)(y-x), b->ufd);
                    337:                for(i=n-2;i>=0;i--)
                    338:                {
                    339:                        if(buf[i]!='\n') continue;
                    340:                        (void) fseek(b->ufd,(long)(i+1-n),SEEK_CUR);
                    341:                        return(0);
                    342:                }
                    343:                if(x==0)
                    344:                        {
                    345:                        (void) fseek(b->ufd, 0L, SEEK_SET);
                    346:                        return(0);
                    347:                        }
                    348:                else if(n<=0) err(a->aerr,(EOF),"backspace")
                    349:                (void) fseek(b->ufd, x, SEEK_SET);
                    350:        }
                    351: }
                    352: ./ ADD NAME=libI77/close.c TIME=719848229
                    353: #include "f2c.h"
                    354: #include "fio.h"
                    355: #ifdef KR_headers
                    356: integer f_clos(a) cllist *a;
                    357: #else
                    358: #undef abs
                    359: #undef min
                    360: #undef max
                    361: #include "stdlib.h"
                    362: #ifdef MSDOS
                    363: #include "io.h"
                    364: #else
                    365: #ifdef __cplusplus
                    366: extern "C" int unlink(const char*);
                    367: #else
                    368: extern int unlink(const char*);
                    369: #endif
                    370: #endif
                    371: 
                    372: integer f_clos(cllist *a)
                    373: #endif
                    374: {      unit *b;
                    375: 
                    376:        if(a->cunit >= MXUNIT) return(0);
                    377:        b= &f__units[a->cunit];
                    378:        if(b->ufd==NULL)
                    379:                goto done;
                    380:        if (!a->csta)
                    381:                if (b->uscrtch == 1)
                    382:                        goto Delete;
                    383:                else
                    384:                        goto Keep;
                    385:        switch(*a->csta) {
                    386:                default:
                    387:                Keep:
                    388:                case 'k':
                    389:                case 'K':
                    390:                        if(b->uwrt == 1)
                    391:                                (void) t_runc((alist *)a);
                    392:                        if(b->ufnm) {
                    393:                                (void) fclose(b->ufd);
                    394:                                free(b->ufnm);
                    395:                                }
                    396:                        break;
                    397:                case 'd':
                    398:                case 'D':
                    399:                Delete:
                    400:                        if(b->ufnm) {
                    401:                                (void) fclose(b->ufd);
                    402:                                (void) unlink(b->ufnm); /*SYSDEP*/
                    403:                                free(b->ufnm);
                    404:                                }
                    405:                }
                    406:        b->ufd=NULL;
                    407:  done:
                    408:        b->uend=0;
                    409:        b->ufnm=NULL;
                    410:        return(0);
                    411:        }
                    412:  void
                    413: #ifdef KR_headers
                    414: f_exit()
                    415: #else
                    416: f_exit(void)
                    417: #endif
                    418: {      int i;
                    419:        static cllist xx;
                    420:        if (!xx.cerr) {
                    421:                xx.cerr=1;
                    422:                xx.csta=NULL;
                    423:                for(i=0;i<MXUNIT;i++)
                    424:                {
                    425:                        xx.cunit=i;
                    426:                        (void) f_clos(&xx);
                    427:                }
                    428:        }
                    429: }
                    430:  void
                    431: #ifdef KR_headers
                    432: flush_()
                    433: #else
                    434: flush_(void)
                    435: #endif
                    436: {      int i;
                    437:        for(i=0;i<MXUNIT;i++)
                    438:                if(f__units[i].ufd != NULL && f__units[i].uwrt)
                    439:                        fflush(f__units[i].ufd);
                    440: }
                    441: ./ ADD NAME=libI77/dfe.c TIME=719848230
                    442: #include "f2c.h"
                    443: #include "fio.h"
                    444: #include "fmt.h"
                    445: 
                    446: y_rsk(Void)
                    447: {
                    448:        if(f__curunit->uend || f__curunit->url <= f__recpos
                    449:                || f__curunit->url == 1) return 0;
                    450:        do {
                    451:                getc(f__cf);
                    452:        } while(++f__recpos < f__curunit->url);
                    453:        return 0;
                    454: }
                    455: y_getc(Void)
                    456: {
                    457:        int ch;
                    458:        if(f__curunit->uend) return(-1);
                    459:        if((ch=getc(f__cf))!=EOF)
                    460:        {
                    461:                f__recpos++;
                    462:                if(f__curunit->url>=f__recpos ||
                    463:                        f__curunit->url==1)
                    464:                        return(ch);
                    465:                else    return(' ');
                    466:        }
                    467:        if(feof(f__cf))
                    468:        {
                    469:                f__curunit->uend=1;
                    470:                errno=0;
                    471:                return(-1);
                    472:        }
                    473:        err(f__elist->cierr,errno,"readingd");
                    474: }
                    475: #ifdef KR_headers
                    476: y_putc(c)
                    477: #else
                    478: y_putc(int c)
                    479: #endif
                    480: {
                    481:        f__recpos++;
                    482:        if(f__recpos <= f__curunit->url || f__curunit->url==1)
                    483:                putc(c,f__cf);
                    484:        else
                    485:                err(f__elist->cierr,110,"dout");
                    486:        return(0);
                    487: }
                    488: y_rev(Void)
                    489: {      /*what about work done?*/
                    490:        if(f__curunit->url==1 || f__recpos==f__curunit->url)
                    491:                return(0);
                    492:        while(f__recpos<f__curunit->url)
                    493:                (*f__putn)(' ');
                    494:        f__recpos=0;
                    495:        return(0);
                    496: }
                    497: y_err(Void)
                    498: {
                    499:        err(f__elist->cierr, 110, "dfe");
                    500: }
                    501: 
                    502: y_newrec(Void)
                    503: {
                    504:        if(f__curunit->url == 1 || f__recpos == f__curunit->url) {
                    505:                f__hiwater = f__recpos = f__cursor = 0;
                    506:                return(1);
                    507:        }
                    508:        if(f__hiwater > f__recpos)
                    509:                f__recpos = f__hiwater;
                    510:        y_rev();
                    511:        f__hiwater = f__cursor = 0;
                    512:        return(1);
                    513: }
                    514: 
                    515: #ifdef KR_headers
                    516: c_dfe(a) cilist *a;
                    517: #else
                    518: c_dfe(cilist *a)
                    519: #endif
                    520: {
                    521:        f__sequential=0;
                    522:        f__formatted=f__external=1;
                    523:        f__elist=a;
                    524:        f__cursor=f__scale=f__recpos=0;
                    525:        if(a->ciunit>MXUNIT || a->ciunit<0)
                    526:                err(a->cierr,101,"startchk");
                    527:        f__curunit = &f__units[a->ciunit];
                    528:        if(f__curunit->ufd==NULL && fk_open(DIR,FMT,a->ciunit))
                    529:                err(a->cierr,104,"dfe");
                    530:        f__cf=f__curunit->ufd;
                    531:        if(!f__curunit->ufmt) err(a->cierr,102,"dfe")
                    532:        if(!f__curunit->useek) err(a->cierr,104,"dfe")
                    533:        f__fmtbuf=a->cifmt;
                    534:        (void) fseek(f__cf,(long)f__curunit->url * (a->cirec-1),SEEK_SET);
                    535:        f__curunit->uend = 0;
                    536:        return(0);
                    537: }
                    538: #ifdef KR_headers
                    539: integer s_rdfe(a) cilist *a;
                    540: #else
                    541: integer s_rdfe(cilist *a)
                    542: #endif
                    543: {
                    544:        int n;
                    545:        if(!f__init) f_init();
                    546:        if(n=c_dfe(a))return(n);
                    547:        f__reading=1;
                    548:        if(f__curunit->uwrt && f__nowreading(f__curunit))
                    549:                err(a->cierr,errno,"read start");
                    550:        f__getn = y_getc;
                    551:        f__doed = rd_ed;
                    552:        f__doned = rd_ned;
                    553:        f__dorevert = f__donewrec = y_err;
                    554:        f__doend = y_rsk;
                    555:        if(pars_f(f__fmtbuf)<0)
                    556:                err(a->cierr,100,"read start");
                    557:        fmt_bg();
                    558:        return(0);
                    559: }
                    560: #ifdef KR_headers
                    561: integer s_wdfe(a) cilist *a;
                    562: #else
                    563: integer s_wdfe(cilist *a)
                    564: #endif
                    565: {
                    566:        int n;
                    567:        if(!f__init) f_init();
                    568:        if(n=c_dfe(a)) return(n);
                    569:        f__reading=0;
                    570:        if(f__curunit->uwrt != 1 && f__nowwriting(f__curunit))
                    571:                err(a->cierr,errno,"startwrt");
                    572:        f__putn = y_putc;
                    573:        f__doed = w_ed;
                    574:        f__doned= w_ned;
                    575:        f__dorevert = y_err;
                    576:        f__donewrec = y_newrec;
                    577:        f__doend = y_rev;
                    578:        if(pars_f(f__fmtbuf)<0)
                    579:                err(a->cierr,100,"startwrt");
                    580:        fmt_bg();
                    581:        return(0);
                    582: }
                    583: integer e_rdfe(Void)
                    584: {
                    585:        (void) en_fio();
                    586:        return(0);
                    587: }
                    588: integer e_wdfe(Void)
                    589: {
                    590:        (void) en_fio();
                    591:        return(0);
                    592: }
                    593: ./ ADD NAME=libI77/dolio.c TIME=719848230
                    594: #include "f2c.h"
                    595: 
                    596: #ifdef __cplusplus
                    597: extern "C" {
                    598: #endif
                    599: #ifdef KR_headers
                    600: extern int (*f__lioproc)();
                    601: 
                    602: integer do_lio(type,number,ptr,len) ftnint *number,*type; char *ptr; ftnlen len;
                    603: #else
                    604: extern int (*f__lioproc)(ftnint*, char*, ftnlen, ftnint);
                    605: 
                    606: integer do_lio(ftnint *type, ftnint *number, char *ptr, ftnlen len)
                    607: #endif
                    608: {
                    609:        return((*f__lioproc)(number,ptr,len,*type));
                    610: }
                    611: #ifdef __cplusplus
                    612:        }
                    613: #endif
                    614: ./ ADD NAME=libI77/due.c TIME=719848230
                    615: #include "f2c.h"
                    616: #include "fio.h"
                    617: 
                    618: #ifdef KR_headers
                    619: c_due(a) cilist *a;
                    620: #else
                    621: c_due(cilist *a)
                    622: #endif
                    623: {
                    624:        if(!f__init) f_init();
                    625:        if(a->ciunit>=MXUNIT || a->ciunit<0)
                    626:                err(a->cierr,101,"startio");
                    627:        f__recpos=f__sequential=f__formatted=0;
                    628:        f__external=1;
                    629:        f__curunit = &f__units[a->ciunit];
                    630:        f__elist=a;
                    631:        if(f__curunit->ufd==NULL && fk_open(DIR,UNF,a->ciunit) ) err(a->cierr,104,"due");
                    632:        f__cf=f__curunit->ufd;
                    633:        if(f__curunit->ufmt) err(a->cierr,102,"cdue")
                    634:        if(!f__curunit->useek) err(a->cierr,104,"cdue")
                    635:        if(f__curunit->ufd==NULL) err(a->cierr,114,"cdue")
                    636:        (void) fseek(f__cf,(long)(a->cirec-1)*f__curunit->url,SEEK_SET);
                    637:        f__curunit->uend = 0;
                    638:        return(0);
                    639: }
                    640: #ifdef KR_headers
                    641: integer s_rdue(a) cilist *a;
                    642: #else
                    643: integer s_rdue(cilist *a)
                    644: #endif
                    645: {
                    646:        int n;
                    647:        if(n=c_due(a)) return(n);
                    648:        f__reading=1;
                    649:        if(f__curunit->uwrt && f__nowreading(f__curunit))
                    650:                err(a->cierr,errno,"read start");
                    651:        return(0);
                    652: }
                    653: #ifdef KR_headers
                    654: integer s_wdue(a) cilist *a;
                    655: #else
                    656: integer s_wdue(cilist *a)
                    657: #endif
                    658: {
                    659:        int n;
                    660:        if(n=c_due(a)) return(n);
                    661:        f__reading=0;
                    662:        if(f__curunit->uwrt != 1 && f__nowwriting(f__curunit))
                    663:                err(a->cierr,errno,"write start");
                    664:        return(0);
                    665: }
                    666: integer e_rdue(Void)
                    667: {
                    668:        if(f__curunit->url==1 || f__recpos==f__curunit->url)
                    669:                return(0);
                    670:        (void) fseek(f__cf,(long)(f__curunit->url-f__recpos),SEEK_CUR);
                    671:        if(ftell(f__cf)%f__curunit->url)
                    672:                err(f__elist->cierr,200,"syserr");
                    673:        return(0);
                    674: }
                    675: integer e_wdue(Void)
                    676: {
                    677:        return(e_rdue());
                    678: }
                    679: ./ ADD NAME=libI77/endfile.c TIME=719848230
                    680: #include "f2c.h"
                    681: #include "fio.h"
                    682: #include "sys/types.h"
                    683: #include "fcntl.h"
                    684: #include "rawio.h"
                    685: #ifndef O_RDONLY
                    686: #define O_RDONLY 0
                    687: #endif
                    688: 
                    689: #ifdef KR_headers
                    690: extern char *strcpy();
                    691: #else
                    692: #undef abs
                    693: #undef min
                    694: #undef max
                    695: #include "stdlib.h"
                    696: #include "string.h"
                    697: #endif
                    698: 
                    699: 
                    700: #ifdef KR_headers
                    701: integer f_end(a) alist *a;
                    702: #else
                    703: integer f_end(alist *a)
                    704: #endif
                    705: {
                    706:        unit *b;
                    707:        if(a->aunit>=MXUNIT || a->aunit<0) err(a->aerr,101,"endfile");
                    708:        b = &f__units[a->aunit];
                    709:        if(b->ufd==NULL) {
                    710:                char nbuf[10];
                    711:                (void) sprintf(nbuf,"fort.%ld",a->aunit);
                    712:                close(creat(nbuf, 0666));
                    713:                return(0);
                    714:                }
                    715:        b->uend=1;
                    716:        return(b->useek ? t_runc(a) : 0);
                    717: }
                    718: 
                    719:  static int
                    720: #ifdef KR_headers
                    721: copy(from, len, to) char *from, *to; register long len;
                    722: #else
                    723: copy(char *from, register long len, char *to)
                    724: #endif
                    725: {
                    726:        register int n;
                    727:        int k, rc = 0, tmp;
                    728:        char buf[BUFSIZ];
                    729: 
                    730:        if ((k = open(from, O_RDONLY)) < 0)
                    731:                return 1;
                    732:        if ((tmp = creat(to,0666)) < 0)
                    733:                return 1;
                    734:        while((n = read(k, buf, len > BUFSIZ ? BUFSIZ : (int)len)) > 0) {
                    735:                if (write(tmp, buf, n) != n)
                    736:                        { rc = 1; break; }
                    737:                if ((len -= n) <= 0)
                    738:                        break;
                    739:                }
                    740:        close(k);
                    741:        close(tmp);
                    742:        return n < 0 ? 1 : rc;
                    743:        }
                    744: 
                    745: #ifndef L_tmpnam
                    746: #define L_tmpnam 16
                    747: #endif
                    748: 
                    749:  int
                    750: #ifdef KR_headers
                    751: t_runc(a) alist *a;
                    752: #else
                    753: t_runc(alist *a)
                    754: #endif
                    755: {
                    756:        char nm[L_tmpnam];
                    757:        long loc, len;
                    758:        unit *b;
                    759:        int rc = 0;
                    760: 
                    761:        b = &f__units[a->aunit];
                    762:        if(b->url) return(0);   /*don't truncate direct files*/
                    763:        loc=ftell(b->ufd);
                    764:        (void) fseek(b->ufd,0L,SEEK_END);
                    765:        len=ftell(b->ufd);
                    766:        if (loc >= len || b->useek == 0 || b->ufnm == NULL)
                    767:                return(0);
                    768:        rewind(b->ufd); /* empty buffer */
                    769:        if (!loc) {
                    770:                if (close(creat(b->ufnm,0666)))
                    771:                        { rc = 1; goto done; }
                    772:                if (b->uwrt)
                    773:                        b->uwrt = 1;
                    774:                return 0;
                    775:                }
                    776: #ifdef _POSIX_SOURCE
                    777:        tmpnam(nm);
                    778: #else
                    779:        (void) strcpy(nm,"tmp.FXXXXXX");
                    780:        (void) mktemp(nm);
                    781: #endif
                    782:        if (copy(b->ufnm, loc, nm)
                    783:         || copy(nm, loc, b->ufnm))
                    784:                rc = 1;
                    785:        unlink(nm);
                    786: done:
                    787:        fseek(b->ufd, loc, SEEK_SET);
                    788:        if (rc)
                    789:                err(a->aerr,111,"endfile");
                    790:        return 0;
                    791:        }
                    792: ./ ADD NAME=libI77/err.c TIME=719848230
                    793: #ifndef MSDOS
                    794: #include "sys/types.h"
                    795: #include "sys/stat.h"
                    796: #endif
                    797: #include "f2c.h"
                    798: #include "fio.h"
                    799: #include "fcntl.h"
                    800: #include "rawio.h"
                    801: #include "fmt.h"       /* for struct syl */
                    802: #ifdef NON_UNIX_STDIO
                    803: #ifdef KR_headers
                    804: extern char *malloc();
                    805: #else
                    806: #undef abs
                    807: #undef min
                    808: #undef max
                    809: #include "stdlib.h"
                    810: #endif
                    811: #endif
                    812: #ifndef O_WRONLY
                    813: #define O_WRONLY 1
                    814: #endif
                    815: 
                    816: /*global definitions*/
                    817: unit f__units[MXUNIT]; /*unit table*/
                    818: flag f__init;  /*0 on entry, 1 after initializations*/
                    819: cilist *f__elist;      /*active external io list*/
                    820: flag f__reading;       /*1 if reading, 0 if writing*/
                    821: flag f__cplus,f__cblank;
                    822: char *f__fmtbuf;
                    823: flag f__external;      /*1 if external io, 0 if internal */
                    824: #ifdef KR_headers
                    825: int (*f__doed)(),(*f__doned)();
                    826: int (*f__doend)(),(*f__donewrec)(),(*f__dorevert)();
                    827: int (*f__getn)(),(*f__putn)(); /*for formatted io*/
                    828: #else
                    829: int (*f__getn)(void),(*f__putn)(int);  /*for formatted io*/
                    830: int (*f__doed)(struct f__syl*, char*, ftnlen),(*f__doned)(struct f__syl*);
                    831: int (*f__dorevert)(void),(*f__donewrec)(void),(*f__doend)(void);
                    832: #endif
                    833: flag f__sequential;    /*1 if sequential io, 0 if direct*/
                    834: flag f__formatted;     /*1 if formatted io, 0 if unformatted*/
                    835: FILE *f__cf;   /*current file*/
                    836: unit *f__curunit;      /*current unit*/
                    837: int f__recpos; /*place in current record*/
                    838: int f__cursor,f__scale;
                    839: 
                    840: /*error messages*/
                    841: char *F_err[] =
                    842: {
                    843:        "error in format",                              /* 100 */
                    844:        "illegal unit number",                          /* 101 */
                    845:        "formatted io not allowed",                     /* 102 */
                    846:        "unformatted io not allowed",                   /* 103 */
                    847:        "direct io not allowed",                        /* 104 */
                    848:        "sequential io not allowed",                    /* 105 */
                    849:        "can't backspace file",                         /* 106 */
                    850:        "null file name",                               /* 107 */
                    851:        "can't stat file",                              /* 108 */
                    852:        "unit not connected",                           /* 109 */
                    853:        "off end of record",                            /* 110 */
                    854:        "truncation failed in endfile",                 /* 111 */
                    855:        "incomprehensible list input",                  /* 112 */
                    856:        "out of free space",                            /* 113 */
                    857:        "unit not connected",                           /* 114 */
                    858:        "read unexpected character",                    /* 115 */
                    859:        "bad logical input field",                      /* 116 */
                    860:        "bad variable type",                            /* 117 */
                    861:        "bad namelist name",                            /* 118 */
                    862:        "variable not in namelist",                     /* 119 */
                    863:        "no end record",                                /* 120 */
                    864:        "variable count incorrect",                     /* 121 */
                    865:        "subscript for scalar variable",                /* 122 */
                    866:        "invalid array section",                        /* 123 */
                    867:        "substring out of bounds",                      /* 124 */
                    868:        "subscript out of bounds",                      /* 125 */
                    869:        "can't read file",                              /* 126 */
                    870:        "can't write file",                             /* 127 */
                    871:        "'new' file exists"                             /* 128 */
                    872: };
                    873: #define MAXERR (sizeof(F_err)/sizeof(char *)+100)
                    874: 
                    875: #ifdef KR_headers
                    876: f__canseek(f) FILE *f; /*SYSDEP*/
                    877: #else
                    878: f__canseek(FILE *f) /*SYSDEP*/
                    879: #endif
                    880: {
                    881: #ifdef MSDOS
                    882:        return !isatty(fileno(f));
                    883: #else
                    884:        struct stat x;
                    885: 
                    886:        if (fstat(fileno(f),&x) < 0)
                    887:                return(0);
                    888: #ifdef S_IFMT
                    889:        switch(x.st_mode & S_IFMT) {
                    890:        case S_IFDIR:
                    891:        case S_IFREG:
                    892:                if(x.st_nlink > 0)      /* !pipe */
                    893:                        return(1);
                    894:                else
                    895:                        return(0);
                    896:        case S_IFCHR:
                    897:                if(isatty(fileno(f)))
                    898:                        return(0);
                    899:                return(1);
                    900: #ifdef S_IFBLK
                    901:        case S_IFBLK:
                    902:                return(1);
                    903: #endif
                    904:        }
                    905: #else
                    906: #ifdef S_ISDIR
                    907:        /* POSIX version */
                    908:        if (S_ISREG(x.st_mode) || S_ISDIR(x.st_mode)) {
                    909:                if(x.st_nlink > 0)      /* !pipe */
                    910:                        return(1);
                    911:                else
                    912:                        return(0);
                    913:                }
                    914:        if (S_ISCHR(x.st_mode)) {
                    915:                if(isatty(fileno(f)))
                    916:                        return(0);
                    917:                return(1);
                    918:                }
                    919:        if (S_ISBLK(x.st_mode))
                    920:                return(1);
                    921: #else
                    922:        Help! How does fstat work on this system?
                    923: #endif
                    924: #endif
                    925:        return(0);      /* who knows what it is? */
                    926: #endif
                    927: }
                    928: 
                    929:  void
                    930: #ifdef KR_headers
                    931: f__fatal(n,s) char *s;
                    932: #else
                    933: f__fatal(int n, char *s)
                    934: #endif
                    935: {
                    936:        if(n<100 && n>=0) perror(s); /*SYSDEP*/
                    937:        else if(n >= (int)MAXERR || n < -1)
                    938:        {       fprintf(stderr,"%s: illegal error number %d\n",s,n);
                    939:        }
                    940:        else if(n == -1) fprintf(stderr,"%s: end of file\n",s);
                    941:        else
                    942:                fprintf(stderr,"%s: %s\n",s,F_err[n-100]);
                    943:        if (f__curunit) {
                    944:                fprintf(stderr,"apparent state: unit %d ",f__curunit-f__units);
                    945:                fprintf(stderr, f__curunit->ufnm ? "named %s\n" : "(unnamed)\n",
                    946:                        f__curunit->ufnm);
                    947:                }
                    948:        else
                    949:                fprintf(stderr,"apparent state: internal I/O\n");
                    950:        if (f__fmtbuf)
                    951:                fprintf(stderr,"last format: %s\n",f__fmtbuf);
                    952:        fprintf(stderr,"lately %s %s %s %s",f__reading?"reading":"writing",
                    953:                f__sequential?"sequential":"direct",f__formatted?"formatted":"unformatted",
                    954:                f__external?"external":"internal");
                    955:        sig_die(" IO", 1);
                    956: }
                    957: /*initialization routine*/
                    958:  VOID
                    959: f_init(Void)
                    960: {      unit *p;
                    961: 
                    962:        f__init=1;
                    963:        p= &f__units[0];
                    964:        p->ufd=stderr;
                    965:        p->useek=f__canseek(stderr);
                    966: #ifdef COMMENTED_OUT
                    967:        if(isatty(fileno(stderr))) {
                    968:                extern char *malloc();
                    969:                setbuf(stderr, malloc(BUFSIZ));
                    970:                /* setvbuf(stderr, _IOLBF, 0, 0); */
                    971:        }       /* wastes space, but win for debugging in windows */
                    972: #endif
                    973: #ifdef NON_UNIX_STDIO
                    974:        setbuf(stderr, malloc(BUFSIZ));
                    975: #else
                    976:        stderr->_flag &= ~_IONBF;
                    977: #endif
                    978:        p->ufmt=1;
                    979:        p->uwrt=1;
                    980:        p = &f__units[5];
                    981:        p->ufd=stdin;
                    982:        p->useek=f__canseek(stdin);
                    983:        p->ufmt=1;
                    984:        p->uwrt=0;
                    985:        p= &f__units[6];
                    986:        p->ufd=stdout;
                    987:        p->useek=f__canseek(stdout);
                    988:        /* IOLBUF and setvbuf only in system 5+ */
                    989: #ifdef COMMENTED_OUT
                    990:        if(isatty(fileno(stdout))) {
                    991:                extern char _sobuf[];
                    992:                setbuf(stdout, _sobuf);
                    993:                /* setvbuf(stdout, _IOLBF, 0, 0);       /* the buf arg in setvbuf? */
                    994:                p->useek = 1;   /* only within a record no bigger than BUFSIZ */
                    995:        }
                    996: #endif
                    997:        p->ufmt=1;
                    998:        p->uwrt=1;
                    999: }
                   1000: #ifdef KR_headers
                   1001: f__nowreading(x) unit *x;
                   1002: #else
                   1003: f__nowreading(unit *x)
                   1004: #endif
                   1005: {
                   1006:        long loc;
                   1007:        extern char *r_mode[];
                   1008:        if (!x->ufnm)
                   1009:                goto cantread;
                   1010:        loc=ftell(x->ufd);
                   1011:        if(freopen(x->ufnm,r_mode[x->ufmt],x->ufd) == NULL) {
                   1012:  cantread:
                   1013:                errno = 126;
                   1014:                return(1);
                   1015:                }
                   1016:        x->uwrt=0;
                   1017:        (void) fseek(x->ufd,loc,SEEK_SET);
                   1018:        return(0);
                   1019: }
                   1020: #ifdef KR_headers
                   1021: f__nowwriting(x) unit *x;
                   1022: #else
                   1023: f__nowwriting(unit *x)
                   1024: #endif
                   1025: {
                   1026:        long loc;
                   1027:        int k;
                   1028:        extern char *w_mode[];
                   1029: 
                   1030:        if (!x->ufnm)
                   1031:                goto cantwrite;
                   1032:        if (x->uwrt == 3) { /* just did write, rewind */
                   1033:                if (close(creat(x->ufnm,0666)))
                   1034:                        goto cantwrite;
                   1035:                }
                   1036:        else {
                   1037:                loc=ftell(x->ufd);
                   1038:                if (fclose(x->ufd) < 0
                   1039:                || (k = x->uwrt == 2 ? creat(x->ufnm,0666)
                   1040:                                     : open(x->ufnm,O_WRONLY)) < 0
                   1041:                || (f__cf = x->ufd = fdopen(k,w_mode[x->ufmt])) == NULL) {
                   1042:                        x->ufd = NULL;
                   1043:  cantwrite:
                   1044:                        errno = 127;
                   1045:                        return(1);
                   1046:                        }
                   1047:                (void) fseek(x->ufd,loc,SEEK_SET);
                   1048:                }
                   1049:        x->uwrt = 1;
                   1050:        return(0);
                   1051: }
                   1052: ./ ADD NAME=libI77/fio.h TIME=719848230
                   1053: #include "stdio.h"
                   1054: #include "errno.h"
                   1055: #ifndef NULL
                   1056: /* ANSI C */
                   1057: #include "stddef.h"
                   1058: #endif
                   1059: 
                   1060: #ifndef SEEK_SET
                   1061: #define SEEK_SET 0
                   1062: #define SEEK_CUR 1
                   1063: #define SEEK_END 2
                   1064: #endif
                   1065: 
                   1066: #ifdef MSDOS
                   1067: #ifndef NON_UNIX_STDIO
                   1068: #define NON_UNIX_STDIO
                   1069: #endif
                   1070: #endif
                   1071: 
                   1072: #ifdef UIOLEN_int
                   1073: typedef int uiolen;
                   1074: #else
                   1075: typedef long uiolen;
                   1076: #endif
                   1077: 
                   1078: /*units*/
                   1079: typedef struct
                   1080: {      FILE *ufd;      /*0=unconnected*/
                   1081:        char *ufnm;
                   1082: #ifndef MSDOS
                   1083:        long uinode;
                   1084:        int udev;
                   1085: #endif
                   1086:        int url;        /*0=sequential*/
                   1087:        flag useek;     /*true=can backspace, use dir, ...*/
                   1088:        flag ufmt;
                   1089:        flag uprnt;
                   1090:        flag ublnk;
                   1091:        flag uend;
                   1092:        flag uwrt;      /*last io was write*/
                   1093:        flag uscrtch;
                   1094: } unit;
                   1095: 
                   1096: extern flag f__init;
                   1097: extern cilist *f__elist;       /*active external io list*/
                   1098: extern flag f__reading,f__external,f__sequential,f__formatted;
                   1099: #ifdef KR_headers
                   1100: #define Void /*void*/
                   1101: extern int (*f__getn)(),(*f__putn)();  /*for formatted io*/
                   1102: extern long f__inode();
                   1103: extern VOID sig_die();
                   1104: extern int (*f__donewrec)(), t_putc(), x_wSL();
                   1105: extern int c_sfe();
                   1106: #else
                   1107: #define Void void
                   1108: #ifdef __cplusplus
                   1109: extern "C" {
                   1110: #endif
                   1111: extern int (*f__getn)(void),(*f__putn)(int);   /*for formatted io*/
                   1112: extern long f__inode(char*,int*);
                   1113: extern void sig_die(char*,int);
                   1114: extern void f__fatal(int,char*);
                   1115: extern int t_runc(alist*);
                   1116: extern int f__nowreading(unit*), f__nowwriting(unit*);
                   1117: extern int fk_open(int,int,ftnint);
                   1118: extern int en_fio(void);
                   1119: extern void f_init(void);
                   1120: extern int (*f__donewrec)(void), t_putc(int), x_wSL(void);
                   1121: extern void b_char(char*,char*,ftnlen), g_char(char*,ftnlen,char*);
                   1122: extern int c_sfe(cilist*), z_rnew(void);
                   1123: extern int isatty(int);
                   1124: #ifdef __cplusplus
                   1125:        }
                   1126: #endif
                   1127: #endif
                   1128: extern FILE *f__cf;    /*current file*/
                   1129: extern unit *f__curunit;       /*current unit*/
                   1130: extern unit f__units[];
                   1131: #define err(f,m,s) {if(f) errno= m; else f__fatal(m,s); return(m);}
                   1132: 
                   1133: /*Table sizes*/
                   1134: #define MXUNIT 100
                   1135: 
                   1136: extern int f__recpos;  /*position in current record*/
                   1137: extern int f__cursor;  /* offset to move to */
                   1138: extern int f__hiwater; /* so TL doesn't confuse us */
                   1139: 
                   1140: #define WRITE  1
                   1141: #define READ   2
                   1142: #define SEQ    3
                   1143: #define DIR    4
                   1144: #define FMT    5
                   1145: #define UNF    6
                   1146: #define EXT    7
                   1147: #define INT    8
                   1148: 
                   1149: #define buf_end(x) (x->_flag & _IONBF ? x->_ptr : x->_base + BUFSIZ)
                   1150: #ifdef __cplusplus
                   1151: extern "C" {
                   1152: extern long int f_back(alist *);
                   1153: extern long int f_clos(cllist *);
                   1154: extern void f_exit(void);
                   1155: extern void flush_(void);
                   1156: extern int y_rsk(void);
                   1157: extern int y_getc(void);
                   1158: extern int y_putc(int);
                   1159: extern int y_rev(void);
                   1160: extern int y_err(void);
                   1161: extern int y_newrec(void);
                   1162: extern int c_dfe(cilist *);
                   1163: extern long int s_rdfe(cilist *);
                   1164: extern long int s_wdfe(cilist *);
                   1165: extern long int e_rdfe(void);
                   1166: extern long int e_wdfe(void);
                   1167: extern long int do_lio(long int *, long int *, char *, long int);
                   1168: extern int c_due(cilist *);
                   1169: extern long int s_rdue(cilist *);
                   1170: extern long int s_wdue(cilist *);
                   1171: extern long int e_rdue(void);
                   1172: extern long int e_wdue(void);
                   1173: extern long int f_end(alist *);
                   1174: extern int f__canseek(struct _iobuf *);
                   1175: extern char *ap_end(char *);
                   1176: extern int op_gen(int, int, int, int);
                   1177: extern char *gt_num(char *, int *);
                   1178: extern char *f_s(char *, int);
                   1179: extern int ne_d(char *, char **);
                   1180: extern int e_d(char *, char **);
                   1181: extern char *i_tem(char *);
                   1182: extern char *f_list(char *);
                   1183: extern int pars_f(char *);
                   1184: extern int type_f(int);
                   1185: extern long int do_fio(long int *, char *, long int);
                   1186: extern void fmt_bg(void);
                   1187: extern char *f__icvt(long int, int *, int *, int);
                   1188: extern int z_getc(void);
                   1189: extern int z_putc(int);
                   1190: extern int c_si(icilist *);
                   1191: extern int y_ierr(void);
                   1192: extern long int s_rsfi(icilist *);
                   1193: extern int z_wnew(void);
                   1194: extern long int s_wsfi(icilist *);
                   1195: extern long int e_rsfi(void);
                   1196: extern long int e_wsfi(void);
                   1197: extern void c_liw(icilist *);
                   1198: extern int s_wsni(icilist *);
                   1199: extern long int s_wsli(icilist *);
                   1200: extern long int e_wsli(void);
                   1201: extern long int f_inqu(inlist *);
                   1202: extern int t_getc(void);
                   1203: extern long int e_rsle(void);
                   1204: extern int l_R(int);
                   1205: extern int l_C(void);
                   1206: extern int l_L(void);
                   1207: extern int l_CHAR(void);
                   1208: extern int c_le(cilist *);
                   1209: extern int l_read(long int *, char *, long int, long int);
                   1210: extern long int s_rsle(cilist *);
                   1211: extern char *mktemp(char *);
                   1212: extern int f__isdev(char *);
                   1213: extern long int f_open(olist *);
                   1214: extern long int f_rew(alist *);
                   1215: extern int xrd_SL(void);
                   1216: extern int x_getc(void);
                   1217: extern int x_endp(void);
                   1218: extern int x_rev(void);
                   1219: extern long int s_rsfe(cilist *);
                   1220: extern int i_getc(void);
                   1221: extern int i_ungetc(int, struct _iobuf *);
                   1222: extern long int s_rsli(icilist *);
                   1223: extern long int e_rsli(void);
                   1224: extern int s_rsni(icilist *);
                   1225: extern int x_rsne(cilist *);
                   1226: extern long int s_rsne(cilist *);
                   1227: extern long int e_rsfe(void);
                   1228: extern long int e_wsfe(void);
                   1229: extern int c_sue(cilist *);
                   1230: extern long int s_rsue(cilist *);
                   1231: extern long int s_wsue(cilist *);
                   1232: extern long int e_wsue(void);
                   1233: extern long int e_rsue(void);
                   1234: extern int do_us(long int *, char *, long int);
                   1235: extern long int do_ud(long int *, char *, long int);
                   1236: extern long int do_uio(long int *, char *, long int);
                   1237: extern long int f__inode(char *, int *);
                   1238: extern void f__mvgbt(int, int, char *, char *);
                   1239: extern int mv_cur(void);
                   1240: extern int x_putc(int);
                   1241: extern int xw_end(void);
                   1242: extern int xw_rev(void);
                   1243: extern long int s_wsfe(cilist *);
                   1244: extern long int s_wsle(cilist *);
                   1245: extern long int e_wsle(void);
                   1246: extern long int s_wsne(cilist *);
                   1247: extern void x_wsne(cilist *);
                   1248:        }
                   1249: #endif
                   1250: ./ ADD NAME=libI77/fmt.c TIME=719848230
                   1251: #include "f2c.h"
                   1252: #include "fio.h"
                   1253: #include "fmt.h"
                   1254: #define skip(s) while(*s==' ') s++
                   1255: #ifdef interdata
                   1256: #define SYLMX 300
                   1257: #endif
                   1258: #ifdef pdp11
                   1259: #define SYLMX 300
                   1260: #endif
                   1261: #ifdef vax
                   1262: #define SYLMX 300
                   1263: #endif
                   1264: #ifndef SYLMX
                   1265: #define SYLMX 300
                   1266: #endif
                   1267: #define GLITCH '\2'
                   1268:        /* special quote character for stu */
                   1269: extern int f__cursor,f__scale;
                   1270: extern flag f__cblank,f__cplus;        /*blanks in I and compulsory plus*/
                   1271: struct f__syl f__syl[SYLMX];
                   1272: int f__parenlvl,f__pc,f__revloc;
                   1273: 
                   1274: #ifdef KR_headers
                   1275: char *ap_end(s) char *s;
                   1276: #else
                   1277: char *ap_end(char *s)
                   1278: #endif
                   1279: {      char quote;
                   1280:        quote= *s++;
                   1281:        for(;*s;s++)
                   1282:        {       if(*s!=quote) continue;
                   1283:                if(*++s!=quote) return(s);
                   1284:        }
                   1285:        if(f__elist->cierr) {
                   1286:                errno = 100;
                   1287:                return(NULL);
                   1288:        }
                   1289:        f__fatal(100, "bad string");
                   1290:        /*NOTREACHED*/ return 0;
                   1291: }
                   1292: #ifdef KR_headers
                   1293: op_gen(a,b,c,d)
                   1294: #else
                   1295: op_gen(int a, int b, int c, int d)
                   1296: #endif
                   1297: {      struct f__syl *p= &f__syl[f__pc];
                   1298:        if(f__pc>=SYLMX)
                   1299:        {       fprintf(stderr,"format too complicated:\n");
                   1300:                sig_die(f__fmtbuf, 1);
                   1301:        }
                   1302:        p->op=a;
                   1303:        p->p1=b;
                   1304:        p->p2=c;
                   1305:        p->p3=d;
                   1306:        return(f__pc++);
                   1307: }
                   1308: #ifdef KR_headers
                   1309: char *f_list();
                   1310: char *gt_num(s,n) char *s; int *n;
                   1311: #else
                   1312: char *f_list(char*);
                   1313: char *gt_num(char *s, int *n)
                   1314: #endif
                   1315: {      int m=0,f__cnt=0;
                   1316:        char c;
                   1317:        for(c= *s;;c = *s)
                   1318:        {       if(c==' ')
                   1319:                {       s++;
                   1320:                        continue;
                   1321:                }
                   1322:                if(c>'9' || c<'0') break;
                   1323:                m=10*m+c-'0';
                   1324:                f__cnt++;
                   1325:                s++;
                   1326:        }
                   1327:        if(f__cnt==0) *n=1;
                   1328:        else *n=m;
                   1329:        return(s);
                   1330: }
                   1331: #ifdef KR_headers
                   1332: char *f_s(s,curloc) char *s;
                   1333: #else
                   1334: char *f_s(char *s, int curloc)
                   1335: #endif
                   1336: {
                   1337:        skip(s);
                   1338:        if(*s++!='(')
                   1339:        {
                   1340:                return(NULL);
                   1341:        }
                   1342:        if(f__parenlvl++ ==1) f__revloc=curloc;
                   1343:        if(op_gen(RET1,curloc,0,0)<0 ||
                   1344:                (s=f_list(s))==NULL)
                   1345:        {
                   1346:                return(NULL);
                   1347:        }
                   1348:        skip(s);
                   1349:        return(s);
                   1350: }
                   1351: #ifdef KR_headers
                   1352: ne_d(s,p) char *s,**p;
                   1353: #else
                   1354: ne_d(char *s, char **p)
                   1355: #endif
                   1356: {      int n,x,sign=0;
                   1357:        struct f__syl *sp;
                   1358:        switch(*s)
                   1359:        {
                   1360:        default:
                   1361:                return(0);
                   1362:        case ':': (void) op_gen(COLON,0,0,0); break;
                   1363:        case '$':
                   1364:                (void) op_gen(NONL, 0, 0, 0); break;
                   1365:        case 'B':
                   1366:        case 'b':
                   1367:                if(*++s=='z' || *s == 'Z') (void) op_gen(BZ,0,0,0);
                   1368:                else (void) op_gen(BN,0,0,0);
                   1369:                break;
                   1370:        case 'S':
                   1371:        case 's':
                   1372:                if(*(s+1)=='s' || *(s+1) == 'S')
                   1373:                {       x=SS;
                   1374:                        s++;
                   1375:                }
                   1376:                else if(*(s+1)=='p' || *(s+1) == 'P')
                   1377:                {       x=SP;
                   1378:                        s++;
                   1379:                }
                   1380:                else x=S;
                   1381:                (void) op_gen(x,0,0,0);
                   1382:                break;
                   1383:        case '/': (void) op_gen(SLASH,0,0,0); break;
                   1384:        case '-': sign=1;
                   1385:        case '+':       s++;    /*OUTRAGEOUS CODING TRICK*/
                   1386:        case '0': case '1': case '2': case '3': case '4':
                   1387:        case '5': case '6': case '7': case '8': case '9':
                   1388:                s=gt_num(s,&n);
                   1389:                switch(*s)
                   1390:                {
                   1391:                default:
                   1392:                        return(0);
                   1393:                case 'P':
                   1394:                case 'p': if(sign) n= -n; (void) op_gen(P,n,0,0); break;
                   1395:                case 'X':
                   1396:                case 'x': (void) op_gen(X,n,0,0); break;
                   1397:                case 'H':
                   1398:                case 'h':
                   1399:                        sp = &f__syl[op_gen(H,n,0,0)];
                   1400:                        *(char **)&sp->p2 = s + 1;
                   1401:                        s+=n;
                   1402:                        break;
                   1403:                }
                   1404:                break;
                   1405:        case GLITCH:
                   1406:        case '"':
                   1407:        case '\'':
                   1408:                sp = &f__syl[op_gen(APOS,0,0,0)];
                   1409:                *(char **)&sp->p2 = s;
                   1410:                if((*p = ap_end(s)) == NULL)
                   1411:                        return(0);
                   1412:                return(1);
                   1413:        case 'T':
                   1414:        case 't':
                   1415:                if(*(s+1)=='l' || *(s+1) == 'L')
                   1416:                {       x=TL;
                   1417:                        s++;
                   1418:                }
                   1419:                else if(*(s+1)=='r'|| *(s+1) == 'R')
                   1420:                {       x=TR;
                   1421:                        s++;
                   1422:                }
                   1423:                else x=T;
                   1424:                s=gt_num(s+1,&n);
                   1425:                s--;
                   1426:                (void) op_gen(x,n,0,0);
                   1427:                break;
                   1428:        case 'X':
                   1429:        case 'x': (void) op_gen(X,1,0,0); break;
                   1430:        case 'P':
                   1431:        case 'p': (void) op_gen(P,1,0,0); break;
                   1432:        }
                   1433:        s++;
                   1434:        *p=s;
                   1435:        return(1);
                   1436: }
                   1437: #ifdef KR_headers
                   1438: e_d(s,p) char *s,**p;
                   1439: #else
                   1440: e_d(char *s, char **p)
                   1441: #endif
                   1442: {      int i,im,n,w,d,e,found=0,x=0;
                   1443:        char *sv=s;
                   1444:        s=gt_num(s,&n);
                   1445:        (void) op_gen(STACK,n,0,0);
                   1446:        switch(*s++)
                   1447:        {
                   1448:        default: break;
                   1449:        case 'E':
                   1450:        case 'e':       x=1;
                   1451:        case 'G':
                   1452:        case 'g':
                   1453:                found=1;
                   1454:                s=gt_num(s,&w);
                   1455:                if(w==0) break;
                   1456:                if(*s=='.')
                   1457:                {       s++;
                   1458:                        s=gt_num(s,&d);
                   1459:                }
                   1460:                else d=0;
                   1461:                if(*s!='E' && *s != 'e')
                   1462:                        (void) op_gen(x==1?E:G,w,d,0);  /* default is Ew.dE2 */
                   1463:                else
                   1464:                {       s++;
                   1465:                        s=gt_num(s,&e);
                   1466:                        (void) op_gen(x==1?EE:GE,w,d,e);
                   1467:                }
                   1468:                break;
                   1469:        case 'O':
                   1470:        case 'o':
                   1471:                i = O;
                   1472:                im = OM;
                   1473:                goto finish_I;
                   1474:        case 'Z':
                   1475:        case 'z':
                   1476:                i = Z;
                   1477:                im = ZM;
                   1478:                goto finish_I;
                   1479:        case 'L':
                   1480:        case 'l':
                   1481:                found=1;
                   1482:                s=gt_num(s,&w);
                   1483:                if(w==0) break;
                   1484:                (void) op_gen(L,w,0,0);
                   1485:                break;
                   1486:        case 'A':
                   1487:        case 'a':
                   1488:                found=1;
                   1489:                skip(s);
                   1490:                if(*s>='0' && *s<='9')
                   1491:                {       s=gt_num(s,&w);
                   1492:                        if(w==0) break;
                   1493:                        (void) op_gen(AW,w,0,0);
                   1494:                        break;
                   1495:                }
                   1496:                (void) op_gen(A,0,0,0);
                   1497:                break;
                   1498:        case 'F':
                   1499:        case 'f':
                   1500:                found=1;
                   1501:                s=gt_num(s,&w);
                   1502:                if(w==0) break;
                   1503:                if(*s=='.')
                   1504:                {       s++;
                   1505:                        s=gt_num(s,&d);
                   1506:                }
                   1507:                else d=0;
                   1508:                (void) op_gen(F,w,d,0);
                   1509:                break;
                   1510:        case 'D':
                   1511:        case 'd':
                   1512:                found=1;
                   1513:                s=gt_num(s,&w);
                   1514:                if(w==0) break;
                   1515:                if(*s=='.')
                   1516:                {       s++;
                   1517:                        s=gt_num(s,&d);
                   1518:                }
                   1519:                else d=0;
                   1520:                (void) op_gen(D,w,d,0);
                   1521:                break;
                   1522:        case 'I':
                   1523:        case 'i':
                   1524:                i = I;
                   1525:                im = IM;
                   1526:  finish_I:
                   1527:                found=1;
                   1528:                s=gt_num(s,&w);
                   1529:                if(w==0) break;
                   1530:                if(*s!='.')
                   1531:                {       (void) op_gen(i,w,0,0);
                   1532:                        break;
                   1533:                }
                   1534:                s++;
                   1535:                s=gt_num(s,&d);
                   1536:                (void) op_gen(im,w,d,0);
                   1537:                break;
                   1538:        }
                   1539:        if(found==0)
                   1540:        {       f__pc--; /*unSTACK*/
                   1541:                *p=sv;
                   1542:                return(0);
                   1543:        }
                   1544:        *p=s;
                   1545:        return(1);
                   1546: }
                   1547: #ifdef KR_headers
                   1548: char *i_tem(s) char *s;
                   1549: #else
                   1550: char *i_tem(char *s)
                   1551: #endif
                   1552: {      char *t;
                   1553:        int n,curloc;
                   1554:        if(*s==')') return(s);
                   1555:        if(ne_d(s,&t)) return(t);
                   1556:        if(e_d(s,&t)) return(t);
                   1557:        s=gt_num(s,&n);
                   1558:        if((curloc=op_gen(STACK,n,0,0))<0) return(NULL);
                   1559:        return(f_s(s,curloc));
                   1560: }
                   1561: #ifdef KR_headers
                   1562: char *f_list(s) char *s;
                   1563: #else
                   1564: char *f_list(char *s)
                   1565: #endif
                   1566: {
                   1567:        for(;*s!=0;)
                   1568:        {       skip(s);
                   1569:                if((s=i_tem(s))==NULL) return(NULL);
                   1570:                skip(s);
                   1571:                if(*s==',') s++;
                   1572:                else if(*s==')')
                   1573:                {       if(--f__parenlvl==0)
                   1574:                        {
                   1575:                                (void) op_gen(REVERT,f__revloc,0,0);
                   1576:                                return(++s);
                   1577:                        }
                   1578:                        (void) op_gen(GOTO,0,0,0);
                   1579:                        return(++s);
                   1580:                }
                   1581:        }
                   1582:        return(NULL);
                   1583: }
                   1584: 
                   1585: #ifdef KR_headers
                   1586: pars_f(s) char *s;
                   1587: #else
                   1588: pars_f(char *s)
                   1589: #endif
                   1590: {
                   1591:        f__parenlvl=f__revloc=f__pc=0;
                   1592:        if(f_s(s,0) == NULL)
                   1593:        {
                   1594:                return(-1);
                   1595:        }
                   1596:        return(0);
                   1597: }
                   1598: #define STKSZ 10
                   1599: int f__cnt[STKSZ],f__ret[STKSZ],f__cp,f__rp;
                   1600: flag f__workdone, f__nonl;
                   1601: 
                   1602: #ifdef KR_headers
                   1603: type_f(n)
                   1604: #else
                   1605: type_f(int n)
                   1606: #endif
                   1607: {
                   1608:        switch(n)
                   1609:        {
                   1610:        default:
                   1611:                return(n);
                   1612:        case RET1:
                   1613:                return(RET1);
                   1614:        case REVERT: return(REVERT);
                   1615:        case GOTO: return(GOTO);
                   1616:        case STACK: return(STACK);
                   1617:        case X:
                   1618:        case SLASH:
                   1619:        case APOS: case H:
                   1620:        case T: case TL: case TR:
                   1621:                return(NED);
                   1622:        case F:
                   1623:        case I:
                   1624:        case IM:
                   1625:        case A: case AW:
                   1626:        case O: case OM:
                   1627:        case L:
                   1628:        case E: case EE: case D:
                   1629:        case G: case GE:
                   1630:        case Z: case ZM:
                   1631:                return(ED);
                   1632:        }
                   1633: }
                   1634: #ifdef KR_headers
                   1635: integer do_fio(number,ptr,len) ftnint *number; ftnlen len; char *ptr;
                   1636: #else
                   1637: integer do_fio(ftnint *number, char *ptr, ftnlen len)
                   1638: #endif
                   1639: {      struct f__syl *p;
                   1640:        int n,i;
                   1641:        for(i=0;i<*number;i++,ptr+=len)
                   1642:        {
                   1643: loop:  switch(type_f((p= &f__syl[f__pc])->op))
                   1644:        {
                   1645:        default:
                   1646:                fprintf(stderr,"unknown code in do_fio: %d\n%s\n",
                   1647:                        p->op,f__fmtbuf);
                   1648:                err(f__elist->cierr,100,"do_fio");
                   1649:        case NED:
                   1650:                if((*f__doned)(p))
                   1651:                {       f__pc++;
                   1652:                        goto loop;
                   1653:                }
                   1654:                f__pc++;
                   1655:                continue;
                   1656:        case ED:
                   1657:                if(f__cnt[f__cp]<=0)
                   1658:                {       f__cp--;
                   1659:                        f__pc++;
                   1660:                        goto loop;
                   1661:                }
                   1662:                if(ptr==NULL)
                   1663:                        return((*f__doend)());
                   1664:                f__cnt[f__cp]--;
                   1665:                f__workdone=1;
                   1666:                if((n=(*f__doed)(p,ptr,len))>0) err(f__elist->cierr,errno,"fmt");
                   1667:                if(n<0) err(f__elist->ciend,(EOF),"fmt");
                   1668:                continue;
                   1669:        case STACK:
                   1670:                f__cnt[++f__cp]=p->p1;
                   1671:                f__pc++;
                   1672:                goto loop;
                   1673:        case RET1:
                   1674:                f__ret[++f__rp]=p->p1;
                   1675:                f__pc++;
                   1676:                goto loop;
                   1677:        case GOTO:
                   1678:                if(--f__cnt[f__cp]<=0)
                   1679:                {       f__cp--;
                   1680:                        f__rp--;
                   1681:                        f__pc++;
                   1682:                        goto loop;
                   1683:                }
                   1684:                f__pc=1+f__ret[f__rp--];
                   1685:                goto loop;
                   1686:        case REVERT:
                   1687:                f__rp=f__cp=0;
                   1688:                f__pc = p->p1;
                   1689:                if(ptr==NULL)
                   1690:                        return((*f__doend)());
                   1691:                if(!f__workdone) return(0);
                   1692:                if((n=(*f__dorevert)()) != 0) return(n);
                   1693:                goto loop;
                   1694:        case COLON:
                   1695:                if(ptr==NULL)
                   1696:                        return((*f__doend)());
                   1697:                f__pc++;
                   1698:                goto loop;
                   1699:        case NONL:
                   1700:                f__nonl = 1;
                   1701:                f__pc++;
                   1702:                goto loop;
                   1703:        case S:
                   1704:        case SS:
                   1705:                f__cplus=0;
                   1706:                f__pc++;
                   1707:                goto loop;
                   1708:        case SP:
                   1709:                f__cplus = 1;
                   1710:                f__pc++;
                   1711:                goto loop;
                   1712:        case P: f__scale=p->p1;
                   1713:                f__pc++;
                   1714:                goto loop;
                   1715:        case BN:
                   1716:                f__cblank=0;
                   1717:                f__pc++;
                   1718:                goto loop;
                   1719:        case BZ:
                   1720:                f__cblank=1;
                   1721:                f__pc++;
                   1722:                goto loop;
                   1723:        }
                   1724:        }
                   1725:        return(0);
                   1726: }
                   1727: en_fio(Void)
                   1728: {      ftnint one=1;
                   1729:        return(do_fio(&one,(char *)NULL,(ftnint)0));
                   1730: }
                   1731:  VOID
                   1732: fmt_bg(Void)
                   1733: {
                   1734:        f__workdone=f__cp=f__rp=f__pc=f__cursor=0;
                   1735:        f__cnt[0]=f__ret[0]=0;
                   1736: }
                   1737: ./ ADD NAME=libI77/fmt.h TIME=719848230
                   1738: struct f__syl
                   1739: {      int op,p1,p2,p3;
                   1740: };
                   1741: #define RET1 1
                   1742: #define REVERT 2
                   1743: #define GOTO 3
                   1744: #define X 4
                   1745: #define SLASH 5
                   1746: #define STACK 6
                   1747: #define I 7
                   1748: #define ED 8
                   1749: #define NED 9
                   1750: #define IM 10
                   1751: #define APOS 11
                   1752: #define H 12
                   1753: #define TL 13
                   1754: #define TR 14
                   1755: #define T 15
                   1756: #define COLON 16
                   1757: #define S 17
                   1758: #define SP 18
                   1759: #define SS 19
                   1760: #define P 20
                   1761: #define BN 21
                   1762: #define BZ 22
                   1763: #define F 23
                   1764: #define E 24
                   1765: #define EE 25
                   1766: #define D 26
                   1767: #define G 27
                   1768: #define GE 28
                   1769: #define L 29
                   1770: #define A 30
                   1771: #define AW 31
                   1772: #define O 32
                   1773: #define NONL 33
                   1774: #define OM 34
                   1775: #define Z 35
                   1776: #define ZM 36
                   1777: extern struct f__syl f__syl[];
                   1778: extern int f__pc,f__parenlvl,f__revloc;
                   1779: typedef union
                   1780: {      real pf;
                   1781:        doublereal pd;
                   1782: } ufloat;
                   1783: typedef union
                   1784: {      short is;
                   1785:        char ic;
                   1786:        long il;
                   1787: } Uint;
                   1788: #ifdef KR_headers
                   1789: extern int (*f__doed)(),(*f__doned)();
                   1790: extern int (*f__dorevert)(), (*f__doend)();
                   1791: extern int rd_ed(),rd_ned();
                   1792: extern int w_ed(),w_ned();
                   1793: #else
                   1794: #ifdef __cplusplus
                   1795: extern "C" {
                   1796: #endif
                   1797: extern int (*f__doed)(struct f__syl*, char*, ftnlen),(*f__doned)(struct f__syl*);
                   1798: extern int (*f__dorevert)(void), (*f__doend)(void);
                   1799: extern void fmt_bg(void);
                   1800: extern int pars_f(char*);
                   1801: extern int rd_ed(struct f__syl*, char*, ftnlen),rd_ned(struct f__syl*);
                   1802: extern int w_ed(struct f__syl*, char*, ftnlen),w_ned(struct f__syl*);
                   1803: extern int wrt_E(ufloat*, int, int, int, ftnlen);
                   1804: extern int wrt_F(ufloat*, int, int, ftnlen);
                   1805: extern int wrt_L(Uint*, int, ftnlen);
                   1806: #ifdef __cplusplus
                   1807:        }
                   1808: #endif
                   1809: #endif
                   1810: extern flag f__cblank,f__cplus,f__workdone, f__nonl;
                   1811: extern char *f__fmtbuf;
                   1812: extern int f__scale;
                   1813: #define GET(x) if((x=(*f__getn)())<0) return(x)
                   1814: #define VAL(x) (x!='\n'?x:' ')
                   1815: #define PUT(x) (*f__putn)(x)
                   1816: extern int f__cursor;
                   1817: ./ ADD NAME=libI77/fmtlib.c TIME=719848230
                   1818: /*     @(#)fmtlib.c    1.2     */
                   1819: #define MAXINTLENGTH 23
                   1820: #ifdef __cplusplus
                   1821: extern "C" {
                   1822: #endif
                   1823: #ifdef KR_headers
                   1824: char *f__icvt(value,ndigit,sign, base) long value; int *ndigit,*sign;
                   1825:  register int base;
                   1826: #else
                   1827: char *f__icvt(long value, int *ndigit, int *sign, int base)
                   1828: #endif
                   1829: {      static char buf[MAXINTLENGTH+1];
                   1830:        register int i;
                   1831:        if(value>0) *sign=0;
                   1832:        else if(value<0)
                   1833:        {       value = -value;
                   1834:                *sign= 1;
                   1835:        }
                   1836:        else
                   1837:        {       *sign=0;
                   1838:                *ndigit=1;
                   1839:                buf[MAXINTLENGTH]='0';
                   1840:                return(&buf[MAXINTLENGTH]);
                   1841:        }
                   1842:        for(i=MAXINTLENGTH-1;value>0;i--)
                   1843:        {       *(buf+i)=(int)(value%base)+'0';
                   1844:                value /= base;
                   1845:        }
                   1846:        *ndigit=MAXINTLENGTH-1-i;
                   1847:        return(&buf[i+1]);
                   1848: }
                   1849: #ifdef __cplusplus
                   1850:        }
                   1851: #endif
                   1852: ./ ADD NAME=libI77/fp.h TIME=580998005
                   1853: #define FMAX 40
                   1854: #define EXPMAXDIGS 8
                   1855: #define EXPMAX 99999999
                   1856: /* FMAX = max number of nonzero digits passed to atof() */
                   1857: /* EXPMAX = 10^EXPMAXDIGS - 1 = largest allowed exponent absolute value */
                   1858: 
                   1859: #include "local.h"
                   1860: 
                   1861: /* MAXFRACDIGS and MAXINTDIGS are for wrt_F -- bounds (not necessarily
                   1862:    tight) on the maximum number of digits to the right and left of
                   1863:  * the decimal point.
                   1864:  */
                   1865: 
                   1866: #ifdef VAX
                   1867: #define MAXFRACDIGS 56
                   1868: #define MAXINTDIGS 38
                   1869: #else
                   1870: #ifdef CRAY
                   1871: #define MAXFRACDIGS 9880
                   1872: #define MAXINTDIGS 9864
                   1873: #else
                   1874: /* values that suffice for IEEE double */
                   1875: #define MAXFRACDIGS 344
                   1876: #define MAXINTDIGS 308
                   1877: #endif
                   1878: #endif
                   1879: ./ ADD NAME=libI77/iio.c TIME=719848231
                   1880: #include "f2c.h"
                   1881: #include "fio.h"
                   1882: #include "fmt.h"
                   1883: extern char *f__icptr;
                   1884: char *f__icend;
                   1885: extern icilist *f__svic;
                   1886: int f__icnum;
                   1887: extern int f__hiwater;
                   1888: z_getc(Void)
                   1889: {
                   1890:        if(f__recpos++ < f__svic->icirlen) {
                   1891:                if(f__icptr >= f__icend) err(f__svic->iciend,(EOF),"endfile");
                   1892:                return(*f__icptr++);
                   1893:                }
                   1894:        err(f__svic->icierr,110,"recend");
                   1895: }
                   1896: #ifdef KR_headers
                   1897: z_putc(c)
                   1898: #else
                   1899: z_putc(int c)
                   1900: #endif
                   1901: {
                   1902:        if(f__icptr >= f__icend) err(f__svic->icierr,110,"inwrite");
                   1903:        if(f__recpos++ < f__svic->icirlen)
                   1904:                *f__icptr++ = c;
                   1905:        else    err(f__svic->icierr,110,"recend");
                   1906:        return 0;
                   1907: }
                   1908: z_rnew(Void)
                   1909: {
                   1910:        f__icptr = f__svic->iciunit + (++f__icnum)*f__svic->icirlen;
                   1911:        f__recpos = 0;
                   1912:        f__cursor = 0;
                   1913:        f__hiwater = 0;
                   1914:        return 1;
                   1915: }
                   1916: 
                   1917:  static int
                   1918: z_endp(Void)
                   1919: {
                   1920:        (*f__donewrec)();
                   1921:        return 0;
                   1922:        }
                   1923: 
                   1924: #ifdef KR_headers
                   1925: c_si(a) icilist *a;
                   1926: #else
                   1927: c_si(icilist *a)
                   1928: #endif
                   1929: {
                   1930:        f__elist = (cilist *)a;
                   1931:        f__fmtbuf=a->icifmt;
                   1932:        if(pars_f(f__fmtbuf)<0)
                   1933:                err(a->icierr,100,"startint");
                   1934:        fmt_bg();
                   1935:        f__sequential=f__formatted=1;
                   1936:        f__external=0;
                   1937:        f__cblank=f__cplus=f__scale=0;
                   1938:        f__svic=a;
                   1939:        f__icnum=f__recpos=0;
                   1940:        f__cursor = 0;
                   1941:        f__hiwater = 0;
                   1942:        f__icptr = a->iciunit;
                   1943:        f__icend = f__icptr + a->icirlen*a->icirnum;
                   1944:        f__curunit = 0;
                   1945:        f__cf = 0;
                   1946:        return(0);
                   1947: }
                   1948: y_ierr(Void)
                   1949: {
                   1950:        err(f__elist->cierr, 110, "iio");
                   1951: }
                   1952: #ifdef KR_headers
                   1953: integer s_rsfi(a) icilist *a;
                   1954: #else
                   1955: integer s_rsfi(icilist *a)
                   1956: #endif
                   1957: {      int n;
                   1958:        if(n=c_si(a)) return(n);
                   1959:        f__reading=1;
                   1960:        f__doed=rd_ed;
                   1961:        f__doned=rd_ned;
                   1962:        f__getn=z_getc;
                   1963:        f__dorevert = y_ierr;
                   1964:        f__donewrec = z_rnew;
                   1965:        f__doend = z_endp;
                   1966:        return(0);
                   1967: }
                   1968: 
                   1969: z_wnew(Void)
                   1970: {
                   1971:        while(f__recpos++ < f__svic->icirlen)
                   1972:                *f__icptr++ = ' ';
                   1973:        f__recpos = 0;
                   1974:        f__cursor = 0;
                   1975:        f__hiwater = 0;
                   1976:        f__icnum++;
                   1977:        return 1;
                   1978: }
                   1979: #ifdef KR_headers
                   1980: integer s_wsfi(a) icilist *a;
                   1981: #else
                   1982: integer s_wsfi(icilist *a)
                   1983: #endif
                   1984: {      int n;
                   1985:        if(n=c_si(a)) return(n);
                   1986:        f__reading=0;
                   1987:        f__doed=w_ed;
                   1988:        f__doned=w_ned;
                   1989:        f__putn=z_putc;
                   1990:        f__dorevert = y_ierr;
                   1991:        f__donewrec = z_wnew;
                   1992:        f__doend = z_endp;
                   1993:        return(0);
                   1994: }
                   1995: integer e_rsfi(Void)
                   1996: {      int n;
                   1997:        n = en_fio();
                   1998:        f__fmtbuf = NULL;
                   1999:        return(n);
                   2000: }
                   2001: integer e_wsfi(Void)
                   2002: {
                   2003:        int n;
                   2004:        n = en_fio();
                   2005:        f__fmtbuf = NULL;
                   2006:        if(f__icnum >= f__svic->icirnum)
                   2007:                return(n);
                   2008:        while(f__recpos++ < f__svic->icirlen)
                   2009:                *f__icptr++ = ' ';
                   2010:        return(n);
                   2011: }
                   2012: ./ ADD NAME=libI77/ilnw.c TIME=719848231
                   2013: #include "f2c.h"
                   2014: #include "fio.h"
                   2015: #include "lio.h"
                   2016: extern char *f__icptr;
                   2017: extern char *f__icend;
                   2018: extern icilist *f__svic;
                   2019: extern int f__icnum;
                   2020: #ifdef KR_headers
                   2021: extern int z_putc();
                   2022: #else
                   2023: extern int z_putc(int);
                   2024: #endif
                   2025: 
                   2026:  static int
                   2027: z_wSL(Void)
                   2028: {
                   2029:        while(f__recpos < f__svic->icirlen)
                   2030:                z_putc(' ');
                   2031:        return z_rnew();
                   2032:        }
                   2033: 
                   2034:  VOID
                   2035: #ifdef KR_headers
                   2036: c_liw(a) icilist *a;
                   2037: #else
                   2038: c_liw(icilist *a)
                   2039: #endif
                   2040: {
                   2041:        f__reading = 0;
                   2042:        f__external = 0;
                   2043:        f__formatted = 1;
                   2044:        f__putn = z_putc;
                   2045:        L_len = a->icirlen;
                   2046:        f__donewrec = z_wSL;
                   2047:        f__svic = a;
                   2048:        f__icnum = f__recpos = 0;
                   2049:        f__cursor = 0;
                   2050:        f__cf = 0;
                   2051:        f__curunit = 0;
                   2052:        f__icptr = a->iciunit;
                   2053:        f__icend = f__icptr + a->icirlen*a->icirnum;
                   2054:        f__elist = (cilist *)a;
                   2055:        }
                   2056: 
                   2057: #ifdef KR_headers
                   2058: s_wsni(a) icilist *a;
                   2059: #else
                   2060: s_wsni(icilist *a)
                   2061: #endif
                   2062: {
                   2063:        cilist ca;
                   2064: 
                   2065:        c_liw(a);
                   2066:        ca.cifmt = a->icifmt;
                   2067:        x_wsne(&ca);
                   2068:        z_wSL();
                   2069:        return 0;
                   2070:        }
                   2071: 
                   2072: #ifdef KR_headers
                   2073: integer s_wsli(a) icilist *a;
                   2074: #else
                   2075: integer s_wsli(icilist *a)
                   2076: #endif
                   2077: {
                   2078:        f__lioproc = l_write;
                   2079:        c_liw(a);
                   2080:        return(0);
                   2081:        }
                   2082: 
                   2083: integer e_wsli(Void)
                   2084: {
                   2085:        z_wSL();
                   2086:        return(0);
                   2087:        }
                   2088: ./ ADD NAME=libI77/inquire.c TIME=719848231
                   2089: #include "f2c.h"
                   2090: #include "fio.h"
                   2091: #ifdef KR_headers
                   2092: integer f_inqu(a) inlist *a;
                   2093: #else
                   2094: #ifdef MSDOS
                   2095: #undef abs
                   2096: #undef min
                   2097: #undef max
                   2098: #include "string.h"
                   2099: #include "io.h"
                   2100: #endif
                   2101: integer f_inqu(inlist *a)
                   2102: #endif
                   2103: {      flag byfile;
                   2104:        int i, n;
                   2105:        unit *p;
                   2106:        char buf[256];
                   2107:        long x;
                   2108:        if(a->infile!=NULL)
                   2109:        {       byfile=1;
                   2110:                g_char(a->infile,a->infilen,buf);
                   2111: #ifdef MSDOS
                   2112:                x = access(buf,0) ? -1 : 0;
                   2113:                for(i=0,p=NULL;i<MXUNIT;i++)
                   2114:                        if(f__units[i].ufd != NULL
                   2115:                         && f__units[i].ufnm != NULL
                   2116:                         && !strcmp(f__units[i].ufnm,buf)) {
                   2117:                                p = &f__units[i];
                   2118:                                break;
                   2119:                                }
                   2120: #else
                   2121:                x=f__inode(buf, &n);
                   2122:                for(i=0,p=NULL;i<MXUNIT;i++)
                   2123:                        if(f__units[i].uinode==x
                   2124:                        && f__units[i].ufd!=NULL
                   2125:                        && f__units[i].udev == n) {
                   2126:                                p = &f__units[i];
                   2127:                                break;
                   2128:                                }
                   2129: #endif
                   2130:        }
                   2131:        else
                   2132:        {
                   2133:                byfile=0;
                   2134:                if(a->inunit<MXUNIT && a->inunit>=0)
                   2135:                {
                   2136:                        p= &f__units[a->inunit];
                   2137:                }
                   2138:                else
                   2139:                {
                   2140:                        p=NULL;
                   2141:                }
                   2142:        }
                   2143:        if(a->inex!=NULL)
                   2144:                if(byfile && x != -1 || !byfile && p!=NULL)
                   2145:                        *a->inex=1;
                   2146:                else *a->inex=0;
                   2147:        if(a->inopen!=NULL)
                   2148:                if(byfile) *a->inopen=(p!=NULL);
                   2149:                else *a->inopen=(p!=NULL && p->ufd!=NULL);
                   2150:        if(a->innum!=NULL) *a->innum= p-f__units;
                   2151:        if(a->innamed!=NULL)
                   2152:                if(byfile || p!=NULL && p->ufnm!=NULL)
                   2153:                        *a->innamed=1;
                   2154:                else    *a->innamed=0;
                   2155:        if(a->inname!=NULL)
                   2156:                if(byfile)
                   2157:                        b_char(buf,a->inname,a->innamlen);
                   2158:                else if(p!=NULL && p->ufnm!=NULL)
                   2159:                        b_char(p->ufnm,a->inname,a->innamlen);
                   2160:        if(a->inacc!=NULL && p!=NULL && p->ufd!=NULL)
                   2161:                if(p->url)
                   2162:                        b_char("DIRECT",a->inacc,a->inacclen);
                   2163:                else    b_char("SEQUENTIAL",a->inacc,a->inacclen);
                   2164:        if(a->inseq!=NULL)
                   2165:                if(p!=NULL && p->url)
                   2166:                        b_char("NO",a->inseq,a->inseqlen);
                   2167:                else    b_char("YES",a->inseq,a->inseqlen);
                   2168:        if(a->indir!=NULL)
                   2169:                if(p==NULL || p->url)
                   2170:                        b_char("YES",a->indir,a->indirlen);
                   2171:                else    b_char("NO",a->indir,a->indirlen);
                   2172:        if(a->infmt!=NULL)
                   2173:                if(p!=NULL && p->ufmt==0)
                   2174:                        b_char("UNFORMATTED",a->infmt,a->infmtlen);
                   2175:                else    b_char("FORMATTED",a->infmt,a->infmtlen);
                   2176:        if(a->inform!=NULL)
                   2177:                if(p!=NULL && p->ufmt==0)
                   2178:                b_char("NO",a->inform,a->informlen);
                   2179:                else b_char("YES",a->inform,a->informlen);
                   2180:        if(a->inunf)
                   2181:                if(p!=NULL && p->ufmt==0)
                   2182:                        b_char("YES",a->inunf,a->inunflen);
                   2183:                else if (p!=NULL) b_char("NO",a->inunf,a->inunflen);
                   2184:                else b_char("UNKNOWN",a->inunf,a->inunflen);
                   2185:        if(a->inrecl!=NULL && p!=NULL)
                   2186:                *a->inrecl=p->url;
                   2187:        if(a->innrec!=NULL && p!=NULL && p->url>0)
                   2188:                *a->innrec=ftell(p->ufd)/p->url+1;
                   2189:        if(a->inblank && p!=NULL && p->ufmt)
                   2190:                if(p->ublnk)
                   2191:                        b_char("ZERO",a->inblank,a->inblanklen);
                   2192:                else    b_char("NULL",a->inblank,a->inblanklen);
                   2193:        return(0);
                   2194: }
                   2195: ./ ADD NAME=libI77/lio.h TIME=719848231
                   2196: /*     copy of ftypes from the compiler */
                   2197: /* variable types
                   2198:  * numeric assumptions:
                   2199:  *     int < reals < complexes
                   2200:  *     TYDREAL-TYREAL = TYDCOMPLEX-TYCOMPLEX
                   2201:  */
                   2202: 
                   2203: /* 0-10 retain their old (pre LOGICAL*1, etc.) */
                   2204: /* values to allow mixing old and new objects. */
                   2205: 
                   2206: #define TYUNKNOWN 0
                   2207: #define TYADDR 1
                   2208: #define TYSHORT 2
                   2209: #define TYLONG 3
                   2210: #define TYREAL 4
                   2211: #define TYDREAL 5
                   2212: #define TYCOMPLEX 6
                   2213: #define TYDCOMPLEX 7
                   2214: #define TYLOGICAL 8
                   2215: #define TYCHAR 9
                   2216: #define TYSUBR 10
                   2217: #define TYINT1 11
                   2218: #define TYLOGICAL1 12
                   2219: #define TYLOGICAL2 13
                   2220: #define TYERROR 14
                   2221: 
                   2222: #define NTYPES (TYERROR+1)
                   2223: 
                   2224: #define        LINTW   12
                   2225: #define        LINE    80
                   2226: #define        LLOGW   2
                   2227: #ifdef Old_list_output
                   2228: #define        LLOW    1.0
                   2229: #define        LHIGH   1.e9
                   2230: #define        LEFMT   " %# .8E"
                   2231: #define        LFFMT   " %# .9g"
                   2232: #else
                   2233: #define        LGFMT   "%.9G"
                   2234: #endif
                   2235: /* LEFBL 20 should suffice; 24 overcomes a NeXT bug. */
                   2236: #define        LEFBL   24
                   2237: 
                   2238: typedef union
                   2239: {
                   2240:        char    flchar;
                   2241:        short   flshort;
                   2242:        ftnint  flint;
                   2243:        real    flreal;
                   2244:        doublereal      fldouble;
                   2245: } flex;
                   2246: extern int f__scale;
                   2247: #ifdef KR_headers
                   2248: extern int (*f__lioproc)(), (*l_getc)(), (*l_ungetc)();
                   2249: extern int l_read(), l_write();
                   2250: #else
                   2251: #ifdef __cplusplus
                   2252: extern "C" {
                   2253: #endif
                   2254: extern int (*f__lioproc)(ftnint*, char*, ftnlen, ftnint);
                   2255: extern int l_write(ftnint*, char*, ftnlen, ftnint);
                   2256: extern void x_wsne(cilist*);
                   2257: extern int c_le(cilist*), (*l_getc)(void), (*l_ungetc)(int,FILE*);
                   2258: extern int l_read(ftnint*,char*,ftnlen,ftnint);
                   2259: extern integer e_rsle(void);
                   2260: extern int z_rnew(void);
                   2261: #ifdef __cplusplus
                   2262:        }
                   2263: #endif
                   2264: #endif
                   2265: extern int L_len;
                   2266: ./ ADD NAME=libI77/lread.c TIME=719848231
                   2267: #include "f2c.h"
                   2268: #include "fio.h"
                   2269: #include "fmt.h"
                   2270: #include "lio.h"
                   2271: #include "ctype.h"
                   2272: #include "fp.h"
                   2273: 
                   2274: extern char *f__fmtbuf;
                   2275: #ifdef KR_headers
                   2276: extern double atof();
                   2277: extern char *malloc(), *realloc();
                   2278: int (*f__lioproc)(), (*l_getc)(), (*l_ungetc)();
                   2279: #else
                   2280: #undef abs
                   2281: #undef min
                   2282: #undef max
                   2283: #include "stdlib.h"
                   2284: int (*f__lioproc)(ftnint*, char*, ftnlen, ftnint), (*l_getc)(void),
                   2285:        (*l_ungetc)(int,FILE*);
                   2286: #endif
                   2287: int l_eof;
                   2288: 
                   2289: #define isblnk(x) (f__ltab[x+1]&B)
                   2290: #define issep(x) (f__ltab[x+1]&SX)
                   2291: #define isapos(x) (f__ltab[x+1]&AX)
                   2292: #define isexp(x) (f__ltab[x+1]&EX)
                   2293: #define issign(x) (f__ltab[x+1]&SG)
                   2294: #define iswhit(x) (f__ltab[x+1]&WH)
                   2295: #define SX 1
                   2296: #define B 2
                   2297: #define AX 4
                   2298: #define EX 8
                   2299: #define SG 16
                   2300: #define WH 32
                   2301: char f__ltab[128+1] = {        /* offset one for EOF */
                   2302:        0,
                   2303:        0,0,AX,0,0,0,0,0,0,WH|B,SX|WH,0,0,0,0,0,
                   2304:        0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
                   2305:        SX|B|WH,0,AX,0,0,0,0,AX,0,0,0,SG,SX,SG,0,SX,
                   2306:        0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
                   2307:        0,0,0,0,EX,EX,0,0,0,0,0,0,0,0,0,0,
                   2308:        0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
                   2309:        AX,0,0,0,EX,EX,0,0,0,0,0,0,0,0,0,0,
                   2310:        0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
                   2311: };
                   2312: 
                   2313: #ifdef ungetc
                   2314:  static int
                   2315: #ifdef KR_headers
                   2316: un_getc(x,f__cf) int x; FILE *f__cf;
                   2317: #else
                   2318: un_getc(int x, FILE *f__cf)
                   2319: #endif
                   2320: { return ungetc(x,f__cf); }
                   2321: #else
                   2322: #define un_getc ungetc
                   2323: #ifdef KR_headers
                   2324:  extern int ungetc();
                   2325: #endif
                   2326: #endif
                   2327: 
                   2328: t_getc(Void)
                   2329: {      int ch;
                   2330:        if(f__curunit->uend) return(EOF);
                   2331:        if((ch=getc(f__cf))!=EOF) return(ch);
                   2332:        if(feof(f__cf))
                   2333:                l_eof = f__curunit->uend = 1;
                   2334:        return(EOF);
                   2335: }
                   2336: integer e_rsle(Void)
                   2337: {
                   2338:        int ch;
                   2339:        if(f__curunit->uend) return(0);
                   2340:        while((ch=t_getc())!='\n' && ch!=EOF);
                   2341:        return(0);
                   2342: }
                   2343: 
                   2344: flag f__lquit;
                   2345: int f__lcount,f__ltype,nml_read;
                   2346: char *f__lchar;
                   2347: double f__lx,f__ly;
                   2348: #define ERR(x) if(n=(x)) return(n)
                   2349: #define GETC(x) (x=(*l_getc)())
                   2350: #define Ungetc(x,y) (*l_ungetc)(x,y)
                   2351: 
                   2352: #ifdef KR_headers
                   2353: l_R(poststar) int poststar;
                   2354: #else
                   2355: l_R(int poststar)
                   2356: #endif
                   2357: {
                   2358:        char s[FMAX+EXPMAXDIGS+4];
                   2359:        register int ch;
                   2360:        register char *sp, *spe, *sp1;
                   2361:        long e, exp;
                   2362:        int havenum, havestar, se;
                   2363: 
                   2364:        if (!poststar) {
                   2365:                if (f__lcount > 0)
                   2366:                        return(0);
                   2367:                f__lcount = 1;
                   2368:                }
                   2369:        f__ltype = 0;
                   2370:        exp = 0;
                   2371:        havestar = 0;
                   2372: retry:
                   2373:        sp1 = sp = s;
                   2374:        spe = sp + FMAX;
                   2375:        havenum = 0;
                   2376: 
                   2377:        switch(GETC(ch)) {
                   2378:                case '-': *sp++ = ch; sp1++; spe++;
                   2379:                case '+':
                   2380:                        GETC(ch);
                   2381:                }
                   2382:        while(ch == '0') {
                   2383:                ++havenum;
                   2384:                GETC(ch);
                   2385:                }
                   2386:        while(isdigit(ch)) {
                   2387:                if (sp < spe) *sp++ = ch;
                   2388:                else ++exp;
                   2389:                GETC(ch);
                   2390:                }
                   2391:        if (ch == '*' && !poststar) {
                   2392:                if (sp == sp1 || exp || *s == '-') {
                   2393:                        err(f__elist->cierr,112,"bad repetition count")
                   2394:                        }
                   2395:                poststar = havestar = 1;
                   2396:                *sp = 0;
                   2397:                f__lcount = atoi(s);
                   2398:                goto retry;
                   2399:                }
                   2400:        if (ch == '.') {
                   2401:                GETC(ch);
                   2402:                if (sp == sp1)
                   2403:                        while(ch == '0') {
                   2404:                                ++havenum;
                   2405:                                --exp;
                   2406:                                GETC(ch);
                   2407:                                }
                   2408:                while(isdigit(ch)) {
                   2409:                        if (sp < spe)
                   2410:                                { *sp++ = ch; --exp; }
                   2411:                        GETC(ch);
                   2412:                        }
                   2413:                }
                   2414:        se = 0;
                   2415:        if (issign(ch))
                   2416:                goto signonly;
                   2417:        if (isexp(ch)) {
                   2418:                GETC(ch);
                   2419:                if (issign(ch)) {
                   2420: signonly:
                   2421:                        if (ch == '-') se = 1;
                   2422:                        GETC(ch);
                   2423:                        }
                   2424:                if (!isdigit(ch)) {
                   2425: bad:
                   2426:                        err(f__elist->cierr,112,"exponent field")
                   2427:                        }
                   2428: 
                   2429:                e = ch - '0';
                   2430:                while(isdigit(GETC(ch))) {
                   2431:                        e = 10*e + ch - '0';
                   2432:                        if (e > EXPMAX)
                   2433:                                goto bad;
                   2434:                        }
                   2435:                if (se)
                   2436:                        exp -= e;
                   2437:                else
                   2438:                        exp += e;
                   2439:                }
                   2440:        (void) Ungetc(ch, f__cf);
                   2441:        if (sp > sp1) {
                   2442:                ++havenum;
                   2443:                while(*--sp == '0')
                   2444:                        ++exp;
                   2445:                if (exp)
                   2446:                        sprintf(sp+1, "e%ld", exp);
                   2447:                else
                   2448:                        sp[1] = 0;
                   2449:                f__lx = atof(s);
                   2450:                }
                   2451:        else
                   2452:                f__lx = 0.;
                   2453:        if (havenum)
                   2454:                f__ltype = TYLONG;
                   2455:        else
                   2456:                switch(ch) {
                   2457:                        case ',':
                   2458:                        case '/':
                   2459:                                break;
                   2460:                        default:
                   2461:                                if (havestar && ( ch == ' '
                   2462:                                                ||ch == '\t'
                   2463:                                                ||ch == '\n'))
                   2464:                                        break;
                   2465:                                if (nml_read > 1) {
                   2466:                                        f__lquit = 2;
                   2467:                                        return 0;
                   2468:                                        }
                   2469:                                err(f__elist->cierr,112,"invalid number")
                   2470:                        }
                   2471:        return 0;
                   2472:        }
                   2473: 
                   2474:  static int
                   2475: #ifdef KR_headers
                   2476: rd_count(ch) register int ch;
                   2477: #else
                   2478: rd_count(register int ch)
                   2479: #endif
                   2480: {
                   2481:        if (ch < '0' || ch > '9')
                   2482:                return 1;
                   2483:        f__lcount = ch - '0';
                   2484:        while(GETC(ch) >= '0' && ch <= '9')
                   2485:                f__lcount = 10*f__lcount + ch - '0';
                   2486:        Ungetc(ch,f__cf);
                   2487:        return f__lcount <= 0;
                   2488:        }
                   2489: 
                   2490: l_C(Void)
                   2491: {      int ch, nml_save;
                   2492:        double lz;
                   2493:        if(f__lcount>0) return(0);
                   2494:        f__ltype=0;
                   2495:        GETC(ch);
                   2496:        if(ch!='(')
                   2497:        {
                   2498:                if (nml_read > 1 && (ch < '0' || ch > '9')) {
                   2499:                        Ungetc(ch,f__cf);
                   2500:                        f__lquit = 2;
                   2501:                        return 0;
                   2502:                        }
                   2503:                if (rd_count(ch))
                   2504:                        if(!f__cf || !feof(f__cf))
                   2505:                                err(f__elist->cierr,112,"complex format")
                   2506:                        else
                   2507:                                err(f__elist->cierr,(EOF),"lread");
                   2508:                if(GETC(ch)!='*')
                   2509:                {
                   2510:                        if(!f__cf || !feof(f__cf))
                   2511:                                err(f__elist->cierr,112,"no star")
                   2512:                        else
                   2513:                                err(f__elist->cierr,(EOF),"lread");
                   2514:                }
                   2515:                if(GETC(ch)!='(')
                   2516:                {       Ungetc(ch,f__cf);
                   2517:                        return(0);
                   2518:                }
                   2519:        }
                   2520:        else
                   2521:                f__lcount = 1;
                   2522:        while(iswhit(GETC(ch)));
                   2523:        Ungetc(ch,f__cf);
                   2524:        nml_save = nml_read;
                   2525:        nml_read = 0;
                   2526:        if (ch = l_R(1))
                   2527:                return ch;
                   2528:        if (!f__ltype)
                   2529:                err(f__elist->cierr,112,"no real part");
                   2530:        lz = f__lx;
                   2531:        while(iswhit(GETC(ch)));
                   2532:        if(ch!=',')
                   2533:        {       (void) Ungetc(ch,f__cf);
                   2534:                err(f__elist->cierr,112,"no comma");
                   2535:        }
                   2536:        while(iswhit(GETC(ch)));
                   2537:        (void) Ungetc(ch,f__cf);
                   2538:        if (ch = l_R(1))
                   2539:                return ch;
                   2540:        if (!f__ltype)
                   2541:                err(f__elist->cierr,112,"no imaginary part");
                   2542:        while(iswhit(GETC(ch)));
                   2543:        if(ch!=')') err(f__elist->cierr,112,"no )");
                   2544:        f__ly = f__lx;
                   2545:        f__lx = lz;
                   2546:        nml_read = nml_save;
                   2547:        return(0);
                   2548: }
                   2549: l_L(Void)
                   2550: {
                   2551:        int ch;
                   2552:        if(f__lcount>0) return(0);
                   2553:        f__ltype=0;
                   2554:        GETC(ch);
                   2555:        if(isdigit(ch))
                   2556:        {
                   2557:                rd_count(ch);
                   2558:                if(GETC(ch)!='*')
                   2559:                        if(!f__cf || !feof(f__cf))
                   2560:                                err(f__elist->cierr,112,"no star")
                   2561:                        else
                   2562:                                err(f__elist->cierr,(EOF),"lread");
                   2563:                GETC(ch);
                   2564:        }
                   2565:        if(ch == '.') GETC(ch);
                   2566:        switch(ch)
                   2567:        {
                   2568:        case 't':
                   2569:        case 'T':
                   2570:                f__lx=1;
                   2571:                break;
                   2572:        case 'f':
                   2573:        case 'F':
                   2574:                f__lx=0;
                   2575:                break;
                   2576:        default:
                   2577:                if(isblnk(ch) || issep(ch) || ch==EOF)
                   2578:                {       (void) Ungetc(ch,f__cf);
                   2579:                        return(0);
                   2580:                }
                   2581:                else    err(f__elist->cierr,112,"logical");
                   2582:        }
                   2583:        f__ltype=TYLONG;
                   2584:        f__lcount = 1;
                   2585:        while(!issep(GETC(ch)) && ch!=EOF);
                   2586:        (void) Ungetc(ch, f__cf);
                   2587:        return(0);
                   2588: }
                   2589: #define BUFSIZE        128
                   2590: l_CHAR(Void)
                   2591: {      int ch,size,i;
                   2592:        char quote,*p;
                   2593:        if(f__lcount>0) return(0);
                   2594:        f__ltype=0;
                   2595:        if(f__lchar!=NULL) free(f__lchar);
                   2596:        size=BUFSIZE;
                   2597:        p=f__lchar=malloc((unsigned int)size);
                   2598:        if(f__lchar==NULL) err(f__elist->cierr,113,"no space");
                   2599: 
                   2600:        GETC(ch);
                   2601:        if(isdigit(ch)) {
                   2602:                /* allow Fortran 8x-style unquoted string...    */
                   2603:                /* either find a repetition count or the string */
                   2604:                f__lcount = ch - '0';
                   2605:                *p++ = ch;
                   2606:                for(i = 1;;) {
                   2607:                        switch(GETC(ch)) {
                   2608:                                case '*':
                   2609:                                        if (f__lcount == 0) {
                   2610:                                                f__lcount = 1;
                   2611:                                                goto noquote;
                   2612:                                                }
                   2613:                                        p = f__lchar;
                   2614:                                        goto have_lcount;
                   2615:                                case ',':
                   2616:                                case ' ':
                   2617:                                case '\t':
                   2618:                                case '\n':
                   2619:                                case '/':
                   2620:                                        Ungetc(ch,f__cf);
                   2621:                                        /* no break */
                   2622:                                case EOF:
                   2623:                                        f__lcount = 1;
                   2624:                                        f__ltype = TYCHAR;
                   2625:                                        return *p = 0;
                   2626:                                }
                   2627:                        if (!isdigit(ch)) {
                   2628:                                f__lcount = 1;
                   2629:                                goto noquote;
                   2630:                                }
                   2631:                        *p++ = ch;
                   2632:                        f__lcount = 10*f__lcount + ch - '0';
                   2633:                        if (++i == size) {
                   2634:                                f__lchar = realloc(f__lchar,
                   2635:                                        (unsigned int)(size += BUFSIZE));
                   2636:                                p = f__lchar + i;
                   2637:                                }
                   2638:                        }
                   2639:                }
                   2640:        else    (void) Ungetc(ch,f__cf);
                   2641:  have_lcount:
                   2642:        if(GETC(ch)=='\'' || ch=='"') quote=ch;
                   2643:        else if(isblnk(ch) || (issep(ch) && ch != '\n') || ch==EOF)
                   2644:        {       (void) Ungetc(ch,f__cf);
                   2645:                return(0);
                   2646:        }
                   2647:        else {
                   2648:                /* Fortran 8x-style unquoted string */
                   2649:                *p++ = ch;
                   2650:                for(i = 1;;) {
                   2651:                        switch(GETC(ch)) {
                   2652:                                case ',':
                   2653:                                case ' ':
                   2654:                                case '\t':
                   2655:                                case '\n':
                   2656:                                case '/':
                   2657:                                        Ungetc(ch,f__cf);
                   2658:                                        /* no break */
                   2659:                                case EOF:
                   2660:                                        f__ltype = TYCHAR;
                   2661:                                        return *p = 0;
                   2662:                                }
                   2663:  noquote:
                   2664:                        *p++ = ch;
                   2665:                        if (++i == size) {
                   2666:                                f__lchar = realloc(f__lchar,
                   2667:                                        (unsigned int)(size += BUFSIZE));
                   2668:                                p = f__lchar + i;
                   2669:                                }
                   2670:                        }
                   2671:                }
                   2672:        f__ltype=TYCHAR;
                   2673:        for(i=0;;)
                   2674:        {       while(GETC(ch)!=quote && ch!='\n'
                   2675:                        && ch!=EOF && ++i<size) *p++ = ch;
                   2676:                if(i==size)
                   2677:                {
                   2678:                newone:
                   2679:                        f__lchar= realloc(f__lchar, (unsigned int)(size += BUFSIZE));
                   2680:                        p=f__lchar+i-1;
                   2681:                        *p++ = ch;
                   2682:                }
                   2683:                else if(ch==EOF) return(EOF);
                   2684:                else if(ch=='\n')
                   2685:                {       if(*(p-1) != '\\') continue;
                   2686:                        i--;
                   2687:                        p--;
                   2688:                        if(++i<size) *p++ = ch;
                   2689:                        else goto newone;
                   2690:                }
                   2691:                else if(GETC(ch)==quote)
                   2692:                {       if(++i<size) *p++ = ch;
                   2693:                        else goto newone;
                   2694:                }
                   2695:                else
                   2696:                {       (void) Ungetc(ch,f__cf);
                   2697:                        *p = 0;
                   2698:                        return(0);
                   2699:                }
                   2700:        }
                   2701: }
                   2702: #ifdef KR_headers
                   2703: c_le(a) cilist *a;
                   2704: #else
                   2705: c_le(cilist *a)
                   2706: #endif
                   2707: {
                   2708:        f__fmtbuf="list io";
                   2709:        if(a->ciunit>=MXUNIT || a->ciunit<0)
                   2710:                err(a->cierr,101,"stler");
                   2711:        f__scale=f__recpos=0;
                   2712:        f__elist=a;
                   2713:        f__curunit = &f__units[a->ciunit];
                   2714:        if(f__curunit->ufd==NULL && fk_open(SEQ,FMT,a->ciunit))
                   2715:                err(a->cierr,102,"lio");
                   2716:        f__cf=f__curunit->ufd;
                   2717:        if(!f__curunit->ufmt) err(a->cierr,103,"lio")
                   2718:        return(0);
                   2719: }
                   2720: #ifdef KR_headers
                   2721: l_read(number,ptr,len,type) ftnint *number,type; char *ptr; ftnlen len;
                   2722: #else
                   2723: l_read(ftnint *number, char *ptr, ftnlen len, ftnint type)
                   2724: #endif
                   2725: {
                   2726: #define Ptr ((flex *)ptr)
                   2727:        int i,n,ch;
                   2728:        doublereal *yy;
                   2729:        real *xx;
                   2730:        for(i=0;i<*number;i++)
                   2731:        {
                   2732:                if(f__lquit) return(0);
                   2733:                if(l_eof)
                   2734:                        err(f__elist->ciend, EOF, "list in")
                   2735:                if(f__lcount == 0) {
                   2736:                        f__ltype = 0;
                   2737:                        for(;;)  {
                   2738:                                GETC(ch);
                   2739:                                switch(ch) {
                   2740:                                case EOF:
                   2741:                                        goto loopend;
                   2742:                                case ' ':
                   2743:                                case '\t':
                   2744:                                case '\n':
                   2745:                                        continue;
                   2746:                                case '/':
                   2747:                                        f__lquit = 1;
                   2748:                                        goto loopend;
                   2749:                                case ',':
                   2750:                                        f__lcount = 1;
                   2751:                                        goto loopend;
                   2752:                                default:
                   2753:                                        (void) Ungetc(ch, f__cf);
                   2754:                                        goto rddata;
                   2755:                                }
                   2756:                        }
                   2757:                }
                   2758:        rddata:
                   2759:                switch((int)type)
                   2760:                {
                   2761:                case TYINT1:
                   2762:                case TYSHORT:
                   2763:                case TYLONG:
                   2764:                case TYREAL:
                   2765:                case TYDREAL:
                   2766:                        ERR(l_R(0));
                   2767:                        break;
                   2768:                case TYCOMPLEX:
                   2769:                case TYDCOMPLEX:
                   2770:                        ERR(l_C());
                   2771:                        break;
                   2772:                case TYLOGICAL1:
                   2773:                case TYLOGICAL2:
                   2774:                case TYLOGICAL:
                   2775:                        ERR(l_L());
                   2776:                        break;
                   2777:                case TYCHAR:
                   2778:                        ERR(l_CHAR());
                   2779:                        break;
                   2780:                }
                   2781:        while (GETC(ch) == ' ' || ch == '\t');
                   2782:        if (ch != ',' || f__lcount > 1)
                   2783:                Ungetc(ch,f__cf);
                   2784:        loopend:
                   2785:                if(f__lquit) return(0);
                   2786:                if(f__cf) {
                   2787:                        if (feof(f__cf))
                   2788:                                err(f__elist->ciend,(EOF),"list in")
                   2789:                        else if(ferror(f__cf)) {
                   2790:                                clearerr(f__cf);
                   2791:                                err(f__elist->cierr,errno,"list in")
                   2792:                                }
                   2793:                        }
                   2794:                if(f__ltype==0) goto bump;
                   2795:                switch((int)type)
                   2796:                {
                   2797:                case TYINT1:
                   2798:                case TYLOGICAL1:
                   2799:                        Ptr->flchar = f__lx;
                   2800:                        break;
                   2801:                case TYLOGICAL2:
                   2802:                case TYSHORT:
                   2803:                        Ptr->flshort=f__lx;
                   2804:                        break;
                   2805:                case TYLOGICAL:
                   2806:                case TYLONG:
                   2807:                        Ptr->flint=f__lx;
                   2808:                        break;
                   2809:                case TYREAL:
                   2810:                        Ptr->flreal=f__lx;
                   2811:                        break;
                   2812:                case TYDREAL:
                   2813:                        Ptr->fldouble=f__lx;
                   2814:                        break;
                   2815:                case TYCOMPLEX:
                   2816:                        xx=(real *)ptr;
                   2817:                        *xx++ = f__lx;
                   2818:                        *xx = f__ly;
                   2819:                        break;
                   2820:                case TYDCOMPLEX:
                   2821:                        yy=(doublereal *)ptr;
                   2822:                        *yy++ = f__lx;
                   2823:                        *yy = f__ly;
                   2824:                        break;
                   2825:                case TYCHAR:
                   2826:                        b_char(f__lchar,ptr,len);
                   2827:                        break;
                   2828:                }
                   2829:        bump:
                   2830:                if(f__lcount>0) f__lcount--;
                   2831:                ptr += len;
                   2832:                if (nml_read)
                   2833:                        nml_read++;
                   2834:        }
                   2835:        return(0);
                   2836: #undef Ptr
                   2837: }
                   2838: #ifdef KR_headers
                   2839: integer s_rsle(a) cilist *a;
                   2840: #else
                   2841: integer s_rsle(cilist *a)
                   2842: #endif
                   2843: {
                   2844:        int n;
                   2845: 
                   2846:        if(!f__init) f_init();
                   2847:        if(n=c_le(a)) return(n);
                   2848:        f__reading=1;
                   2849:        f__external=1;
                   2850:        f__formatted=1;
                   2851:        f__lioproc = l_read;
                   2852:        f__lquit = 0;
                   2853:        f__lcount = 0;
                   2854:        l_eof = 0;
                   2855:        if(f__curunit->uwrt && f__nowreading(f__curunit))
                   2856:                err(a->cierr,errno,"read start");
                   2857:        l_getc = t_getc;
                   2858:        l_ungetc = un_getc;
                   2859:        return(0);
                   2860: }
                   2861: ./ ADD NAME=libI77/lwrite.c TIME=719848231
                   2862: #include "f2c.h"
                   2863: #include "fio.h"
                   2864: #include "fmt.h"
                   2865: #include "lio.h"
                   2866: int L_len;
                   2867: 
                   2868: #ifdef KR_headers
                   2869: t_putc(c)
                   2870: #else
                   2871: t_putc(int c)
                   2872: #endif
                   2873: {
                   2874:        f__recpos++;
                   2875:        putc(c,f__cf);
                   2876:        return(0);
                   2877: }
                   2878:  static VOID
                   2879: #ifdef KR_headers
                   2880: lwrt_I(n) ftnint n;
                   2881: #else
                   2882: lwrt_I(ftnint n)
                   2883: #endif
                   2884: {
                   2885:        char buf[LINTW],*p;
                   2886: #ifdef USE_STRLEN
                   2887:        (void) sprintf(buf," %ld",(long)n);
                   2888:        if(f__recpos+strlen(buf)>=L_len)
                   2889: #else
                   2890:        if(f__recpos + sprintf(buf," %ld",(long)n) >= L_len)
                   2891: #endif
                   2892:                (*f__donewrec)();
                   2893:        for(p=buf;*p;PUT(*p++));
                   2894: }
                   2895:  static VOID
                   2896: #ifdef KR_headers
                   2897: lwrt_L(n, len) ftnint n; ftnlen len;
                   2898: #else
                   2899: lwrt_L(ftnint n, ftnlen len)
                   2900: #endif
                   2901: {
                   2902:        if(f__recpos+LLOGW>=L_len)
                   2903:                (*f__donewrec)();
                   2904:        wrt_L((Uint *)&n,LLOGW, len);
                   2905: }
                   2906:  static VOID
                   2907: #ifdef KR_headers
                   2908: lwrt_A(p,len) char *p; ftnlen len;
                   2909: #else
                   2910: lwrt_A(char *p, ftnlen len)
                   2911: #endif
                   2912: {
                   2913:        int i;
                   2914:        if(f__recpos+len>=L_len)
                   2915:                (*f__donewrec)();
                   2916:        if (!f__recpos)
                   2917:                { PUT(' '); ++f__recpos; }
                   2918:        for(i=0;i<len;i++) PUT(*p++);
                   2919: }
                   2920: 
                   2921:  static int
                   2922: #ifdef KR_headers
                   2923: l_g(buf, n) char *buf; double n;
                   2924: #else
                   2925: l_g(char *buf, double n)
                   2926: #endif
                   2927: {
                   2928: #ifdef Old_list_output
                   2929:        doublereal absn;
                   2930:        char *fmt;
                   2931: 
                   2932:        absn = n;
                   2933:        if (absn < 0)
                   2934:                absn = -absn;
                   2935:        fmt = LLOW <= absn && absn < LHIGH ? LFFMT : LEFMT;
                   2936: #ifdef USE_STRLEN
                   2937:        sprintf(buf, fmt, n);
                   2938:        return strlen(buf);
                   2939: #else
                   2940:        return sprintf(buf, fmt, n);
                   2941: #endif
                   2942: 
                   2943: #else
                   2944:        register char *b, c, c1;
                   2945: 
                   2946:        b = buf;
                   2947:        *b++ = ' ';
                   2948:        if (n < 0) {
                   2949:                *b++ = '-';
                   2950:                n = -n;
                   2951:                }
                   2952:        else
                   2953:                *b++ = ' ';
                   2954:        if (n == 0) {
                   2955:                *b++ = '0';
                   2956:                *b++ = '.';
                   2957:                *b = 0;
                   2958:                goto f__ret;
                   2959:                }
                   2960:        sprintf(b, LGFMT, n);
                   2961:        if (*b == '0') {
                   2962:                while(b[0] = b[1])
                   2963:                        b++;
                   2964:                }
                   2965:        /* Fortran 77 insists on having a decimal point... */
                   2966:        else for(;; b++)
                   2967:                switch(*b) {
                   2968:                        case 0:
                   2969:                                *b++ = '.';
                   2970:                                *b = 0;
                   2971:                                goto f__ret;
                   2972:                        case '.':
                   2973:                                while(*++b);
                   2974:                                goto f__ret;
                   2975:                        case 'E':
                   2976:                                for(c1 = '.', c = 'E';  *b = c1;
                   2977:                                        c1 = c, c = *++b);
                   2978:                                goto f__ret;
                   2979:                        }
                   2980:  f__ret:
                   2981:        return b - buf;
                   2982: #endif
                   2983:        }
                   2984: 
                   2985:  static VOID
                   2986: #ifdef KR_headers
                   2987: l_put(s) register char *s;
                   2988: #else
                   2989: l_put(register char *s)
                   2990: #endif
                   2991: {
                   2992: #ifdef KR_headers
                   2993:        register int c, (*pn)() = f__putn;
                   2994: #else
                   2995:        register int c, (*pn)(int) = f__putn;
                   2996: #endif
                   2997:        while(c = *s++)
                   2998:                (*pn)(c);
                   2999:        }
                   3000: 
                   3001:  static VOID
                   3002: #ifdef KR_headers
                   3003: lwrt_F(n) double n;
                   3004: #else
                   3005: lwrt_F(double n)
                   3006: #endif
                   3007: {
                   3008:        char buf[LEFBL];
                   3009: 
                   3010:        if(f__recpos + l_g(buf,n) >= L_len)
                   3011:                (*f__donewrec)();
                   3012:        l_put(buf);
                   3013: }
                   3014:  static VOID
                   3015: #ifdef KR_headers
                   3016: lwrt_C(a,b) double a,b;
                   3017: #else
                   3018: lwrt_C(double a, double b)
                   3019: #endif
                   3020: {
                   3021:        char *ba, *bb, bufa[LEFBL], bufb[LEFBL];
                   3022:        int al, bl;
                   3023: 
                   3024:        al = l_g(bufa, a);
                   3025:        for(ba = bufa; *ba == ' '; ba++)
                   3026:                --al;
                   3027:        bl = l_g(bufb, b) + 1;  /* intentionally high by 1 */
                   3028:        for(bb = bufb; *bb == ' '; bb++)
                   3029:                --bl;
                   3030:        if(f__recpos + al + bl + 3 >= L_len && f__recpos)
                   3031:                (*f__donewrec)();
                   3032:        PUT(' ');
                   3033:        PUT('(');
                   3034:        l_put(ba);
                   3035:        PUT(',');
                   3036:        if (f__recpos + bl >= L_len) {
                   3037:                (*f__donewrec)();
                   3038:                PUT(' ');
                   3039:                }
                   3040:        l_put(bb);
                   3041:        PUT(')');
                   3042: }
                   3043: #ifdef KR_headers
                   3044: l_write(number,ptr,len,type) ftnint *number,type; char *ptr; ftnlen len;
                   3045: #else
                   3046: l_write(ftnint *number, char *ptr, ftnlen len, ftnint type)
                   3047: #endif
                   3048: {
                   3049: #define Ptr ((flex *)ptr)
                   3050:        int i;
                   3051:        ftnint x;
                   3052:        double y,z;
                   3053:        real *xx;
                   3054:        doublereal *yy;
                   3055:        for(i=0;i< *number; i++)
                   3056:        {
                   3057:                switch((int)type)
                   3058:                {
                   3059:                default: f__fatal(204,"unknown type in lio");
                   3060:                case TYINT1:
                   3061:                        x = Ptr->flchar;
                   3062:                        goto xint;
                   3063:                case TYSHORT:
                   3064:                        x=Ptr->flshort;
                   3065:                        goto xint;
                   3066:                case TYLONG:
                   3067:                        x=Ptr->flint;
                   3068:                xint:   lwrt_I(x);
                   3069:                        break;
                   3070:                case TYREAL:
                   3071:                        y=Ptr->flreal;
                   3072:                        goto xfloat;
                   3073:                case TYDREAL:
                   3074:                        y=Ptr->fldouble;
                   3075:                xfloat: lwrt_F(y);
                   3076:                        break;
                   3077:                case TYCOMPLEX:
                   3078:                        xx= &Ptr->flreal;
                   3079:                        y = *xx++;
                   3080:                        z = *xx;
                   3081:                        goto xcomplex;
                   3082:                case TYDCOMPLEX:
                   3083:                        yy = &Ptr->fldouble;
                   3084:                        y= *yy++;
                   3085:                        z = *yy;
                   3086:                xcomplex:
                   3087:                        lwrt_C(y,z);
                   3088:                        break;
                   3089:                case TYLOGICAL1:
                   3090:                        x = Ptr->flchar;
                   3091:                        goto xlog;
                   3092:                case TYLOGICAL2:
                   3093:                        x = Ptr->flshort;
                   3094:                        goto xlog;
                   3095:                case TYLOGICAL:
                   3096:                        x = Ptr->flint;
                   3097:                xlog:   lwrt_L(Ptr->flint, len);
                   3098:                        break;
                   3099:                case TYCHAR:
                   3100:                        lwrt_A(ptr,len);
                   3101:                        break;
                   3102:                }
                   3103:                ptr += len;
                   3104:        }
                   3105:        return(0);
                   3106: }
                   3107: ./ ADD NAME=libI77/makefile TIME=711902952
                   3108: .SUFFIXES: .c .o
                   3109: 
                   3110: CC = cc
                   3111: CFLAGS = -DSkip_f2c_Undefs -O
                   3112: SHELL = /bin/sh
                   3113: 
                   3114: # compile, then strip unnecessary symbols
                   3115: .c.o:
                   3116:        $(CC) $(CFLAGS) -c $*.c
                   3117:        ld -r -x -o $*.xxx $*.o
                   3118:        mv $*.xxx $*.o
                   3119: 
                   3120: OBJ =  Version.o backspace.o close.o dfe.o dolio.o due.o endfile.o err.o \
                   3121:        fmt.o fmtlib.o iio.o ilnw.o inquire.o lread.o lwrite.o open.o \
                   3122:        rdfmt.o rewind.o rsfe.o rsli.o rsne.o sfe.o sue.o typesize.o uio.o \
                   3123:        util.o wref.o wrtfmt.o wsfe.o wsle.o wsne.o xwsne.o
                   3124: libI77.a:      $(OBJ)
                   3125:                ar r libI77.a $?
                   3126:                ranlib libI77.a
                   3127: install:       libI77.a
                   3128:        cp libI77.a /usr/lib/libI77.a
                   3129:        ranlib /usr/lib/libI77.a
                   3130: 
                   3131: Version.o: Version.c
                   3132:        $(CC) -c Version.c
                   3133: 
                   3134: 
                   3135: clean:
                   3136:        rm -f $(OBJ) libI77.a
                   3137: 
                   3138: clobber:       clean
                   3139:        rm -f libI77.a
                   3140: 
                   3141: backspace.o:   fio.h
                   3142: close.o:       fio.h
                   3143: dfe.o:         fio.h
                   3144: dfe.o:         fmt.h
                   3145: due.o:         fio.h
                   3146: endfile.o:     fio.h rawio.h
                   3147: err.o:         fio.h rawio.h
                   3148: fmt.o:         fio.h
                   3149: fmt.o:         fmt.h
                   3150: iio.o:         fio.h
                   3151: iio.o:         fmt.h
                   3152: ilnw.o:                fio.h
                   3153: ilnw.o:                lio.h
                   3154: inquire.o:     fio.h
                   3155: lread.o:       fio.h
                   3156: lread.o:       fmt.h
                   3157: lread.o:       lio.h
                   3158: lread.o:       fp.h
                   3159: lwrite.o:      fio.h
                   3160: lwrite.o:      fmt.h
                   3161: lwrite.o:      lio.h
                   3162: open.o:                fio.h rawio.h
                   3163: rdfmt.o:       fio.h
                   3164: rdfmt.o:       fmt.h
                   3165: rdfmt.o:       fp.h
                   3166: rewind.o:      fio.h
                   3167: rsfe.o:                fio.h
                   3168: rsfe.o:                fmt.h
                   3169: rsli.o:                fio.h
                   3170: rsli.o:                lio.h
                   3171: rsne.o:                fio.h
                   3172: rsne.o:                lio.h
                   3173: sfe.o:         fio.h
                   3174: sue.o:         fio.h
                   3175: uio.o:         fio.h
                   3176: util.o:                fio.h
                   3177: wref.o:                fio.h
                   3178: wref.o:                fmt.h
                   3179: wref.o:                fp.h
                   3180: wrtfmt.o:      fio.h
                   3181: wrtfmt.o:      fmt.h
                   3182: wsfe.o:                fio.h
                   3183: wsfe.o:                fmt.h
                   3184: wsle.o:                fio.h
                   3185: wsle.o:                fmt.h
                   3186: wsle.o:                lio.h
                   3187: wsne.o:                fio.h
                   3188: wsne.o:                lio.h
                   3189: xwsne.o:       fio.h
                   3190: xwsne.o:       lio.h
                   3191: xwsne.o:       fmt.h
                   3192: 
                   3193: check:
                   3194:        xsum Notice README Version.c backspace.c close.c dfe.c dolio.c \
                   3195:        due.c endfile.c err.c fio.h fmt.c fmt.h fmtlib.c fp.h iio.c \
                   3196:        ilnw.c inquire.c lio.h lread.c lwrite.c makefile open.c rawio.h \
                   3197:        rdfmt.c rewind.c rsfe.c rsli.c rsne.c sfe.c sue.c typesize.c \
                   3198:        uio.c util.c wref.c wrtfmt.c wsfe.c wsle.c wsne.c xwsne.c >zap
                   3199:        cmp zap libI77.xsum && rm zap || diff libI77.xsum zap
                   3200: ./ ADD NAME=libI77/open.c TIME=719848232
                   3201: #include "sys/types.h"
                   3202: #include "sys/stat.h"
                   3203: #include "f2c.h"
                   3204: #include "fio.h"
                   3205: #include "string.h"
                   3206: #include "fcntl.h"
                   3207: #include "rawio.h"
                   3208: #ifndef O_WRONLY
                   3209: #define O_RDONLY 0
                   3210: #define O_WRONLY 1
                   3211: #endif
                   3212: 
                   3213: #ifdef KR_headers
                   3214: extern char *malloc(), *mktemp();
                   3215: extern FILE *fdopen();
                   3216: extern integer f_clos();
                   3217: #else
                   3218: #undef abs
                   3219: #undef min
                   3220: #undef max
                   3221: #include "stdlib.h"
                   3222: extern int f__canseek(FILE*);
                   3223: extern integer f_clos(cllist*);
                   3224: #endif
                   3225: 
                   3226: #ifdef NON_ANSI_RW_MODES
                   3227: char *r_mode[2] = {"r", "r"};
                   3228: char *w_mode[2] = {"w", "w"};
                   3229: #else
                   3230: char *r_mode[2] = {"rb", "r"};
                   3231: char *w_mode[2] = {"wb", "w"};
                   3232: #endif
                   3233: 
                   3234: #ifdef KR_headers
                   3235: f__isdev(s) char *s;
                   3236: #else
                   3237: f__isdev(char *s)
                   3238: #endif
                   3239: {
                   3240: #ifdef MSDOS
                   3241:        int i, j;
                   3242: 
                   3243:        i = open(s,O_RDONLY);
                   3244:        if (i == -1)
                   3245:                return 0;
                   3246:        j = isatty(i);
                   3247:        close(i);
                   3248:        return j;
                   3249: #else
                   3250:        struct stat x;
                   3251: 
                   3252:        if(stat(s, &x) == -1) return(0);
                   3253: #ifdef S_IFMT
                   3254:        switch(x.st_mode&S_IFMT) {
                   3255:                case S_IFREG:
                   3256:                case S_IFDIR:
                   3257:                        return(0);
                   3258:                }
                   3259: #else
                   3260: #ifdef S_ISREG
                   3261:        /* POSIX version */
                   3262:        if(S_ISREG(x.st_mode) || S_ISDIR(x.st_mode))
                   3263:                return(0);
                   3264:        else
                   3265: #else
                   3266:        Help! How does stat work on this system?
                   3267: #endif
                   3268: #endif
                   3269:                return(1);
                   3270: #endif
                   3271: }
                   3272: #ifdef KR_headers
                   3273: integer f_open(a) olist *a;
                   3274: #else
                   3275: integer f_open(olist *a)
                   3276: #endif
                   3277: {      unit *b;
                   3278:        int n;
                   3279:        char buf[256];
                   3280:        cllist x;
                   3281: #ifndef MSDOS
                   3282:        struct stat stb;
                   3283: #endif
                   3284:        if(a->ounit>=MXUNIT || a->ounit<0)
                   3285:                err(a->oerr,101,"open")
                   3286:        f__curunit = b = &f__units[a->ounit];
                   3287:        if(b->ufd) {
                   3288:                if(a->ofnm==0)
                   3289:                {
                   3290:                same:   if (a->oblnk)
                   3291:                                b->ublnk = *a->oblnk == 'z' || *a->oblnk == 'Z';
                   3292:                        return(0);
                   3293:                }
                   3294: #ifdef MSDOS
                   3295:                if (b->ufnm
                   3296:                 && strlen(b->ufnm) == a->ofnmlen
                   3297:                 && !strncmp(b->ufnm, b->ufnm, (unsigned)a->ofnmlen))
                   3298:                        goto same;
                   3299: #else
                   3300:                g_char(a->ofnm,a->ofnmlen,buf);
                   3301:                if (f__inode(buf,&n) == b->uinode && n == b->udev)
                   3302:                        goto same;
                   3303: #endif
                   3304:                x.cunit=a->ounit;
                   3305:                x.csta=0;
                   3306:                x.cerr=a->oerr;
                   3307:                if((n=f_clos(&x))!=0) return(n);
                   3308:                }
                   3309:        b->url=a->orl;
                   3310:        b->ublnk = a->oblnk && (*a->oblnk == 'z' || *a->oblnk == 'Z');
                   3311:        if(a->ofm==0)
                   3312:        {       if(b->url>0) b->ufmt=0;
                   3313:                else b->ufmt=1;
                   3314:        }
                   3315:        else if(*a->ofm=='f' || *a->ofm == 'F') b->ufmt=1;
                   3316:        else b->ufmt=0;
                   3317: #ifdef url_Adjust
                   3318:        if (b->url && !b->ufmt)
                   3319:                url_Adjust(b->url);
                   3320: #endif
                   3321:        if (a->ofnm) {
                   3322:                g_char(a->ofnm,a->ofnmlen,buf);
                   3323:                if (!buf[0])
                   3324:                        err(a->oerr,107,"open")
                   3325:                }
                   3326:        else
                   3327:                sprintf(buf, "fort.%ld", a->ounit);
                   3328:        b->uscrtch = 0;
                   3329:        switch(a->osta ? *a->osta : 'u')
                   3330:        {
                   3331:        case 'o':
                   3332:        case 'O':
                   3333: #ifdef MSDOS
                   3334:                if(access(buf,0))
                   3335: #else
                   3336:                if(stat(buf,&stb))
                   3337: #endif
                   3338:                        err(a->oerr,errno,"open")
                   3339:                break;
                   3340:         case 's':
                   3341:         case 'S':
                   3342:                b->uscrtch=1;
                   3343: #ifdef _POSIX_SOURCE
                   3344:                tmpnam(buf);
                   3345: #else
                   3346:                (void) strcpy(buf,"tmp.FXXXXXX");
                   3347:                (void) mktemp(buf);
                   3348: #endif
                   3349:                (void) close(creat(buf, 0666));
                   3350:                break;
                   3351:        case 'n':
                   3352:        case 'N':
                   3353: #ifdef MSDOS
                   3354:                if(!access(buf,0))
                   3355: #else
                   3356:                if(!stat(buf,&stb))
                   3357: #endif
                   3358:                        err(a->oerr,128,"open")
                   3359:                /* no break */
                   3360:        case 'r':       /* Fortran 90 replace option */
                   3361:        case 'R':
                   3362:                (void) close(creat(buf, 0666));
                   3363:                break;
                   3364:        }
                   3365: 
                   3366:        b->ufnm=(char *) malloc((unsigned int)(strlen(buf)+1));
                   3367:        if(b->ufnm==NULL) err(a->oerr,113,"no space");
                   3368:        (void) strcpy(b->ufnm,buf);
                   3369:        b->uend=0;
                   3370:        b->uwrt = 0;
                   3371:        if(f__isdev(buf))
                   3372:        {       b->ufd = fopen(buf,r_mode[b->ufmt]);
                   3373:                if(b->ufd==NULL) err(a->oerr,errno,buf)
                   3374:        }
                   3375:        else {
                   3376:                if((b->ufd = fopen(buf, r_mode[b->ufmt])) == NULL) {
                   3377:                        if ((n = open(buf,O_WRONLY)) >= 0) {
                   3378:                                b->uwrt = 2;
                   3379:                                }
                   3380:                        else {
                   3381:                                n = creat(buf, 0666);
                   3382:                                b->uwrt = 1;
                   3383:                                }
                   3384:                        if (n < 0
                   3385:                        || (b->ufd = fdopen(n, w_mode[b->ufmt])) == NULL)
                   3386:                                err(a->oerr, errno, "open");
                   3387:                        }
                   3388:        }
                   3389:        b->useek=f__canseek(b->ufd);
                   3390: #ifndef MSDOS
                   3391:        if((b->uinode=f__inode(buf,&b->udev))==-1)
                   3392:                err(a->oerr,108,"open")
                   3393: #endif
                   3394:        if(a->orl && b->useek) rewind(b->ufd);
                   3395:        return(0);
                   3396: }
                   3397: #ifdef KR_headers
                   3398: fk_open(seq,fmt,n) ftnint n;
                   3399: #else
                   3400: fk_open(int seq, int fmt, ftnint n)
                   3401: #endif
                   3402: {      char nbuf[10];
                   3403:        olist a;
                   3404:        (void) sprintf(nbuf,"fort.%ld",n);
                   3405:        a.oerr=1;
                   3406:        a.ounit=n;
                   3407:        a.ofnm=nbuf;
                   3408:        a.ofnmlen=strlen(nbuf);
                   3409:        a.osta=NULL;
                   3410:        a.oacc= seq==SEQ?"s":"d";
                   3411:        a.ofm = fmt==FMT?"f":"u";
                   3412:        a.orl = seq==DIR?1:0;
                   3413:        a.oblnk=NULL;
                   3414:        return(f_open(&a));
                   3415: }
                   3416: ./ ADD NAME=libI77/rawio.h TIME=718658082
                   3417: #ifdef KR_headers
                   3418: extern FILE *fdopen();
                   3419: #else
                   3420: #ifdef MSDOS
                   3421: #include "io.h"
                   3422: #define close _close
                   3423: #define creat _creat
                   3424: #define open _open
                   3425: #define read _read
                   3426: #define write _write
                   3427: #endif
                   3428: #ifdef __cplusplus
                   3429: extern "C" {
                   3430: #endif
                   3431: #ifndef MSDOS
                   3432: #ifdef OPEN_DECL
                   3433: extern int creat(const char*,int), open(const char*,int);
                   3434: #endif
                   3435: extern int close(int);
                   3436: extern int read(int,void*,size_t), write(int,void*,size_t);
                   3437: extern int unlink(const char*);
                   3438: #ifndef _POSIX_SOURCE
                   3439: extern FILE *fdopen(int, const char*);
                   3440: #endif
                   3441: #endif
                   3442: 
                   3443: extern char *mktemp(char*);
                   3444: 
                   3445: #ifdef __cplusplus
                   3446:        }
                   3447: #endif
                   3448: #endif
                   3449: ./ ADD NAME=libI77/rdfmt.c TIME=719848232
                   3450: #include "f2c.h"
                   3451: #include "fio.h"
                   3452: #include "fmt.h"
                   3453: #include "fp.h"
                   3454: 
                   3455: extern int f__cursor;
                   3456: #ifdef KR_headers
                   3457: extern double atof();
                   3458: #else
                   3459: #undef abs
                   3460: #undef min
                   3461: #undef max
                   3462: #include "stdlib.h"
                   3463: #endif
                   3464: 
                   3465:  static int
                   3466: #ifdef KR_headers
                   3467: rd_Z(n,w,len) Uint *n; ftnlen len;
                   3468: #else
                   3469: rd_Z(Uint *n, int w, ftnlen len)
                   3470: #endif
                   3471: {
                   3472:        long x[9];
                   3473:        char *s, *s0, *s1, *se, *t;
                   3474:        int ch, i, w1, w2;
                   3475:        static char hex[256];
                   3476:        static int one = 1;
                   3477:        int bad = 0;
                   3478: 
                   3479:        if (!hex['0']) {
                   3480:                s = "0123456789";
                   3481:                while(ch = *s++)
                   3482:                        hex[ch] = ch - '0' + 1;
                   3483:                s = "ABCDEF";
                   3484:                while(ch = *s++)
                   3485:                        hex[ch] = hex[ch + 'a' - 'A'] = ch - 'A' + 11;
                   3486:                } 
                   3487:        s = s0 = (char *)x;
                   3488:        s1 = (char *)&x[4];
                   3489:        se = (char *)&x[8];
                   3490:        if (len > 4*sizeof(long))
                   3491:                return errno = 117;
                   3492:        while (w) {
                   3493:                GET(ch);
                   3494:                if (ch==',' || ch=='\n')
                   3495:                        break;
                   3496:                w--;
                   3497:                if (ch > ' ') {
                   3498:                        if (!hex[ch & 0xff])
                   3499:                                bad++;
                   3500:                        *s++ = ch;
                   3501:                        if (s == se) {
                   3502:                                /* discard excess characters */
                   3503:                                for(t = s0, s = s1; t < s1;)
                   3504:                                        *t++ = *s++;
                   3505:                                s = s1;
                   3506:                                }
                   3507:                        }
                   3508:                }
                   3509:        if (bad)
                   3510:                return errno = 115;
                   3511:        w = (int)len;
                   3512:        w1 = s - s0;
                   3513:        w2 = w1+1 >> 1;
                   3514:        t = (char *)n;
                   3515:        if (*(char *)&one) {
                   3516:                /* little endian */
                   3517:                t += w - 1;
                   3518:                i = -1;
                   3519:                }
                   3520:        else
                   3521:                i = 1;
                   3522:        for(; w > w2; t += i, --w)
                   3523:                *t = 0;
                   3524:        if (!w)
                   3525:                return 0;
                   3526:        if (w < w2)
                   3527:                s0 = s - (w << 1);
                   3528:        else if (w1 & 1) {
                   3529:                *t = hex[*s0++ & 0xff] - 1;
                   3530:                if (!--w)
                   3531:                        return 0;
                   3532:                t += i;
                   3533:                }
                   3534:        do {
                   3535:                *t = hex[*s0 & 0xff]-1 << 4 | hex[s0[1] & 0xff]-1;
                   3536:                t += i;
                   3537:                s0 += 2;
                   3538:                }
                   3539:                while(--w);
                   3540:        return 0;
                   3541:        }
                   3542: 
                   3543:  static int
                   3544: #ifdef KR_headers
                   3545: rd_I(n,w,len, base) Uint *n; int w; ftnlen len; register int base;
                   3546: #else
                   3547: rd_I(Uint *n, int w, ftnlen len, register int base)
                   3548: #endif
                   3549: {      long x;
                   3550:        int sign,ch;
                   3551:        char s[84], *ps;
                   3552:        ps=s; x=0;
                   3553:        while (w)
                   3554:        {
                   3555:                GET(ch);
                   3556:                if (ch==',' || ch=='\n') break;
                   3557:                *ps=ch; ps++; w--;
                   3558:        }
                   3559:        *ps='\0';
                   3560:        ps=s;
                   3561:        while (*ps==' ') ps++;
                   3562:        if (*ps=='-') { sign=1; ps++; }
                   3563:        else { sign=0; if (*ps=='+') ps++; }
                   3564: loop:  while (*ps>='0' && *ps<='9') { x=x*base+(*ps-'0'); ps++; }
                   3565:        if (*ps==' ') {if (f__cblank) x *= base; ps++; goto loop;}
                   3566:        if(sign) x = -x;
                   3567:        if(len==sizeof(integer)) n->il=x;
                   3568:        else if(len == sizeof(char)) n->ic = (char)x;
                   3569:        else n->is = (short)x;
                   3570:        if (*ps) return(errno=115); else return(0);
                   3571: }
                   3572:  static int
                   3573: #ifdef KR_headers
                   3574: rd_L(n,w,len) ftnint *n; ftnlen len;
                   3575: #else
                   3576: rd_L(ftnint *n, int w, ftnlen len)
                   3577: #endif
                   3578: {      int ch, lv;
                   3579:        char s[84], *ps;
                   3580:        ps=s;
                   3581:        while (w) {
                   3582:                GET(ch);
                   3583:                if (ch==','||ch=='\n') break;
                   3584:                *ps=ch;
                   3585:                ps++; w--;
                   3586:                }
                   3587:        *ps='\0';
                   3588:        ps=s; while (*ps==' ') ps++;
                   3589:        if (*ps=='.') ps++;
                   3590:        if (*ps=='t' || *ps == 'T')
                   3591:                lv = 1;
                   3592:        else if (*ps == 'f' || *ps == 'F')
                   3593:                lv = 0;
                   3594:        else return(errno=116);
                   3595:        switch(len) {
                   3596:                case sizeof(char):      *(char *)n = (char)lv;   break;
                   3597:                case sizeof(short):     *(short *)n = (short)lv; break;
                   3598:                default:                *n = lv;
                   3599:                }
                   3600:        return 0;
                   3601: }
                   3602: 
                   3603: #include "ctype.h"
                   3604: 
                   3605:  static int
                   3606: #ifdef KR_headers
                   3607: rd_F(p, w, d, len) ufloat *p; ftnlen len;
                   3608: #else
                   3609: rd_F(ufloat *p, int w, int d, ftnlen len)
                   3610: #endif
                   3611: {
                   3612:        char s[FMAX+EXPMAXDIGS+4];
                   3613:        register int ch;
                   3614:        register char *sp, *spe, *sp1;
                   3615:        double x;
                   3616:        int scale1, se;
                   3617:        long e, exp;
                   3618: 
                   3619:        sp1 = sp = s;
                   3620:        spe = sp + FMAX;
                   3621:        exp = -d;
                   3622:        x = 0.;
                   3623: 
                   3624:        do {
                   3625:                GET(ch);
                   3626:                w--;
                   3627:                } while (ch == ' ' && w);
                   3628:        switch(ch) {
                   3629:                case '-': *sp++ = ch; sp1++; spe++;
                   3630:                case '+':
                   3631:                        if (!w) goto zero;
                   3632:                        --w;
                   3633:                        GET(ch);
                   3634:                }
                   3635:        while(ch == ' ') {
                   3636: blankdrop:
                   3637:                if (!w--) goto zero; GET(ch); }
                   3638:        while(ch == '0')
                   3639:                { if (!w--) goto zero; GET(ch); }
                   3640:        if (ch == ' ' && f__cblank)
                   3641:                goto blankdrop;
                   3642:        scale1 = f__scale;
                   3643:        while(isdigit(ch)) {
                   3644: digloop1:
                   3645:                if (sp < spe) *sp++ = ch;
                   3646:                else ++exp;
                   3647: digloop1e:
                   3648:                if (!w--) goto done;
                   3649:                GET(ch);
                   3650:                }
                   3651:        if (ch == ' ') {
                   3652:                if (f__cblank)
                   3653:                        { ch = '0'; goto digloop1; }
                   3654:                goto digloop1e;
                   3655:                }
                   3656:        if (ch == '.') {
                   3657:                exp += d;
                   3658:                if (!w--) goto done;
                   3659:                GET(ch);
                   3660:                if (sp == sp1) { /* no digits yet */
                   3661:                        while(ch == '0') {
                   3662: skip01:
                   3663:                                --exp;
                   3664: skip0:
                   3665:                                if (!w--) goto done;
                   3666:                                GET(ch);
                   3667:                                }
                   3668:                        if (ch == ' ') {
                   3669:                                if (f__cblank) goto skip01;
                   3670:                                goto skip0;
                   3671:                                }
                   3672:                        }
                   3673:                while(isdigit(ch)) {
                   3674: digloop2:
                   3675:                        if (sp < spe)
                   3676:                                { *sp++ = ch; --exp; }
                   3677: digloop2e:
                   3678:                        if (!w--) goto done;
                   3679:                        GET(ch);
                   3680:                        }
                   3681:                if (ch == ' ') {
                   3682:                        if (f__cblank)
                   3683:                                { ch = '0'; goto digloop2; }
                   3684:                        goto digloop2e;
                   3685:                        }
                   3686:                }
                   3687:        switch(ch) {
                   3688:          default:
                   3689:                break;
                   3690:          case '-': se = 1; goto signonly;
                   3691:          case '+': se = 0; goto signonly;
                   3692:          case 'e':
                   3693:          case 'E':
                   3694:          case 'd':
                   3695:          case 'D':
                   3696:                if (!w--)
                   3697:                        goto bad;
                   3698:                GET(ch);
                   3699:                while(ch == ' ') {
                   3700:                        if (!w--)
                   3701:                                goto bad;
                   3702:                        GET(ch);
                   3703:                        }
                   3704:                se = 0;
                   3705:                switch(ch) {
                   3706:                  case '-': se = 1;
                   3707:                  case '+':
                   3708: signonly:
                   3709:                        if (!w--)
                   3710:                                goto bad;
                   3711:                        GET(ch);
                   3712:                        }
                   3713:                while(ch == ' ') {
                   3714:                        if (!w--)
                   3715:                                goto bad;
                   3716:                        GET(ch);
                   3717:                        }
                   3718:                if (!isdigit(ch))
                   3719:                        goto bad;
                   3720: 
                   3721:                e = ch - '0';
                   3722:                for(;;) {
                   3723:                        if (!w--)
                   3724:                                { ch = '\n'; break; }
                   3725:                        GET(ch);
                   3726:                        if (!isdigit(ch)) {
                   3727:                                if (ch == ' ') {
                   3728:                                        if (f__cblank)
                   3729:                                                ch = '0';
                   3730:                                        else continue;
                   3731:                                        }
                   3732:                                else
                   3733:                                        break;
                   3734:                                }
                   3735:                        e = 10*e + ch - '0';
                   3736:                        if (e > EXPMAX && sp > sp1)
                   3737:                                goto bad;
                   3738:                        }
                   3739:                if (se)
                   3740:                        exp -= e;
                   3741:                else
                   3742:                        exp += e;
                   3743:                scale1 = 0;
                   3744:                }
                   3745:        switch(ch) {
                   3746:          case '\n':
                   3747:          case ',':
                   3748:                break;
                   3749:          default:
                   3750: bad:
                   3751:                return (errno = 115);
                   3752:                }
                   3753: done:
                   3754:        if (sp > sp1) {
                   3755:                while(*--sp == '0')
                   3756:                        ++exp;
                   3757:                if (exp -= scale1)
                   3758:                        sprintf(sp+1, "e%ld", exp);
                   3759:                else
                   3760:                        sp[1] = 0;
                   3761:                x = atof(s);
                   3762:                }
                   3763: zero:
                   3764:        if (len == sizeof(real))
                   3765:                p->pf = x;
                   3766:        else
                   3767:                p->pd = x;
                   3768:        return(0);
                   3769:        }
                   3770: 
                   3771: 
                   3772:  static int
                   3773: #ifdef KR_headers
                   3774: rd_A(p,len) char *p; ftnlen len;
                   3775: #else
                   3776: rd_A(char *p, ftnlen len)
                   3777: #endif
                   3778: {      int i,ch;
                   3779:        for(i=0;i<len;i++)
                   3780:        {       GET(ch);
                   3781:                *p++=VAL(ch);
                   3782:        }
                   3783:        return(0);
                   3784: }
                   3785:  static int
                   3786: #ifdef KR_headers
                   3787: rd_AW(p,w,len) char *p; ftnlen len;
                   3788: #else
                   3789: rd_AW(char *p, int w, ftnlen len)
                   3790: #endif
                   3791: {      int i,ch;
                   3792:        if(w>=len)
                   3793:        {       for(i=0;i<w-len;i++)
                   3794:                        GET(ch);
                   3795:                for(i=0;i<len;i++)
                   3796:                {       GET(ch);
                   3797:                        *p++=VAL(ch);
                   3798:                }
                   3799:                return(0);
                   3800:        }
                   3801:        for(i=0;i<w;i++)
                   3802:        {       GET(ch);
                   3803:                *p++=VAL(ch);
                   3804:        }
                   3805:        for(i=0;i<len-w;i++) *p++=' ';
                   3806:        return(0);
                   3807: }
                   3808:  static int
                   3809: #ifdef KR_headers
                   3810: rd_H(n,s) char *s;
                   3811: #else
                   3812: rd_H(int n, char *s)
                   3813: #endif
                   3814: {      int i,ch;
                   3815:        for(i=0;i<n;i++)
                   3816:                if((ch=(*f__getn)())<0) return(ch);
                   3817:                else *s++ = ch=='\n'?' ':ch;
                   3818:        return(1);
                   3819: }
                   3820:  static int
                   3821: #ifdef KR_headers
                   3822: rd_POS(s) char *s;
                   3823: #else
                   3824: rd_POS(char *s)
                   3825: #endif
                   3826: {      char quote;
                   3827:        int ch;
                   3828:        quote= *s++;
                   3829:        for(;*s;s++)
                   3830:                if(*s==quote && *(s+1)!=quote) break;
                   3831:                else if((ch=(*f__getn)())<0) return(ch);
                   3832:                else *s = ch=='\n'?' ':ch;
                   3833:        return(1);
                   3834: }
                   3835: #ifdef KR_headers
                   3836: rd_ed(p,ptr,len) struct f__syl *p; char *ptr; ftnlen len;
                   3837: #else
                   3838: rd_ed(struct f__syl *p, char *ptr, ftnlen len)
                   3839: #endif
                   3840: {      int ch;
                   3841:        for(;f__cursor>0;f__cursor--) if((ch=(*f__getn)())<0) return(ch);
                   3842:        if(f__cursor<0)
                   3843:        {       if(f__recpos+f__cursor < 0) /*err(elist->cierr,110,"fmt")*/
                   3844:                        f__cursor = -f__recpos; /* is this in the standard? */
                   3845:                if(f__external == 0) {
                   3846:                        extern char *f__icptr;
                   3847:                        f__icptr += f__cursor;
                   3848:                }
                   3849:                else if(f__curunit && f__curunit->useek)
                   3850:                        (void) fseek(f__cf,(long) f__cursor,SEEK_CUR);
                   3851:                else
                   3852:                        err(f__elist->cierr,106,"fmt");
                   3853:                f__recpos += f__cursor;
                   3854:                f__cursor=0;
                   3855:        }
                   3856:        switch(p->op)
                   3857:        {
                   3858:        default: fprintf(stderr,"rd_ed, unexpected code: %d\n", p->op);
                   3859:                sig_die(f__fmtbuf, 1);
                   3860:        case IM:
                   3861:        case I: ch = rd_I((Uint *)ptr,p->p1,len, 10);
                   3862:                break;
                   3863: 
                   3864:                /* O and OM don't work right for character, double, complex, */
                   3865:                /* or doublecomplex, and they differ from Fortran 90 in */
                   3866:                /* showing a minus sign for negative values. */
                   3867: 
                   3868:        case OM:
                   3869:        case O: ch = rd_I((Uint *)ptr, p->p1, len, 8);
                   3870:                break;
                   3871:        case L: ch = rd_L((ftnint *)ptr,p->p1,len);
                   3872:                break;
                   3873:        case A: ch = rd_A(ptr,len);
                   3874:                break;
                   3875:        case AW:
                   3876:                ch = rd_AW(ptr,p->p1,len);
                   3877:                break;
                   3878:        case E: case EE:
                   3879:        case D:
                   3880:        case G:
                   3881:        case GE:
                   3882:        case F: ch = rd_F((ufloat *)ptr,p->p1,p->p2,len);
                   3883:                break;
                   3884: 
                   3885:                /* Z and ZM assume 8-bit bytes. */
                   3886: 
                   3887:        case ZM:
                   3888:        case Z:
                   3889:                ch = rd_Z((Uint *)ptr, p->p1, len);
                   3890:                break;
                   3891:        }
                   3892:        if(ch == 0) return(ch);
                   3893:        else if(ch == EOF) return(EOF);
                   3894:        if (f__cf)
                   3895:                clearerr(f__cf);
                   3896:        return(errno);
                   3897: }
                   3898: #ifdef KR_headers
                   3899: rd_ned(p) struct f__syl *p;
                   3900: #else
                   3901: rd_ned(struct f__syl *p)
                   3902: #endif
                   3903: {
                   3904:        switch(p->op)
                   3905:        {
                   3906:        default: fprintf(stderr,"rd_ned, unexpected code: %d\n", p->op);
                   3907:                sig_die(f__fmtbuf, 1);
                   3908:        case APOS:
                   3909:                return(rd_POS(*(char **)&p->p2));
                   3910:        case H: return(rd_H(p->p1,*(char **)&p->p2));
                   3911:        case SLASH: return((*f__donewrec)());
                   3912:        case TR:
                   3913:        case X: f__cursor += p->p1;
                   3914:                return(1);
                   3915:        case T: f__cursor=p->p1-f__recpos - 1;
                   3916:                return(1);
                   3917:        case TL: f__cursor -= p->p1;
                   3918:                if(f__cursor < -f__recpos)      /* TL1000, 1X */
                   3919:                        f__cursor = -f__recpos;
                   3920:                return(1);
                   3921:        }
                   3922: }
                   3923: ./ ADD NAME=libI77/rewind.c TIME=719848232
                   3924: #include "f2c.h"
                   3925: #include "fio.h"
                   3926: #ifdef KR_headers
                   3927: integer f_rew(a) alist *a;
                   3928: #else
                   3929: integer f_rew(alist *a)
                   3930: #endif
                   3931: {
                   3932:        unit *b;
                   3933:        if(a->aunit>=MXUNIT || a->aunit<0)
                   3934:                err(a->aerr,101,"rewind");
                   3935:        b = &f__units[a->aunit];
                   3936:        if(b->ufd == NULL || b->uwrt == 3)
                   3937:                return(0);
                   3938:        if(!b->useek)
                   3939:                err(a->aerr,106,"rewind")
                   3940:        if(b->uwrt) {
                   3941:                (void) t_runc(a);
                   3942:                b->uwrt = 3;
                   3943:                }
                   3944:        rewind(b->ufd);
                   3945:        b->uend=0;
                   3946:        return(0);
                   3947: }
                   3948: ./ ADD NAME=libI77/rsfe.c TIME=719848232
                   3949: /* read sequential formatted external */
                   3950: #include "f2c.h"
                   3951: #include "fio.h"
                   3952: #include "fmt.h"
                   3953: 
                   3954: xrd_SL(Void)
                   3955: {      int ch;
                   3956:        if(!f__curunit->uend)
                   3957:                while((ch=getc(f__cf))!='\n' && ch!=EOF);
                   3958:        f__cursor=f__recpos=0;
                   3959:        return(1);
                   3960: }
                   3961: x_getc(Void)
                   3962: {      int ch;
                   3963:        if(f__curunit->uend) return(EOF);
                   3964:        ch = getc(f__cf);
                   3965:        if(ch!=EOF && ch!='\n')
                   3966:        {       f__recpos++;
                   3967:                return(ch);
                   3968:        }
                   3969:        if(ch=='\n')
                   3970:        {       (void) ungetc(ch,f__cf);
                   3971:                return(ch);
                   3972:        }
                   3973:        if(f__curunit->uend || feof(f__cf))
                   3974:        {       errno=0;
                   3975:                f__curunit->uend=1;
                   3976:                return(-1);
                   3977:        }
                   3978:        return(-1);
                   3979: }
                   3980: x_endp(Void)
                   3981: {
                   3982:        (void) xrd_SL();
                   3983:        return(0);
                   3984: }
                   3985: x_rev(Void)
                   3986: {
                   3987:        (void) xrd_SL();
                   3988:        return(0);
                   3989: }
                   3990: #ifdef KR_headers
                   3991: integer s_rsfe(a) cilist *a; /* start */
                   3992: #else
                   3993: integer s_rsfe(cilist *a) /* start */
                   3994: #endif
                   3995: {      int n;
                   3996:        if(!f__init) f_init();
                   3997:        if(n=c_sfe(a)) return(n);
                   3998:        f__reading=1;
                   3999:        f__sequential=1;
                   4000:        f__formatted=1;
                   4001:        f__external=1;
                   4002:        f__elist=a;
                   4003:        f__cursor=f__recpos=0;
                   4004:        f__scale=0;
                   4005:        f__fmtbuf=a->cifmt;
                   4006:        f__curunit= &f__units[a->ciunit];
                   4007:        f__cf=f__curunit->ufd;
                   4008:        if(pars_f(f__fmtbuf)<0) err(a->cierr,100,"startio");
                   4009:        f__getn= x_getc;
                   4010:        f__doed= rd_ed;
                   4011:        f__doned= rd_ned;
                   4012:        fmt_bg();
                   4013:        f__doend=x_endp;
                   4014:        f__donewrec=xrd_SL;
                   4015:        f__dorevert=x_rev;
                   4016:        f__cblank=f__curunit->ublnk;
                   4017:        f__cplus=0;
                   4018:        if(f__curunit->uwrt && f__nowreading(f__curunit))
                   4019:                err(a->cierr,errno,"read start");
                   4020:        return(0);
                   4021: }
                   4022: ./ ADD NAME=libI77/rsli.c TIME=719848232
                   4023: #include "f2c.h"
                   4024: #include "fio.h"
                   4025: #include "lio.h"
                   4026: 
                   4027: extern flag f__lquit;
                   4028: extern int f__lcount;
                   4029: extern char *f__icptr;
                   4030: extern char *f__icend;
                   4031: extern icilist *f__svic;
                   4032: extern int f__icnum, f__recpos;
                   4033: 
                   4034: int i_getc(Void)
                   4035: {
                   4036:        if(f__recpos >= f__svic->icirlen) {
                   4037:                if (f__recpos++ == f__svic->icirlen)
                   4038:                        return '\n';
                   4039:                z_rnew();
                   4040:                }
                   4041:        f__recpos++;
                   4042:        if(f__icptr >= f__icend) err(f__svic->iciend,(EOF),"endfile");
                   4043:        return(*f__icptr++);
                   4044:        }
                   4045: 
                   4046: #ifdef KR_headers
                   4047: int i_ungetc(ch, f) int ch; FILE *f;
                   4048: #else
                   4049: int i_ungetc(int ch, FILE *f)
                   4050: #endif
                   4051: {
                   4052:        if (--f__recpos == f__svic->icirlen)
                   4053:                return '\n';
                   4054:        if (f__recpos < -1)
                   4055:                err(f__svic->icierr,110,"recend");
                   4056:        /* *--icptr == ch, and icptr may point to read-only memory */
                   4057:        return *--f__icptr /* = ch */;
                   4058:        }
                   4059: 
                   4060:  static void
                   4061: #ifdef KR_headers
                   4062: c_lir(a) icilist *a;
                   4063: #else
                   4064: c_lir(icilist *a)
                   4065: #endif
                   4066: {
                   4067:        extern int l_eof;
                   4068:        f__reading = 1;
                   4069:        f__external = 0;
                   4070:        f__formatted = 1;
                   4071:        f__svic = a;
                   4072:        L_len = a->icirlen;
                   4073:        f__recpos = -1;
                   4074:        f__icnum = f__recpos = 0;
                   4075:        f__cursor = 0;
                   4076:        l_getc = i_getc;
                   4077:        l_ungetc = i_ungetc;
                   4078:        l_eof = 0;
                   4079:        f__icptr = a->iciunit;
                   4080:        f__icend = f__icptr + a->icirlen*a->icirnum;
                   4081:        f__cf = 0;
                   4082:        f__curunit = 0;
                   4083:        f__elist = (cilist *)a;
                   4084:        }
                   4085: 
                   4086: 
                   4087: #ifdef KR_headers
                   4088: integer s_rsli(a) icilist *a;
                   4089: #else
                   4090: integer s_rsli(icilist *a)
                   4091: #endif
                   4092: {
                   4093:        f__lioproc = l_read;
                   4094:        f__lquit = 0;
                   4095:        f__lcount = 0;
                   4096:        c_lir(a);
                   4097:        return(0);
                   4098:        }
                   4099: 
                   4100: integer e_rsli(Void)
                   4101: { return 0; }
                   4102: 
                   4103: #ifdef KR_headers
                   4104: s_rsni(a) icilist *a;
                   4105: #else
                   4106: extern int x_rsne(cilist*);
                   4107: 
                   4108: s_rsni(icilist *a)
                   4109: #endif
                   4110: {
                   4111:        cilist ca;
                   4112:        ca.ciend = a->iciend;
                   4113:        ca.cierr = a->icierr;
                   4114:        ca.cifmt = a->icifmt;
                   4115:        c_lir(a);
                   4116:        return x_rsne(&ca);
                   4117:        }
                   4118: ./ ADD NAME=libI77/rsne.c TIME=719850201
                   4119: #include "f2c.h"
                   4120: #include "fio.h"
                   4121: #include "lio.h"
                   4122: 
                   4123: #define MAX_NL_CACHE 3 /* maximum number of namelist hash tables to cache */
                   4124: #define MAXDIM 20      /* maximum number of subscripts */
                   4125: 
                   4126:  struct dimen {
                   4127:        ftnlen extent;
                   4128:        ftnlen curval;
                   4129:        ftnlen delta;
                   4130:        ftnlen stride;
                   4131:        };
                   4132:  typedef struct dimen dimen;
                   4133: 
                   4134:  struct hashentry {
                   4135:        struct hashentry *next;
                   4136:        char *name;
                   4137:        Vardesc *vd;
                   4138:        };
                   4139:  typedef struct hashentry hashentry;
                   4140: 
                   4141:  struct hashtab {
                   4142:        struct hashtab *next;
                   4143:        Namelist *nl;
                   4144:        int htsize;
                   4145:        hashentry *tab[1];
                   4146:        };
                   4147:  typedef struct hashtab hashtab;
                   4148: 
                   4149:  static hashtab *nl_cache;
                   4150:  static n_nlcache;
                   4151:  static hashentry **zot;
                   4152:  extern ftnlen f__typesize[];
                   4153: 
                   4154:  extern flag f__lquit;
                   4155:  extern int f__lcount, nml_read;
                   4156:  extern t_getc(Void);
                   4157: 
                   4158: #ifdef KR_headers
                   4159:  extern char *malloc(), *memset();
                   4160: 
                   4161: #ifdef ungetc
                   4162:  static int
                   4163: un_getc(x,f__cf) int x; FILE *f__cf;
                   4164: { return ungetc(x,f__cf); }
                   4165: #else
                   4166: #define un_getc ungetc
                   4167:  extern int ungetc();
                   4168: #endif
                   4169: 
                   4170: #else
                   4171: #undef abs
                   4172: #undef min
                   4173: #undef max
                   4174: #include "stdlib.h"
                   4175: #include "string.h"
                   4176: 
                   4177: #ifdef ungetc
                   4178:  static int
                   4179: un_getc(int x, FILE *f__cf)
                   4180: { return ungetc(x,f__cf); }
                   4181: #else
                   4182: #define un_getc ungetc
                   4183: #endif
                   4184: #endif
                   4185: 
                   4186:  static Vardesc *
                   4187: #ifdef KR_headers
                   4188: hash(ht, s) hashtab *ht; register char *s;
                   4189: #else
                   4190: hash(hashtab *ht, register char *s)
                   4191: #endif
                   4192: {
                   4193:        register int c, x;
                   4194:        register hashentry *h;
                   4195:        char *s0 = s;
                   4196: 
                   4197:        for(x = 0; c = *s++; x = x & 0x4000 ? ((x << 1) & 0x7fff) + 1 : x << 1)
                   4198:                x += c;
                   4199:        for(h = *(zot = ht->tab + x % ht->htsize); h; h = h->next)
                   4200:                if (!strcmp(s0, h->name))
                   4201:                        return h->vd;
                   4202:        return 0;
                   4203:        }
                   4204: 
                   4205:  hashtab *
                   4206: #ifdef KR_headers
                   4207: mk_hashtab(nl) Namelist *nl;
                   4208: #else
                   4209: mk_hashtab(Namelist *nl)
                   4210: #endif
                   4211: {
                   4212:        int nht, nv;
                   4213:        hashtab *ht;
                   4214:        Vardesc *v, **vd, **vde;
                   4215:        hashentry *he;
                   4216: 
                   4217:        hashtab **x, **x0, *y;
                   4218:        for(x = &nl_cache; y = *x; x0 = x, x = &y->next)
                   4219:                if (nl == y->nl)
                   4220:                        return y;
                   4221:        if (n_nlcache >= MAX_NL_CACHE) {
                   4222:                /* discard least recently used namelist hash table */
                   4223:                y = *x0;
                   4224:                free((char *)y->next);
                   4225:                y->next = 0;
                   4226:                }
                   4227:        else
                   4228:                n_nlcache++;
                   4229:        nv = nl->nvars;
                   4230:        if (nv >= 0x4000)
                   4231:                nht = 0x7fff;
                   4232:        else {
                   4233:                for(nht = 1; nht < nv; nht <<= 1);
                   4234:                nht += nht - 1;
                   4235:                }
                   4236:        ht = (hashtab *)malloc(sizeof(hashtab) + (nht-1)*sizeof(hashentry *)
                   4237:                                + nv*sizeof(hashentry));
                   4238:        if (!ht)
                   4239:                return 0;
                   4240:        he = (hashentry *)&ht->tab[nht];
                   4241:        ht->nl = nl;
                   4242:        ht->htsize = nht;
                   4243:        ht->next = nl_cache;
                   4244:        nl_cache = ht;
                   4245:        memset((char *)ht->tab, 0, nht*sizeof(hashentry *));
                   4246:        vd = nl->vars;
                   4247:        vde = vd + nv;
                   4248:        while(vd < vde) {
                   4249:                v = *vd++;
                   4250:                if (!hash(ht, v->name)) {
                   4251:                        he->next = *zot;
                   4252:                        *zot = he;
                   4253:                        he->name = v->name;
                   4254:                        he->vd = v;
                   4255:                        he++;
                   4256:                        }
                   4257:                }
                   4258:        return ht;
                   4259:        }
                   4260: 
                   4261: static char Alpha[256], Alphanum[256];
                   4262: 
                   4263:  static VOID
                   4264: nl_init(Void) {
                   4265:        register char *s;
                   4266:        register int c;
                   4267: 
                   4268:        if(!f__init)
                   4269:                f_init();
                   4270:        for(s = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; c = *s++; )
                   4271:                Alpha[c]
                   4272:                = Alphanum[c]
                   4273:                = Alpha[c + 'a' - 'A']
                   4274:                = Alphanum[c + 'a' - 'A']
                   4275:                = c;
                   4276:        for(s = "0123456789_"; c = *s++; )
                   4277:                Alphanum[c] = c;
                   4278:        }
                   4279: 
                   4280: #define GETC(x) (x=(*l_getc)())
                   4281: #define Ungetc(x,y) (*l_ungetc)(x,y)
                   4282: 
                   4283:  static int
                   4284: #ifdef KR_headers
                   4285: getname(s, slen) register char *s; int slen;
                   4286: #else
                   4287: getname(register char *s, int slen)
                   4288: #endif
                   4289: {
                   4290:        register char *se = s + slen - 1;
                   4291:        register int ch;
                   4292: 
                   4293:        GETC(ch);
                   4294:        if (!(*s++ = Alpha[ch & 0xff])) {
                   4295:                if (ch != EOF)
                   4296:                        ch = 115;
                   4297:                err(f__elist->cierr, ch, "namelist read");
                   4298:                }
                   4299:        while(*s = Alphanum[GETC(ch) & 0xff])
                   4300:                if (s < se)
                   4301:                        s++;
                   4302:        if (ch == EOF)
                   4303:                err(f__elist->cierr, EOF, "namelist read");
                   4304:        if (ch > ' ')
                   4305:                Ungetc(ch,f__cf);
                   4306:        return *s = 0;
                   4307:        }
                   4308: 
                   4309:  static int
                   4310: #ifdef KR_headers
                   4311: getnum(chp, val) int *chp; ftnlen *val;
                   4312: #else
                   4313: getnum(int *chp, ftnlen *val)
                   4314: #endif
                   4315: {
                   4316:        register int ch, sign;
                   4317:        register ftnlen x;
                   4318: 
                   4319:        while(GETC(ch) <= ' ' && ch >= 0);
                   4320:        if (ch == '-') {
                   4321:                sign = 1;
                   4322:                GETC(ch);
                   4323:                }
                   4324:        else {
                   4325:                sign = 0;
                   4326:                if (ch == '+')
                   4327:                        GETC(ch);
                   4328:                }
                   4329:        x = ch - '0';
                   4330:        if (x < 0 || x > 9)
                   4331:                return 115;
                   4332:        while(GETC(ch) >= '0' && ch <= '9')
                   4333:                x = 10*x + ch - '0';
                   4334:        while(ch <= ' ' && ch >= 0)
                   4335:                GETC(ch);
                   4336:        if (ch == EOF)
                   4337:                return EOF;
                   4338:        *val = sign ? -x : x;
                   4339:        *chp = ch;
                   4340:        return 0;
                   4341:        }
                   4342: 
                   4343:  static int
                   4344: #ifdef KR_headers
                   4345: getdimen(chp, d, delta, extent, x1)
                   4346:  int *chp; dimen *d; ftnlen delta, extent, *x1;
                   4347: #else
                   4348: getdimen(int *chp, dimen *d, ftnlen delta, ftnlen extent, ftnlen *x1)
                   4349: #endif
                   4350: {
                   4351:        register int k;
                   4352:        ftnlen x2, x3;
                   4353: 
                   4354:        if (k = getnum(chp, x1))
                   4355:                return k;
                   4356:        x3 = 1;
                   4357:        if (*chp == ':') {
                   4358:                if (k = getnum(chp, &x2))
                   4359:                        return k;
                   4360:                x2 -= *x1;
                   4361:                if (*chp == ':') {
                   4362:                        if (k = getnum(chp, &x3))
                   4363:                                return k;
                   4364:                        if (!x3)
                   4365:                                return 123;
                   4366:                        x2 /= x3;
                   4367:                        }
                   4368:                if (x2 < 0 || x2 >= extent)
                   4369:                        return 123;
                   4370:                d->extent = x2 + 1;
                   4371:                }
                   4372:        else
                   4373:                d->extent = 1;
                   4374:        d->curval = 0;
                   4375:        d->delta = delta;
                   4376:        d->stride = x3;
                   4377:        return 0;
                   4378:        }
                   4379: 
                   4380:  static char where0[] = "namelist read start ";
                   4381: 
                   4382: #ifdef KR_headers
                   4383: x_rsne(a) cilist *a;
                   4384: #else
                   4385: x_rsne(cilist *a)
                   4386: #endif
                   4387: {
                   4388:        int ch, got1, k, n, nd;
                   4389:        Namelist *nl;
                   4390:        static char where[] = "namelist read";
                   4391:        char buf[64];
                   4392:        hashtab *ht;
                   4393:        Vardesc *v;
                   4394:        dimen *dn, *dn0, *dn1;
                   4395:        ftnlen *dims, *dims1;
                   4396:        ftnlen b, b0, b1, ex, no, no1, nomax, size, span;
                   4397:        ftnint type;
                   4398:        char *vaddr;
                   4399:        long iva, ivae;
                   4400:        dimen dimens[MAXDIM], substr;
                   4401: 
                   4402:        if (!Alpha['a'])
                   4403:                nl_init();
                   4404:        f__reading=1;
                   4405:        f__formatted=1;
                   4406:        got1 = 0;
                   4407:        for(;;) switch(GETC(ch)) {
                   4408:                case EOF:
                   4409:                        err(a->ciend,(EOF),where0);
                   4410:                case '&':
                   4411:                case '$':
                   4412:                        goto have_amp;
                   4413:                default:
                   4414:                        if (ch <= ' ' && ch >= 0)
                   4415:                                continue;
                   4416:                        err(a->cierr, 115, where0);
                   4417:                }
                   4418:  have_amp:
                   4419:        if (ch = getname(buf,sizeof(buf)))
                   4420:                return ch;
                   4421:        nl = (Namelist *)a->cifmt;
                   4422:        if (strcmp(buf, nl->name))
                   4423:                err(a->cierr, 118, where0);
                   4424:        ht = mk_hashtab(nl);
                   4425:        if (!ht)
                   4426:                err(f__elist->cierr, 113, where0);
                   4427:        for(;;) {
                   4428:                for(;;) switch(GETC(ch)) {
                   4429:                        case EOF:
                   4430:                                if (got1)
                   4431:                                        return 0;
                   4432:                                err(a->ciend,(EOF),where0);
                   4433:                        case '/':
                   4434:                        case '$':
                   4435:                        case '&':
                   4436:                                return 0;
                   4437:                        default:
                   4438:                                if (ch <= ' ' && ch >= 0 || ch == ',')
                   4439:                                        continue;
                   4440:                                Ungetc(ch,f__cf);
                   4441:                                if (ch = getname(buf,sizeof(buf)))
                   4442:                                        return ch;
                   4443:                                goto havename;
                   4444:                        }
                   4445:  havename:
                   4446:                v = hash(ht,buf);
                   4447:                if (!v)
                   4448:                        err(a->cierr, 119, where);
                   4449:                while(GETC(ch) <= ' ' && ch >= 0);
                   4450:                vaddr = v->addr;
                   4451:                type = v->type;
                   4452:                if (type < 0) {
                   4453:                        size = -type;
                   4454:                        type = TYCHAR;
                   4455:                        }
                   4456:                else
                   4457:                        size = f__typesize[type];
                   4458:                ivae = size;
                   4459:                iva = 0;
                   4460:                if (ch == '(' /*)*/ ) {
                   4461:                        dn = dimens;
                   4462:                        if (!(dims = v->dims)) {
                   4463:                                if (type != TYCHAR)
                   4464:                                        err(a->cierr, 122, where);
                   4465:                                if (k = getdimen(&ch, dn, (ftnlen)size,
                   4466:                                                (ftnlen)size, &b))
                   4467:                                        err(a->cierr, k, where);
                   4468:                                if (ch != ')')
                   4469:                                        err(a->cierr, 115, where);
                   4470:                                b1 = dn->extent;
                   4471:                                if (--b < 0 || b + b1 > size)
                   4472:                                        return 124;
                   4473:                                iva += b;
                   4474:                                size = b1;
                   4475:                                while(GETC(ch) <= ' ' && ch >= 0);
                   4476:                                goto scalar;
                   4477:                                }
                   4478:                        nd = dims[0];
                   4479:                        nomax = span = dims[1];
                   4480:                        ivae = iva + size*nomax;
                   4481:                        if (k = getdimen(&ch, dn, size, nomax, &b))
                   4482:                                err(a->cierr, k, where);
                   4483:                        no = dn->extent;
                   4484:                        b0 = dims[2];
                   4485:                        dims1 = dims += 3;
                   4486:                        ex = 1;
                   4487:                        for(n = 1; n++ < nd; dims++) {
                   4488:                                if (ch != ',')
                   4489:                                        err(a->cierr, 115, where);
                   4490:                                dn1 = dn + 1;
                   4491:                                span /= *dims;
                   4492:                                if (k = getdimen(&ch, dn1, dn->delta**dims,
                   4493:                                                span, &b1))
                   4494:                                        err(a->cierr, k, where);
                   4495:                                ex *= *dims;
                   4496:                                b += b1*ex;
                   4497:                                no *= dn1->extent;
                   4498:                                dn = dn1;
                   4499:                                }
                   4500:                        if (ch != ')')
                   4501:                                err(a->cierr, 115, where);
                   4502:                        b -= b0;
                   4503:                        if (b < 0 || b >= nomax)
                   4504:                                err(a->cierr, 125, where);
                   4505:                        iva += size * b;
                   4506:                        dims = dims1;
                   4507:                        while(GETC(ch) <= ' ' && ch >= 0);
                   4508:                        no1 = 1;
                   4509:                        dn0 = dimens;
                   4510:                        if (type == TYCHAR && ch == '(' /*)*/) {
                   4511:                                if (k = getdimen(&ch, &substr, size, size, &b))
                   4512:                                        err(a->cierr, k, where);
                   4513:                                if (ch != ')')
                   4514:                                        err(a->cierr, 115, where);
                   4515:                                b1 = substr.extent;
                   4516:                                if (--b < 0 || b + b1 > size)
                   4517:                                        return 124;
                   4518:                                iva += b;
                   4519:                                b0 = size;
                   4520:                                size = b1;
                   4521:                                while(GETC(ch) <= ' ' && ch >= 0);
                   4522:                                if (b1 < b0)
                   4523:                                        goto delta_adj;
                   4524:                                }
                   4525:                        for(; dn0 < dn; dn0++) {
                   4526:                                if (dn0->extent != *dims++ || dn0->stride != 1)
                   4527:                                        break;
                   4528:                                no1 *= dn0->extent;
                   4529:                                }
                   4530:                        if (dn0 == dimens && dimens[0].stride == 1) {
                   4531:                                no1 = dimens[0].extent;
                   4532:                                dn0++;
                   4533:                                }
                   4534:  delta_adj:
                   4535:                        ex = 0;
                   4536:                        for(dn1 = dn0; dn1 <= dn; dn1++)
                   4537:                                ex += (dn1->extent-1)
                   4538:                                        * (dn1->delta *= dn1->stride);
                   4539:                        for(dn1 = dn; dn1 > dn0; dn1--) {
                   4540:                                ex -= (dn1->extent - 1) * dn1->delta;
                   4541:                                dn1->delta -= ex;
                   4542:                                }
                   4543:                        }
                   4544:                else if (dims = v->dims) {
                   4545:                        no = no1 = dims[1];
                   4546:                        ivae = iva + no*size;
                   4547:                        }
                   4548:                else
                   4549:  scalar:
                   4550:                        no = no1 = 1;
                   4551:                if (ch != '=')
                   4552:                        err(a->cierr, 115, where);
                   4553:                got1 = nml_read = 1;
                   4554:                f__lcount = 0;
                   4555:         readloop:
                   4556:                for(;;) {
                   4557:                        if (iva >= ivae || iva < 0) {
                   4558:                                f__lquit = 1;
                   4559:                                goto mustend;
                   4560:                                }
                   4561:                        else if (iva + no1*size > ivae)
                   4562:                                no1 = (ivae - iva)/size;
                   4563:                        f__lquit = 0;
                   4564:                        l_read(&no1, vaddr + iva, size, type);
                   4565:                        if (f__lquit == 1)
                   4566:                                return 0;
                   4567:  mustend:
                   4568:                        if (GETC(ch) == '/' || ch == '$' || ch == '&') {
                   4569:                                f__lquit = 1;
                   4570:                                return 0;
                   4571:                                }
                   4572:                        else if (f__lquit) {
                   4573:                                while(ch <= ' ' && ch >= 0)
                   4574:                                        GETC(ch);
                   4575:                                Ungetc(ch,f__cf);
                   4576:                                if (!Alpha[ch & 0xff] && ch >= 0)
                   4577:                                        err(a->cierr, 125, where);
                   4578:                                break;
                   4579:                                }
                   4580:                        Ungetc(ch,f__cf);
                   4581:                        if ((no -= no1) <= 0)
                   4582:                                break;
                   4583:                        for(dn1 = dn0; dn1 <= dn; dn1++) {
                   4584:                                if (++dn1->curval < dn1->extent) {
                   4585:                                        iva += dn1->delta;
                   4586:                                        goto readloop;
                   4587:                                        }
                   4588:                                dn1->curval = 0;
                   4589:                                }
                   4590:                        break;
                   4591:                        }
                   4592:                }
                   4593:        }
                   4594: 
                   4595:  integer
                   4596: #ifdef KR_headers
                   4597: s_rsne(a) cilist *a;
                   4598: #else
                   4599: s_rsne(cilist *a)
                   4600: #endif
                   4601: {
                   4602:        extern int l_eof;
                   4603:        int n;
                   4604: 
                   4605:        f__external=1;
                   4606:        l_eof = 0;
                   4607:        if(n = c_le(a))
                   4608:                return n;
                   4609:        if(f__curunit->uwrt && f__nowreading(f__curunit))
                   4610:                err(a->cierr,errno,where0);
                   4611:        l_getc = t_getc;
                   4612:        l_ungetc = un_getc;
                   4613:        if (n = x_rsne(a))
                   4614:                return n;
                   4615:        return e_rsle();
                   4616:        }
                   4617: ./ ADD NAME=libI77/sfe.c TIME=719848232
                   4618: /* sequential formatted external common routines*/
                   4619: #include "f2c.h"
                   4620: #include "fio.h"
                   4621: 
                   4622: extern char *f__fmtbuf;
                   4623: 
                   4624: integer e_rsfe(Void)
                   4625: {      int n;
                   4626:        n=en_fio();
                   4627:        if (f__cf == stdout)
                   4628:                fflush(stdout);
                   4629:        else if (f__cf == stderr)
                   4630:                fflush(stderr);
                   4631:        f__fmtbuf=NULL;
                   4632:        return(n);
                   4633: }
                   4634: #ifdef KR_headers
                   4635: c_sfe(a) cilist *a; /* check */
                   4636: #else
                   4637: c_sfe(cilist *a) /* check */
                   4638: #endif
                   4639: {      unit *p;
                   4640:        if(a->ciunit >= MXUNIT || a->ciunit<0)
                   4641:                err(a->cierr,101,"startio");
                   4642:        p = &f__units[a->ciunit];
                   4643:        if(p->ufd==NULL && fk_open(SEQ,FMT,a->ciunit)) err(a->cierr,114,"sfe")
                   4644:        if(!p->ufmt) err(a->cierr,102,"sfe")
                   4645:        return(0);
                   4646: }
                   4647: integer e_wsfe(Void)
                   4648: {      return(e_rsfe());
                   4649: }
                   4650: ./ ADD NAME=libI77/sue.c TIME=719848233
                   4651: #include "f2c.h"
                   4652: #include "fio.h"
                   4653: extern uiolen f__reclen;
                   4654: long f__recloc;
                   4655: 
                   4656: #ifdef KR_headers
                   4657: c_sue(a) cilist *a;
                   4658: #else
                   4659: c_sue(cilist *a)
                   4660: #endif
                   4661: {
                   4662:        if(a->ciunit >= MXUNIT || a->ciunit < 0)
                   4663:                err(a->cierr,101,"startio");
                   4664:        f__external=f__sequential=1;
                   4665:        f__formatted=0;
                   4666:        f__curunit = &f__units[a->ciunit];
                   4667:        f__elist=a;
                   4668:        if(f__curunit->ufd==NULL && fk_open(SEQ,UNF,a->ciunit))
                   4669:                err(a->cierr,114,"sue");
                   4670:        f__cf=f__curunit->ufd;
                   4671:        if(f__curunit->ufmt) err(a->cierr,103,"sue")
                   4672:        if(!f__curunit->useek) err(a->cierr,103,"sue")
                   4673:        return(0);
                   4674: }
                   4675: #ifdef KR_headers
                   4676: integer s_rsue(a) cilist *a;
                   4677: #else
                   4678: integer s_rsue(cilist *a)
                   4679: #endif
                   4680: {
                   4681:        int n;
                   4682:        if(!f__init) f_init();
                   4683:        f__reading=1;
                   4684:        if(n=c_sue(a)) return(n);
                   4685:        f__recpos=0;
                   4686:        if(f__curunit->uwrt && f__nowreading(f__curunit))
                   4687:                err(a->cierr, errno, "read start");
                   4688:        if(fread((char *)&f__reclen,sizeof(uiolen),1,f__cf)
                   4689:                != 1)
                   4690:        {       if(feof(f__cf))
                   4691:                {       f__curunit->uend = 1;
                   4692:                        err(a->ciend, EOF, "start");
                   4693:                }
                   4694:                clearerr(f__cf);
                   4695:                err(a->cierr, errno, "start");
                   4696:        }
                   4697:        return(0);
                   4698: }
                   4699: #ifdef KR_headers
                   4700: integer s_wsue(a) cilist *a;
                   4701: #else
                   4702: integer s_wsue(cilist *a)
                   4703: #endif
                   4704: {
                   4705:        int n;
                   4706:        if(!f__init) f_init();
                   4707:        if(n=c_sue(a)) return(n);
                   4708:        f__reading=0;
                   4709:        f__reclen=0;
                   4710:        if(f__curunit->uwrt != 1 && f__nowwriting(f__curunit))
                   4711:                err(a->cierr, errno, "write start");
                   4712:        f__recloc=ftell(f__cf);
                   4713:        (void) fseek(f__cf,(long)sizeof(uiolen),SEEK_CUR);
                   4714:        return(0);
                   4715: }
                   4716: integer e_wsue(Void)
                   4717: {      long loc;
                   4718:        (void) fwrite((char *)&f__reclen,sizeof(uiolen),1,f__cf);
                   4719:        loc=ftell(f__cf);
                   4720:        (void) fseek(f__cf,f__recloc,SEEK_SET);
                   4721:        (void) fwrite((char *)&f__reclen,sizeof(uiolen),1,f__cf);
                   4722:        (void) fseek(f__cf,loc,SEEK_SET);
                   4723:        return(0);
                   4724: }
                   4725: integer e_rsue(Void)
                   4726: {
                   4727:        (void) fseek(f__cf,(long)(f__reclen-f__recpos+sizeof(uiolen)),SEEK_CUR);
                   4728:        return(0);
                   4729: }
                   4730: ./ ADD NAME=libI77/typesize.c TIME=719848233
                   4731: #include "f2c.h"
                   4732: 
                   4733: ftnlen f__typesize[] = { 0, 0, sizeof(shortint), sizeof(integer),
                   4734:                        sizeof(real), sizeof(doublereal),
                   4735:                        sizeof(complex), sizeof(doublecomplex),
                   4736:                        sizeof(logical), sizeof(char) };
                   4737: ./ ADD NAME=libI77/uio.c TIME=719848233
                   4738: #include "f2c.h"
                   4739: #include "fio.h"
                   4740: uiolen f__reclen;
                   4741: 
                   4742: #ifdef KR_headers
                   4743: do_us(number,ptr,len) ftnint *number; char *ptr; ftnlen len;
                   4744: #else
                   4745: do_us(ftnint *number, char *ptr, ftnlen len)
                   4746: #endif
                   4747: {
                   4748:        if(f__reading)
                   4749:        {
                   4750:                f__recpos += *number * len;
                   4751:                if(f__recpos>f__reclen)
                   4752:                        err(f__elist->ciend, 110, "do_us");
                   4753:                if (fread(ptr,(int)len,(int)(*number),f__cf) != *number)
                   4754:                        err(f__elist->ciend, EOF, "do_us");
                   4755:                return(0);
                   4756:        }
                   4757:        else
                   4758:        {
                   4759:                f__reclen += *number * len;
                   4760:                (void) fwrite(ptr,(int)len,(int)(*number),f__cf);
                   4761:                return(0);
                   4762:        }
                   4763: }
                   4764: #ifdef KR_headers
                   4765: integer do_ud(number,ptr,len) ftnint *number; char *ptr; ftnlen len;
                   4766: #else
                   4767: integer do_ud(ftnint *number, char *ptr, ftnlen len)
                   4768: #endif
                   4769: {
                   4770:        f__recpos += *number * len;
                   4771:        if(f__recpos > f__curunit->url && f__curunit->url!=1)
                   4772:                err(f__elist->cierr,110,"do_ud");
                   4773:        if(f__reading)
                   4774:        {
                   4775:                if(fread(ptr,(int)len,(int)(*number),f__cf) != *number)
                   4776:                        err(f__elist->cierr,EOF,"do_ud")
                   4777:                else return(0);
                   4778:        }
                   4779:        (void) fwrite(ptr,(int)len,(int)(*number),f__cf);
                   4780:        return(0);
                   4781: }
                   4782: #ifdef KR_headers
                   4783: integer do_uio(number,ptr,len) ftnint *number; char *ptr; ftnlen len;
                   4784: #else
                   4785: integer do_uio(ftnint *number, char *ptr, ftnlen len)
                   4786: #endif
                   4787: {
                   4788:        if(f__sequential)
                   4789:                return(do_us(number,ptr,len));
                   4790:        else    return(do_ud(number,ptr,len));
                   4791: }
                   4792: ./ ADD NAME=libI77/util.c TIME=719848233
                   4793: #ifndef MSDOS
                   4794: #include "sys/types.h"
                   4795: #include "sys/stat.h"
                   4796: #endif
                   4797: #include "f2c.h"
                   4798: #include "fio.h"
                   4799: 
                   4800:  VOID
                   4801: #ifdef KR_headers
                   4802: g_char(a,alen,b) char *a,*b; ftnlen alen;
                   4803: #else
                   4804: g_char(char *a, ftnlen alen, char *b)
                   4805: #endif
                   4806: {
                   4807:        char *x = a + alen, *y = b + alen;
                   4808: 
                   4809:        for(;; y--) {
                   4810:                if (x <= a) {
                   4811:                        *b = 0;
                   4812:                        return;
                   4813:                        }
                   4814:                if (*--x != ' ')
                   4815:                        break;
                   4816:                }
                   4817:        *y-- = 0;
                   4818:        do *y-- = *x;
                   4819:                while(x-- > a);
                   4820:        }
                   4821: 
                   4822:  VOID
                   4823: #ifdef KR_headers
                   4824: b_char(a,b,blen) char *a,*b; ftnlen blen;
                   4825: #else
                   4826: b_char(char *a, char *b, ftnlen blen)
                   4827: #endif
                   4828: {      int i;
                   4829:        for(i=0;i<blen && *a!=0;i++) *b++= *a++;
                   4830:        for(;i<blen;i++) *b++=' ';
                   4831: }
                   4832: #ifndef MSDOS
                   4833: #ifdef KR_headers
                   4834: long f__inode(a, dev) char *a; int *dev;
                   4835: #else
                   4836: long f__inode(char *a, int *dev)
                   4837: #endif
                   4838: {      struct stat x;
                   4839:        if(stat(a,&x)<0) return(-1);
                   4840:        *dev = x.st_dev;
                   4841:        return(x.st_ino);
                   4842: }
                   4843: #endif
                   4844: 
                   4845: #define INTBOUND sizeof(int)-1
                   4846:  VOID
                   4847: #ifdef KR_headers
                   4848: f__mvgbt(n,len,a,b) char *a,*b;
                   4849: #else
                   4850: f__mvgbt(int n, int len, char *a, char *b)
                   4851: #endif
                   4852: {      register int num=n*len;
                   4853:        if( ((int)a&INTBOUND)==0 && ((int)b&INTBOUND)==0 && (num&INTBOUND)==0 )
                   4854:        {       register int *x=(int *)a,*y=(int *)b;
                   4855:                num /= sizeof(int);
                   4856:                if(x>y) for(;num>0;num--) *y++= *x++;
                   4857:                else for(num--;num>=0;num--) *(y+num)= *(x+num);
                   4858:        }
                   4859:        else
                   4860:        {       register char *x=a,*y=b;
                   4861:                if(x>y) for(;num>0;num--) *y++= *x++;
                   4862:                else for(num--;num>=0;num--) *(y+num)= *(x+num);
                   4863:        }
                   4864: }
                   4865: ./ ADD NAME=libI77/wref.c TIME=719848233
                   4866: #include "f2c.h"
                   4867: #include "fio.h"
                   4868: #include "fmt.h"
                   4869: #include "fp.h"
                   4870: #ifndef VAX
                   4871: #include "ctype.h"
                   4872: #endif
                   4873: 
                   4874: #ifndef KR_headers
                   4875: #undef abs
                   4876: #undef min
                   4877: #undef max
                   4878: #include "stdlib.h"
                   4879: #include "string.h"
                   4880: #endif
                   4881: 
                   4882: #ifdef KR_headers
                   4883: wrt_E(p,w,d,e,len) ufloat *p; ftnlen len;
                   4884: #else
                   4885: wrt_E(ufloat *p, int w, int d, int e, ftnlen len)
                   4886: #endif
                   4887: {
                   4888:        char buf[FMAX+EXPMAXDIGS+4], *s, *se;
                   4889:        int d1, delta, e1, i, sign, signspace;
                   4890:        double dd;
                   4891: #ifndef VAX
                   4892:        int e0 = e;
                   4893: #endif
                   4894: 
                   4895:        if(e <= 0)
                   4896:                e = 2;
                   4897:        if(f__scale) {
                   4898:                if(f__scale >= d + 2 || f__scale <= -d)
                   4899:                        goto nogood;
                   4900:                }
                   4901:        if(f__scale <= 0)
                   4902:                --d;
                   4903:        if (len == sizeof(real))
                   4904:                dd = p->pf;
                   4905:        else
                   4906:                dd = p->pd;
                   4907:        if (dd < 0.) {
                   4908:                signspace = sign = 1;
                   4909:                dd = -dd;
                   4910:                }
                   4911:        else {
                   4912:                sign = 0;
                   4913:                signspace = f__cplus;
                   4914: #ifndef VAX
                   4915:                if (!dd)
                   4916:                        dd = 0.;        /* avoid -0 */
                   4917: #endif
                   4918:                }
                   4919:        delta = w - (2 /* for the . and the d adjustment above */
                   4920:                        + 2 /* for the E+ */ + signspace + d + e);
                   4921:        if (delta < 0) {
                   4922: nogood:
                   4923:                while(--w >= 0)
                   4924:                        PUT('*');
                   4925:                return(0);
                   4926:                }
                   4927:        if (f__scale < 0)
                   4928:                d += f__scale;
                   4929:        if (d > FMAX) {
                   4930:                d1 = d - FMAX;
                   4931:                d = FMAX;
                   4932:                }
                   4933:        else
                   4934:                d1 = 0;
                   4935:        sprintf(buf,"%#.*E", d, dd);
                   4936: #ifndef VAX
                   4937:        /* check for NaN, Infinity */
                   4938:        if (!isdigit(buf[0])) {
                   4939:                switch(buf[0]) {
                   4940:                        case 'n':
                   4941:                        case 'N':
                   4942:                                signspace = 0;  /* no sign for NaNs */
                   4943:                        }
                   4944:                delta = w - strlen(buf) - signspace;
                   4945:                if (delta < 0)
                   4946:                        goto nogood;
                   4947:                while(--delta >= 0)
                   4948:                        PUT(' ');
                   4949:                if (signspace)
                   4950:                        PUT(sign ? '-' : '+');
                   4951:                for(s = buf; *s; s++)
                   4952:                        PUT(*s);
                   4953:                return 0;
                   4954:                }
                   4955: #endif
                   4956:        se = buf + d + 3;
                   4957:        if (f__scale != 1 && dd)
                   4958:                sprintf(se, "%+.2d", atoi(se) + 1 - f__scale);
                   4959:        s = ++se;
                   4960:        if (e < 2) {
                   4961:                if (*s != '0')
                   4962:                        goto nogood;
                   4963:                }
                   4964: #ifndef VAX
                   4965:        /* accommodate 3 significant digits in exponent */
                   4966:        if (s[2]) {
                   4967: #ifdef Pedantic
                   4968:                if (!e0 && !s[3])
                   4969:                        for(s -= 2, e1 = 2; s[0] = s[1]; s++);
                   4970: 
                   4971:        /* Pedantic gives the behavior that Fortran 77 specifies,       */
                   4972:        /* i.e., requires that E be specified for exponent fields       */
                   4973:        /* of more than 3 digits.  With Pedantic undefined, we get      */
                   4974:        /* the behavior that Cray displays -- you get a bigger          */
                   4975:        /* exponent field if it fits.   */
                   4976: #else
                   4977:                if (!e0) {
                   4978:                        for(s -= 2, e1 = 2; s[0] = s[1]; s++)
                   4979: #ifdef CRAY
                   4980:                                delta--;
                   4981:                        if ((delta += 4) < 0)
                   4982:                                goto nogood
                   4983: #endif
                   4984:                                ;
                   4985:                        }
                   4986: #endif
                   4987:                else if (e0 >= 0)
                   4988:                        goto shift;
                   4989:                else
                   4990:                        e1 = e;
                   4991:                }
                   4992:        else
                   4993:  shift:
                   4994: #endif
                   4995:                for(s += 2, e1 = 2; *s; ++e1, ++s)
                   4996:                        if (e1 >= e)
                   4997:                                goto nogood;
                   4998:        while(--delta >= 0)
                   4999:                PUT(' ');
                   5000:        if (signspace)
                   5001:                PUT(sign ? '-' : '+');
                   5002:        s = buf;
                   5003:        i = f__scale;
                   5004:        if (f__scale <= 0) {
                   5005:                PUT('.');
                   5006:                for(; i < 0; ++i)
                   5007:                        PUT('0');
                   5008:                PUT(*s);
                   5009:                s += 2;
                   5010:                }
                   5011:        else if (f__scale > 1) {
                   5012:                PUT(*s);
                   5013:                s += 2;
                   5014:                while(--i > 0)
                   5015:                        PUT(*s++);
                   5016:                PUT('.');
                   5017:                }
                   5018:        if (d1) {
                   5019:                se -= 2;
                   5020:                while(s < se) PUT(*s++);
                   5021:                se += 2;
                   5022:                do PUT('0'); while(--d1 > 0);
                   5023:                }
                   5024:        while(s < se)
                   5025:                PUT(*s++);
                   5026:        if (e < 2)
                   5027:                PUT(s[1]);
                   5028:        else {
                   5029:                while(++e1 <= e)
                   5030:                        PUT('0');
                   5031:                while(*s)
                   5032:                        PUT(*s++);
                   5033:                }
                   5034:        return 0;
                   5035:        }
                   5036: 
                   5037: #ifdef KR_headers
                   5038: wrt_F(p,w,d,len) ufloat *p; ftnlen len;
                   5039: #else
                   5040: wrt_F(ufloat *p, int w, int d, ftnlen len)
                   5041: #endif
                   5042: {
                   5043:        int d1, sign, n;
                   5044:        double x;
                   5045:        char *b, buf[MAXINTDIGS+MAXFRACDIGS+4], *s;
                   5046: 
                   5047:        x= (len==sizeof(real)?p->pf:p->pd);
                   5048:        if (d < MAXFRACDIGS)
                   5049:                d1 = 0;
                   5050:        else {
                   5051:                d1 = d - MAXFRACDIGS;
                   5052:                d = MAXFRACDIGS;
                   5053:                }
                   5054:        if (x < 0.)
                   5055:                { x = -x; sign = 1; }
                   5056:        else {
                   5057:                sign = 0;
                   5058: #ifndef VAX
                   5059:                if (!x)
                   5060:                        x = 0.;
                   5061: #endif
                   5062:                }
                   5063: 
                   5064:        if (n = f__scale)
                   5065:                if (n > 0)
                   5066:                        do x *= 10.; while(--n > 0);
                   5067:                else
                   5068:                        do x *= 0.1; while(++n < 0);
                   5069: 
                   5070: #ifdef USE_STRLEN
                   5071:        sprintf(b = buf, "%#.*f", d, x);
                   5072:        n = strlen(b) + d1;
                   5073: #else
                   5074:        n = sprintf(b = buf, "%#.*f", d, x) + d1;
                   5075: #endif
                   5076: 
                   5077:        if (buf[0] == '0' && d)
                   5078:                { ++b; --n; }
                   5079:        if (sign) {
                   5080:                /* check for all zeros */
                   5081:                for(s = b;;) {
                   5082:                        while(*s == '0') s++;
                   5083:                        switch(*s) {
                   5084:                                case '.':
                   5085:                                        s++; continue;
                   5086:                                case 0:
                   5087:                                        sign = 0;
                   5088:                                }
                   5089:                        break;
                   5090:                        }
                   5091:                }
                   5092:        if (sign || f__cplus)
                   5093:                ++n;
                   5094:        if (n > w) {
                   5095:                while(--w >= 0)
                   5096:                        PUT('*');
                   5097:                return 0;
                   5098:                }
                   5099:        for(w -= n; --w >= 0; )
                   5100:                PUT(' ');
                   5101:        if (sign)
                   5102:                PUT('-');
                   5103:        else if (f__cplus)
                   5104:                PUT('+');
                   5105:        while(n = *b++)
                   5106:                PUT(n);
                   5107:        while(--d1 >= 0)
                   5108:                PUT('0');
                   5109:        return 0;
                   5110:        }
                   5111: ./ ADD NAME=libI77/wrtfmt.c TIME=719848233
                   5112: #include "f2c.h"
                   5113: #include "fio.h"
                   5114: #include "fmt.h"
                   5115: extern int f__cursor;
                   5116: #ifdef KR_headers
                   5117: extern char *f__icvt();
                   5118: #else
                   5119: extern char *f__icvt(long, int*, int*, int);
                   5120: #endif
                   5121: int f__hiwater;
                   5122: icilist *f__svic;
                   5123: char *f__icptr;
                   5124: mv_cur(Void)   /* shouldn't use fseek because it insists on calling fflush */
                   5125:                /* instead we know too much about stdio */
                   5126: {
                   5127:        if(f__external == 0) {
                   5128:                if(f__cursor < 0) {
                   5129:                        if(f__hiwater < f__recpos)
                   5130:                                f__hiwater = f__recpos;
                   5131:                        f__recpos += f__cursor;
                   5132:                        f__icptr += f__cursor;
                   5133:                        f__cursor = 0;
                   5134:                        if(f__recpos < 0)
                   5135:                                err(f__elist->cierr, 110, "left off");
                   5136:                }
                   5137:                else if(f__cursor > 0) {
                   5138:                        if(f__recpos + f__cursor >= f__svic->icirlen)
                   5139:                                err(f__elist->cierr, 110, "recend");
                   5140:                        if(f__hiwater <= f__recpos)
                   5141:                                for(; f__cursor > 0; f__cursor--)
                   5142:                                        (*f__putn)(' ');
                   5143:                        else if(f__hiwater <= f__recpos + f__cursor) {
                   5144:                                f__cursor -= f__hiwater - f__recpos;
                   5145:                                f__icptr += f__hiwater - f__recpos;
                   5146:                                f__recpos = f__hiwater;
                   5147:                                for(; f__cursor > 0; f__cursor--)
                   5148:                                        (*f__putn)(' ');
                   5149:                        }
                   5150:                        else {
                   5151:                                f__icptr += f__cursor;
                   5152:                                f__recpos += f__cursor;
                   5153:                        }
                   5154:                        f__cursor = 0;
                   5155:                }
                   5156:                return(0);
                   5157:        }
                   5158:        if(f__cursor > 0) {
                   5159:                if(f__hiwater <= f__recpos)
                   5160:                        for(;f__cursor>0;f__cursor--) (*f__putn)(' ');
                   5161:                else if(f__hiwater <= f__recpos + f__cursor) {
                   5162: #ifndef NON_UNIX_STDIO
                   5163:                        if(f__cf->_ptr + f__hiwater - f__recpos < buf_end(f__cf))
                   5164:                                f__cf->_ptr += f__hiwater - f__recpos;
                   5165:                        else
                   5166: #endif
                   5167:                                (void) fseek(f__cf, (long) (f__hiwater - f__recpos), SEEK_CUR);
                   5168:                        f__cursor -= f__hiwater - f__recpos;
                   5169:                        f__recpos = f__hiwater;
                   5170:                        for(; f__cursor > 0; f__cursor--)
                   5171:                                (*f__putn)(' ');
                   5172:                }
                   5173:                else {
                   5174: #ifndef NON_UNIX_STDIO
                   5175:                        if(f__cf->_ptr + f__cursor < buf_end(f__cf))
                   5176:                                f__cf->_ptr += f__cursor;
                   5177:                        else
                   5178: #endif
                   5179:                                (void) fseek(f__cf, (long)f__cursor, SEEK_CUR);
                   5180:                        f__recpos += f__cursor;
                   5181:                }
                   5182:        }
                   5183:        if(f__cursor<0)
                   5184:        {
                   5185:                if(f__cursor+f__recpos<0) err(f__elist->cierr,110,"left off");
                   5186: #ifndef NON_UNIX_STDIO
                   5187:                if(f__cf->_ptr + f__cursor >= f__cf->_base)
                   5188:                        f__cf->_ptr += f__cursor;
                   5189:                else
                   5190: #endif
                   5191:                if(f__curunit && f__curunit->useek)
                   5192:                        (void) fseek(f__cf,(long)f__cursor,SEEK_CUR);
                   5193:                else
                   5194:                        err(f__elist->cierr,106,"fmt");
                   5195:                if(f__hiwater < f__recpos)
                   5196:                        f__hiwater = f__recpos;
                   5197:                f__recpos += f__cursor;
                   5198:                f__cursor=0;
                   5199:        }
                   5200:        return(0);
                   5201: }
                   5202: 
                   5203:  static int
                   5204: #ifdef KR_headers
                   5205: wrt_Z(n,w,minlen,len) Uint *n; int w, minlen; ftnlen len;
                   5206: #else
                   5207: wrt_Z(Uint *n, int w, int minlen, ftnlen len)
                   5208: #endif
                   5209: {
                   5210:        register char *s, *se;
                   5211:        register i, w1;
                   5212:        static int one = 1;
                   5213:        static char hex[] = "0123456789ABCDEF";
                   5214:        s = (char *)n;
                   5215:        --len;
                   5216:        if (*(char *)&one) {
                   5217:                /* little endian */
                   5218:                se = s;
                   5219:                s += len;
                   5220:                i = -1;
                   5221:                }
                   5222:        else {
                   5223:                se = s + len;
                   5224:                i = 1;
                   5225:                }
                   5226:        for(;; s += i, w1 += 2)
                   5227:                if (s == se || *s)
                   5228:                        break;
                   5229:        w1 = (i*(se-s) << 1) + 1;
                   5230:        if (*s & 0xf0)
                   5231:                w1++;
                   5232:        if (w1 > w)
                   5233:                for(i = 0; i < w; i++)
                   5234:                        (*f__putn)('*');
                   5235:        else {
                   5236:                if ((minlen -= w1) > 0)
                   5237:                        w1 += minlen;
                   5238:                while(--w >= w1)
                   5239:                        (*f__putn)(' ');
                   5240:                while(--minlen >= 0)
                   5241:                        (*f__putn)('0');
                   5242:                if (!(*s & 0xf0)) {
                   5243:                        (*f__putn)(hex[*s & 0xf]);
                   5244:                        if (s == se)
                   5245:                                return 0;
                   5246:                        s += i;
                   5247:                        }
                   5248:                for(;; s += i) {
                   5249:                        (*f__putn)(hex[*s >> 4 & 0xf]);
                   5250:                        (*f__putn)(hex[*s & 0xf]);
                   5251:                        if (s == se)
                   5252:                                break;
                   5253:                        }
                   5254:                }
                   5255:        return 0;
                   5256:        }
                   5257: 
                   5258:  static int
                   5259: #ifdef KR_headers
                   5260: wrt_I(n,w,len, base) Uint *n; ftnlen len; register int base;
                   5261: #else
                   5262: wrt_I(Uint *n, int w, ftnlen len, register int base)
                   5263: #endif
                   5264: {      int ndigit,sign,spare,i;
                   5265:        long x;
                   5266:        char *ans;
                   5267:        if(len==sizeof(integer)) x=n->il;
                   5268:        else if(len == sizeof(char)) x = n->ic;
                   5269:        else x=n->is;
                   5270:        ans=f__icvt(x,&ndigit,&sign, base);
                   5271:        spare=w-ndigit;
                   5272:        if(sign || f__cplus) spare--;
                   5273:        if(spare<0)
                   5274:                for(i=0;i<w;i++) (*f__putn)('*');
                   5275:        else
                   5276:        {       for(i=0;i<spare;i++) (*f__putn)(' ');
                   5277:                if(sign) (*f__putn)('-');
                   5278:                else if(f__cplus) (*f__putn)('+');
                   5279:                for(i=0;i<ndigit;i++) (*f__putn)(*ans++);
                   5280:        }
                   5281:        return(0);
                   5282: }
                   5283:  static int
                   5284: #ifdef KR_headers
                   5285: wrt_IM(n,w,m,len,base) Uint *n; ftnlen len; int base;
                   5286: #else
                   5287: wrt_IM(Uint *n, int w, int m, ftnlen len, int base)
                   5288: #endif
                   5289: {      int ndigit,sign,spare,i,xsign;
                   5290:        long x;
                   5291:        char *ans;
                   5292:        if(sizeof(integer)==len) x=n->il;
                   5293:        else if(len == sizeof(char)) x = n->ic;
                   5294:        else x=n->is;
                   5295:        ans=f__icvt(x,&ndigit,&sign, base);
                   5296:        if(sign || f__cplus) xsign=1;
                   5297:        else xsign=0;
                   5298:        if(ndigit+xsign>w || m+xsign>w)
                   5299:        {       for(i=0;i<w;i++) (*f__putn)('*');
                   5300:                return(0);
                   5301:        }
                   5302:        if(x==0 && m==0)
                   5303:        {       for(i=0;i<w;i++) (*f__putn)(' ');
                   5304:                return(0);
                   5305:        }
                   5306:        if(ndigit>=m)
                   5307:                spare=w-ndigit-xsign;
                   5308:        else
                   5309:                spare=w-m-xsign;
                   5310:        for(i=0;i<spare;i++) (*f__putn)(' ');
                   5311:        if(sign) (*f__putn)('-');
                   5312:        else if(f__cplus) (*f__putn)('+');
                   5313:        for(i=0;i<m-ndigit;i++) (*f__putn)('0');
                   5314:        for(i=0;i<ndigit;i++) (*f__putn)(*ans++);
                   5315:        return(0);
                   5316: }
                   5317:  static int
                   5318: #ifdef KR_headers
                   5319: wrt_AP(s) char *s;
                   5320: #else
                   5321: wrt_AP(char *s)
                   5322: #endif
                   5323: {      char quote;
                   5324:        if(f__cursor && mv_cur()) return(mv_cur());
                   5325:        quote = *s++;
                   5326:        for(;*s;s++)
                   5327:        {       if(*s!=quote) (*f__putn)(*s);
                   5328:                else if(*++s==quote) (*f__putn)(*s);
                   5329:                else return(1);
                   5330:        }
                   5331:        return(1);
                   5332: }
                   5333:  static int
                   5334: #ifdef KR_headers
                   5335: wrt_H(a,s) char *s;
                   5336: #else
                   5337: wrt_H(int a, char *s)
                   5338: #endif
                   5339: {
                   5340:        if(f__cursor && mv_cur()) return(mv_cur());
                   5341:        while(a--) (*f__putn)(*s++);
                   5342:        return(1);
                   5343: }
                   5344: #ifdef KR_headers
                   5345: wrt_L(n,len, sz) Uint *n; ftnlen sz;
                   5346: #else
                   5347: wrt_L(Uint *n, int len, ftnlen sz)
                   5348: #endif
                   5349: {      int i;
                   5350:        long x;
                   5351:        if(sizeof(long)==sz) x=n->il;
                   5352:        else if(sz == sizeof(char)) x = n->ic;
                   5353:        else x=n->is;
                   5354:        for(i=0;i<len-1;i++)
                   5355:                (*f__putn)(' ');
                   5356:        if(x) (*f__putn)('T');
                   5357:        else (*f__putn)('F');
                   5358:        return(0);
                   5359: }
                   5360:  static int
                   5361: #ifdef KR_headers
                   5362: wrt_A(p,len) char *p; ftnlen len;
                   5363: #else
                   5364: wrt_A(char *p, ftnlen len)
                   5365: #endif
                   5366: {
                   5367:        while(len-- > 0) (*f__putn)(*p++);
                   5368:        return(0);
                   5369: }
                   5370:  static int
                   5371: #ifdef KR_headers
                   5372: wrt_AW(p,w,len) char * p; ftnlen len;
                   5373: #else
                   5374: wrt_AW(char * p, int w, ftnlen len)
                   5375: #endif
                   5376: {
                   5377:        while(w>len)
                   5378:        {       w--;
                   5379:                (*f__putn)(' ');
                   5380:        }
                   5381:        while(w-- > 0)
                   5382:                (*f__putn)(*p++);
                   5383:        return(0);
                   5384: }
                   5385: 
                   5386:  static int
                   5387: #ifdef KR_headers
                   5388: wrt_G(p,w,d,e,len) ufloat *p; ftnlen len;
                   5389: #else
                   5390: wrt_G(ufloat *p, int w, int d, int e, ftnlen len)
                   5391: #endif
                   5392: {      double up = 1,x;
                   5393:        int i,oldscale=f__scale,n,j;
                   5394:        x= len==sizeof(real)?p->pf:p->pd;
                   5395:        if(x < 0 ) x = -x;
                   5396:        if(x<.1) return(wrt_E(p,w,d,e,len));
                   5397:        for(i=0;i<=d;i++,up*=10)
                   5398:        {       if(x>=up) continue;
                   5399:                f__scale=0;
                   5400:                if(e==0) n=4;
                   5401:                else    n=e+2;
                   5402:                i=wrt_F(p,w-n,d-i,len);
                   5403:                for(j=0;j<n;j++) (*f__putn)(' ');
                   5404:                f__scale=oldscale;
                   5405:                return(i);
                   5406:        }
                   5407:        return(wrt_E(p,w,d,e,len));
                   5408: }
                   5409: #ifdef KR_headers
                   5410: w_ed(p,ptr,len) struct f__syl *p; char *ptr; ftnlen len;
                   5411: #else
                   5412: w_ed(struct f__syl *p, char *ptr, ftnlen len)
                   5413: #endif
                   5414: {
                   5415:        if(f__cursor && mv_cur()) return(mv_cur());
                   5416:        switch(p->op)
                   5417:        {
                   5418:        default:
                   5419:                fprintf(stderr,"w_ed, unexpected code: %d\n", p->op);
                   5420:                sig_die(f__fmtbuf, 1);
                   5421:        case I: return(wrt_I((Uint *)ptr,p->p1,len, 10));
                   5422:        case IM:
                   5423:                return(wrt_IM((Uint *)ptr,p->p1,p->p2,len,10));
                   5424: 
                   5425:                /* O and OM don't work right for character, double, complex, */
                   5426:                /* or doublecomplex, and they differ from Fortran 90 in */
                   5427:                /* showing a minus sign for negative values. */
                   5428: 
                   5429:        case O: return(wrt_I((Uint *)ptr, p->p1, len, 8));
                   5430:        case OM:
                   5431:                return(wrt_IM((Uint *)ptr,p->p1,p->p2,len,8));
                   5432:        case L: return(wrt_L((Uint *)ptr,p->p1, len));
                   5433:        case A: return(wrt_A(ptr,len));
                   5434:        case AW:
                   5435:                return(wrt_AW(ptr,p->p1,len));
                   5436:        case D:
                   5437:        case E:
                   5438:        case EE:
                   5439:                return(wrt_E((ufloat *)ptr,p->p1,p->p2,p->p3,len));
                   5440:        case G:
                   5441:        case GE:
                   5442:                return(wrt_G((ufloat *)ptr,p->p1,p->p2,p->p3,len));
                   5443:        case F: return(wrt_F((ufloat *)ptr,p->p1,p->p2,len));
                   5444: 
                   5445:                /* Z and ZM assume 8-bit bytes. */
                   5446: 
                   5447:        case Z: return(wrt_Z((Uint *)ptr,p->p1,0,len));
                   5448:        case ZM:
                   5449:                return(wrt_Z((Uint *)ptr,p->p1,p->p2,len));
                   5450:        }
                   5451: }
                   5452: #ifdef KR_headers
                   5453: w_ned(p) struct f__syl *p;
                   5454: #else
                   5455: w_ned(struct f__syl *p)
                   5456: #endif
                   5457: {
                   5458:        switch(p->op)
                   5459:        {
                   5460:        default: fprintf(stderr,"w_ned, unexpected code: %d\n", p->op);
                   5461:                sig_die(f__fmtbuf, 1);
                   5462:        case SLASH:
                   5463:                return((*f__donewrec)());
                   5464:        case T: f__cursor = p->p1-f__recpos - 1;
                   5465:                return(1);
                   5466:        case TL: f__cursor -= p->p1;
                   5467:                if(f__cursor < -f__recpos)      /* TL1000, 1X */
                   5468:                        f__cursor = -f__recpos;
                   5469:                return(1);
                   5470:        case TR:
                   5471:        case X:
                   5472:                f__cursor += p->p1;
                   5473:                return(1);
                   5474:        case APOS:
                   5475:                return(wrt_AP(*(char **)&p->p2));
                   5476:        case H:
                   5477:                return(wrt_H(p->p1,*(char **)&p->p2));
                   5478:        }
                   5479: }
                   5480: ./ ADD NAME=libI77/wsfe.c TIME=719848233
                   5481: /*write sequential formatted external*/
                   5482: #include "f2c.h"
                   5483: #include "fio.h"
                   5484: #include "fmt.h"
                   5485: extern int f__hiwater;
                   5486: 
                   5487: #ifdef KR_headers
                   5488: x_putc(c)
                   5489: #else
                   5490: x_putc(int c)
                   5491: #endif
                   5492: {
                   5493:        /* this uses \n as an indicator of record-end */
                   5494:        if(c == '\n' && f__recpos < f__hiwater) {       /* fseek calls fflush, a loss */
                   5495: #ifndef NON_UNIX_STDIO
                   5496:                if(f__cf->_ptr + f__hiwater - f__recpos < buf_end(f__cf))
                   5497:                        f__cf->_ptr += f__hiwater - f__recpos;
                   5498:                else
                   5499: #endif
                   5500:                        (void) fseek(f__cf, (long)(f__hiwater - f__recpos), SEEK_CUR);
                   5501:        }
                   5502:        f__recpos++;
                   5503:        return putc(c,f__cf);
                   5504: }
                   5505: x_wSL(Void)
                   5506: {
                   5507:        (*f__putn)('\n');
                   5508:        f__recpos=0;
                   5509:        f__cursor = 0;
                   5510:        f__hiwater = 0;
                   5511:        return(1);
                   5512: }
                   5513: xw_end(Void)
                   5514: {
                   5515:        if(f__nonl == 0)
                   5516:                (*f__putn)('\n');
                   5517:        f__hiwater = f__recpos = f__cursor = 0;
                   5518:        return(0);
                   5519: }
                   5520: xw_rev(Void)
                   5521: {
                   5522:        if(f__workdone) (*f__putn)('\n');
                   5523:        f__hiwater = f__recpos = f__cursor = 0;
                   5524:        return(f__workdone=0);
                   5525: }
                   5526: 
                   5527: #ifdef KR_headers
                   5528: integer s_wsfe(a) cilist *a;   /*start*/
                   5529: #else
                   5530: integer s_wsfe(cilist *a)      /*start*/
                   5531: #endif
                   5532: {      int n;
                   5533:        if(!f__init) f_init();
                   5534:        if(n=c_sfe(a)) return(n);
                   5535:        f__reading=0;
                   5536:        f__sequential=1;
                   5537:        f__formatted=1;
                   5538:        f__external=1;
                   5539:        f__elist=a;
                   5540:        f__hiwater = f__cursor=f__recpos=0;
                   5541:        f__nonl = 0;
                   5542:        f__scale=0;
                   5543:        f__fmtbuf=a->cifmt;
                   5544:        f__curunit = &f__units[a->ciunit];
                   5545:        f__cf=f__curunit->ufd;
                   5546:        if(pars_f(f__fmtbuf)<0) err(a->cierr,100,"startio");
                   5547:        f__putn= x_putc;
                   5548:        f__doed= w_ed;
                   5549:        f__doned= w_ned;
                   5550:        f__doend=xw_end;
                   5551:        f__dorevert=xw_rev;
                   5552:        f__donewrec=x_wSL;
                   5553:        fmt_bg();
                   5554:        f__cplus=0;
                   5555:        f__cblank=f__curunit->ublnk;
                   5556:        if(f__curunit->uwrt != 1 && f__nowwriting(f__curunit))
                   5557:                err(a->cierr,errno,"write start");
                   5558:        return(0);
                   5559: }
                   5560: ./ ADD NAME=libI77/wsle.c TIME=719848233
                   5561: #include "f2c.h"
                   5562: #include "fio.h"
                   5563: #include "fmt.h"
                   5564: #include "lio.h"
                   5565: 
                   5566: #ifdef KR_headers
                   5567: integer s_wsle(a) cilist *a;
                   5568: #else
                   5569: integer s_wsle(cilist *a)
                   5570: #endif
                   5571: {
                   5572:        int n;
                   5573:        if(!f__init) f_init();
                   5574:        if(n=c_le(a)) return(n);
                   5575:        f__reading=0;
                   5576:        f__external=1;
                   5577:        f__formatted=1;
                   5578:        f__putn = t_putc;
                   5579:        f__lioproc = l_write;
                   5580:        L_len = LINE;
                   5581:        f__donewrec = x_wSL;
                   5582:        if(f__curunit->uwrt != 1 && f__nowwriting(f__curunit))
                   5583:                err(a->cierr, errno, "list output start");
                   5584:        return(0);
                   5585:        }
                   5586: 
                   5587: integer e_wsle(Void)
                   5588: {
                   5589:        t_putc('\n');
                   5590:        f__recpos=0;
                   5591:        if (f__cf == stdout)
                   5592:                fflush(stdout);
                   5593:        else if (f__cf == stderr)
                   5594:                fflush(stderr);
                   5595:        return(0);
                   5596:        }
                   5597: ./ ADD NAME=libI77/wsne.c TIME=719848234
                   5598: #include "f2c.h"
                   5599: #include "fio.h"
                   5600: #include "lio.h"
                   5601: 
                   5602:  integer
                   5603: #ifdef KR_headers
                   5604: s_wsne(a) cilist *a;
                   5605: #else
                   5606: s_wsne(cilist *a)
                   5607: #endif
                   5608: {
                   5609:        int n;
                   5610:        extern integer e_wsle(Void);
                   5611: 
                   5612:        if(!f__init)
                   5613:                f_init();
                   5614:        if(n=c_le(a))
                   5615:                return(n);
                   5616:        f__reading=0;
                   5617:        f__external=1;
                   5618:        f__formatted=1;
                   5619:        f__putn = t_putc;
                   5620:        L_len = LINE;
                   5621:        f__donewrec = x_wSL;
                   5622:        if(f__curunit->uwrt != 1 && f__nowwriting(f__curunit))
                   5623:                err(a->cierr, errno, "namelist output start");
                   5624:        x_wsne(a);
                   5625:        return e_wsle();
                   5626:        }
                   5627: ./ ADD NAME=libI77/xwsne.c TIME=719848234
                   5628: #include "f2c.h"
                   5629: #include "fio.h"
                   5630: #include "lio.h"
                   5631: #include "fmt.h"
                   5632: 
                   5633: #ifdef KR_headers
                   5634: x_wsne(a) cilist *a;
                   5635: #else
                   5636: #include "string.h"
                   5637: 
                   5638:  VOID
                   5639: x_wsne(cilist *a)
                   5640: #endif
                   5641: {
                   5642:        Namelist *nl;
                   5643:        char *s;
                   5644:        Vardesc *v, **vd, **vde;
                   5645:        ftnint *number, type;
                   5646:        ftnlen *dims;
                   5647:        ftnlen size;
                   5648:        static ftnint one = 1;
                   5649:        extern ftnlen f__typesize[];
                   5650: 
                   5651:        nl = (Namelist *)a->cifmt;
                   5652:        PUT('&');
                   5653:        for(s = nl->name; *s; s++)
                   5654:                PUT(*s);
                   5655:        PUT(' ');
                   5656:        vd = nl->vars;
                   5657:        vde = vd + nl->nvars;
                   5658:        while(vd < vde) {
                   5659:                v = *vd++;
                   5660:                s = v->name;
                   5661:                if (f__recpos+strlen(s)+2 >= L_len)
                   5662:                        (*f__donewrec)();
                   5663:                while(*s)
                   5664:                        PUT(*s++);
                   5665:                PUT(' ');
                   5666:                PUT('=');
                   5667:                number = (dims = v->dims) ? dims + 1 : &one;
                   5668:                type = v->type;
                   5669:                if (type < 0) {
                   5670:                        size = -type;
                   5671:                        type = TYCHAR;
                   5672:                        }
                   5673:                else
                   5674:                        size = f__typesize[type];
                   5675:                l_write(number, v->addr, size, type);
                   5676:                if (vd < vde) {
                   5677:                        if (f__recpos+2 >= L_len)
                   5678:                                (*f__donewrec)();
                   5679:                        PUT(',');
                   5680:                        PUT(' ');
                   5681:                        }
                   5682:                else if (f__recpos+1 >= L_len)
                   5683:                        (*f__donewrec)();
                   5684:                }
                   5685:        PUT('/');
                   5686:        }
                   5687: ./ ENDUP

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.