|
|
1.1 ! root 1: ./ ADD NAME=libI77/README TIME=627747849 ! 2: If your system lacks /usr/include/local.h , ! 3: then you should create an appropriate local.h in ! 4: this directory. An appropriate local.h may simply ! 5: be empty, or it may #define VAX or #define CRAY ! 6: (or whatever else you must do to make fp.h work right). ! 7: Alternatively, edit fp.h to suite your machine. ! 8: ! 9: If your system's sprintf does not work the way ANSI C ! 10: specifies -- specifically, if it does not return the ! 11: number of characters transmitted -- then insert the line ! 12: ! 13: #define USE_STRLEN ! 14: ! 15: at the beginning of wref.c . This is necessary with ! 16: at least some versions of Sun software. ! 17: ! 18: If you get error messages about references to cf->_ptr ! 19: and cf->_base when compiling wrtfmt.c and wsfe.c or to ! 20: stderr->_flag when compiling err.c, then insert the line ! 21: ! 22: #define NON_UNIX_STDIO ! 23: ! 24: at the beginning of fio.h, and recompile these modules. ! 25: ! 26: You may need to supply the following non-ANSI routines: ! 27: ! 28: access(char *Name, 0) is supposed to return 0 ! 29: if file Name exists, nonzero otherwise. ! 30: ! 31: fstat(int fileds, struct stat *buf) is similar ! 32: to stat(char *name, struct stat *buf), except that ! 33: the first argument, fileds, is the file descriptor ! 34: returned by open rather than the name of the file. ! 35: fstat is used in the system-dependent routine ! 36: canseek (in the libI77 source file err.c), which ! 37: is supposed to return 1 if it's possible to issue ! 38: seeks on the file in question, 0 if it's not; you may ! 39: need to suitably modify err.c ! 40: ! 41: char * mktemp(char *buf) is supposed to replace the ! 42: 6 trailing X's in buf with a unique number and then ! 43: return buf. The idea is to get a unique name for ! 44: a temporary file. ! 45: ./ ADD NAME=libI77/makefile TIME=628988590 ! 46: .SUFFIXES: .c .o ! 47: ! 48: CFLAGS =-I. -O ! 49: ! 50: # compile, then strip unnecessary symbols ! 51: .c.o: ! 52: cc $(CFLAGS) -c $*.c ! 53: ld -r -x $*.o ! 54: mv a.out $*.o ! 55: ! 56: OBJ = Version.o backspace.o dfe.o due.o iio.o inquire.o rewind.o rsfe.o \ ! 57: rdfmt.o sue.o uio.o wsfe.o sfe.o fmt.o lio.o lread.o open.o \ ! 58: close.o util.o endfile.o wrtfmt.o wref.o err.o fmtlib.o ! 59: ! 60: libI77.a: $(OBJ) ! 61: ar r libI77.a $? ! 62: ranlib libI77.a ! 63: install: libI77.a ! 64: cp libI77.a /usr/lib/libI77.a ! 65: ranlib /usr/lib/libI77.a ! 66: ! 67: lio.o: lio.h ! 68: SRC= lio.h fio.h fmt.h backspace.c dfe.c due.c iio.c inquire.c rewind.c \ ! 69: rsfe.c rdfmt.c sue.c uio.c wsfe.c sfe.c fmt.c lio.c lread.c open.c \ ! 70: close.c util.c endfile.c wrtfmt.c wref.c err.c fmtlib.c ! 71: ! 72: Version.o: Version.c ! 73: cc -c Version.c ! 74: ! 75: ! 76: clean: ! 77: rm -f $(OBJ) libI77.a ! 78: ! 79: clobber: clean ! 80: rm -f libI77.a ! 81: ! 82: backspace.o: fio.h ! 83: close.o: fio.h ! 84: dfe.o: fio.h ! 85: dfe.o: fmt.h ! 86: due.o: fio.h ! 87: endfile.o: fio.h ! 88: err.o: fio.h ! 89: fmt.o: fio.h ! 90: fmt.o: fmt.h ! 91: ftest.o: fio.h ! 92: iio.o: fio.h ! 93: iio.o: fmt.h ! 94: inquire.o: fio.h ! 95: lib.o: fio.h ! 96: lio.o: fio.h ! 97: lio.o: fmt.h ! 98: lio.o: lio.h ! 99: lread.o: fio.h ! 100: lread.o: fmt.h ! 101: lread.o: lio.h ! 102: lread.o: fp.h ! 103: nio.o: fio.h ! 104: nio.o: fmt.h ! 105: nio.o: lio.h ! 106: open.o: fio.h ! 107: rdfmt.o: fio.h ! 108: rdfmt.o: fmt.h ! 109: rdfmt.o: fp.h ! 110: rewind.o: fio.h ! 111: rsfe.o: fio.h ! 112: rsfe.o: fmt.h ! 113: sfe.o: fio.h ! 114: stest.o: fio.h ! 115: sue.o: fio.h ! 116: uio.o: fio.h ! 117: util.o: fio.h ! 118: wref.o: fio.h fmt.h fp.h ! 119: wrtfmt.o: fio.h ! 120: wrtfmt.o: fmt.h ! 121: wsfe.o: fio.h ! 122: wsfe.o: fmt.h ! 123: namelist.o: fio.h lio.h ! 124: ./ ADD NAME=libI77/Version.c TIME=628965828 ! 125: static char junk[] = "\n@(#) LIBI77 VERSION pjw,dmg-mods 6 Dec. 1989\n"; ! 126: ! 127: /* ! 128: 2.01 $ format added ! 129: 2.02 Coding bug in open.c repaired ! 130: 2.03 fixed bugs in lread.c (read * with negative f-format) and lio.c ! 131: and lio.h (e-format conforming to spec) ! 132: 2.04 changed open.c and err.c (fopen and freopen respectively) to ! 133: update to new c-library (append mode) ! 134: 2.05 added namelist capability ! 135: */ ! 136: ! 137: /* ! 138: close.c: ! 139: allow upper-case STATUS= values ! 140: endfile.c ! 141: create fort.nnn if unit nnn not open; ! 142: else if (file length == 0) use creat() rather than copy; ! 143: use local copy() rather than forking /bin/cp; ! 144: rewind, fseek to clear buffer (for no reading past EOF) ! 145: err.c ! 146: use neither setbuf nor setvbuf; make stderr buffered ! 147: fio.h ! 148: #define _bufend ! 149: inquire.c ! 150: upper case responses; ! 151: omit byfile test from SEQUENTIAL= ! 152: answer "YES" to DIRECT= for unopened file (open to debate) ! 153: lio.c ! 154: flush stderr, stdout at end of each stmt ! 155: space before character strings in list output only at line start ! 156: lio.h ! 157: adjust LEW, LED consistent with old libI77 ! 158: lread.c ! 159: use atof() ! 160: allow "nnn*," when reading complex constants ! 161: open.c ! 162: try opening for writing when open for read fails, with ! 163: special uwrt value (2) delaying creat() to first write; ! 164: set curunit so error messages don't drop core; ! 165: no file name ==> fort.nnn except for STATUS='SCRATCH' ! 166: rdfmt.c ! 167: use atof(); trust EOF == end-of-file (so don't read past ! 168: end-of-file after endfile stmt) ! 169: sfe.c ! 170: flush stderr, stdout at end of each stmt ! 171: wrtfmt.c: ! 172: use upper case ! 173: put wrt_E and wrt_F into wref.c, use sprintf() ! 174: rather than ecvt() and fcvt() [more accurate on VAX] ! 175: */ ! 176: ! 177: /* 16 Oct. 1988: uwrt = 3 after write, rewind, so close won't zap the file. */ ! 178: ! 179: /* 10 July 1989: change _bufend to buf_end in fio.h, wsfe.c, wrtfmt.c */ ! 180: ! 181: /* 28 Nov. 1989: corrections for IEEE and Cray arithmetic */ ! 182: /* 29 Nov. 1989: change various int return types to long for f2c */ ! 183: /* 30 Nov. 1989: various types from f2c.h */ ! 184: /* 6 Dec. 1989: types corrected various places */ ! 185: ./ ADD NAME=libI77/backspace.c TIME=628440563 ! 186: #include "f2c.h" ! 187: #include "fio.h" ! 188: integer f_back(a) alist *a; ! 189: { unit *b; ! 190: int n,i; ! 191: long x; ! 192: char buf[32]; ! 193: if(a->aunit >= MXUNIT || a->aunit < 0) ! 194: err(a->aerr,101,"backspace") ! 195: b= &units[a->aunit]; ! 196: if(b->useek==0) err(a->aerr,106,"backspace") ! 197: if(b->ufd==NULL) { ! 198: fk_open(1, 1, a->aunit); ! 199: return(0); ! 200: } ! 201: if(b->uend==1) ! 202: { b->uend=0; ! 203: return(0); ! 204: } ! 205: if(b->uwrt) { ! 206: (void) t_runc(a); ! 207: if (nowreading(b)) ! 208: err(a->aerr,errno,"backspace") ! 209: } ! 210: if(b->url>0) ! 211: { long y; ! 212: x=ftell(b->ufd); ! 213: y = x % b->url; ! 214: if(y == 0) x--; ! 215: x /= b->url; ! 216: x *= b->url; ! 217: (void) fseek(b->ufd,x,0); ! 218: return(0); ! 219: } ! 220: ! 221: if(b->ufmt==0) ! 222: { (void) fseek(b->ufd,-(long)sizeof(int),1); ! 223: (void) fread((char *)&n,sizeof(int),1,b->ufd); ! 224: (void) fseek(b->ufd,-(long)n-2*sizeof(int),1); ! 225: return(0); ! 226: } ! 227: for(;;) ! 228: { long y; ! 229: y = x=ftell(b->ufd); ! 230: if(x<sizeof(buf)) x=0; ! 231: else x -= sizeof(buf); ! 232: (void) fseek(b->ufd,x,0); ! 233: n=fread(buf,1,(int)(y-x), b->ufd); ! 234: for(i=n-2;i>=0;i--) ! 235: { ! 236: if(buf[i]!='\n') continue; ! 237: (void) fseek(b->ufd,(long)(i+1-n),1); ! 238: return(0); ! 239: } ! 240: if(x==0) ! 241: { ! 242: (void) fseek(b->ufd, 0L, 0); ! 243: return(0); ! 244: } ! 245: else if(n<=0) err(a->aerr,(EOF),"backspace") ! 246: (void) fseek(b->ufd, x, 0); ! 247: } ! 248: } ! 249: ./ ADD NAME=libI77/close.c TIME=628440563 ! 250: #include "f2c.h" ! 251: #include "fio.h" ! 252: integer f_clos(a) cllist *a; ! 253: { unit *b; ! 254: if(a->cunit >= MXUNIT) return(0); ! 255: b= &units[a->cunit]; ! 256: if(b->ufd==NULL) return(0); ! 257: b->uend=0; ! 258: if(a->csta!=0) ! 259: switch(*a->csta) ! 260: { ! 261: default: ! 262: keep: ! 263: case 'k': ! 264: case 'K': ! 265: if(b->uwrt == 1) (void) t_runc((alist *)a); ! 266: (void) fclose(b->ufd); /* sys 5 has strange beliefs */ ! 267: if(b->ufnm!=0) free(b->ufnm); ! 268: b->ufnm=NULL; ! 269: b->ufd=NULL; ! 270: return(0); ! 271: case 'd': ! 272: case 'D': ! 273: delete: ! 274: (void) fclose(b->ufd); ! 275: if(b->ufnm!=0) ! 276: { (void) unlink(b->ufnm); /*SYSDEP*/ ! 277: free(b->ufnm); ! 278: } ! 279: b->ufnm=NULL; ! 280: b->ufd=NULL; ! 281: return(0); ! 282: } ! 283: else if(b->uscrtch==1) goto delete; ! 284: else goto keep; ! 285: } ! 286: void ! 287: f_exit() ! 288: { int i; ! 289: static cllist xx; ! 290: if (!xx.cerr) { ! 291: xx.cerr=1; ! 292: xx.csta=NULL; ! 293: for(i=0;i<MXUNIT;i++) ! 294: { ! 295: xx.cunit=i; ! 296: (void) f_clos(&xx); ! 297: } ! 298: } ! 299: } ! 300: flush_() ! 301: { int i; ! 302: for(i=0;i<MXUNIT;i++) ! 303: if(units[i].ufd != NULL) (void) fflush(units[i].ufd); ! 304: } ! 305: ./ ADD NAME=libI77/dfe.c TIME=629055520 ! 306: #include "f2c.h" ! 307: #include "fio.h" ! 308: #include "fmt.h" ! 309: extern int rd_ed(),rd_ned(),y_getc(),y_putc(),y_err(); ! 310: extern int y_rev(), y_rsk(), y_newrec(); ! 311: extern int w_ed(),w_ned(); ! 312: integer s_rdfe(a) cilist *a; ! 313: { ! 314: int n; ! 315: if(!init) f_init(); ! 316: if(n=c_dfe(a))return(n); ! 317: reading=1; ! 318: if(curunit->uwrt && nowreading(curunit)) ! 319: err(a->cierr,errno,"read start"); ! 320: getn = y_getc; ! 321: doed = rd_ed; ! 322: doned = rd_ned; ! 323: dorevert = donewrec = y_err; ! 324: doend = y_rsk; ! 325: if(pars_f(fmtbuf)<0) ! 326: err(a->cierr,100,"read start"); ! 327: fmt_bg(); ! 328: return(0); ! 329: } ! 330: integer s_wdfe(a) cilist *a; ! 331: { ! 332: int n; ! 333: if(!init) f_init(); ! 334: if(n=c_dfe(a)) return(n); ! 335: reading=0; ! 336: if(curunit->uwrt != 1 && nowwriting(curunit)) ! 337: err(a->cierr,errno,"startwrt"); ! 338: putn = y_putc; ! 339: doed = w_ed; ! 340: doned= w_ned; ! 341: dorevert = y_err; ! 342: donewrec = y_newrec; ! 343: doend = y_rev; ! 344: if(pars_f(fmtbuf)<0) ! 345: err(a->cierr,100,"startwrt"); ! 346: fmt_bg(); ! 347: return(0); ! 348: } ! 349: integer e_rdfe() ! 350: { ! 351: (void) en_fio(); ! 352: return(0); ! 353: } ! 354: integer e_wdfe() ! 355: { ! 356: (void) en_fio(); ! 357: return(0); ! 358: } ! 359: c_dfe(a) cilist *a; ! 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),0); ! 375: curunit->uend = 0; ! 376: return(0); ! 377: } ! 378: y_rsk() ! 379: { ! 380: if(curunit->uend || curunit->url <= recpos ! 381: || curunit->url == 1) return 0; ! 382: do { ! 383: getc(cf); ! 384: } while(++recpos < curunit->url); ! 385: return 0; ! 386: } ! 387: y_getc() ! 388: { ! 389: int ch; ! 390: if(curunit->uend) return(-1); ! 391: if((ch=getc(cf))!=EOF) ! 392: { ! 393: recpos++; ! 394: if(curunit->url>=recpos || ! 395: curunit->url==1) ! 396: return(ch); ! 397: else return(' '); ! 398: } ! 399: if(feof(cf)) ! 400: { ! 401: curunit->uend=1; ! 402: errno=0; ! 403: return(-1); ! 404: } ! 405: err(elist->cierr,errno,"readingd"); ! 406: } ! 407: y_putc(c) ! 408: { ! 409: recpos++; ! 410: if(recpos <= curunit->url || curunit->url==1) ! 411: putc(c,cf); ! 412: else ! 413: err(elist->cierr,110,"dout"); ! 414: return(0); ! 415: } ! 416: y_rev() ! 417: { /*what about work done?*/ ! 418: if(curunit->url==1 || recpos==curunit->url) ! 419: return(0); ! 420: while(recpos<curunit->url) ! 421: (*putn)(' '); ! 422: recpos=0; ! 423: return(0); ! 424: } ! 425: y_err() ! 426: { ! 427: err(elist->cierr, 110, "dfe"); ! 428: } ! 429: ! 430: y_newrec() ! 431: { ! 432: if(curunit->url == 1 || recpos == curunit->url) { ! 433: hiwater = recpos = cursor = 0; ! 434: return(1); ! 435: } ! 436: if(hiwater > recpos) ! 437: recpos = hiwater; ! 438: y_rev(); ! 439: hiwater = cursor = 0; ! 440: return(1); ! 441: } ! 442: ./ ADD NAME=libI77/due.c TIME=628440563 ! 443: #include "f2c.h" ! 444: #include "fio.h" ! 445: integer s_rdue(a) cilist *a; ! 446: { ! 447: int n; ! 448: if(n=c_due(a)) return(n); ! 449: reading=1; ! 450: if(curunit->uwrt && nowreading(curunit)) ! 451: err(a->cierr,errno,"read start"); ! 452: return(0); ! 453: } ! 454: integer s_wdue(a) cilist *a; ! 455: { ! 456: int n; ! 457: if(n=c_due(a)) return(n); ! 458: reading=0; ! 459: if(curunit->uwrt != 1 && nowwriting(curunit)) ! 460: err(a->cierr,errno,"write start"); ! 461: return(0); ! 462: } ! 463: c_due(a) cilist *a; ! 464: { ! 465: if(!init) f_init(); ! 466: if(a->ciunit>=MXUNIT || a->ciunit<0) ! 467: err(a->cierr,101,"startio"); ! 468: recpos=sequential=formatted=0; ! 469: external=1; ! 470: curunit = &units[a->ciunit]; ! 471: elist=a; ! 472: if(curunit->ufd==NULL && fk_open(DIR,UNF,a->ciunit) ) err(a->cierr,104,"due"); ! 473: cf=curunit->ufd; ! 474: if(curunit->ufmt) err(a->cierr,102,"cdue") ! 475: if(!curunit->useek) err(a->cierr,104,"cdue") ! 476: if(curunit->ufd==NULL) err(a->cierr,114,"cdue") ! 477: (void) fseek(cf,(long)(a->cirec-1)*curunit->url,0); ! 478: curunit->uend = 0; ! 479: return(0); ! 480: } ! 481: integer e_rdue() ! 482: { ! 483: if(curunit->url==1 || recpos==curunit->url) ! 484: return(0); ! 485: (void) fseek(cf,(long)(curunit->url-recpos),1); ! 486: if(ftell(cf)%curunit->url) ! 487: err(elist->cierr,200,"syserr"); ! 488: return(0); ! 489: } ! 490: integer e_wdue() ! 491: { ! 492: return(e_rdue()); ! 493: } ! 494: ./ ADD NAME=libI77/endfile.c TIME=628440563 ! 495: #include "f2c.h" ! 496: #include "fio.h" ! 497: extern char *mktemp(), *strcpy(); ! 498: integer f_end(a) alist *a; ! 499: { ! 500: unit *b; ! 501: if(a->aunit>=MXUNIT || a->aunit<0) err(a->aerr,101,"endfile"); ! 502: b = &units[a->aunit]; ! 503: if(b->ufd==NULL) { ! 504: char nbuf[10]; ! 505: (void) sprintf(nbuf,"fort.%ld",a->aunit); ! 506: close(creat(nbuf, 0666)); ! 507: return(0); ! 508: } ! 509: b->uend=1; ! 510: return(b->useek ? t_runc(a) : 0); ! 511: } ! 512: ! 513: static int ! 514: copy(from, len, to) ! 515: char *from, *to; ! 516: register long len; ! 517: { ! 518: register int n; ! 519: int k, rc = 0, tmp; ! 520: char buf[BUFSIZ]; ! 521: ! 522: if ((k = open(from, 0)) < 0) ! 523: return 1; ! 524: if ((tmp = creat(to,0666)) < 0) ! 525: return 1; ! 526: while((n = read(k, buf, len > BUFSIZ ? BUFSIZ : (int)len)) > 0) { ! 527: if (write(tmp, buf, n) != n) ! 528: { rc = 1; break; } ! 529: if ((len -= n) <= 0) ! 530: break; ! 531: } ! 532: close(k); ! 533: close(tmp); ! 534: return n < 0 ? 1 : rc; ! 535: } ! 536: ! 537: t_runc(a) alist *a; ! 538: { ! 539: char nm[16]; ! 540: long loc, len; ! 541: unit *b; ! 542: int rc = 0; ! 543: ! 544: b = &units[a->aunit]; ! 545: if(b->url) return(0); /*don't truncate direct files*/ ! 546: loc=ftell(b->ufd); ! 547: (void) fseek(b->ufd,0L,2); ! 548: len=ftell(b->ufd); ! 549: if (loc >= len || b->useek == 0 || b->ufnm == NULL) ! 550: return(0); ! 551: rewind(b->ufd); /* empty buffer */ ! 552: if (!loc) { ! 553: if (close(creat(b->ufnm,0666))) ! 554: { rc = 1; goto done; } ! 555: if (b->uwrt) ! 556: b->uwrt = 1; ! 557: return 0; ! 558: } ! 559: (void) strcpy(nm,"tmp.FXXXXXX"); ! 560: (void) mktemp(nm); ! 561: if (copy(b->ufnm, loc, nm) ! 562: || copy(nm, loc, b->ufnm)) ! 563: rc = 1; ! 564: unlink(nm); ! 565: done: ! 566: fseek(b->ufd, loc, 0); ! 567: if (rc) ! 568: err(a->aerr,111,"endfile"); ! 569: return 0; ! 570: } ! 571: ./ ADD NAME=libI77/err.c TIME=628473361 ! 572: #include "sys/types.h" ! 573: #include "sys/stat.h" ! 574: #include "f2c.h" ! 575: #include "fio.h" ! 576: ! 577: extern FILE *fdopen(); ! 578: ! 579: /*global definitions*/ ! 580: unit units[MXUNIT]; /*unit table*/ ! 581: flag init; /*0 on entry, 1 after initializations*/ ! 582: cilist *elist; /*active external io list*/ ! 583: flag reading; /*1 if reading, 0 if writing*/ ! 584: flag cplus,cblank; ! 585: char *fmtbuf; ! 586: flag external; /*1 if external io, 0 if internal */ ! 587: int (*doed)(),(*doned)(); ! 588: int (*doend)(),(*donewrec)(),(*dorevert)(); ! 589: flag sequential; /*1 if sequential io, 0 if direct*/ ! 590: flag formatted; /*1 if formatted io, 0 if unformatted*/ ! 591: int (*getn)(),(*putn)(); /*for formatted io*/ ! 592: FILE *cf; /*current file*/ ! 593: unit *curunit; /*current unit*/ ! 594: int recpos; /*place in current record*/ ! 595: int cursor,scale; ! 596: ! 597: /*error messages*/ ! 598: char *F_err[] = ! 599: { ! 600: "error in format", /* 100 */ ! 601: "illegal unit number", /* 101 */ ! 602: "formatted io not allowed", /* 102 */ ! 603: "unformatted io not allowed", /* 103 */ ! 604: "direct io not allowed", /* 104 */ ! 605: "sequential io not allowed", /* 105 */ ! 606: "can't backspace file", /* 106 */ ! 607: "null file name", /* 107 */ ! 608: "can't stat file", /* 108 */ ! 609: "unit not connected", /* 109 */ ! 610: "off end of record", /* 110 */ ! 611: "truncation failed in endfile", /* 111 */ ! 612: "incomprehensible list input", /* 112 */ ! 613: "out of free space", /* 113 */ ! 614: "unit not connected", /* 114 */ ! 615: "read unexpected character", /* 115 */ ! 616: "blank logical input field", /* 116 */ ! 617: "bad variable type", /* 117 */ ! 618: "bad namelist name", /* 118 */ ! 619: "variable not in namelist", /* 119 */ ! 620: "no end record", /* 120 */ ! 621: "variable count incorrect" /* 121 */ ! 622: }; ! 623: #define MAXERR (sizeof(F_err)/sizeof(char *)+100) ! 624: fatal(n,s) char *s; ! 625: { ! 626: if(n<100 && n>=0) perror(s); /*SYSDEP*/ ! 627: else if(n >= (int)MAXERR || n < -1) ! 628: { fprintf(stderr,"%s: illegal error number %d\n",s,n); ! 629: } ! 630: else if(n == -1) fprintf(stderr,"%s: end of file\n",s); ! 631: else ! 632: fprintf(stderr,"%s: %s\n",s,F_err[n-100]); ! 633: fprintf(stderr,"apparent state: unit %d ",curunit-units); ! 634: fprintf(stderr, curunit->ufnm ? "named %s\n" : "(unnamed)\n", ! 635: curunit->ufnm); ! 636: if (fmtbuf) ! 637: fprintf(stderr,"last format: %s\n",fmtbuf); ! 638: fprintf(stderr,"lately %s %s %s %s IO\n",reading?"reading":"writing", ! 639: sequential?"sequential":"direct",formatted?"formatted":"unformatted", ! 640: external?"external":"internal"); ! 641: _cleanup(); ! 642: abort(); ! 643: } ! 644: /*initialization routine*/ ! 645: f_init() ! 646: { unit *p; ! 647: ! 648: init=1; ! 649: p= &units[0]; ! 650: p->ufd=stderr; ! 651: p->useek=canseek(stderr); ! 652: #ifdef COMMENTED_OUT ! 653: if(isatty(fileno(stderr))) { ! 654: extern char *malloc(); ! 655: setbuf(stderr, malloc(BUFSIZ)); ! 656: /* setvbuf(stderr, _IOLBF, 0, 0); */ ! 657: } /* wastes space, but win for debugging in windows */ ! 658: #endif ! 659: #ifdef NON_UNIX_STDIO ! 660: {extern char *malloc(); setbuf(stderr, malloc(BUFSIZ));} ! 661: #else ! 662: stderr->_flag &= ~_IONBF; ! 663: #endif ! 664: p->ufmt=1; ! 665: p->uwrt=1; ! 666: p = &units[5]; ! 667: p->ufd=stdin; ! 668: p->useek=canseek(stdin); ! 669: p->ufmt=1; ! 670: p->uwrt=0; ! 671: p= &units[6]; ! 672: p->ufd=stdout; ! 673: p->useek=canseek(stdout); ! 674: /* IOLBUF and setvbuf only in system 5+ */ ! 675: #ifdef COMMENTED_OUT ! 676: if(isatty(fileno(stdout))) { ! 677: extern char _sobuf[]; ! 678: setbuf(stdout, _sobuf); ! 679: /* setvbuf(stdout, _IOLBF, 0, 0); /* the buf arg in setvbuf? */ ! 680: p->useek = 1; /* only within a record no bigger than BUFSIZ */ ! 681: } ! 682: #endif ! 683: p->ufmt=1; ! 684: p->uwrt=1; ! 685: } ! 686: canseek(f) FILE *f; /*SYSDEP*/ ! 687: { struct stat x; ! 688: if(fstat(fileno(f),&x) < 0) ! 689: return(0); ! 690: switch(x.st_mode & S_IFMT) { ! 691: case S_IFDIR: ! 692: case S_IFREG: ! 693: if(x.st_nlink > 0) /* !pipe */ ! 694: return(1); ! 695: else ! 696: return(0); ! 697: case S_IFCHR: ! 698: if(isatty(fileno(f))) ! 699: return(0); ! 700: return(1); ! 701: #ifdef S_IFBLK ! 702: case S_IFBLK: ! 703: return(1); ! 704: #endif ! 705: } ! 706: return(0); /* who knows what it is? */ ! 707: } ! 708: nowreading(x) unit *x; ! 709: { ! 710: long loc; ! 711: x->uwrt=0; ! 712: loc=ftell(x->ufd); ! 713: if(freopen(x->ufnm,"r",x->ufd) == NULL) ! 714: return(1); ! 715: (void) fseek(x->ufd,loc,0); ! 716: return(0); ! 717: } ! 718: nowwriting(x) unit *x; ! 719: { ! 720: long loc; ! 721: int k; ! 722: ! 723: if (x->uwrt == 3) { /* just did write, rewind */ ! 724: if (close(creat(x->ufnm,0666))) ! 725: return(1); ! 726: } ! 727: else { ! 728: loc=ftell(x->ufd); ! 729: if (fclose(x->ufd) < 0 ! 730: || (k = x->uwrt == 2 ? creat(x->ufnm,0666) : open(x->ufnm,1)) < 0 ! 731: || (x->ufd = fdopen(k,"w")) == NULL) { ! 732: x->ufd = NULL; ! 733: return(1); ! 734: } ! 735: (void) fseek(x->ufd,loc,0); ! 736: } ! 737: x->uwrt = 1; ! 738: return(0); ! 739: } ! 740: ./ ADD NAME=libI77/fio.h TIME=628474795 ! 741: #include "stdio.h" ! 742: #ifndef NULL ! 743: /* ANSI C */ ! 744: #include "stddef.h" ! 745: #endif ! 746: ! 747: /*units*/ ! 748: typedef struct ! 749: { FILE *ufd; /*0=unconnected*/ ! 750: char *ufnm; ! 751: long uinode; ! 752: int url; /*0=sequential*/ ! 753: flag useek; /*true=can backspace, use dir, ...*/ ! 754: flag ufmt; ! 755: flag uprnt; ! 756: flag ublnk; ! 757: flag uend; ! 758: flag uwrt; /*last io was write*/ ! 759: flag uscrtch; ! 760: } unit; ! 761: ! 762: extern int errno; ! 763: extern flag init; ! 764: extern cilist *elist; /*active external io list*/ ! 765: extern flag reading,external,sequential,formatted; ! 766: extern int (*getn)(),(*putn)(); /*for formatted io*/ ! 767: extern FILE *cf; /*current file*/ ! 768: extern unit *curunit; /*current unit*/ ! 769: extern unit units[]; ! 770: #define err(f,m,s) {if(f) errno= m; else fatal(m,s); return(m);} ! 771: ! 772: /*Table sizes*/ ! 773: #define MXUNIT 100 ! 774: ! 775: extern int recpos; /*position in current record*/ ! 776: extern int cursor; /* offset to move to */ ! 777: extern int hiwater; /* so TL doesn't confuse us */ ! 778: ! 779: #define WRITE 1 ! 780: #define READ 2 ! 781: #define SEQ 3 ! 782: #define DIR 4 ! 783: #define FMT 5 ! 784: #define UNF 6 ! 785: #define EXT 7 ! 786: #define INT 8 ! 787: ! 788: #define buf_end(x) (x->_flag & _IONBF ? x->_ptr : x->_base + BUFSIZ) ! 789: ./ ADD NAME=libI77/fmt.c TIME=628440861 ! 790: #include "f2c.h" ! 791: #include "fio.h" ! 792: #include "fmt.h" ! 793: #define skip(s) while(*s==' ') s++ ! 794: #ifdef interdata ! 795: #define SYLMX 300 ! 796: #endif ! 797: #ifdef pdp11 ! 798: #define SYLMX 300 ! 799: #endif ! 800: #ifdef vax ! 801: #define SYLMX 300 ! 802: #endif ! 803: #ifndef SYLMX ! 804: #define SYLMX 300 ! 805: #endif ! 806: #define GLITCH '\2' ! 807: /* special quote character for stu */ ! 808: extern int cursor,scale; ! 809: extern flag cblank,cplus; /*blanks in I and compulsory plus*/ ! 810: struct syl syl[SYLMX]; ! 811: int parenlvl,pc,revloc; ! 812: ! 813: char *f_s(),*f_list(),*i_tem(),*gt_num(); ! 814: ! 815: pars_f(s) char *s; ! 816: { ! 817: parenlvl=revloc=pc=0; ! 818: if(f_s(s,0) == NULL) ! 819: { ! 820: return(-1); ! 821: } ! 822: return(0); ! 823: } ! 824: char *f_s(s,curloc) char *s; ! 825: { ! 826: skip(s); ! 827: if(*s++!='(') ! 828: { ! 829: return(NULL); ! 830: } ! 831: if(parenlvl++ ==1) revloc=curloc; ! 832: if(op_gen(RET,curloc,0,0)<0 || ! 833: (s=f_list(s))==NULL) ! 834: { ! 835: return(NULL); ! 836: } ! 837: skip(s); ! 838: return(s); ! 839: } ! 840: char *f_list(s) char *s; ! 841: { ! 842: for(;*s!=0;) ! 843: { skip(s); ! 844: if((s=i_tem(s))==NULL) return(NULL); ! 845: skip(s); ! 846: if(*s==',') s++; ! 847: else if(*s==')') ! 848: { if(--parenlvl==0) ! 849: { ! 850: (void) op_gen(REVERT,revloc,0,0); ! 851: return(++s); ! 852: } ! 853: (void) op_gen(GOTO,0,0,0); ! 854: return(++s); ! 855: } ! 856: } ! 857: return(NULL); ! 858: } ! 859: char *i_tem(s) char *s; ! 860: { char *t; ! 861: int n,curloc; ! 862: if(*s==')') return(s); ! 863: if(ne_d(s,&t)) return(t); ! 864: if(e_d(s,&t)) return(t); ! 865: s=gt_num(s,&n); ! 866: if((curloc=op_gen(STACK,n,0,0))<0) return(NULL); ! 867: return(f_s(s,curloc)); ! 868: } ! 869: ne_d(s,p) char *s,**p; ! 870: { int n,x,sign=0; ! 871: char *ap_end(); ! 872: struct syl *sp; ! 873: switch(*s) ! 874: { ! 875: default: ! 876: return(0); ! 877: case ':': (void) op_gen(COLON,0,0,0); break; ! 878: case '$': ! 879: (void) op_gen(NONL, 0, 0, 0); break; ! 880: case 'B': ! 881: case 'b': ! 882: if(*++s=='z' || *s == 'Z') (void) op_gen(BZ,0,0,0); ! 883: else (void) op_gen(BN,0,0,0); ! 884: break; ! 885: case 'S': ! 886: case 's': ! 887: if(*(s+1)=='s' || *(s+1) == 'S') ! 888: { x=SS; ! 889: s++; ! 890: } ! 891: else if(*(s+1)=='p' || *(s+1) == 'P') ! 892: { x=SP; ! 893: s++; ! 894: } ! 895: else x=S; ! 896: (void) op_gen(x,0,0,0); ! 897: break; ! 898: case '/': (void) op_gen(SLASH,0,0,0); break; ! 899: case '-': sign=1; ! 900: case '+': s++; /*OUTRAGEOUS CODING TRICK*/ ! 901: case '0': case '1': case '2': case '3': case '4': ! 902: case '5': case '6': case '7': case '8': case '9': ! 903: s=gt_num(s,&n); ! 904: switch(*s) ! 905: { ! 906: default: ! 907: return(0); ! 908: case 'P': ! 909: case 'p': if(sign) n= -n; (void) op_gen(P,n,0,0); break; ! 910: case 'X': ! 911: case 'x': (void) op_gen(X,n,0,0); break; ! 912: case 'H': ! 913: case 'h': ! 914: sp = &syl[op_gen(H,n,0,0)]; ! 915: *(char **)&sp->p2 = s + 1; ! 916: s+=n; ! 917: break; ! 918: } ! 919: break; ! 920: case GLITCH: ! 921: case '"': ! 922: case '\'': ! 923: sp = &syl[op_gen(APOS,0,0,0)]; ! 924: *(char **)&sp->p2 = s; ! 925: if((*p = ap_end(s)) == NULL) ! 926: return(0); ! 927: return(1); ! 928: case 'T': ! 929: case 't': ! 930: if(*(s+1)=='l' || *(s+1) == 'L') ! 931: { x=TL; ! 932: s++; ! 933: } ! 934: else if(*(s+1)=='r'|| *(s+1) == 'R') ! 935: { x=TR; ! 936: s++; ! 937: } ! 938: else x=T; ! 939: s=gt_num(s+1,&n); ! 940: s--; ! 941: (void) op_gen(x,n,0,0); ! 942: break; ! 943: case 'X': ! 944: case 'x': (void) op_gen(X,1,0,0); break; ! 945: case 'P': ! 946: case 'p': (void) op_gen(P,1,0,0); break; ! 947: } ! 948: s++; ! 949: *p=s; ! 950: return(1); ! 951: } ! 952: e_d(s,p) char *s,**p; ! 953: { int n,w,d,e,found=0,x=0; ! 954: char *sv=s; ! 955: s=gt_num(s,&n); ! 956: (void) op_gen(STACK,n,0,0); ! 957: switch(*s++) ! 958: { ! 959: default: break; ! 960: case 'E': ! 961: case 'e': x=1; ! 962: case 'G': ! 963: case 'g': ! 964: found=1; ! 965: s=gt_num(s,&w); ! 966: if(w==0) break; ! 967: if(*s=='.') ! 968: { s++; ! 969: s=gt_num(s,&d); ! 970: } ! 971: else d=0; ! 972: if(*s!='E' && *s != 'e') ! 973: (void) op_gen(x==1?E:G,w,d,0); /* default is Ew.dE2 */ ! 974: else ! 975: { s++; ! 976: s=gt_num(s,&e); ! 977: (void) op_gen(x==1?EE:GE,w,d,e); ! 978: } ! 979: break; ! 980: case 'O': ! 981: case 'o': ! 982: found = 1; ! 983: s = gt_num(s, &w); ! 984: if(w==0) break; ! 985: (void) op_gen(O, w, 0, 0); ! 986: break; ! 987: case 'L': ! 988: case 'l': ! 989: found=1; ! 990: s=gt_num(s,&w); ! 991: if(w==0) break; ! 992: (void) op_gen(L,w,0,0); ! 993: break; ! 994: case 'A': ! 995: case 'a': ! 996: found=1; ! 997: skip(s); ! 998: if(*s>='0' && *s<='9') ! 999: { s=gt_num(s,&w); ! 1000: if(w==0) break; ! 1001: (void) op_gen(AW,w,0,0); ! 1002: break; ! 1003: } ! 1004: (void) op_gen(A,0,0,0); ! 1005: break; ! 1006: case 'F': ! 1007: case 'f': ! 1008: found=1; ! 1009: s=gt_num(s,&w); ! 1010: if(w==0) break; ! 1011: if(*s=='.') ! 1012: { s++; ! 1013: s=gt_num(s,&d); ! 1014: } ! 1015: else d=0; ! 1016: (void) op_gen(F,w,d,0); ! 1017: break; ! 1018: case 'D': ! 1019: case 'd': ! 1020: found=1; ! 1021: s=gt_num(s,&w); ! 1022: if(w==0) break; ! 1023: if(*s=='.') ! 1024: { s++; ! 1025: s=gt_num(s,&d); ! 1026: } ! 1027: else d=0; ! 1028: (void) op_gen(D,w,d,0); ! 1029: break; ! 1030: case 'I': ! 1031: case 'i': ! 1032: found=1; ! 1033: s=gt_num(s,&w); ! 1034: if(w==0) break; ! 1035: if(*s!='.') ! 1036: { (void) op_gen(I,w,0,0); ! 1037: break; ! 1038: } ! 1039: s++; ! 1040: s=gt_num(s,&d); ! 1041: (void) op_gen(IM,w,d,0); ! 1042: break; ! 1043: } ! 1044: if(found==0) ! 1045: { pc--; /*unSTACK*/ ! 1046: *p=sv; ! 1047: return(0); ! 1048: } ! 1049: *p=s; ! 1050: return(1); ! 1051: } ! 1052: op_gen(a,b,c,d) ! 1053: { struct syl *p= &syl[pc]; ! 1054: if(pc>=SYLMX) ! 1055: { fprintf(stderr,"format too complicated:\n%s\n", ! 1056: fmtbuf); ! 1057: abort(); ! 1058: } ! 1059: p->op=a; ! 1060: p->p1=b; ! 1061: p->p2=c; ! 1062: p->p3=d; ! 1063: return(pc++); ! 1064: } ! 1065: char *gt_num(s,n) char *s; int *n; ! 1066: { int m=0,cnt=0; ! 1067: char c; ! 1068: for(c= *s;;c = *s) ! 1069: { if(c==' ') ! 1070: { s++; ! 1071: continue; ! 1072: } ! 1073: if(c>'9' || c<'0') break; ! 1074: m=10*m+c-'0'; ! 1075: cnt++; ! 1076: s++; ! 1077: } ! 1078: if(cnt==0) *n=1; ! 1079: else *n=m; ! 1080: return(s); ! 1081: } ! 1082: #define STKSZ 10 ! 1083: int cnt[STKSZ],ret[STKSZ],cp,rp; ! 1084: flag workdone, nonl; ! 1085: ! 1086: integer do_fio(number,ptr,len) ftnint *number; ftnlen len; char *ptr; ! 1087: { struct syl *p; ! 1088: int n,i; ! 1089: for(i=0;i<*number;i++,ptr+=len) ! 1090: { ! 1091: loop: switch(type_f((p= &syl[pc])->op)) ! 1092: { ! 1093: default: ! 1094: fprintf(stderr,"unknown code in do_fio: %d\n%s\n", ! 1095: p->op,fmtbuf); ! 1096: err(elist->cierr,100,"do_fio"); ! 1097: case NED: ! 1098: if((*doned)(p)) ! 1099: { pc++; ! 1100: goto loop; ! 1101: } ! 1102: pc++; ! 1103: continue; ! 1104: case ED: ! 1105: if(cnt[cp]<=0) ! 1106: { cp--; ! 1107: pc++; ! 1108: goto loop; ! 1109: } ! 1110: if(ptr==NULL) ! 1111: return((*doend)()); ! 1112: cnt[cp]--; ! 1113: workdone=1; ! 1114: if((n=(*doed)(p,ptr,len))>0) err(elist->cierr,errno,"fmt"); ! 1115: if(n<0) err(elist->ciend,(EOF),"fmt"); ! 1116: continue; ! 1117: case STACK: ! 1118: cnt[++cp]=p->p1; ! 1119: pc++; ! 1120: goto loop; ! 1121: case RET: ! 1122: ret[++rp]=p->p1; ! 1123: pc++; ! 1124: goto loop; ! 1125: case GOTO: ! 1126: if(--cnt[cp]<=0) ! 1127: { cp--; ! 1128: rp--; ! 1129: pc++; ! 1130: goto loop; ! 1131: } ! 1132: pc=1+ret[rp--]; ! 1133: goto loop; ! 1134: case REVERT: ! 1135: rp=cp=0; ! 1136: pc = p->p1; ! 1137: if(ptr==NULL) ! 1138: return((*doend)()); ! 1139: if(!workdone) return(0); ! 1140: if((n=(*dorevert)()) != 0) return(n); ! 1141: goto loop; ! 1142: case COLON: ! 1143: if(ptr==NULL) ! 1144: return((*doend)()); ! 1145: pc++; ! 1146: goto loop; ! 1147: case NONL: ! 1148: nonl = 1; ! 1149: pc++; ! 1150: goto loop; ! 1151: case S: ! 1152: case SS: ! 1153: cplus=0; ! 1154: pc++; ! 1155: goto loop; ! 1156: case SP: ! 1157: cplus = 1; ! 1158: pc++; ! 1159: goto loop; ! 1160: case P: scale=p->p1; ! 1161: pc++; ! 1162: goto loop; ! 1163: case BN: ! 1164: cblank=0; ! 1165: pc++; ! 1166: goto loop; ! 1167: case BZ: ! 1168: cblank=1; ! 1169: pc++; ! 1170: goto loop; ! 1171: } ! 1172: } ! 1173: return(0); ! 1174: } ! 1175: en_fio() ! 1176: { ftnint one=1; ! 1177: return(do_fio(&one,(char *)NULL,0l)); ! 1178: } ! 1179: fmt_bg() ! 1180: { ! 1181: workdone=cp=rp=pc=cursor=0; ! 1182: cnt[0]=ret[0]=0; ! 1183: } ! 1184: type_f(n) ! 1185: { ! 1186: switch(n) ! 1187: { ! 1188: default: ! 1189: return(n); ! 1190: case RET: ! 1191: return(RET); ! 1192: case REVERT: return(REVERT); ! 1193: case GOTO: return(GOTO); ! 1194: case STACK: return(STACK); ! 1195: case X: ! 1196: case SLASH: ! 1197: case APOS: case H: ! 1198: case T: case TL: case TR: ! 1199: return(NED); ! 1200: case F: ! 1201: case I: ! 1202: case IM: ! 1203: case A: case AW: ! 1204: case O: ! 1205: case L: ! 1206: case E: case EE: case D: ! 1207: case G: case GE: ! 1208: return(ED); ! 1209: } ! 1210: } ! 1211: char *ap_end(s) char *s; ! 1212: { char quote; ! 1213: quote= *s++; ! 1214: for(;*s;s++) ! 1215: { if(*s!=quote) continue; ! 1216: if(*++s!=quote) return(s); ! 1217: } ! 1218: if(elist->cierr) { ! 1219: errno = 100; ! 1220: return(NULL); ! 1221: } ! 1222: fatal(100, "bad string"); ! 1223: /*NOTREACHED*/ return 0; ! 1224: } ! 1225: ./ ADD NAME=libI77/fmt.h TIME=628555644 ! 1226: struct syl ! 1227: { int op,p1,p2,p3; ! 1228: }; ! 1229: #define RET 1 ! 1230: #define REVERT 2 ! 1231: #define GOTO 3 ! 1232: #define X 4 ! 1233: #define SLASH 5 ! 1234: #define STACK 6 ! 1235: #define I 7 ! 1236: #define ED 8 ! 1237: #define NED 9 ! 1238: #define IM 10 ! 1239: #define APOS 11 ! 1240: #define H 12 ! 1241: #define TL 13 ! 1242: #define TR 14 ! 1243: #define T 15 ! 1244: #define COLON 16 ! 1245: #define S 17 ! 1246: #define SP 18 ! 1247: #define SS 19 ! 1248: #define P 20 ! 1249: #define BN 21 ! 1250: #define BZ 22 ! 1251: #define F 23 ! 1252: #define E 24 ! 1253: #define EE 25 ! 1254: #define D 26 ! 1255: #define G 27 ! 1256: #define GE 28 ! 1257: #define L 29 ! 1258: #define A 30 ! 1259: #define AW 31 ! 1260: #define O 32 ! 1261: #define NONL 33 ! 1262: extern struct syl syl[]; ! 1263: extern int pc,parenlvl,revloc; ! 1264: extern int (*doed)(),(*doned)(); ! 1265: extern int (*dorevert)(),(*donewrec)(),(*doend)(); ! 1266: extern flag cblank,cplus,workdone, nonl; ! 1267: extern int dummy(); ! 1268: extern char *fmtbuf; ! 1269: extern int scale; ! 1270: typedef union ! 1271: { real pf; ! 1272: doublereal pd; ! 1273: } ufloat; ! 1274: typedef union ! 1275: { short is; ! 1276: char ic; ! 1277: long il; ! 1278: } uint; ! 1279: #define GET(x) if((x=(*getn)())<0) return(x) ! 1280: #define VAL(x) (x!='\n'?x:' ') ! 1281: #define PUT(x) (*putn)(x) ! 1282: extern int cursor; ! 1283: ./ ADD NAME=libI77/fmtlib.c TIME=628440563 ! 1284: /* @(#)fmtlib.c 1.2 */ ! 1285: #define MAXINTLENGTH 23 ! 1286: char *icvt(value,ndigit,sign, base) long value; int *ndigit,*sign; ! 1287: register int base; ! 1288: { static char buf[MAXINTLENGTH+1]; ! 1289: register int i; ! 1290: if(value>0) *sign=0; ! 1291: else if(value<0) ! 1292: { value = -value; ! 1293: *sign= 1; ! 1294: } ! 1295: else ! 1296: { *sign=0; ! 1297: *ndigit=1; ! 1298: buf[MAXINTLENGTH]='0'; ! 1299: return(&buf[MAXINTLENGTH]); ! 1300: } ! 1301: for(i=MAXINTLENGTH-1;value>0;i--) ! 1302: { *(buf+i)=(int)(value%base)+'0'; ! 1303: value /= base; ! 1304: } ! 1305: *ndigit=MAXINTLENGTH-1-i; ! 1306: return(&buf[i+1]); ! 1307: } ! 1308: ./ ADD NAME=libI77/fp.h TIME=580998005 ! 1309: #define FMAX 40 ! 1310: #define EXPMAXDIGS 8 ! 1311: #define EXPMAX 99999999 ! 1312: /* FMAX = max number of nonzero digits passed to atof() */ ! 1313: /* EXPMAX = 10^EXPMAXDIGS - 1 = largest allowed exponent absolute value */ ! 1314: ! 1315: #include "local.h" ! 1316: ! 1317: /* MAXFRACDIGS and MAXINTDIGS are for wrt_F -- bounds (not necessarily ! 1318: tight) on the maximum number of digits to the right and left of ! 1319: * the decimal point. ! 1320: */ ! 1321: ! 1322: #ifdef VAX ! 1323: #define MAXFRACDIGS 56 ! 1324: #define MAXINTDIGS 38 ! 1325: #else ! 1326: #ifdef CRAY ! 1327: #define MAXFRACDIGS 9880 ! 1328: #define MAXINTDIGS 9864 ! 1329: #else ! 1330: /* values that suffice for IEEE double */ ! 1331: #define MAXFRACDIGS 344 ! 1332: #define MAXINTDIGS 308 ! 1333: #endif ! 1334: #endif ! 1335: ./ ADD NAME=libI77/iio.c TIME=629054420 ! 1336: #include "f2c.h" ! 1337: #include "fio.h" ! 1338: #include "fmt.h" ! 1339: extern char *icptr; ! 1340: char *icend; ! 1341: extern icilist *svic; ! 1342: extern int rd_ed(),rd_ned(),w_ed(),w_ned(),y_ierr(); ! 1343: extern int z_wnew(); ! 1344: int icnum; ! 1345: extern int hiwater; ! 1346: z_getc() ! 1347: { ! 1348: if(icptr >= icend) err(svic->iciend,(EOF),"endfile"); ! 1349: if(recpos++ < svic->icirlen) ! 1350: return(*icptr++); ! 1351: else err(svic->icierr,110,"recend"); ! 1352: } ! 1353: z_putc(c) ! 1354: { ! 1355: if(icptr >= icend) err(svic->icierr,110,"inwrite"); ! 1356: if(recpos++ < svic->icirlen) ! 1357: *icptr++ = c; ! 1358: else err(svic->icierr,110,"recend"); ! 1359: return 0; ! 1360: } ! 1361: z_rnew() ! 1362: { ! 1363: icptr = svic->iciunit + (++icnum)*svic->icirlen; ! 1364: recpos = 0; ! 1365: cursor = 0; ! 1366: hiwater = 0; ! 1367: return 1; ! 1368: } ! 1369: integer s_rsfi(a) icilist *a; ! 1370: { int n; ! 1371: if(n=c_si(a)) return(n); ! 1372: reading=1; ! 1373: doed=rd_ed; ! 1374: doned=rd_ned; ! 1375: getn=z_getc; ! 1376: dorevert = y_ierr; ! 1377: donewrec = doend = z_rnew; ! 1378: return(0); ! 1379: } ! 1380: integer s_wsfi(a) icilist *a; ! 1381: { int n; ! 1382: if(n=c_si(a)) return(n); ! 1383: reading=0; ! 1384: doed=w_ed; ! 1385: doned=w_ned; ! 1386: putn=z_putc; ! 1387: dorevert = y_ierr; ! 1388: donewrec = doend = z_wnew; ! 1389: return(0); ! 1390: } ! 1391: c_si(a) icilist *a; ! 1392: { ! 1393: fmtbuf=a->icifmt; ! 1394: if(pars_f(fmtbuf)<0) ! 1395: err(a->icierr,100,"startint"); ! 1396: fmt_bg(); ! 1397: sequential=formatted=1; ! 1398: external=0; ! 1399: cblank=cplus=scale=0; ! 1400: svic=a; ! 1401: icnum=recpos=0; ! 1402: cursor = 0; ! 1403: hiwater = 0; ! 1404: icptr=svic->iciunit; ! 1405: icend=icptr+svic->icirlen*svic->icirnum; ! 1406: return(0); ! 1407: } ! 1408: z_wnew() ! 1409: { ! 1410: while(recpos++ < svic->icirlen) ! 1411: *icptr++ = ' '; ! 1412: recpos = 0; ! 1413: cursor = 0; ! 1414: hiwater = 0; ! 1415: icnum++; ! 1416: return 1; ! 1417: } ! 1418: integer e_rsfi() ! 1419: { int n; ! 1420: n = en_fio(); ! 1421: fmtbuf = NULL; ! 1422: return(n); ! 1423: } ! 1424: integer e_wsfi() ! 1425: { ! 1426: int n; ! 1427: n = en_fio(); ! 1428: fmtbuf = NULL; ! 1429: if(icnum >= svic->icirnum) ! 1430: return(n); ! 1431: while(recpos++ < svic->icirlen) ! 1432: *icptr++ = ' '; ! 1433: return(n); ! 1434: } ! 1435: y_ierr() ! 1436: { ! 1437: err(elist->cierr, 110, "iio"); ! 1438: } ! 1439: ./ ADD NAME=libI77/inquire.c TIME=628440563 ! 1440: #include "f2c.h" ! 1441: #include "fio.h" ! 1442: integer f_inqu(a) inlist *a; ! 1443: { flag byfile; ! 1444: int i; ! 1445: unit *p; ! 1446: char buf[256]; ! 1447: long x; ! 1448: if(a->infile!=NULL) ! 1449: { byfile=1; ! 1450: g_char(a->infile,a->infilen,buf); ! 1451: x=inode(buf); ! 1452: for(i=0,p=NULL;i<MXUNIT;i++) ! 1453: if(units[i].uinode==x && units[i].ufd!=NULL) ! 1454: p = &units[i]; ! 1455: } ! 1456: else ! 1457: { ! 1458: byfile=0; ! 1459: if(a->inunit<MXUNIT && a->inunit>=0) ! 1460: { ! 1461: p= &units[a->inunit]; ! 1462: } ! 1463: else ! 1464: { ! 1465: p=NULL; ! 1466: } ! 1467: } ! 1468: if(a->inex!=NULL) ! 1469: if(byfile && x != -1 || !byfile && p!=NULL) ! 1470: *a->inex=1; ! 1471: else *a->inex=0; ! 1472: if(a->inopen!=NULL) ! 1473: if(byfile) *a->inopen=(p!=NULL); ! 1474: else *a->inopen=(p!=NULL && p->ufd!=NULL); ! 1475: if(a->innum!=NULL) *a->innum= p-units; ! 1476: if(a->innamed!=NULL) ! 1477: if(byfile || p!=NULL && p->ufnm!=NULL) ! 1478: *a->innamed=1; ! 1479: else *a->innamed=0; ! 1480: if(a->inname!=NULL) ! 1481: if(byfile) ! 1482: b_char(buf,a->inname,a->innamlen); ! 1483: else if(p!=NULL && p->ufnm!=NULL) ! 1484: b_char(p->ufnm,a->inname,a->innamlen); ! 1485: if(a->inacc!=NULL && p!=NULL && p->ufd!=NULL) ! 1486: if(p->url) ! 1487: b_char("DIRECT",a->inacc,a->inacclen); ! 1488: else b_char("SEQUENTIAL",a->inacc,a->inacclen); ! 1489: if(a->inseq!=NULL) ! 1490: if(p!=NULL && p->url) ! 1491: b_char("NO",a->inseq,a->inseqlen); ! 1492: else b_char("YES",a->inseq,a->inseqlen); ! 1493: if(a->indir!=NULL) ! 1494: if(p==NULL || p->url) ! 1495: b_char("YES",a->indir,a->indirlen); ! 1496: else b_char("NO",a->indir,a->indirlen); ! 1497: if(a->infmt!=NULL) ! 1498: if(p!=NULL && p->ufmt==0) ! 1499: b_char("UNFORMATTED",a->infmt,a->infmtlen); ! 1500: else b_char("FORMATTED",a->infmt,a->infmtlen); ! 1501: if(a->inform!=NULL) ! 1502: if(p!=NULL && p->ufmt==0) ! 1503: b_char("NO",a->inform,a->informlen); ! 1504: else b_char("YES",a->inform,a->informlen); ! 1505: if(a->inunf) ! 1506: if(p!=NULL && p->ufmt==0) ! 1507: b_char("YES",a->inunf,a->inunflen); ! 1508: else if (p!=NULL) b_char("NO",a->inunf,a->inunflen); ! 1509: else b_char("UNKNOWN",a->inunf,a->inunflen); ! 1510: if(a->inrecl!=NULL && p!=NULL) ! 1511: *a->inrecl=p->url; ! 1512: if(a->innrec!=NULL && p!=NULL && p->url>0) ! 1513: *a->innrec=ftell(p->ufd)/p->url+1; ! 1514: if(a->inblank && p!=NULL && p->ufmt) ! 1515: if(p->ublnk) ! 1516: b_char("ZERO",a->inblank,a->inblanklen); ! 1517: else b_char("NULL",a->inblank,a->inblanklen); ! 1518: return(0); ! 1519: } ! 1520: ./ ADD NAME=libI77/lio.c TIME=628950337 ! 1521: #include "f2c.h" ! 1522: #include "fio.h" ! 1523: #include "fmt.h" ! 1524: #include "lio.h" ! 1525: extern int l_write(); ! 1526: int t_putc(); ! 1527: ! 1528: integer s_wsle(a) cilist *a; ! 1529: { ! 1530: int n; ! 1531: if(!init) f_init(); ! 1532: if(n=c_le(a)) return(n); ! 1533: reading=0; ! 1534: external=1; ! 1535: formatted=1; ! 1536: putn = t_putc; ! 1537: lioproc = l_write; ! 1538: if(curunit->uwrt != 1 && nowwriting(curunit)) ! 1539: err(a->cierr, errno, "list output start"); ! 1540: return(0); ! 1541: } ! 1542: integer e_wsle() ! 1543: { ! 1544: t_putc('\n'); ! 1545: recpos=0; ! 1546: if (cf == stdout) ! 1547: fflush(stdout); ! 1548: else if (cf == stderr) ! 1549: fflush(stderr); ! 1550: return(0); ! 1551: } ! 1552: t_putc(c) ! 1553: { ! 1554: recpos++; ! 1555: putc(c,cf); ! 1556: return(0); ! 1557: } ! 1558: lwrt_I(n) ftnint n; ! 1559: { ! 1560: char buf[LINTW],*p; ! 1561: (void) sprintf(buf," %ld",(long)n); ! 1562: if(recpos+strlen(buf)>=LINE) ! 1563: { t_putc('\n'); ! 1564: recpos=0; ! 1565: } ! 1566: for(p=buf;*p;t_putc(*p++)); ! 1567: } ! 1568: lwrt_L(n, len) ftnint n; ftnlen len; ! 1569: { ! 1570: if(recpos+LLOGW>=LINE) ! 1571: { t_putc('\n'); ! 1572: recpos=0; ! 1573: } ! 1574: (void) wrt_L((uint *)&n,LLOGW, len); ! 1575: } ! 1576: lwrt_A(p,len) char *p; ftnlen len; ! 1577: { ! 1578: int i; ! 1579: if(recpos+len>=LINE) ! 1580: { ! 1581: t_putc('\n'); ! 1582: recpos=0; ! 1583: } ! 1584: if (!recpos) ! 1585: { t_putc(' '); ++recpos; } ! 1586: for(i=0;i<len;i++) t_putc(*p++); ! 1587: } ! 1588: lwrt_F(absn) double absn; ! 1589: { ! 1590: doublereal n; ! 1591: ! 1592: n = absn; ! 1593: if (absn < 0) ! 1594: absn = -absn; ! 1595: if (LLOW <= absn && absn < LHIGH) ! 1596: { ! 1597: if(recpos+LFW>=LINE) ! 1598: { ! 1599: t_putc('\n'); ! 1600: recpos=0; ! 1601: } ! 1602: scale=0; ! 1603: (void) wrt_F((ufloat *)&n,LFW,LFD,(ftnlen)sizeof(n)); ! 1604: } ! 1605: else ! 1606: { ! 1607: if(recpos+LEW>=LINE) ! 1608: { t_putc('\n'); ! 1609: recpos=0; ! 1610: } ! 1611: scale = 1; ! 1612: (void) wrt_E((ufloat *)&n,LEW,LED,-1,(ftnlen)sizeof(n)); ! 1613: } ! 1614: } ! 1615: lwrt_C(a,b) double a,b; ! 1616: { ! 1617: if(recpos+2*LFW+3>=LINE) ! 1618: { t_putc('\n'); ! 1619: recpos=0; ! 1620: } ! 1621: t_putc(' '); ! 1622: t_putc('('); ! 1623: lwrt_F(a); ! 1624: t_putc(','); ! 1625: lwrt_F(b); ! 1626: t_putc(')'); ! 1627: } ! 1628: l_write(number,ptr,len,type) ftnint *number,type; char *ptr; ftnlen len; ! 1629: { ! 1630: #define Ptr ((flex *)ptr) ! 1631: int i; ! 1632: ftnint x; ! 1633: double y,z; ! 1634: real *xx; ! 1635: doublereal *yy; ! 1636: for(i=0;i< *number; i++) ! 1637: { ! 1638: switch((int)type) ! 1639: { ! 1640: default: fatal(204,"unknown type in lio"); ! 1641: case TYSHORT: ! 1642: x=Ptr->flshort; ! 1643: goto xint; ! 1644: case TYLONG: ! 1645: x=Ptr->flint; ! 1646: xint: lwrt_I(x); ! 1647: break; ! 1648: case TYREAL: ! 1649: y=Ptr->flreal; ! 1650: goto xfloat; ! 1651: case TYDREAL: ! 1652: y=Ptr->fldouble; ! 1653: xfloat: lwrt_F(y); ! 1654: break; ! 1655: case TYCOMPLEX: ! 1656: xx= &Ptr->flreal; ! 1657: y = *xx++; ! 1658: z = *xx; ! 1659: goto xcomplex; ! 1660: case TYDCOMPLEX: ! 1661: yy = &Ptr->fldouble; ! 1662: y= *yy++; ! 1663: z = *yy; ! 1664: xcomplex: ! 1665: lwrt_C(y,z); ! 1666: break; ! 1667: case TYLOGICAL: ! 1668: lwrt_L(Ptr->flint, len); ! 1669: break; ! 1670: case TYCHAR: ! 1671: lwrt_A(ptr,len); ! 1672: break; ! 1673: } ! 1674: ptr += len; ! 1675: } ! 1676: return(0); ! 1677: } ! 1678: ./ ADD NAME=libI77/lio.h TIME=628801084 ! 1679: /* copy of ftypes from the compiler */ ! 1680: /* variable types ! 1681: * numeric assumptions: ! 1682: * int < reals < complexes ! 1683: * TYDREAL-TYREAL = TYDCOMPLEX-TYCOMPLEX ! 1684: */ ! 1685: ! 1686: #define TYUNKNOWN 0 ! 1687: #define TYADDR 1 ! 1688: #define TYSHORT 2 ! 1689: #define TYLONG 3 ! 1690: #define TYREAL 4 ! 1691: #define TYDREAL 5 ! 1692: #define TYCOMPLEX 6 ! 1693: #define TYDCOMPLEX 7 ! 1694: #define TYLOGICAL 8 ! 1695: #define TYCHAR 9 ! 1696: #define TYSUBR 10 ! 1697: #define TYERROR 11 ! 1698: ! 1699: #define NTYPES (TYERROR+1) ! 1700: ! 1701: #define LINTW 12 ! 1702: #define LINE 80 ! 1703: #define LLOGW 2 ! 1704: #define LLOW 1.0 ! 1705: #define LHIGH 10.0 ! 1706: #define LFW 12 ! 1707: #define LFD 8 ! 1708: #define LEW 16 ! 1709: #define LED 8 ! 1710: ! 1711: typedef union ! 1712: { short flshort; ! 1713: ftnint flint; ! 1714: real flreal; ! 1715: doublereal fldouble; ! 1716: } flex; ! 1717: extern int scale; ! 1718: extern int (*lioproc)(); ! 1719: ./ ADD NAME=libI77/lread.c TIME=628950338 ! 1720: #include "f2c.h" ! 1721: #include "fio.h" ! 1722: #include "fmt.h" ! 1723: #include "lio.h" ! 1724: #include "ctype.h" ! 1725: #include "fp.h" ! 1726: ! 1727: extern char *fmtbuf; ! 1728: extern char *malloc(), *realloc(); ! 1729: int (*lioproc)(); ! 1730: ! 1731: #define isblnk(x) (ltab[x+1]&B) ! 1732: #define issep(x) (ltab[x+1]&SX) ! 1733: #define isapos(x) (ltab[x+1]&AX) ! 1734: #define isexp(x) (ltab[x+1]&EX) ! 1735: #define issign(x) (ltab[x+1]&SG) ! 1736: #define SX 1 ! 1737: #define B 2 ! 1738: #define AX 4 ! 1739: #define EX 8 ! 1740: #define SG 16 ! 1741: char ltab[128+1] = { /* offset one for EOF */ ! 1742: 0, ! 1743: 0,0,AX,0,0,0,0,0,0,0,SX,0,0,0,0,0, ! 1744: 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, ! 1745: SX|B,0,AX,0,0,0,0,AX,0,0,0,SG,SX,SG,0,SX, ! 1746: 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, ! 1747: 0,0,0,0,EX,EX,0,0,0,0,0,0,0,0,0,0, ! 1748: 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, ! 1749: AX,0,0,0,EX,EX,0,0,0,0,0,0,0,0,0,0, ! 1750: 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ! 1751: }; ! 1752: ! 1753: t_getc() ! 1754: { int ch; ! 1755: if(curunit->uend) return(EOF); ! 1756: if((ch=getc(cf))!=EOF) return(ch); ! 1757: if(feof(cf)) curunit->uend = 1; ! 1758: return(EOF); ! 1759: } ! 1760: integer e_rsle() ! 1761: { ! 1762: int ch; ! 1763: if(curunit->uend) return(0); ! 1764: while((ch=t_getc())!='\n' && ch!=EOF); ! 1765: return(0); ! 1766: } ! 1767: ! 1768: flag lquit; ! 1769: int lcount,ltype; ! 1770: char *lchar; ! 1771: double lx,ly; ! 1772: #define ERR(x) if(n=(x)) return(n) ! 1773: #define GETC(x) (x=t_getc()) ! 1774: ! 1775: l_read(number,ptr,len,type) ftnint *number,type; char *ptr; ftnlen len; ! 1776: { ! 1777: #define Ptr ((flex *)ptr) ! 1778: int i,n,ch; ! 1779: doublereal *yy; ! 1780: real *xx; ! 1781: for(i=0;i<*number;i++) ! 1782: { ! 1783: if(lquit) return(0); ! 1784: if(curunit->uend) err(elist->ciend, EOF, "list in") ! 1785: if(lcount == 0) { ! 1786: ltype = 0; ! 1787: for(;;) { ! 1788: GETC(ch); ! 1789: switch(ch) { ! 1790: case EOF: ! 1791: goto loopend; ! 1792: case ' ': ! 1793: case '\n': ! 1794: continue; ! 1795: case '/': ! 1796: lquit = 1; ! 1797: goto loopend; ! 1798: case ',': ! 1799: lcount = 1; ! 1800: goto loopend; ! 1801: default: ! 1802: (void) ungetc(ch, cf); ! 1803: goto rddata; ! 1804: } ! 1805: } ! 1806: } ! 1807: rddata: ! 1808: switch((int)type) ! 1809: { ! 1810: case TYSHORT: ! 1811: case TYLONG: ! 1812: case TYREAL: ! 1813: case TYDREAL: ! 1814: ERR(l_R()); ! 1815: break; ! 1816: case TYCOMPLEX: ! 1817: case TYDCOMPLEX: ! 1818: ERR(l_C()); ! 1819: break; ! 1820: case TYLOGICAL: ! 1821: ERR(l_L()); ! 1822: break; ! 1823: case TYCHAR: ! 1824: ERR(l_CHAR()); ! 1825: break; ! 1826: } ! 1827: while ((ch=t_getc())==' '); if (ch!=',') ungetc(ch,cf); ! 1828: loopend: ! 1829: if(lquit) return(0); ! 1830: if(feof(cf)) err(elist->ciend,(EOF),"list in") ! 1831: else if(ferror(cf)) ! 1832: { clearerr(cf); ! 1833: err(elist->cierr,errno,"list in") ! 1834: } ! 1835: if(ltype==0) goto bump; ! 1836: switch((int)type) ! 1837: { ! 1838: case TYSHORT: ! 1839: Ptr->flshort=lx; ! 1840: break; ! 1841: case TYLOGICAL: ! 1842: case TYLONG: ! 1843: Ptr->flint=lx; ! 1844: break; ! 1845: case TYREAL: ! 1846: Ptr->flreal=lx; ! 1847: break; ! 1848: case TYDREAL: ! 1849: Ptr->fldouble=lx; ! 1850: break; ! 1851: case TYCOMPLEX: ! 1852: xx=(real *)ptr; ! 1853: *xx++ = lx; ! 1854: *xx = ly; ! 1855: break; ! 1856: case TYDCOMPLEX: ! 1857: yy=(doublereal *)ptr; ! 1858: *yy++ = lx; ! 1859: *yy = ly; ! 1860: break; ! 1861: case TYCHAR: ! 1862: b_char(lchar,ptr,len); ! 1863: break; ! 1864: } ! 1865: bump: ! 1866: if(lcount>0) lcount--; ! 1867: ptr += len; ! 1868: } ! 1869: return(0); ! 1870: #undef Ptr ! 1871: } ! 1872: l_R() ! 1873: { ! 1874: char s[FMAX+EXPMAXDIGS+4]; ! 1875: register int ch; ! 1876: register char *sp, *spe, *sp1; ! 1877: long e, exp; ! 1878: double atof(); ! 1879: int havenum, poststar, se; ! 1880: ! 1881: if (lcount > 0) ! 1882: return(0); ! 1883: ltype = 0; ! 1884: lcount = 1; ! 1885: exp = 0; ! 1886: poststar = 0; ! 1887: retry: ! 1888: sp1 = sp = s; ! 1889: spe = sp + FMAX; ! 1890: havenum = 0; ! 1891: ! 1892: switch(GETC(ch)) { ! 1893: case '-': *sp++ = ch; sp1++; spe++; ! 1894: case '+': ! 1895: GETC(ch); ! 1896: } ! 1897: while(ch == '0') { ! 1898: ++havenum; ! 1899: GETC(ch); ! 1900: } ! 1901: while(isdigit(ch)) { ! 1902: if (sp < spe) *sp++ = ch; ! 1903: else ++exp; ! 1904: GETC(ch); ! 1905: } ! 1906: if (ch == '*' && !poststar) { ! 1907: if (sp == sp1 || exp || *s == '-') { ! 1908: err(elist->cierr,112,"bad repetition count") ! 1909: } ! 1910: poststar = 1; ! 1911: *sp = 0; ! 1912: lcount = atoi(s); ! 1913: goto retry; ! 1914: } ! 1915: if (ch == '.') { ! 1916: GETC(ch); ! 1917: if (sp == sp1) ! 1918: while(ch == '0') { ! 1919: ++havenum; ! 1920: --exp; ! 1921: GETC(ch); ! 1922: } ! 1923: while(isdigit(ch)) { ! 1924: if (sp < spe) ! 1925: { *sp++ = ch; --exp; } ! 1926: GETC(ch); ! 1927: } ! 1928: } ! 1929: se = 0; ! 1930: if (issign(ch)) ! 1931: goto signonly; ! 1932: if (isexp(ch)) { ! 1933: GETC(ch); ! 1934: if (issign(ch)) { ! 1935: signonly: ! 1936: if (ch == '-') se = 1; ! 1937: GETC(ch); ! 1938: } ! 1939: if (!isdigit(ch)) { ! 1940: bad: ! 1941: err(elist->cierr,112,"exponent field") ! 1942: } ! 1943: ! 1944: e = ch - '0'; ! 1945: while(isdigit(GETC(ch))) { ! 1946: e = 10*e + ch - '0'; ! 1947: if (e > EXPMAX) ! 1948: goto bad; ! 1949: } ! 1950: if (se) ! 1951: exp -= e; ! 1952: else ! 1953: exp += e; ! 1954: } ! 1955: (void) ungetc(ch, cf); ! 1956: if (sp > sp1) { ! 1957: ++havenum; ! 1958: while(*--sp == '0') ! 1959: ++exp; ! 1960: if (exp) ! 1961: sprintf(sp+1, "e%ld", exp); ! 1962: else ! 1963: sp[1] = 0; ! 1964: lx = atof(s); ! 1965: } ! 1966: else ! 1967: lx = 0.; ! 1968: if (havenum) ! 1969: ltype = TYLONG; ! 1970: else ! 1971: switch(ch) { ! 1972: case ',': ! 1973: case '/': ! 1974: break; ! 1975: default: ! 1976: err(elist->cierr,112,"invalid number") ! 1977: } ! 1978: return 0; ! 1979: } ! 1980: ! 1981: l_C() ! 1982: { int ch; ! 1983: if(lcount>0) return(0); ! 1984: ltype=0; ! 1985: GETC(ch); ! 1986: if(ch!='(') ! 1987: { ! 1988: (void) ungetc(ch,cf); ! 1989: if(fscanf(cf,"%d",&lcount)!=1) ! 1990: if(!feof(cf)) err(elist->cierr,112,"complex format") ! 1991: else err(elist->cierr,(EOF),"lread"); ! 1992: if(GETC(ch)!='*') ! 1993: { ! 1994: if(!feof(cf)) err(elist->cierr,112,"no star") ! 1995: else err(elist->cierr,(EOF),"lread"); ! 1996: } ! 1997: if(GETC(ch)!='(') ! 1998: { (void) ungetc(ch,cf); ! 1999: return(0); ! 2000: } ! 2001: } ! 2002: lcount = 1; ! 2003: ltype=TYLONG; ! 2004: (void) fscanf(cf,"%lf",&lx); ! 2005: while(isblnk(GETC(ch)) || (ch == '\n')); ! 2006: if(ch!=',') ! 2007: { (void) ungetc(ch,cf); ! 2008: err(elist->cierr,112,"no comma"); ! 2009: } ! 2010: while(isblnk(GETC(ch))); ! 2011: (void) ungetc(ch,cf); ! 2012: (void) fscanf(cf,"%lf",&ly); ! 2013: while(isblnk(GETC(ch))); ! 2014: if(ch!=')') err(elist->cierr,112,"no )"); ! 2015: return(0); ! 2016: } ! 2017: l_L() ! 2018: { ! 2019: int ch; ! 2020: if(lcount>0) return(0); ! 2021: ltype=0; ! 2022: GETC(ch); ! 2023: if(isdigit(ch)) ! 2024: { (void) ungetc(ch,cf); ! 2025: (void) fscanf(cf,"%d",&lcount); ! 2026: if(GETC(ch)!='*') ! 2027: if(!feof(cf)) err(elist->cierr,112,"no star") ! 2028: else err(elist->cierr,(EOF),"lread"); ! 2029: } ! 2030: else (void) ungetc(ch,cf); ! 2031: if(GETC(ch)=='.') GETC(ch); ! 2032: switch(ch) ! 2033: { ! 2034: case 't': ! 2035: case 'T': ! 2036: lx=1; ! 2037: break; ! 2038: case 'f': ! 2039: case 'F': ! 2040: lx=0; ! 2041: break; ! 2042: default: ! 2043: if(isblnk(ch) || issep(ch) || ch==EOF) ! 2044: { (void) ungetc(ch,cf); ! 2045: return(0); ! 2046: } ! 2047: else err(elist->cierr,112,"logical"); ! 2048: } ! 2049: ltype=TYLONG; ! 2050: lcount = 1; ! 2051: while(!issep(GETC(ch)) && ch!=EOF); ! 2052: (void) ungetc(ch, cf); ! 2053: return(0); ! 2054: } ! 2055: #define BUFSIZE 128 ! 2056: l_CHAR() ! 2057: { int ch,size,i; ! 2058: char quote,*p; ! 2059: if(lcount>0) return(0); ! 2060: ltype=0; ! 2061: ! 2062: GETC(ch); ! 2063: if(isdigit(ch)) ! 2064: { (void) ungetc(ch,cf); ! 2065: (void) fscanf(cf,"%d",&lcount); ! 2066: if(GETC(ch)!='*') err(elist->cierr,112,"no star"); ! 2067: } ! 2068: else (void) ungetc(ch,cf); ! 2069: if(GETC(ch)=='\'' || ch=='"') quote=ch; ! 2070: else if(isblnk(ch) || (issep(ch) && ch != '\n') || ch==EOF) ! 2071: { (void) ungetc(ch,cf); ! 2072: return(0); ! 2073: } ! 2074: else err(elist->cierr,112,"no quote"); ! 2075: ltype=TYCHAR; ! 2076: if(lchar!=NULL) free(lchar); ! 2077: size=BUFSIZE; ! 2078: p=lchar=malloc((unsigned int)size); ! 2079: if(lchar==NULL) err(elist->cierr,113,"no space"); ! 2080: for(i=0;;) ! 2081: { while(GETC(ch)!=quote && ch!='\n' ! 2082: && ch!=EOF && ++i<size) *p++ = ch; ! 2083: if(i==size) ! 2084: { ! 2085: newone: ! 2086: lchar= realloc(lchar, (unsigned int)(size += BUFSIZE)); ! 2087: p=lchar+i-1; ! 2088: *p++ = ch; ! 2089: } ! 2090: else if(ch==EOF) return(EOF); ! 2091: else if(ch=='\n') ! 2092: { if(*(p-1) != '\\') continue; ! 2093: i--; ! 2094: p--; ! 2095: if(++i<size) *p++ = ch; ! 2096: else goto newone; ! 2097: } ! 2098: else if(GETC(ch)==quote) ! 2099: { if(++i<size) *p++ = ch; ! 2100: else goto newone; ! 2101: } ! 2102: else ! 2103: { (void) ungetc(ch,cf); ! 2104: *p = 0; ! 2105: return(0); ! 2106: } ! 2107: } ! 2108: } ! 2109: integer s_rsle(a) cilist *a; ! 2110: { ! 2111: int n; ! 2112: if(!init) f_init(); ! 2113: if(n=c_le(a)) return(n); ! 2114: reading=1; ! 2115: external=1; ! 2116: formatted=1; ! 2117: lioproc = l_read; ! 2118: lquit = 0; ! 2119: lcount = 0; ! 2120: if(curunit->uwrt && nowreading(curunit)) ! 2121: err(a->cierr,errno,"read start"); ! 2122: return(0); ! 2123: } ! 2124: c_le(a) cilist *a; ! 2125: { ! 2126: fmtbuf="list io"; ! 2127: if(a->ciunit>=MXUNIT || a->ciunit<0) ! 2128: err(a->cierr,101,"stler"); ! 2129: scale=recpos=0; ! 2130: elist=a; ! 2131: curunit = &units[a->ciunit]; ! 2132: if(curunit->ufd==NULL && fk_open(SEQ,FMT,a->ciunit)) ! 2133: err(a->cierr,102,"lio"); ! 2134: cf=curunit->ufd; ! 2135: if(!curunit->ufmt) err(a->cierr,103,"lio") ! 2136: return(0); ! 2137: } ! 2138: integer do_lio(type,number,ptr,len) ftnint *number,*type; char *ptr; ftnlen len; ! 2139: { ! 2140: return((*lioproc)(number,ptr,len,*type)); ! 2141: } ! 2142: ./ ADD NAME=libI77/open.c TIME=628440564 ! 2143: #include "sys/types.h" ! 2144: #include "sys/stat.h" ! 2145: #include "f2c.h" ! 2146: #include "fio.h" ! 2147: extern char *mktemp(), *malloc(), *strcpy(); ! 2148: extern FILE *fdopen(); ! 2149: extern integer f_clos(); ! 2150: ! 2151: integer f_open(a) olist *a; ! 2152: { unit *b; ! 2153: int n; ! 2154: char buf[256]; ! 2155: cllist x; ! 2156: if(a->ounit>=MXUNIT || a->ounit<0) ! 2157: err(a->oerr,101,"open") ! 2158: curunit = b = &units[a->ounit]; ! 2159: if(b->ufd) { ! 2160: if(a->ofnm==0) ! 2161: { ! 2162: same: if(a->oblnk!= 0) b->ublnk= *a->oblnk== 'z'?1:0; ! 2163: return(0); ! 2164: } ! 2165: g_char(a->ofnm,a->ofnmlen,buf); ! 2166: if(inode(buf)==b->uinode) goto same; ! 2167: x.cunit=a->ounit; ! 2168: x.csta=0; ! 2169: x.cerr=a->oerr; ! 2170: if((n=f_clos(&x))!=0) return(n); ! 2171: } ! 2172: b->url=a->orl; ! 2173: if(a->oblnk && (*a->oblnk=='z' || *a->oblnk == 'Z')) b->ublnk=1; ! 2174: else b->ublnk=0; ! 2175: if(a->ofm==0) ! 2176: { if(b->url>0) b->ufmt=0; ! 2177: else b->ufmt=1; ! 2178: } ! 2179: else if(*a->ofm=='f' || *a->ofm == 'F') b->ufmt=1; ! 2180: else b->ufmt=0; ! 2181: if (a->ofnm) { ! 2182: g_char(a->ofnm,a->ofnmlen,buf); ! 2183: if (!buf[0]) ! 2184: err(a->oerr,107,"open") ! 2185: } ! 2186: else ! 2187: sprintf(buf, "fort.%ld", a->ounit); ! 2188: b->uscrtch = 0; ! 2189: switch(a->osta ? *a->osta : 'u') ! 2190: { ! 2191: case 'o': ! 2192: case 'O': ! 2193: if(!a->ofnm) err(a->oerr,107,"open") ! 2194: if(access(buf,0)) ! 2195: err(a->oerr,errno,"open") ! 2196: break; ! 2197: case 's': ! 2198: case 'S': ! 2199: b->uscrtch=1; ! 2200: (void) strcpy(buf,"tmp.FXXXXXX"); ! 2201: (void) mktemp(buf); ! 2202: (void) close(creat(buf, 0666)); ! 2203: break; ! 2204: case 'n': ! 2205: case 'N': ! 2206: if(a->ofnm==0) err(a->oerr,107,"open") ! 2207: (void) close(creat(buf, 0666)); ! 2208: break; ! 2209: } ! 2210: done: ! 2211: b->ufnm=(char *) malloc((unsigned int)(strlen(buf)+1)); ! 2212: if(b->ufnm==NULL) err(a->oerr,113,"no space"); ! 2213: (void) strcpy(b->ufnm,buf); ! 2214: b->uend=0; ! 2215: if(isdev(buf)) ! 2216: { b->ufd = fopen(buf,"r"); ! 2217: if(b->ufd==NULL) err(a->oerr,errno,buf) ! 2218: else b->uwrt = 0; ! 2219: } ! 2220: else { ! 2221: b->uwrt = 0; ! 2222: if((b->ufd = fopen(buf, "r")) == NULL) { ! 2223: if ((n = open(buf,1)) >= 0) { ! 2224: b->uwrt = 2; ! 2225: } ! 2226: else { ! 2227: n = creat(buf, 0666); ! 2228: b->uwrt = 1; ! 2229: } ! 2230: if (n < 0 ! 2231: || (b->ufd = fdopen(n, "w")) == NULL) ! 2232: err(a->oerr, errno, "open"); ! 2233: } ! 2234: if(b->url > 0) /* one can more easily find the end */ ! 2235: (void) fseek(b->ufd, 0L, 0); ! 2236: } ! 2237: b->useek=canseek(b->ufd); ! 2238: if((b->uinode=inode(buf))==-1) ! 2239: err(a->oerr,108,"open") ! 2240: if(a->orl && b->useek) rewind(b->ufd); ! 2241: return(0); ! 2242: } ! 2243: fk_open(seq,fmt,n) ftnint n; ! 2244: { char nbuf[10]; ! 2245: olist a; ! 2246: (void) sprintf(nbuf,"fort.%ld",n); ! 2247: a.oerr=1; ! 2248: a.ounit=n; ! 2249: a.ofnm=nbuf; ! 2250: a.ofnmlen=strlen(nbuf); ! 2251: a.osta=NULL; ! 2252: a.oacc= seq==SEQ?"s":"d"; ! 2253: a.ofm = fmt==FMT?"f":"u"; ! 2254: a.orl = seq==DIR?1:0; ! 2255: a.oblnk=NULL; ! 2256: return(f_open(&a)); ! 2257: } ! 2258: isdev(s) char *s; ! 2259: { struct stat x; ! 2260: int j; ! 2261: if(stat(s, &x) == -1) return(0); ! 2262: if((j = (x.st_mode&S_IFMT)) == S_IFREG || j == S_IFDIR) return(0); ! 2263: else return(1); ! 2264: } ! 2265: ./ ADD NAME=libI77/rdfmt.c TIME=629051101 ! 2266: #include "f2c.h" ! 2267: #include "fio.h" ! 2268: #include "fmt.h" ! 2269: #include "fp.h" ! 2270: ! 2271: extern int cursor; ! 2272: rd_ed(p,ptr,len) char *ptr; struct syl *p; ftnlen len; ! 2273: { int ch; ! 2274: for(;cursor>0;cursor--) if((ch=(*getn)())<0) return(ch); ! 2275: if(cursor<0) ! 2276: { if(recpos+cursor < 0) /*err(elist->cierr,110,"fmt")*/ ! 2277: cursor = -recpos; /* is this in the standard? */ ! 2278: if(external == 0) { ! 2279: extern char *icptr; ! 2280: icptr += cursor; ! 2281: } ! 2282: else if(curunit->useek) (void) fseek(cf,(long) cursor,1); ! 2283: else err(elist->cierr,106,"fmt"); ! 2284: recpos += cursor; ! 2285: cursor=0; ! 2286: } ! 2287: switch(p->op) ! 2288: { ! 2289: default: fprintf(stderr,"rd_ed, unexpected code: %d\n%s\n", ! 2290: p->op,fmtbuf); ! 2291: abort(); ! 2292: case I: ch = (rd_I((uint *)ptr,p->p1,len, 10)); ! 2293: break; ! 2294: case IM: ch = (rd_I((uint *)ptr,p->p1,len, 10)); ! 2295: break; ! 2296: case O: ch = (rd_I((uint *)ptr, p->p1, len, 8)); ! 2297: break; ! 2298: case L: ch = (rd_L((ftnint *)ptr,p->p1)); ! 2299: break; ! 2300: case A: ch = (rd_A(ptr,len)); ! 2301: break; ! 2302: case AW: ! 2303: ch = (rd_AW(ptr,p->p1,len)); ! 2304: break; ! 2305: case E: case EE: ! 2306: case D: ! 2307: case G: ! 2308: case GE: ! 2309: case F: ch = (rd_F((ufloat *)ptr,p->p1,p->p2,len)); ! 2310: break; ! 2311: } ! 2312: if(ch == 0) return(ch); ! 2313: else if(ch == EOF) return(EOF); ! 2314: clearerr(cf); ! 2315: return(errno); ! 2316: } ! 2317: rd_ned(p) struct syl *p; ! 2318: { ! 2319: switch(p->op) ! 2320: { ! 2321: default: fprintf(stderr,"rd_ned, unexpected code: %d\n%s\n", ! 2322: p->op,fmtbuf); ! 2323: abort(); ! 2324: case APOS: ! 2325: return(rd_POS(*(char **)&p->p2)); ! 2326: case H: return(rd_H(p->p1,*(char **)&p->p2)); ! 2327: case SLASH: return((*donewrec)()); ! 2328: case TR: ! 2329: case X: cursor += p->p1; ! 2330: return(1); ! 2331: case T: cursor=p->p1-recpos - 1; ! 2332: return(1); ! 2333: case TL: cursor -= p->p1; ! 2334: if(cursor < -recpos) /* TL1000, 1X */ ! 2335: cursor = -recpos; ! 2336: return(1); ! 2337: } ! 2338: } ! 2339: rd_I(n,w,len, base) ftnlen len; uint *n; register int base; ! 2340: { long x; ! 2341: int sign,ch; ! 2342: char s[84], *ps; ! 2343: ps=s; x=0; ! 2344: while (w) ! 2345: { ! 2346: GET(ch); ! 2347: if (ch==',' || ch=='\n') break; ! 2348: *ps=ch; ps++; w--; ! 2349: } ! 2350: *ps='\0'; ! 2351: ps=s; ! 2352: while (*ps==' ') ps++; ! 2353: if (*ps=='-') { sign=1; ps++; } ! 2354: else { sign=0; if (*ps=='+') ps++; } ! 2355: loop: while (*ps>='0' && *ps<='9') { x=x*base+(*ps-'0'); ps++; } ! 2356: if (*ps==' ') {if (cblank) x *= base; ps++; goto loop;} ! 2357: if(sign) x = -x; ! 2358: if(len==sizeof(integer)) n->il=x; ! 2359: else if(len == sizeof(char)) n->ic = x; ! 2360: else n->is=x; ! 2361: if (*ps) return(errno=115); else return(0); ! 2362: } ! 2363: rd_L(n,w) ftnint *n; ! 2364: { int ch; ! 2365: char s[84], *ps; ! 2366: ps=s; ! 2367: while (w) { ! 2368: GET(ch); ! 2369: if (ch==','||ch=='\n') break; ! 2370: *ps=ch; ! 2371: ps++; w--; ! 2372: } ! 2373: *ps='\0'; ! 2374: ps=s; while (*ps==' ') ps++; ! 2375: if (*ps=='.') ps++; ! 2376: if (*ps=='t' || *ps == 'T') { *n=1; return(0); } ! 2377: else if (*ps='f' || *ps == 'F') { *n=0; return(0); } ! 2378: else return(errno=116); ! 2379: } ! 2380: ! 2381: #include "ctype.h" ! 2382: ! 2383: rd_F(p, w, d, len) ! 2384: ftnlen len; ! 2385: ufloat *p; ! 2386: { ! 2387: char s[FMAX+EXPMAXDIGS+4]; ! 2388: register int ch; ! 2389: register char *sp, *spe, *sp1; ! 2390: double atof(), x; ! 2391: int scale1, se; ! 2392: long e, exp; ! 2393: ! 2394: sp1 = sp = s; ! 2395: spe = sp + FMAX; ! 2396: exp = -d; ! 2397: x = 0.; ! 2398: ! 2399: do { ! 2400: GET(ch); ! 2401: w--; ! 2402: } while (ch == ' ' && w); ! 2403: switch(ch) { ! 2404: case '-': *sp++ = ch; sp1++; spe++; ! 2405: case '+': ! 2406: if (!w) goto zero; ! 2407: --w; ! 2408: GET(ch); ! 2409: } ! 2410: while(ch == ' ') { ! 2411: blankdrop: ! 2412: if (!w--) goto zero; GET(ch); } ! 2413: while(ch == '0') ! 2414: { if (!w--) goto zero; GET(ch); } ! 2415: if (ch == ' ' && cblank) ! 2416: goto blankdrop; ! 2417: scale1 = scale; ! 2418: while(isdigit(ch)) { ! 2419: digloop1: ! 2420: if (sp < spe) *sp++ = ch; ! 2421: else ++exp; ! 2422: digloop1e: ! 2423: if (!w--) goto done; ! 2424: GET(ch); ! 2425: } ! 2426: if (ch == ' ') { ! 2427: if (cblank) ! 2428: { ch = '0'; goto digloop1; } ! 2429: goto digloop1e; ! 2430: } ! 2431: if (ch == '.') { ! 2432: exp += d; ! 2433: if (!w--) goto done; ! 2434: GET(ch); ! 2435: if (sp == sp1) { /* no digits yet */ ! 2436: while(ch == '0') { ! 2437: skip01: ! 2438: --exp; ! 2439: skip0: ! 2440: if (!w--) goto done; ! 2441: GET(ch); ! 2442: } ! 2443: if (ch == ' ') { ! 2444: if (cblank) goto skip01; ! 2445: goto skip0; ! 2446: } ! 2447: } ! 2448: while(isdigit(ch)) { ! 2449: digloop2: ! 2450: if (sp < spe) ! 2451: { *sp++ = ch; --exp; } ! 2452: digloop2e: ! 2453: if (!w--) goto done; ! 2454: GET(ch); ! 2455: } ! 2456: if (ch == ' ') { ! 2457: if (cblank) ! 2458: { ch = '0'; goto digloop2; } ! 2459: goto digloop2e; ! 2460: } ! 2461: } ! 2462: switch(ch) { ! 2463: default: ! 2464: break; ! 2465: case '-': se = 1; goto signonly; ! 2466: case '+': se = 0; goto signonly; ! 2467: case 'e': ! 2468: case 'E': ! 2469: case 'd': ! 2470: case 'D': ! 2471: if (!w--) ! 2472: goto bad; ! 2473: GET(ch); ! 2474: while(ch == ' ') { ! 2475: if (!w--) ! 2476: goto bad; ! 2477: GET(ch); ! 2478: } ! 2479: se = 0; ! 2480: switch(ch) { ! 2481: case '-': se = 1; ! 2482: case '+': ! 2483: signonly: ! 2484: if (!w--) ! 2485: goto bad; ! 2486: GET(ch); ! 2487: } ! 2488: while(ch == ' ') { ! 2489: if (!w--) ! 2490: goto bad; ! 2491: GET(ch); ! 2492: } ! 2493: if (!isdigit(ch)) ! 2494: goto bad; ! 2495: ! 2496: e = ch - '0'; ! 2497: for(;;) { ! 2498: if (!w--) ! 2499: { ch = '\n'; break; } ! 2500: GET(ch); ! 2501: if (!isdigit(ch)) { ! 2502: if (ch == ' ') { ! 2503: if (cblank) ! 2504: ch = '0'; ! 2505: else continue; ! 2506: } ! 2507: else ! 2508: break; ! 2509: } ! 2510: e = 10*e + ch - '0'; ! 2511: if (e > EXPMAX && sp > sp1) ! 2512: goto bad; ! 2513: } ! 2514: if (se) ! 2515: exp -= e; ! 2516: else ! 2517: exp += e; ! 2518: scale1 = 0; ! 2519: } ! 2520: switch(ch) { ! 2521: case '\n': ! 2522: case ',': ! 2523: break; ! 2524: default: ! 2525: bad: ! 2526: return (errno = 115); ! 2527: } ! 2528: done: ! 2529: if (sp > sp1) { ! 2530: while(*--sp == '0') ! 2531: ++exp; ! 2532: if (exp -= scale1) ! 2533: sprintf(sp+1, "e%ld", exp); ! 2534: else ! 2535: sp[1] = 0; ! 2536: x = atof(s); ! 2537: } ! 2538: zero: ! 2539: if (len == sizeof(real)) ! 2540: p->pf = x; ! 2541: else ! 2542: p->pd = x; ! 2543: return(0); ! 2544: } ! 2545: ! 2546: ! 2547: rd_A(p,len) char *p; ftnlen len; ! 2548: { int i,ch; ! 2549: for(i=0;i<len;i++) ! 2550: { GET(ch); ! 2551: *p++=VAL(ch); ! 2552: } ! 2553: return(0); ! 2554: } ! 2555: rd_AW(p,w,len) char *p; ftnlen len; ! 2556: { int i,ch; ! 2557: if(w>=len) ! 2558: { for(i=0;i<w-len;i++) ! 2559: GET(ch); ! 2560: for(i=0;i<len;i++) ! 2561: { GET(ch); ! 2562: *p++=VAL(ch); ! 2563: } ! 2564: return(0); ! 2565: } ! 2566: for(i=0;i<w;i++) ! 2567: { GET(ch); ! 2568: *p++=VAL(ch); ! 2569: } ! 2570: for(i=0;i<len-w;i++) *p++=' '; ! 2571: return(0); ! 2572: } ! 2573: rd_H(n,s) char *s; ! 2574: { int i,ch; ! 2575: for(i=0;i<n;i++) ! 2576: if((ch=(*getn)())<0) return(ch); ! 2577: else *s++ = ch=='\n'?' ':ch; ! 2578: return(1); ! 2579: } ! 2580: rd_POS(s) char *s; ! 2581: { char quote; ! 2582: int ch; ! 2583: quote= *s++; ! 2584: for(;*s;s++) ! 2585: if(*s==quote && *(s+1)!=quote) break; ! 2586: else if((ch=(*getn)())<0) return(ch); ! 2587: else *s = ch=='\n'?' ':ch; ! 2588: return(1); ! 2589: } ! 2590: ./ ADD NAME=libI77/rewind.c TIME=628440564 ! 2591: #include "f2c.h" ! 2592: #include "fio.h" ! 2593: integer f_rew(a) alist *a; ! 2594: { ! 2595: unit *b; ! 2596: if(a->aunit>=MXUNIT || a->aunit<0) err(a->aerr,101,"rewind"); ! 2597: b = &units[a->aunit]; ! 2598: if(b->ufd == NULL) return(0); ! 2599: if(!b->useek) err(a->aerr,106,"rewind") ! 2600: if(b->uwrt) { ! 2601: (void) t_runc(a); ! 2602: b->uwrt = 3; ! 2603: } ! 2604: rewind(b->ufd); ! 2605: b->uend=0; ! 2606: return(0); ! 2607: } ! 2608: ./ ADD NAME=libI77/rsfe.c TIME=628440564 ! 2609: /* read sequential formatted external */ ! 2610: #include "f2c.h" ! 2611: #include "fio.h" ! 2612: #include "fmt.h" ! 2613: extern int x_getc(),rd_ed(),rd_ned(); ! 2614: extern int x_endp(),x_rev(),xrd_SL(); ! 2615: integer s_rsfe(a) cilist *a; /* start */ ! 2616: { int n; ! 2617: if(!init) f_init(); ! 2618: if(n=c_sfe(a)) return(n); ! 2619: reading=1; ! 2620: sequential=1; ! 2621: formatted=1; ! 2622: external=1; ! 2623: elist=a; ! 2624: cursor=recpos=0; ! 2625: scale=0; ! 2626: fmtbuf=a->cifmt; ! 2627: curunit= &units[a->ciunit]; ! 2628: cf=curunit->ufd; ! 2629: if(pars_f(fmtbuf)<0) err(a->cierr,100,"startio"); ! 2630: getn= x_getc; ! 2631: doed= rd_ed; ! 2632: doned= rd_ned; ! 2633: fmt_bg(); ! 2634: doend=x_endp; ! 2635: donewrec=xrd_SL; ! 2636: dorevert=x_rev; ! 2637: cblank=curunit->ublnk; ! 2638: cplus=0; ! 2639: if(curunit->uwrt && nowreading(curunit)) ! 2640: err(a->cierr,errno,"read start"); ! 2641: return(0); ! 2642: } ! 2643: xrd_SL() ! 2644: { int ch; ! 2645: if(!curunit->uend) ! 2646: while((ch=getc(cf))!='\n' && ch!=EOF); ! 2647: cursor=recpos=0; ! 2648: return(1); ! 2649: } ! 2650: x_getc() ! 2651: { int ch; ! 2652: if(curunit->uend) return(EOF); ! 2653: ch = getc(cf); ! 2654: if(ch!=EOF && ch!='\n') ! 2655: { recpos++; ! 2656: return(ch); ! 2657: } ! 2658: if(ch=='\n') ! 2659: { (void) ungetc(ch,cf); ! 2660: return(ch); ! 2661: } ! 2662: if(curunit->uend || feof(cf)) ! 2663: { errno=0; ! 2664: curunit->uend=1; ! 2665: return(-1); ! 2666: } ! 2667: return(-1); ! 2668: } ! 2669: x_endp() ! 2670: { ! 2671: (void) xrd_SL(); ! 2672: return(0); ! 2673: } ! 2674: x_rev() ! 2675: { ! 2676: (void) xrd_SL(); ! 2677: return(0); ! 2678: } ! 2679: ./ ADD NAME=libI77/sfe.c TIME=628440564 ! 2680: /* sequential formatted external common routines*/ ! 2681: #include "f2c.h" ! 2682: #include "fio.h" ! 2683: ! 2684: extern char *fmtbuf; ! 2685: ! 2686: integer e_rsfe() ! 2687: { int n; ! 2688: n=en_fio(); ! 2689: if (cf == stdout) ! 2690: fflush(stdout); ! 2691: else if (cf == stderr) ! 2692: fflush(stderr); ! 2693: fmtbuf=NULL; ! 2694: return(n); ! 2695: } ! 2696: c_sfe(a) cilist *a; /* check */ ! 2697: { unit *p; ! 2698: if(a->ciunit >= MXUNIT || a->ciunit<0) ! 2699: err(a->cierr,101,"startio"); ! 2700: p = &units[a->ciunit]; ! 2701: if(p->ufd==NULL && fk_open(SEQ,FMT,a->ciunit)) err(a->cierr,114,"sfe") ! 2702: if(!p->ufmt) err(a->cierr,102,"sfe") ! 2703: return(0); ! 2704: } ! 2705: integer e_wsfe() ! 2706: { return(e_rsfe()); ! 2707: } ! 2708: ./ ADD NAME=libI77/sue.c TIME=628440564 ! 2709: #include "f2c.h" ! 2710: #include "fio.h" ! 2711: extern int reclen; ! 2712: long recloc; ! 2713: ! 2714: integer s_rsue(a) cilist *a; ! 2715: { ! 2716: int n; ! 2717: if(!init) f_init(); ! 2718: reading=1; ! 2719: if(n=c_sue(a)) return(n); ! 2720: recpos=0; ! 2721: if(curunit->uwrt && nowreading(curunit)) ! 2722: err(a->cierr, errno, "read start"); ! 2723: if(fread((char *)&reclen,sizeof(int),1,cf) ! 2724: != 1) ! 2725: { if(feof(cf)) ! 2726: { curunit->uend = 1; ! 2727: err(a->ciend, EOF, "start"); ! 2728: } ! 2729: clearerr(cf); ! 2730: err(a->cierr, errno, "start"); ! 2731: } ! 2732: return(0); ! 2733: } ! 2734: integer s_wsue(a) cilist *a; ! 2735: { ! 2736: int n; ! 2737: if(!init) f_init(); ! 2738: if(n=c_sue(a)) return(n); ! 2739: reading=0; ! 2740: reclen=0; ! 2741: if(curunit->uwrt != 1 && nowwriting(curunit)) ! 2742: err(a->cierr, errno, "write start"); ! 2743: recloc=ftell(cf); ! 2744: (void) fseek(cf,(long)sizeof(int),1); ! 2745: return(0); ! 2746: } ! 2747: c_sue(a) cilist *a; ! 2748: { ! 2749: if(a->ciunit >= MXUNIT || a->ciunit < 0) ! 2750: err(a->cierr,101,"startio"); ! 2751: external=sequential=1; ! 2752: formatted=0; ! 2753: curunit = &units[a->ciunit]; ! 2754: elist=a; ! 2755: if(curunit->ufd==NULL && fk_open(SEQ,UNF,a->ciunit)) ! 2756: err(a->cierr,114,"sue"); ! 2757: cf=curunit->ufd; ! 2758: if(curunit->ufmt) err(a->cierr,103,"sue") ! 2759: if(!curunit->useek) err(a->cierr,103,"sue") ! 2760: return(0); ! 2761: } ! 2762: integer e_wsue() ! 2763: { long loc; ! 2764: (void) fwrite((char *)&reclen,sizeof(int),1,cf); ! 2765: loc=ftell(cf); ! 2766: (void) fseek(cf,recloc,0); ! 2767: (void) fwrite((char *)&reclen,sizeof(int),1,cf); ! 2768: (void) fseek(cf,loc,0); ! 2769: return(0); ! 2770: } ! 2771: integer e_rsue() ! 2772: { ! 2773: (void) fseek(cf,(long)(reclen-recpos+sizeof(int)),1); ! 2774: return(0); ! 2775: } ! 2776: ./ ADD NAME=libI77/uio.c TIME=628440564 ! 2777: #include "f2c.h" ! 2778: #include "fio.h" ! 2779: int reclen; ! 2780: do_us(number,ptr,len) ftnint *number; ftnlen len; char *ptr; ! 2781: { ! 2782: if(reading) ! 2783: { ! 2784: recpos += *number * len; ! 2785: if(recpos>reclen) ! 2786: { ! 2787: err(elist->ciend,(-1), "eof/uio"); ! 2788: } ! 2789: (void) fread(ptr,(int)len,(int)(*number),cf); ! 2790: return(0); ! 2791: } ! 2792: else ! 2793: { ! 2794: reclen += *number * len; ! 2795: (void) fwrite(ptr,(int)len,(int)(*number),cf); ! 2796: return(0); ! 2797: } ! 2798: } ! 2799: integer do_uio(number,ptr,len) ftnint *number; ftnlen len; char *ptr; ! 2800: { ! 2801: if(sequential) ! 2802: return(do_us(number,ptr,len)); ! 2803: else return(do_ud(number,ptr,len)); ! 2804: } ! 2805: do_ud(number,ptr,len) ftnint *number; ftnlen len; char *ptr; ! 2806: { ! 2807: recpos += *number * len; ! 2808: if(recpos > curunit->url && curunit->url!=1) ! 2809: err(elist->cierr,110,"eof/uio"); ! 2810: if(reading) ! 2811: { ! 2812: if(fread(ptr,(int)len,(int)(*number),cf) ! 2813: != *number) ! 2814: err(elist->cierr,27,"eof/uio") ! 2815: else return(0); ! 2816: } ! 2817: (void) fwrite(ptr,(int)len,(int)(*number),cf); ! 2818: return(0); ! 2819: } ! 2820: ./ ADD NAME=libI77/util.c TIME=628473389 ! 2821: #include "sys/types.h" ! 2822: #include "sys/stat.h" ! 2823: #include "f2c.h" ! 2824: #include "fio.h" ! 2825: ! 2826: g_char(a,alen,b) char *a,*b; ftnlen alen; ! 2827: { char *x=a+alen-1,*y=b+alen-1; ! 2828: *(y+1)=0; ! 2829: for(;x>=a && *x==' ';x--) *y--=0; ! 2830: for(;x>=a;*y--= *x--); ! 2831: } ! 2832: b_char(a,b,blen) char *a,*b; ftnlen blen; ! 2833: { int i; ! 2834: for(i=0;i<blen && *a!=0;i++) *b++= *a++; ! 2835: for(;i<blen;i++) *b++=' '; ! 2836: } ! 2837: inode(a) char *a; ! 2838: { struct stat x; ! 2839: if(stat(a,&x)<0) return(-1); ! 2840: return(x.st_ino); ! 2841: } ! 2842: #define DONE {*bufpos++=0; (void) close(file); return;} ! 2843: #define INTBOUND sizeof(int)-1 ! 2844: mvgbt(n,len,a,b) char *a,*b; ! 2845: { register int num=n*len; ! 2846: if( ((int)a&INTBOUND)==0 && ((int)b&INTBOUND)==0 && (num&INTBOUND)==0 ) ! 2847: { register int *x=(int *)a,*y=(int *)b; ! 2848: num /= sizeof(int); ! 2849: if(x>y) for(;num>0;num--) *y++= *x++; ! 2850: else for(num--;num>=0;num--) *(y+num)= *(x+num); ! 2851: } ! 2852: else ! 2853: { register char *x=a,*y=b; ! 2854: if(x>y) for(;num>0;num--) *y++= *x++; ! 2855: else for(num--;num>=0;num--) *(y+num)= *(x+num); ! 2856: } ! 2857: } ! 2858: ./ ADD NAME=libI77/wref.c TIME=628965453 ! 2859: #include "f2c.h" ! 2860: #include "fio.h" ! 2861: #include "fmt.h" ! 2862: #include "fp.h" ! 2863: #ifndef VAX ! 2864: #include "ctype.h" ! 2865: #endif ! 2866: ! 2867: wrt_E(p,w,d,e,len) ufloat *p; ftnlen len; ! 2868: { ! 2869: char buf[FMAX+EXPMAXDIGS+4], *s, *se; ! 2870: int d1, delta, e1, i, sign, signspace; ! 2871: double dd; ! 2872: #ifndef VAX ! 2873: int e0 = e; ! 2874: #endif ! 2875: ! 2876: if(e <= 0) ! 2877: e = 2; ! 2878: if(scale) { ! 2879: if(scale >= d + 2 || scale <= -d) ! 2880: goto nogood; ! 2881: } ! 2882: if(scale <= 0) ! 2883: --d; ! 2884: if (len == sizeof(real)) ! 2885: dd = p->pf; ! 2886: else ! 2887: dd = p->pd; ! 2888: if (dd >= 0.) { ! 2889: sign = 0; ! 2890: signspace = cplus; ! 2891: #ifndef VAX ! 2892: if (!dd) ! 2893: dd = 0.; /* avoid -0 */ ! 2894: #endif ! 2895: } ! 2896: else { ! 2897: signspace = sign = 1; ! 2898: dd = -dd; ! 2899: } ! 2900: delta = w - (2 /* for the . and the d adjustment above */ ! 2901: + 2 /* for the E+ */ + signspace + d + e); ! 2902: if (delta < 0) { ! 2903: nogood: ! 2904: while(--w >= 0) ! 2905: PUT('*'); ! 2906: return(0); ! 2907: } ! 2908: if (scale < 0) ! 2909: d += scale; ! 2910: if (d > FMAX) { ! 2911: d1 = d - FMAX; ! 2912: d = FMAX; ! 2913: } ! 2914: else ! 2915: d1 = 0; ! 2916: sprintf(buf,"%#.*E", d, dd); ! 2917: #ifndef VAX ! 2918: /* check for NaN, Infinity */ ! 2919: if (!isdigit(buf[0])) { ! 2920: delta = w - strlen(buf) - signspace; ! 2921: if (delta < 0) ! 2922: goto nogood; ! 2923: while(--delta >= 0) ! 2924: PUT(' '); ! 2925: if (signspace) ! 2926: PUT(sign ? '-' : '+'); ! 2927: for(s = buf; *s; s++) ! 2928: PUT(*s); ! 2929: return 0; ! 2930: } ! 2931: #endif ! 2932: se = buf + d + 3; ! 2933: if (scale != 1 && dd) ! 2934: sprintf(se, "%+.2d", atoi(se) + 1 - scale); ! 2935: s = ++se; ! 2936: if (e < 2) { ! 2937: if (*s != '0') ! 2938: goto nogood; ! 2939: } ! 2940: #ifndef VAX ! 2941: /* accommodate 3 significant digits in exponent */ ! 2942: if (s[2]) { ! 2943: #ifdef Pedantic ! 2944: if (!e0 && !s[3]) ! 2945: for(s -= 2, e1 = 2; s[0] = s[1]; s++); ! 2946: ! 2947: /* Pedantic gives the behavior that Fortran 77 specifies, */ ! 2948: /* i.e., requires that E be specified for exponent fields */ ! 2949: /* of more than 3 digits. With Pedantic undefined, we get */ ! 2950: /* the behavior that Cray displays -- you get a bigger */ ! 2951: /* exponent field if it fits. */ ! 2952: #else ! 2953: if (!e0) { ! 2954: for(s -= 2, e1 = 2; s[0] = s[1]; s++) ! 2955: #ifdef CRAY ! 2956: delta--; ! 2957: if ((delta += 4) < 0) ! 2958: goto nogood ! 2959: #endif ! 2960: ; ! 2961: } ! 2962: #endif ! 2963: else if (e0 >= 0) ! 2964: goto shift; ! 2965: else ! 2966: e1 = e; ! 2967: } ! 2968: else ! 2969: shift: ! 2970: #endif ! 2971: for(s += 2, e1 = 2; *s; ++e1, ++s) ! 2972: if (e1 >= e) ! 2973: goto nogood; ! 2974: while(--delta >= 0) ! 2975: PUT(' '); ! 2976: if (signspace) ! 2977: PUT(sign ? '-' : '+'); ! 2978: s = buf; ! 2979: i = scale; ! 2980: if (scale <= 0) { ! 2981: PUT('.'); ! 2982: for(; i < 0; ++i) ! 2983: PUT('0'); ! 2984: PUT(*s); ! 2985: s += 2; ! 2986: } ! 2987: else if (scale > 1) { ! 2988: PUT(*s); ! 2989: s += 2; ! 2990: while(--i > 0) ! 2991: PUT(*s++); ! 2992: PUT('.'); ! 2993: } ! 2994: if (d1) { ! 2995: se -= 2; ! 2996: while(s < se) PUT(*s++); ! 2997: se += 2; ! 2998: do PUT('0'); while(--d1 > 0); ! 2999: } ! 3000: while(s < se) ! 3001: PUT(*s++); ! 3002: if (e < 2) ! 3003: PUT(s[1]); ! 3004: else { ! 3005: while(++e1 <= e) ! 3006: PUT('0'); ! 3007: while(*s) ! 3008: PUT(*s++); ! 3009: } ! 3010: return 0; ! 3011: } ! 3012: ! 3013: wrt_F(p,w,d,len) ufloat *p; ftnlen len; ! 3014: { ! 3015: int d1, sign, n; ! 3016: double x; ! 3017: char *b, buf[MAXINTDIGS+MAXFRACDIGS+4], *s; ! 3018: ! 3019: x= (len==sizeof(real)?p->pf:p->pd); ! 3020: if (d < MAXFRACDIGS) ! 3021: d1 = 0; ! 3022: else { ! 3023: d1 = d - MAXFRACDIGS; ! 3024: d = MAXFRACDIGS; ! 3025: } ! 3026: if (x < 0.) ! 3027: { x = -x; sign = 1; } ! 3028: else { ! 3029: sign = 0; ! 3030: #ifndef VAX ! 3031: if (!x) ! 3032: x = 0.; ! 3033: #endif ! 3034: } ! 3035: ! 3036: if (n = scale) ! 3037: if (n > 0) ! 3038: do x *= 10.; while(--n > 0); ! 3039: else ! 3040: do x *= 0.1; while(++n < 0); ! 3041: ! 3042: #ifdef USE_STRLEN ! 3043: sprintf(b = buf, "%#.*f", d, x); ! 3044: n = strlen(b) + d1; ! 3045: #else ! 3046: n = sprintf(b = buf, "%#.*f", d, x) + d1; ! 3047: #endif ! 3048: ! 3049: if (buf[0] == '0' && d) ! 3050: { ++b; --n; } ! 3051: if (sign) { ! 3052: /* check for all zeros */ ! 3053: for(s = b;;) { ! 3054: while(*s == '0') s++; ! 3055: switch(*s) { ! 3056: case '.': ! 3057: s++; continue; ! 3058: case 0: ! 3059: sign = 0; ! 3060: } ! 3061: break; ! 3062: } ! 3063: } ! 3064: if (sign || cplus) ! 3065: ++n; ! 3066: if (n > w) { ! 3067: while(--w >= 0) ! 3068: PUT('*'); ! 3069: return 0; ! 3070: } ! 3071: for(w -= n; --w >= 0; ) ! 3072: PUT(' '); ! 3073: if (sign) ! 3074: PUT('-'); ! 3075: else if (cplus) ! 3076: PUT('+'); ! 3077: while(n = *b++) ! 3078: PUT(n); ! 3079: while(--d1 >= 0) ! 3080: PUT('0'); ! 3081: return 0; ! 3082: } ! 3083: ./ ADD NAME=libI77/wrtfmt.c TIME=629040813 ! 3084: #include "f2c.h" ! 3085: #include "fio.h" ! 3086: #include "fmt.h" ! 3087: extern int cursor; ! 3088: extern char *icvt(), *ecvt(); ! 3089: int hiwater; ! 3090: icilist *svic; ! 3091: char *icptr; ! 3092: mv_cur() /* shouldn't use fseek because it insists on calling fflush */ ! 3093: /* instead we know too much about stdio */ ! 3094: { ! 3095: if(external == 0) { ! 3096: if(cursor < 0) { ! 3097: if(hiwater < recpos) ! 3098: hiwater = recpos; ! 3099: recpos += cursor; ! 3100: icptr += cursor; ! 3101: cursor = 0; ! 3102: if(recpos < 0) ! 3103: err(elist->cierr, 110, "left off"); ! 3104: } ! 3105: else if(cursor > 0) { ! 3106: if(recpos + cursor >= svic->icirlen) ! 3107: err(elist->cierr, 110, "recend"); ! 3108: if(hiwater <= recpos) ! 3109: for(; cursor > 0; cursor--) ! 3110: (*putn)(' '); ! 3111: else if(hiwater <= recpos + cursor) { ! 3112: cursor -= hiwater - recpos; ! 3113: icptr += hiwater - recpos; ! 3114: recpos = hiwater; ! 3115: for(; cursor > 0; cursor--) ! 3116: (*putn)(' '); ! 3117: } ! 3118: else { ! 3119: icptr += cursor; ! 3120: recpos += cursor; ! 3121: } ! 3122: cursor = 0; ! 3123: } ! 3124: return(0); ! 3125: } ! 3126: if(cursor > 0) { ! 3127: if(hiwater <= recpos) ! 3128: for(;cursor>0;cursor--) (*putn)(' '); ! 3129: else if(hiwater <= recpos + cursor) { ! 3130: #ifndef NON_UNIX_STDIO ! 3131: if(cf->_ptr + hiwater - recpos < buf_end(cf)) ! 3132: cf->_ptr += hiwater - recpos; ! 3133: else ! 3134: #endif ! 3135: (void) fseek(cf, (long) (hiwater - recpos), 1); ! 3136: cursor -= hiwater - recpos; ! 3137: recpos = hiwater; ! 3138: for(; cursor > 0; cursor--) ! 3139: (*putn)(' '); ! 3140: } ! 3141: else { ! 3142: #ifndef NON_UNIX_STDIO ! 3143: if(cf->_ptr + cursor < buf_end(cf)) ! 3144: cf->_ptr += cursor; ! 3145: else ! 3146: #endif ! 3147: (void) fseek(cf, (long)cursor, 1); ! 3148: recpos += cursor; ! 3149: } ! 3150: } ! 3151: if(cursor<0) ! 3152: { ! 3153: if(cursor+recpos<0) err(elist->cierr,110,"left off"); ! 3154: #ifndef NON_UNIX_STDIO ! 3155: if(cf->_ptr + cursor >= cf->_base) ! 3156: cf->_ptr += cursor; ! 3157: else ! 3158: #endif ! 3159: if(curunit->useek) (void) fseek(cf,(long)cursor,1); ! 3160: else err(elist->cierr,106,"fmt"); ! 3161: if(hiwater < recpos) ! 3162: hiwater = recpos; ! 3163: recpos += cursor; ! 3164: cursor=0; ! 3165: } ! 3166: return(0); ! 3167: } ! 3168: w_ed(p,ptr,len) char *ptr; struct syl *p; ftnlen len; ! 3169: { ! 3170: if(cursor && mv_cur()) return(mv_cur()); ! 3171: switch(p->op) ! 3172: { ! 3173: default: ! 3174: fprintf(stderr,"w_ed, unexpected code: %d\n%s\n", ! 3175: p->op,fmtbuf); ! 3176: abort(); ! 3177: case I: return(wrt_I((uint *)ptr,p->p1,len, 10)); ! 3178: case IM: ! 3179: return(wrt_IM((uint *)ptr,p->p1,p->p2,len)); ! 3180: case O: return(wrt_I((uint *)ptr, p->p1, len, 8)); ! 3181: case L: return(wrt_L((uint *)ptr,p->p1, len)); ! 3182: case A: return(wrt_A(ptr,len)); ! 3183: case AW: ! 3184: return(wrt_AW(ptr,p->p1,len)); ! 3185: case D: ! 3186: case E: ! 3187: case EE: ! 3188: return(wrt_E((ufloat *)ptr,p->p1,p->p2,p->p3,len)); ! 3189: case G: ! 3190: case GE: ! 3191: return(wrt_G((ufloat *)ptr,p->p1,p->p2,p->p3,len)); ! 3192: case F: return(wrt_F((ufloat *)ptr,p->p1,p->p2,len)); ! 3193: } ! 3194: } ! 3195: w_ned(p) struct syl *p; ! 3196: { ! 3197: switch(p->op) ! 3198: { ! 3199: default: fprintf(stderr,"w_ned, unexpected code: %d\n%s\n", ! 3200: p->op,fmtbuf); ! 3201: abort(); ! 3202: case SLASH: ! 3203: return((*donewrec)()); ! 3204: case T: cursor = p->p1-recpos - 1; ! 3205: return(1); ! 3206: case TL: cursor -= p->p1; ! 3207: if(cursor < -recpos) /* TL1000, 1X */ ! 3208: cursor = -recpos; ! 3209: return(1); ! 3210: case TR: ! 3211: case X: ! 3212: cursor += p->p1; ! 3213: return(1); ! 3214: case APOS: ! 3215: return(wrt_AP(*(char **)&p->p2)); ! 3216: case H: ! 3217: return(wrt_H(p->p1,*(char **)&p->p2)); ! 3218: } ! 3219: } ! 3220: wrt_I(n,w,len, base) uint *n; ftnlen len; register int base; ! 3221: { int ndigit,sign,spare,i; ! 3222: long x; ! 3223: char *ans; ! 3224: if(len==sizeof(integer)) x=n->il; ! 3225: else if(len == sizeof(char)) x = n->ic; ! 3226: else x=n->is; ! 3227: ans=icvt(x,&ndigit,&sign, base); ! 3228: spare=w-ndigit; ! 3229: if(sign || cplus) spare--; ! 3230: if(spare<0) ! 3231: for(i=0;i<w;i++) (*putn)('*'); ! 3232: else ! 3233: { for(i=0;i<spare;i++) (*putn)(' '); ! 3234: if(sign) (*putn)('-'); ! 3235: else if(cplus) (*putn)('+'); ! 3236: for(i=0;i<ndigit;i++) (*putn)(*ans++); ! 3237: } ! 3238: return(0); ! 3239: } ! 3240: wrt_IM(n,w,m,len) uint *n; ftnlen len; ! 3241: { int ndigit,sign,spare,i,xsign; ! 3242: long x; ! 3243: char *ans; ! 3244: if(sizeof(integer)==len) x=n->il; ! 3245: else if(len == sizeof(char)) x = n->ic; ! 3246: else x=n->is; ! 3247: ans=icvt(x,&ndigit,&sign, 10); ! 3248: if(sign || cplus) xsign=1; ! 3249: else xsign=0; ! 3250: if(ndigit+xsign>w || m+xsign>w) ! 3251: { for(i=0;i<w;i++) (*putn)('*'); ! 3252: return(0); ! 3253: } ! 3254: if(x==0 && m==0) ! 3255: { for(i=0;i<w;i++) (*putn)(' '); ! 3256: return(0); ! 3257: } ! 3258: if(ndigit>=m) ! 3259: spare=w-ndigit-xsign; ! 3260: else ! 3261: spare=w-m-xsign; ! 3262: for(i=0;i<spare;i++) (*putn)(' '); ! 3263: if(sign) (*putn)('-'); ! 3264: else if(cplus) (*putn)('+'); ! 3265: for(i=0;i<m-ndigit;i++) (*putn)('0'); ! 3266: for(i=0;i<ndigit;i++) (*putn)(*ans++); ! 3267: return(0); ! 3268: } ! 3269: wrt_AP(s) ! 3270: char *s; ! 3271: { char quote; ! 3272: if(cursor && mv_cur()) return(mv_cur()); ! 3273: quote = *s++; ! 3274: for(;*s;s++) ! 3275: { if(*s!=quote) (*putn)(*s); ! 3276: else if(*++s==quote) (*putn)(*s); ! 3277: else return(1); ! 3278: } ! 3279: return(1); ! 3280: } ! 3281: wrt_H(a,s) ! 3282: char *s; ! 3283: { ! 3284: if(cursor && mv_cur()) return(mv_cur()); ! 3285: while(a--) (*putn)(*s++); ! 3286: return(1); ! 3287: } ! 3288: wrt_L(n,len, sz) uint *n; ftnlen sz; ! 3289: { int i; ! 3290: long x; ! 3291: if(sizeof(integer)==sz) x=n->il; ! 3292: else if(sz == sizeof(char)) x = n->ic; ! 3293: else x=n->is; ! 3294: for(i=0;i<len-1;i++) ! 3295: (*putn)(' '); ! 3296: if(x) (*putn)('T'); ! 3297: else (*putn)('F'); ! 3298: return(0); ! 3299: } ! 3300: wrt_A(p,len) char *p; ftnlen len; ! 3301: { ! 3302: while(len-- > 0) (*putn)(*p++); ! 3303: return(0); ! 3304: } ! 3305: wrt_AW(p,w,len) char * p; ftnlen len; ! 3306: { ! 3307: while(w>len) ! 3308: { w--; ! 3309: (*putn)(' '); ! 3310: } ! 3311: while(w-- > 0) ! 3312: (*putn)(*p++); ! 3313: return(0); ! 3314: } ! 3315: ! 3316: wrt_G(p,w,d,e,len) ufloat *p; ftnlen len; ! 3317: { double up = 1,x; ! 3318: int i,oldscale=scale,n,j; ! 3319: x= len==sizeof(real)?p->pf:p->pd; ! 3320: if(x < 0 ) x = -x; ! 3321: if(x<.1) return(wrt_E(p,w,d,e,len)); ! 3322: for(i=0;i<=d;i++,up*=10) ! 3323: { if(x>=up) continue; ! 3324: scale=0; ! 3325: if(e==0) n=4; ! 3326: else n=e+2; ! 3327: i=wrt_F(p,w-n,d-i,len); ! 3328: for(j=0;j<n;j++) (*putn)(' '); ! 3329: scale=oldscale; ! 3330: return(i); ! 3331: } ! 3332: return(wrt_E(p,w,d,e,len)); ! 3333: } ! 3334: ./ ADD NAME=libI77/wsfe.c TIME=628440564 ! 3335: /*write sequential formatted external*/ ! 3336: #include "f2c.h" ! 3337: #include "fio.h" ! 3338: #include "fmt.h" ! 3339: extern int x_putc(),w_ed(),w_ned(); ! 3340: extern int xw_end(),xw_rev(),x_wSL(); ! 3341: extern int hiwater; ! 3342: integer s_wsfe(a) cilist *a; /*start*/ ! 3343: { int n; ! 3344: if(!init) f_init(); ! 3345: if(n=c_sfe(a)) return(n); ! 3346: reading=0; ! 3347: sequential=1; ! 3348: formatted=1; ! 3349: external=1; ! 3350: elist=a; ! 3351: hiwater = cursor=recpos=0; ! 3352: nonl = 0; ! 3353: scale=0; ! 3354: fmtbuf=a->cifmt; ! 3355: curunit = &units[a->ciunit]; ! 3356: cf=curunit->ufd; ! 3357: if(pars_f(fmtbuf)<0) err(a->cierr,100,"startio"); ! 3358: putn= x_putc; ! 3359: doed= w_ed; ! 3360: doned= w_ned; ! 3361: doend=xw_end; ! 3362: dorevert=xw_rev; ! 3363: donewrec=x_wSL; ! 3364: fmt_bg(); ! 3365: cplus=0; ! 3366: cblank=curunit->ublnk; ! 3367: if(curunit->uwrt != 1 && nowwriting(curunit)) ! 3368: err(a->cierr,errno,"write start"); ! 3369: return(0); ! 3370: } ! 3371: x_putc(c) ! 3372: { ! 3373: /* this uses \n as an indicator of record-end */ ! 3374: if(c == '\n' && recpos < hiwater) { /* fseek calls fflush, a loss */ ! 3375: #ifndef NON_UNIX_STDIO ! 3376: if(cf->_ptr + hiwater - recpos < buf_end(cf)) ! 3377: cf->_ptr += hiwater - recpos; ! 3378: else ! 3379: #endif ! 3380: (void) fseek(cf, (long)(hiwater - recpos), 1); ! 3381: } ! 3382: putc(c,cf); ! 3383: recpos++; ! 3384: } ! 3385: pr_put(c) ! 3386: { static flag new = 1; ! 3387: recpos++; ! 3388: if(c=='\n') ! 3389: { new=1; ! 3390: putc(c,cf); ! 3391: } ! 3392: else if(new==1) ! 3393: { new=0; ! 3394: if(c=='0') putc('\n',cf); ! 3395: else if(c=='1') putc('\f',cf); ! 3396: } ! 3397: else putc(c,cf); ! 3398: } ! 3399: x_wSL() ! 3400: { ! 3401: (*putn)('\n'); ! 3402: recpos=0; ! 3403: cursor = 0; ! 3404: hiwater = 0; ! 3405: return(1); ! 3406: } ! 3407: xw_end() ! 3408: { ! 3409: if(nonl == 0) ! 3410: (*putn)('\n'); ! 3411: hiwater = recpos = cursor = 0; ! 3412: return(0); ! 3413: } ! 3414: xw_rev() ! 3415: { ! 3416: if(workdone) (*putn)('\n'); ! 3417: hiwater = recpos = cursor = 0; ! 3418: return(workdone=0); ! 3419: } ! 3420: ./ ADD NAME=libI77/namelist.c TIME=628989101 ! 3421: #include "f2c.h" ! 3422: #include "fio.h" ! 3423: ! 3424: s_rsne(a) ! 3425: cilist *a; ! 3426: { ! 3427: int n; ! 3428: if(!init) ! 3429: f_init(); ! 3430: if(n=c_le(a)) ! 3431: return(n); ! 3432: reading=1; ! 3433: external=1; ! 3434: formatted=1; ! 3435: ! 3436: err(a->cierr, 118, "namelist read -- not yet implemented"); ! 3437: } ! 3438: ! 3439: s_wsne(a) ! 3440: cilist *a; ! 3441: { ! 3442: int n; ! 3443: if(!init) ! 3444: f_init(); ! 3445: if(n=c_le(a)) ! 3446: return(n); ! 3447: reading=0; ! 3448: external=1; ! 3449: formatted=1; ! 3450: ! 3451: err(a->cierr, 118, "namelist write -- not yet implemented"); ! 3452: } ! 3453: ./ ENDUP
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.