Annotation of researchv10no/cmd/f2c/libI77.st, revision 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.