home *** CD-ROM | disk | FTP | other *** search
/ Geek Gadgets 1 / ADE-1.bin / ade-dist / g77-0.5.15-src.tgz / tar.out / fsf / g77 / f / runtime / libI77 / uio.c < prev    next >
C/C++ Source or Header  |  1996-09-28  |  2KB  |  70 lines

  1. #include "f2c.h"
  2. #include "fio.h"
  3. #include "sys/types.h"
  4. uiolen f__reclen;
  5.  
  6. #ifdef KR_headers
  7. do_us(number,ptr,len) ftnint *number; char *ptr; ftnlen len;
  8. #else
  9. do_us(ftnint *number, char *ptr, ftnlen len)
  10. #endif
  11. {
  12.     if(f__reading)
  13.     {
  14.         f__recpos += (int)(*number * len);
  15.         if(f__recpos>f__reclen)
  16.             err(f__elist->cierr, 110, "do_us");
  17.         if (fread(ptr,(int)len,(int)(*number),f__cf) != *number)
  18.             err(f__elist->ciend, EOF, "do_us");
  19.         return(0);
  20.     }
  21.     else
  22.     {
  23.         f__reclen += *number * len;
  24.         (void) fwrite(ptr,(int)len,(int)(*number),f__cf);
  25.         return(0);
  26.     }
  27. }
  28. #ifdef KR_headers
  29. integer do_ud(number,ptr,len) ftnint *number; char *ptr; ftnlen len;
  30. #else
  31. integer do_ud(ftnint *number, char *ptr, ftnlen len)
  32. #endif
  33. {
  34.     f__recpos += (int)(*number * len);
  35.     if(f__recpos > f__curunit->url && f__curunit->url!=1)
  36.         err(f__elist->cierr,110,"do_ud");
  37.     if(f__reading)
  38.     {
  39. #ifdef Pad_UDread
  40. #ifdef KR_headers
  41.     int i;
  42. #else
  43.     size_t i;
  44. #endif
  45.         if (!(i = fread(ptr,(int)len,(int)(*number),f__cf))
  46.          && !(f__recpos - *number*len))
  47.             err(f__elist->cierr,EOF,"do_ud")
  48.         if (i < *number)
  49.             memset(ptr + i*len, 0, (*number - i)*len);
  50.         return 0;
  51. #else
  52.         if(fread(ptr,(int)len,(int)(*number),f__cf) != *number)
  53.             err(f__elist->cierr,EOF,"do_ud")
  54.         else return(0);
  55. #endif
  56.     }
  57.     (void) fwrite(ptr,(int)len,(int)(*number),f__cf);
  58.     return(0);
  59. }
  60. #ifdef KR_headers
  61. integer do_uio(number,ptr,len) ftnint *number; char *ptr; ftnlen len;
  62. #else
  63. integer do_uio(ftnint *number, char *ptr, ftnlen len)
  64. #endif
  65. {
  66.     if(f__sequential)
  67.         return(do_us(number,ptr,len));
  68.     else    return(do_ud(number,ptr,len));
  69. }
  70.