From 4c430ec512b34c18d39f1078649c833901774da0 Mon Sep 17 00:00:00 2001 From: Raimon Zamora Date: Mon, 16 Oct 2023 18:39:41 +0200 Subject: [PATCH] =?UTF-8?q?-=20Ara=20al=20carregar=20un=20arxiu=20la=20var?= =?UTF-8?q?iable=20on=20guardar=20el=20tamany=20s'envia=20com=20un=20punte?= =?UTF-8?q?r,=20aix=C3=AD=20es=20pot=20ignorar.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- source/gamestate_postfase.cpp | 2 +- source/gamestate_prefase.cpp | 2 +- source/gamestate_sequence.cpp | 17 +++++++++++------ source/jaudio.cpp | 2 +- source/jdraw.cpp | 4 ++-- source/jfile.cpp | 17 ++++++++++------- source/jfile.h | 4 ++-- 7 files changed, 28 insertions(+), 20 deletions(-) diff --git a/source/gamestate_postfase.cpp b/source/gamestate_postfase.cpp index cac3499..ff8968a 100644 --- a/source/gamestate_postfase.cpp +++ b/source/gamestate_postfase.cpp @@ -140,7 +140,7 @@ namespace gamestate char *ObtenerPasswordDeFase() { int filesize = 0; - const char *buffer = file::getFileBuffer("offsets.bal", filesize); + const char *buffer = file::getFileBuffer("offsets.bal", &filesize); int punter = (game::getConfig("fase")-1)*11; diff --git a/source/gamestate_prefase.cpp b/source/gamestate_prefase.cpp index 006fb80..89608c1 100644 --- a/source/gamestate_prefase.cpp +++ b/source/gamestate_prefase.cpp @@ -69,7 +69,7 @@ namespace gamestate void carregarMapa() { int filesize = 0; - char *buffer = file::getFileBuffer("MAPES.BAL", filesize); + char *buffer = file::getFileBuffer("MAPES.BAL", &filesize); char *punter = buffer + (game::getConfig("fase") * 212) + 3; diff --git a/source/gamestate_sequence.cpp b/source/gamestate_sequence.cpp index e9d8766..8f5fed3 100644 --- a/source/gamestate_sequence.cpp +++ b/source/gamestate_sequence.cpp @@ -43,7 +43,7 @@ namespace gamestate } int filesize; - sequence_file = file::getFilePointer(filename, filesize); + sequence_file = file::getFilePointer(filename, &filesize); game::setState(&gamestate::sequence::loop); } @@ -87,26 +87,31 @@ namespace gamestate std::string command(text); if (command=="ESPERAR") { - int res = fscanf(sequence_file, "%i", &val); + //int res = + fscanf(sequence_file, "%i", &val); printf("ESPERAR %i\n", val); wait_until = SDL_GetTicks() + val; } else if (command=="FADEIN") { - int res = fscanf(sequence_file, " '%[^']'", text); + //int res = + fscanf(sequence_file, " '%[^']'", text); drawPic(text); draw::fadein(); } else if (command=="SHOW") { - int res = fscanf(sequence_file, " '%[^']'", text); + //int res = + fscanf(sequence_file, " '%[^']'", text); drawPic(text); draw::render(); } else if (command=="PRINT") { - int res = fscanf(sequence_file, " %i %i %i '%[^']'", &x, &y, &val, text); + //int res = + fscanf(sequence_file, " %i %i %i '%[^']'", &x, &y, &val, text); drawText(x, y, val, text); } else if (command=="PLAYMUSIC") { - int res = fscanf(sequence_file, " '%[^']'", text); + //int res = + fscanf(sequence_file, " '%[^']'", text); audio::loadMusic(text); audio::playMusic(); diff --git a/source/jaudio.cpp b/source/jaudio.cpp index a971b48..b24f5b8 100644 --- a/source/jaudio.cpp +++ b/source/jaudio.cpp @@ -42,7 +42,7 @@ namespace audio free(buffer); } int filesize=0; - buffer = file::getFileBuffer(filename, filesize); + buffer = file::getFileBuffer(filename, &filesize); music = Mix_LoadMUS_RW(SDL_RWFromMem(buffer, filesize), 1); if (music==nullptr) return false; diff --git a/source/jdraw.cpp b/source/jdraw.cpp index a4c1bc5..0d8e979 100644 --- a/source/jdraw.cpp +++ b/source/jdraw.cpp @@ -114,7 +114,7 @@ namespace draw // Agafem un buffer de bytes de l'arxiu especificat // getFileBuffer() simplement ens torna el arxiu sencer dins de un array de char int size; - uint8_t *buffer = (uint8_t *)file::getFileBuffer(filename, size); + uint8_t *buffer = (uint8_t *)file::getFileBuffer(filename, &size); // Si ens ha tornat nullptr, es que no l'ha trobat, tornem nosaltres també nullptr ja que no s'ha pogut crear la superficie if (buffer == nullptr) @@ -230,7 +230,7 @@ namespace draw // Agafem un buffer de bytes de l'arxiu especificat // getFileBuffer() simplement ens torna el arxiu sencer dins de un array de char int size; - uint8_t *buffer = (uint8_t *)file::getFileBuffer(filename, size); + uint8_t *buffer = (uint8_t *)file::getFileBuffer(filename, &size); // Li passem el array del arxiu a LoadPalette. Ell ens torna un array de uint32_t amb la paleta // Van a ser 256 entrades de 32 bits, cada entrada es un color, amb el format 0xAARRGGBB diff --git a/source/jfile.cpp b/source/jfile.cpp index e1c5123..84c2617 100644 --- a/source/jfile.cpp +++ b/source/jfile.cpp @@ -193,7 +193,7 @@ namespace file } // Obté un "FILE*" al arxiu que se li demana, independentment de la font (arxius individual en carpeta, o arxiu de recursos) - FILE *getFilePointer(const std::string resourcename, int &filesize, const bool binary) + FILE *getFilePointer(const std::string resourcename, int *filesize, const bool binary) { // Si tenim configurat agafar els recursos de arxiu, pero encara no tenim la taula de continguts carregada... if (file_source == SOURCE_FILE and toc.size() == 0) @@ -231,7 +231,7 @@ namespace file } // Agafem el tamany del recurs de la taula de continguts - filesize = toc[count].size; + if (filesize) *filesize = toc[count].size; // obrim l'arxiu de recursos f = fopen(resource_filename.c_str(), binary ? "rb" : "r"); @@ -252,7 +252,7 @@ namespace file // Si estem pillant els recursos de carpeta, simplement obrim el arxiu en questió i tornem el FILE* associat. f = fopen((resource_folder + resourcename).c_str(), binary ? "rb" : "r"); fseek(f, 0, SEEK_END); - filesize = ftell(f); + if (filesize) *filesize = ftell(f); fseek(f, 0, SEEK_SET); } @@ -261,20 +261,23 @@ namespace file } // Obté un buffer de memòria en format "char*" del arxiu que se li demana, independentment de la font (arxius individual en carpeta, o arxiu de recursos) - char *getFileBuffer(const std::string resourcename, int &filesize) + char *getFileBuffer(const std::string resourcename, int *filesize) { + int size; // Usem la funció anterior per a obtinde un FILE*, independentment de on pillem els recursos - FILE *f = getFilePointer(resourcename, filesize, true); + FILE *f = getFilePointer(resourcename, &size, true); // Reservem memòria per al buffer - char *buffer = (char *)malloc(filesize); + char *buffer = (char *)malloc(size); // llegim el contingut del arxiu i el fiquem en el buffer - fread(buffer, filesize, 1, f); + fread(buffer, size, 1, f); // Tanquem l'arxiu fclose(f); + if (filesize) *filesize = size; + // Tornem el buffer. OJO! recordar alliberar-lo amb free(buffer) quan acabem amb ell. return buffer; } diff --git a/source/jfile.h b/source/jfile.h index f356ba3..7d5c92f 100644 --- a/source/jfile.h +++ b/source/jfile.h @@ -28,14 +28,14 @@ namespace file /// @param filesize paràmetre de retorn. Ací es torna el tamany de l'arxiu /// @param binary si volem obrir el arxiu en format binary /// @return un punter FILE* al arxiu - FILE *getFilePointer(const std::string resourcename, int &filesize, const bool binary = false); + FILE *getFilePointer(const std::string resourcename, int *filesize = nullptr, const bool binary = false); /// @brief Obté un buffer de memòria en format "char*" del arxiu que se li demana, independentment de la font (arxius individual en carpeta, o arxiu de recursos). /// @brief Recordar alliberar la memoria del buffer amb free(buffer) al acabar amb ell. /// @param resourcename el nom de l'arxiu del que volem obrindre el buffer /// @param filesize paràmetre de retorn. Ací es torna el tamany de l'arxiu /// @return un array de "filesize" bytes amb el contingut del arxiu - char *getFileBuffer(const std::string resourcename, int &filesize); + char *getFileBuffer(const std::string resourcename, int *filesize = nullptr); // Funcions d'access a la configuració (clau = valor) // -----------------------------------------------------------------------------------------------------------