From f8f181bd33e08d6ddb4ccbab78d86c7445269dd8 Mon Sep 17 00:00:00 2001 From: Raimon Zamora Date: Mon, 10 May 2021 18:50:06 +0200 Subject: [PATCH] Modern respak used, changed pack and code --- data.jrf | Bin 3945551 -> 3945744 bytes fileManager.cpp | 166 +++++++++++++++++++++++++----------------------- fileManager.h | 6 +- 3 files changed, 92 insertions(+), 80 deletions(-) diff --git a/data.jrf b/data.jrf index 3e87df104cdd84e997c5748fe89730af9f14b9ca..13b42128fc613c715f433cf3e9dbfed3c94a4393 100644 GIT binary patch delta 2864 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 +#include -char *resourceFileName = "data.jrf"; +#pragma pack(push,1) -void setResourceFile(char *p_resourceFileName) { +struct DATA_Header { + char magic[4]; + Uint32 num_files; + Uint32 index_offset; +}; + +struct DATA_Info { + Uint32 offset; + Uint32 length; + char name[13]; +}; + +struct DATA_Index { + DATA_Info* file_info; +}; + +struct DATA_File { + DATA_Header header; + DATA_Index index; +}; + +#pragma pack(pop) + +static const char *resourceFileName = "data.jrf"; +static DATA_File *data_file = NULL; + +void file_setResourceFile(const char *p_resourceFileName) { resourceFileName = p_resourceFileName; } -char *GetBufferFromResource(char *resourcename, int *filesize) -{ - //Try to open the resource file in question - int fd = open(resourceFileName, O_RDONLY); - if (fd < 0) - { - perror("Error opening resource file"); - exit(1); - } - - //Make sure we're at the beginning of the file - lseek(fd, 0, SEEK_SET); - - //Read the first INT, which will tell us how many files are in this resource - int numfiles; - int resultat = read(fd, &numfiles, sizeof(int)); - -#ifdef _WIN32 - int final = eof(fd); -#endif +static void getDataFile() { + std::ifstream fd( resourceFileName, std::ios::in | std::ios::binary ); - //Get the pointers to the stored files - int *filestart = (int *) malloc(sizeof(int) * numfiles); - resultat = read(fd, filestart, sizeof(int) * numfiles); - - //Loop through the files, looking for the file in question - int filenamesize; - char *buffer; - int i; - for(i=0;iheader, sizeof( DATA_Header ) ); + + fd.seekg( data_file->header.index_offset ); + + data_file->index.file_info = (DATA_Info*)malloc( data_file->header.num_files * sizeof( DATA_Info ) ); + + fd.read( (char*)data_file->index.file_info, data_file->header.num_files * sizeof( DATA_Info ) ); + + fd.close(); +} + +const char *file_setBufferFromResource(const char *resourcename, int& filesize) { + + if( data_file == NULL ) { + getDataFile(); + } + + bool found = false; + int count = 0; + while( !found && count < data_file->header.num_files ) { + found = ( strcmp( resourcename, data_file->index.file_info[count].name ) == 0 ); + if( !found ) count++; + } + + if( !found ) { + perror("El recurs no s'ha trobat en l'arxiu de recursos"); + exit(1); + } + + filesize = data_file->index.file_info[count].length; + + std::ifstream fd( resourceFileName, std::ios::in | std::ios::binary ); + + if( fd.fail() ) { + perror("No s'ha pogut obrir l'arxiu de recursos"); + exit(1); + } + + fd.seekg( data_file->index.file_info[count].offset ); + + char* buffer = (char*)malloc( filesize ); + fd.read( buffer, filesize ); + + fd.close(); + return buffer; } + +void file_quit() { + if( data_file != NULL ) { + free( data_file->index.file_info ); + free( data_file ); + } +} diff --git a/fileManager.h b/fileManager.h index e1d49f8..c34e7c4 100644 --- a/fileManager.h +++ b/fileManager.h @@ -1,5 +1,7 @@ #pragma once -void setResourceFile(char *p_resourceFileName); +void file_setResourceFile(const char *p_resourceFileName); -char *GetBufferFromResource(char *resourcename, int *filesize); +const char *file_getBufferFromResource(const char *resourcename, int& filesize); + +void file_quit();