Path: blob/main/RSDKv4/Reader.hpp
817 views
#ifndef READER_H1#define READER_H23#ifdef FORCE_CASE_INSENSITIVE45#include "fcaseopen.h"6#define FileIO FILE7#define fOpen(path, mode) fcaseopen(path, mode)8#define fRead(buffer, elementSize, elementCount, file) fread(buffer, elementSize, elementCount, file)9#define fSeek(file, offset, whence) fseek(file, offset, whence)10#define fTell(file) ftell(file)11#define fClose(file) fclose(file)12#define fWrite(buffer, elementSize, elementCount, file) fwrite(buffer, elementSize, elementCount, file)1314#else1516#if RETRO_USING_SDL1 || RETRO_USING_SDL217#define FileIO SDL_RWops18#define fOpen(path, mode) SDL_RWFromFile(path, mode)19#define fRead(buffer, elementSize, elementCount, file) SDL_RWread(file, buffer, elementSize, elementCount)20#define fSeek(file, offset, whence) SDL_RWseek(file, offset, whence)21#define fTell(file) SDL_RWtell(file)22#define fClose(file) SDL_RWclose(file)23#define fWrite(buffer, elementSize, elementCount, file) SDL_RWwrite(file, buffer, elementSize, elementCount)24#else25#define FileIO FILE26#define fOpen(path, mode) fopen(path, mode)27#define fRead(buffer, elementSize, elementCount, file) fread(buffer, elementSize, elementCount, file)28#define fSeek(file, offset, whence) fseek(file, offset, whence)29#define fTell(file) ftell(file)30#define fClose(file) fclose(file)31#define fWrite(buffer, elementSize, elementCount, file) fwrite(buffer, elementSize, elementCount, file)32#endif3334#endif3536#define RETRO_PACKFILE_COUNT (0x1000)37#define RETRO_PACK_COUNT (0x4)3839struct FileInfo {40char fileName[0x100];41int fileSize;42int vfileSize;43int readPos;44int bufferPosition;45int virtualFileOffset;46byte eStringPosA;47byte eStringPosB;48byte eStringNo;49byte eNybbleSwap;50bool useEncryption;51byte packID;52byte encryptionStringA[0x10];53byte encryptionStringB[0x10];54#if !RETRO_USE_ORIGINAL_CODE55FileIO *cFileHandle;56bool usingDataPack;57#endif58};5960struct RSDKFileInfo {61uint hash[4];62int offset;63int filesize;64bool encrypted;65byte packID;66};6768struct RSDKContainer {69RSDKFileInfo files[RETRO_PACKFILE_COUNT];70char packNames[RETRO_PACK_COUNT][0x400];71int fileCount;72int packCount;73};7475extern RSDKContainer rsdkContainer;7677extern char fileName[0x100];78extern byte fileBuffer[0x2000];79extern int fileSize;80extern int vFileSize;81extern int readPos;82extern int readSize;83extern int bufferPosition;84extern int virtualFileOffset;85extern bool useEncryption;86extern byte packID;87extern byte eStringPosA;88extern byte eStringPosB;89extern byte eStringNo;90extern byte eNybbleSwap;91extern byte encryptionStringA[0x10];92extern byte encryptionStringB[0x10];9394extern FileIO *cFileHandle;9596inline void CopyFilePath(char *dest, const char *src)97{98strcpy(dest, src);99for (int i = 0;; ++i) {100if (i >= strlen(dest)) {101break;102}103104if (dest[i] == '/')105dest[i] = '\\';106}107}108bool CheckRSDKFile(const char *filePath);109inline void CloseRSDKContainers()110{111for (int i = 0; i < 4; ++i) {112strcpy(rsdkContainer.packNames[i], "");113}114rsdkContainer.packCount = 0;115rsdkContainer.fileCount = 0;116}117118#if !RETRO_USE_ORIGINAL_CODE119int CheckFileInfo(const char *filepath);120#endif121122bool LoadFile(const char *filePath, FileInfo *fileInfo);123inline bool CloseFile()124{125int result = 0;126if (cFileHandle)127result = fClose(cFileHandle);128129cFileHandle = NULL;130return result;131}132133void GenerateELoadKeys(uint key1, uint key2);134135void FileRead(void *dest, int size);136void FileSkip(int count);137138inline size_t FillFileBuffer()139{140if (readPos + 0x2000 <= fileSize)141readSize = 0x2000;142else143readSize = fileSize - readPos;144145size_t result = fRead(fileBuffer, 1u, readSize, cFileHandle);146readPos += readSize;147bufferPosition = 0;148return result;149}150151void GetFileInfo(FileInfo *fileInfo);152void SetFileInfo(FileInfo *fileInfo);153size_t GetFilePosition();154void SetFilePosition(int newPos);155bool ReachedEndOfFile();156157#endif // !READER_H158159160