home *** CD-ROM | disk | FTP | other *** search
/ minnie.tuhs.org / unixen.tar / unixen / PDP-11 / Trees / V7 / usr / src / libI77 / rsfe.c < prev    next >
Encoding:
C/C++ Source or Header  |  1979-01-10  |  1.0 KB  |  68 lines

  1. /* read sequential formatted external */
  2. #include "fio.h"
  3. #include "fmt.h"
  4. extern int x_getc(),rd_ed(),rd_ned();
  5. extern int x_endp(),x_rev(),xrd_SL();
  6. s_rsfe(a) cilist *a; /* start */
  7. {    int n;
  8.     if(!init) f_init();
  9.     if(n=c_sfe(a,READ)) return(n);
  10.     reading=1;
  11.     sequential=1;
  12.     formatted=1;
  13.     external=1;
  14.     elist=a;
  15.     cursor=recpos=0;
  16.     scale=0;
  17.     fmtbuf=a->cifmt;
  18.     if(pars_f(fmtbuf)<0) err(a->cierr,100,"startio");
  19.     curunit= &units[a->ciunit];
  20.     cf=curunit->ufd;
  21.     getn= x_getc;
  22.     doed= rd_ed;
  23.     doned= rd_ned;
  24.     fmt_bg();
  25.     doend=x_endp;
  26.     donewrec=xrd_SL;
  27.     dorevert=x_rev;
  28.     cblank=curunit->ublnk;
  29.     cplus=0;
  30.     if(curunit->uwrt) nowreading(curunit);
  31.     return(0);
  32. }
  33. xrd_SL()
  34. {    int ch;
  35.     if(!curunit->uend)
  36.         while((ch=getc(cf))!='\n' && ch!=EOF);
  37.     cursor=recpos=0;
  38.     return(1);
  39. }
  40. x_getc()
  41. {    int ch;
  42.     if(curunit->uend) return(EOF);
  43.     if((ch=getc(cf))!=EOF && ch!='\n')
  44.     {    recpos++;
  45.         return(ch);
  46.     }
  47.     if(ch=='\n')
  48.     {    ungetc(ch,cf);
  49.         return(ch);
  50.     }
  51.     if(feof(cf))
  52.     {    errno=0;
  53.         curunit->uend=1;
  54.         return(-1);
  55.     }
  56.     return(-1);
  57. }
  58. x_endp()
  59. {
  60.     xrd_SL();
  61.     return(0);
  62. }
  63. x_rev()
  64. {
  65.     xrd_SL();
  66.     return(0);
  67. }
  68.