home *** CD-ROM | disk | FTP | other *** search
- #define CACHEOK 0
- #define BADCACHE 1
-
- #include <io.h>
- #include <fcntl.h>
- #include <sys\stat.h>
- #include <malloc.h>
-
- class readablecache
- {
- protected:
-
- char far *bpoint;
- int buffercount;
- unsigned int handle;
-
- public:
-
- char status;
-
- readablecache(int);
- char readitem();
- long lseek(long,int);
- long filelength();
- ~readablecache();
- };
-
- class writeablecache
- {
- protected:
-
- char far *bpoint;
- int buffercount;
- unsigned int handle;
-
- public:
-
- char status;
-
- writeablecache(int);
- void writeitem(char);
- ~writeablecache();
- };
-
-
- readablecache::readablecache(int handlec)
- {
- handle=handlec;
- buffercount=32000;
- if((bpoint=(char far *) _fcalloc(32000,sizeof(char)))==NULL) status=BADCACHE;
- else status=CACHEOK;
- }
-
- readablecache::~readablecache()
- {
- _ffree(bpoint);
- }
-
- char readablecache::readitem()
- {
- char buf;
- int rdbytes;
-
- bcj: if(status!=BADCACHE)
- {
- if(buffercount==32000)
- {
- rdbytes=read(handle,bpoint,32000);
- if(rdbytes==-1||rdbytes==0)
- {
- status=BADCACHE;
- goto bcj;
- }
- buffercount=0;
- }
- buf=bpoint[buffercount];
- status=CACHEOK;
- buffercount++;
- }
- else buf=0;
- return buf;
- }
-
- long readablecache::lseek(long offset,int origin)
- {
- buffercount=32000;
- return ::lseek(handle,offset,origin);
- }
-
- long readablecache::filelength()
- {
- return ::filelength(handle);
- }
-
- writeablecache::writeablecache(int handlec)
- {
- handle=handlec;
- buffercount=0;
- if((bpoint=(char far *) _fcalloc(32000,sizeof(char)))==NULL) status=BADCACHE;
- else status=CACHEOK;
- }
-
- writeablecache::~writeablecache()
- {
- bcj: if(status!=BADCACHE)
- {
- if(write(handle,bpoint,buffercount)==buffercount) status=BADCACHE;
- goto bcj;
- }
- _ffree(bpoint);
- }
-
- void writeablecache::writeitem(char item)
- {
- bcj: if(status!=BADCACHE)
- {
- if(buffercount==32000)
- {
- buffercount=0;
- if(write(handle,bpoint,32000)==-1)
- {
- status=BADCACHE;
- goto bcj;
- }
- }
- bpoint[buffercount]=item;
- buffercount++;
- }
- }
-