00001
00025 #include "filereader.h"
00026
00029 void frfeed(filereader* fr)
00030 {
00031 fread(fr->buffer, BUFFER_SIZE, 1, fr->fd);
00032 fr->bufferPos = 0;
00033 }
00034
00039 void frread(filereader* fr, void* destPtr, unsigned long int size)
00040 {
00041 if(BUFFER_SIZE-fr->bufferPos >= size)
00042 {
00043 memcpy(destPtr,&fr->buffer[fr->bufferPos],size);
00044 fr->bufferPos += size;
00045 }
00046 else
00047 {
00048
00049 char* tempPtr = (char*)destPtr;
00050 memcpy( tempPtr, &fr->buffer[fr->bufferPos], BUFFER_SIZE-fr->bufferPos );
00051 tempPtr+=BUFFER_SIZE-fr->bufferPos;
00052 size-=BUFFER_SIZE-fr->bufferPos;
00053
00054
00055 do
00056 {
00057 fr->currSector++;
00058 frfeed(fr);
00059 if(size>=BUFFER_SIZE)
00060 {
00061 memcpy(tempPtr, fr->buffer, BUFFER_SIZE);
00062 tempPtr+=BUFFER_SIZE;
00063 size-=BUFFER_SIZE;
00064 }
00065 else
00066 {
00067 memcpy(tempPtr, fr->buffer, size);
00068 fr->bufferPos += size;
00069 size=0;
00070 }
00071 }while(size>0);
00072 }
00073 }
00074
00078 void frseek(filereader* fr, unsigned long int seekPosition)
00079 {
00080 unsigned long int sectorToSeek;
00081
00082 sectorToSeek = seekPosition / 2048;
00083
00084 fseek(fr->fd, sectorToSeek * 2048, SEEK_SET);
00085
00086 fr->currSector = sectorToSeek;
00087 frfeed(fr);
00088 fr->bufferPos = (seekPosition - (sectorToSeek*2048));
00089 }
00090
00095 int fropen(filereader* fr, const char* filename)
00096 {
00097 fr->fd = fopen((const char*)filename,"rb");
00098
00099 if(fr->fd)
00100 {
00101 fr->currSector = 0;
00102 frfeed(fr);
00103 return 1;
00104 }
00105
00106 return 0;
00107 }
00108
00111 void frclose(filereader* fr)
00112 {
00113 fclose(fr->fd);
00114 }