home *** CD-ROM | disk | FTP | other *** search
/ Media Share 13 / mediashare_13.zip / mediashare_13 / ZIPPED / PROGRAM / SNPD9404.ZIP / HUGEREAD.C < prev    next >
C/C++ Source or Header  |  1994-04-03  |  2KB  |  95 lines

  1. .I 30 1
  2. #include <stdio.h>
  3. .I 68 6
  4.       unsigned long base, para;
  5.  
  6.       base = (unsigned long)(ptr & 0xffff000fL);
  7.       para = (unsigned long)(ptr & 0x0000fff0L);
  8.       para <<= 12;
  9.       return (void FAR *)(base + para);
  10. .D 69 5
  11. .I 157 83
  12.  
  13. /*
  14. **  Read any size block to anywhere in memory
  15. */
  16.  
  17. long hugefread(FILE *fp, char FAR *buf, long size)
  18. {
  19.       long count;
  20.       size_t bufsiz;
  21.       char *tmp;
  22.       long ercode = size;
  23.  
  24.       if (4 > sizeof(void *))
  25.       {
  26.             if (0 == (bufsiz = gettmp(&tmp)))
  27.                   return -1L;
  28.       }
  29.       else
  30.       {
  31.             tmp = (char *)buf;
  32.             bufsiz = 0x4000;
  33.       }
  34.  
  35.       while (0 < (count = min(size, (long)bufsiz)))
  36.       {
  37.             int i, numread = fread(tmp, 1, (size_t)count, fp);
  38.  
  39.             if (1 > numread || numread != (int)count)
  40.                   return -1L;
  41.             if (4 > sizeof(void *))
  42.             {
  43.                   for (i = 0; i < count; ++i)
  44.                         buf[i] = tmp[i];
  45.             }
  46.             buf = farnormal(buf + count);
  47.             size -= count;
  48.             if (2 < sizeof(void *))
  49.                   tmp = (char *)buf;
  50.       }
  51.       return ercode;
  52. }
  53.  
  54. /*
  55. **  Write any size block from anywhere in memory
  56. */
  57.  
  58. long hugefwrite(FILE *fp, char FAR *buf, long size)
  59. {
  60.       long count;
  61.       size_t bufsiz;
  62.       char *tmp;
  63.       long ercode = size;
  64.  
  65.       if (4 > sizeof(void *))
  66.       {
  67.             if (0 == (bufsiz = gettmp(&tmp)))
  68.                   return -1L;
  69.       }
  70.       else
  71.       {
  72.             tmp = (char *)buf;
  73.             bufsiz = 0x4000;
  74.       }
  75.  
  76.       while (0 < (count = min(size, (long)bufsiz)))
  77.       {
  78.             int i, numwrite;
  79.  
  80.             if (4 > sizeof(void *))
  81.             {
  82.                   for (i = 0; i < count; ++i)
  83.                         tmp[i] = buf[i];
  84.             }
  85.             numwrite = fwrite(tmp, 1, (size_t)count, fp);
  86.             if (1 > numwrite || numwrite != (int)count)
  87.                   return -1L;
  88.             buf = farnormal(buf + count);
  89.             size -= count;
  90.             if (2 < sizeof(void *))
  91.                   tmp = (char *)buf;
  92.       }
  93.       return ercode;
  94. }
  95.