|
|
1.1 ! root 1: /* ! 2: * internal (character array) i/o ! 3: */ ! 4: ! 5: #include "fio.h" ! 6: #include "lio.h" ! 7: ! 8: extern int rd_ed(),rd_ned(),w_ed(),w_ned(); ! 9: extern int l_read(),l_write(); ! 10: int z_wnew(),z_rnew(),z_tab(); ! 11: ! 12: z_getc() ! 13: { ! 14: if(icptr >= icend && !recpos) /* new rec beyond eof */ ! 15: { leof = EOF; ! 16: return(EOF); ! 17: } ! 18: if(recpos++ < svic->icirlen) return(*icptr++); ! 19: return(' '); ! 20: } ! 21: ! 22: z_putc(c) char c; ! 23: { ! 24: if(icptr < icend) ! 25: { if(c=='\n') return(z_wnew()); ! 26: if(recpos++ < svic->icirlen) ! 27: { *icptr++ = c; ! 28: return(OK); ! 29: } ! 30: else err(errflag,110,"iio") ! 31: } ! 32: leof = EOF; ! 33: #ifndef KOSHER ! 34: err(endflag,EOF,"iio") /* NOT STANDARD, end-of-file on writes */ ! 35: #endif ! 36: #ifdef KOSHER ! 37: err(errflag,110,"iio") ! 38: #endif ! 39: } ! 40: ! 41: z_ungetc(ch,cf) char ch; ! 42: { if(ch==EOF || --recpos >= svic->icirlen) return(OK); ! 43: if(--icptr < svic->iciunit || recpos < 0) err(errflag,107,"ilio") ! 44: *icptr = ch; ! 45: return(OK); ! 46: } ! 47: ! 48: s_rsfi(a) icilist *a; ! 49: { ! 50: reading = YES; ! 51: doed=rd_ed; ! 52: doned=rd_ned; ! 53: getn=z_getc; ! 54: doend = donewrec = z_rnew; ! 55: dorevert = z_rnew; ! 56: dotab = z_tab; ! 57: return(c_si(a)); ! 58: } ! 59: ! 60: s_wsfi(a) icilist *a; ! 61: { ! 62: reading = NO; ! 63: doed=w_ed; ! 64: doned=w_ned; ! 65: putn=z_putc; ! 66: doend = donewrec = z_wnew; ! 67: dorevert = z_wnew; ! 68: dotab = z_tab; ! 69: return(c_si(a)); ! 70: } ! 71: ! 72: s_rdfi(a) icilist *a; ! 73: { ! 74: reading = YES; ! 75: doed = rd_ed; ! 76: doned = rd_ned; ! 77: getn = z_getc; ! 78: donewrec = z_rnew; ! 79: dorevert = doend = z_rnew; ! 80: dotab = z_tab; ! 81: return(c_di(a)); ! 82: } ! 83: ! 84: s_wdfi(a) icilist *a; ! 85: { ! 86: reading = NO; ! 87: doed = w_ed; ! 88: doned = w_ned; ! 89: putn = z_putc; ! 90: donewrec = z_wnew; ! 91: dorevert = doend = z_wnew; ! 92: dotab = z_tab; ! 93: return(c_di(a)); ! 94: } ! 95: ! 96: c_fi(a) icilist *a; ! 97: { ! 98: fmtbuf=a->icifmt; ! 99: formatted = FORMATTED; ! 100: external = NO; ! 101: cblank=cplus=NO; ! 102: scale=cursor=0; ! 103: radix = 10; ! 104: signit = YES; ! 105: elist = YES; ! 106: svic = a; ! 107: recpos=reclen=0; ! 108: icend = a->iciunit + a->icirnum*a->icirlen; ! 109: errflag = a->icierr; ! 110: endflag = a->iciend; ! 111: if(pars_f(fmtbuf)) err(errflag,100,"ifio") ! 112: fmt_bg(); ! 113: return(OK); ! 114: } ! 115: ! 116: c_si(a) icilist *a; ! 117: { ! 118: sequential = YES; ! 119: recnum = 0; ! 120: icptr = a->iciunit; ! 121: return(c_fi(a)); ! 122: } ! 123: ! 124: c_di(a) icilist *a; ! 125: { ! 126: sequential = NO; ! 127: recnum = a->icirec - 1; ! 128: icptr = a->iciunit + recnum*a->icirlen; ! 129: return(c_fi(a)); ! 130: } ! 131: ! 132: z_rnew() ! 133: { ! 134: icptr = svic->iciunit + (++recnum)*svic->icirlen; ! 135: recpos = reclen = cursor = 0; ! 136: return(OK); ! 137: } ! 138: ! 139: z_wnew() ! 140: { ! 141: if(reclen > recpos) ! 142: { icptr += (reclen - recpos); ! 143: recpos = reclen; ! 144: } ! 145: while(recpos < svic->icirlen) (*putn)(' '); ! 146: recpos = reclen = cursor = 0; ! 147: recnum++; ! 148: return(OK); ! 149: } ! 150: ! 151: z_tab() ! 152: { int n; ! 153: if(reclen < recpos) reclen = recpos; ! 154: if((recpos + cursor) < 0) return(107); ! 155: n = reclen - recpos; ! 156: if(!reading && (cursor-n) > 0) ! 157: { icptr += n; ! 158: recpos = reclen; ! 159: cursor -= n; ! 160: while(cursor--) if(n=(*putn)(' ')) return(n); ! 161: } ! 162: else ! 163: { icptr += cursor; ! 164: recpos += cursor; ! 165: } ! 166: return(cursor=0); ! 167: } ! 168: ! 169: e_rsfi() ! 170: { int n; ! 171: n = en_fio(); ! 172: fmtbuf = NULL; ! 173: return(n); ! 174: } ! 175: ! 176: e_wsfi() ! 177: { ! 178: return(e_rsfi()); ! 179: } ! 180: ! 181: e_rdfi() ! 182: { ! 183: return(e_rsfi()); ! 184: } ! 185: ! 186: e_wdfi() ! 187: { ! 188: return(e_wsfi()); ! 189: } ! 190: ! 191: c_li(a) icilist *a; ! 192: { ! 193: fmtbuf="int list io"; ! 194: sequential = formatted = LISTDIRECTED; ! 195: external = NO; ! 196: elist = YES; ! 197: svic = a; ! 198: recnum = recpos = 0; ! 199: cplus = cblank = NO; ! 200: icptr = a->iciunit; ! 201: icend = icptr + a->icirlen * a->icirnum; ! 202: errflag = a->icierr; ! 203: endflag = a->iciend; ! 204: leof = NO; ! 205: return(OK); ! 206: } ! 207: ! 208: s_rsli(a) icilist *a; ! 209: { ! 210: reading = YES; ! 211: lioproc = l_read; ! 212: getn = z_getc; ! 213: ungetn = z_ungetc; ! 214: l_first = YES; ! 215: lcount = 0; ! 216: lquit = NO; ! 217: return(c_li(a)); ! 218: } ! 219: ! 220: s_wsli(a) icilist *a; ! 221: { ! 222: reading = NO; ! 223: putn = z_putc; ! 224: lioproc = l_write; ! 225: line_len = a->icirlen; ! 226: return(c_li(a)); ! 227: } ! 228: ! 229: e_rsli() ! 230: { fmtbuf = NULL; ! 231: return(OK); ! 232: } ! 233: ! 234: e_wsli() ! 235: { fmtbuf = NULL; ! 236: reclen = recpos; ! 237: return(z_wnew()); ! 238: } ! 239: ! 240: ftnint ! 241: iiorec_() ! 242: { return(recnum); } ! 243: ! 244: ftnint ! 245: iiopos_() ! 246: { return(recpos); }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.