Annotation of researchv10no/cmd/f2c/I77a.st, revision 1.1

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

unix.superglobalmegacorp.com

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