//------------------------------------------- //--- File probes //------------------------------------------- bool rFile::fileExists(void) { //Make sure we have a path and file name if((!fileName.nLen && !fileName.pLen) || !fileName.nLen) return false; else { //Examine file FILE *fPtr; //File doesn't exist if( fopen_s(&fPtr, getFull(), "r") != 0) { return false; } //File exists, close it if it's open else { if(fPtr) fclose(fPtr); return true; } } }
//--- Write data and headers bool rFileDDS::writeDDS(const void *data) { //File name errors if(!fileName.nLen || !fileName.pLen) return false; //DDS errors if(!ddsHead.dwHeight || !ddsHead.dwWidth || !ddsHead.dwPitchOrLinearSize) return false; else { FILE *fp; ddsHead.ddspf = ddsPX; fopen_s(&fp, getFull(), "wb"); //Write headers and data fwrite(DDS_Ident, sizeof(DDS_Ident), 1, fp); fwrite(&ddsHead, sizeof(DWORD), 31, fp); fwrite(data, sizeof(data), sizeof(data) * ddsHead.dwHeight * ddsHead.dwWidth, fp); fclose(fp); return true; } }
//------------------------------------------- //--- Read and Write //------------------------------------------- char* rFile::readAll(void) { //Make sure we have a path and file name if((!fileName.nLen && !fileName.pLen) || !fileName.nLen) return NULL; if(!fileExists()) return NULL; else { FILE *fp; long len; char *buf; fopen_s(&fp, getFull(), "rb"); fseek(fp, 0, SEEK_END); //go to end len=ftell(fp); //get position at end (length) fseek(fp, 0, SEEK_SET); //go to beg. buf = new char[len]; //malloc buffer fread(buf, len, 1, fp); //read into buffer fclose(fp); dataLen = len; typeSize = sizeof(buf); return buf; } }
//Append to current file bool rFile::writeAppend(const char* data) { if(!fileName.nLen || !fileName.pLen || !dataLen || !typeSize) return false; else { FILE *fp; fopen_s(&fp, getFull(), "ab+"); fwrite(data, typeSize, dataLen / typeSize, fp); fclose(fp); return true; } }
SDL_Rect* TextureSheet::getFrame(int index) { return info_ ? &frames_[index] : getFull(); }