diff --git a/data/rooms/00.txt b/data/rooms/00.txt index 47966df..412edca 100644 --- a/data/rooms/00.txt +++ b/data/rooms/00.txt @@ -1,24 +1,18 @@ -[ROOM] -size=2 -height=2 -door_xp=-1 -door_yp=-1 -door_xn=-1 -door_yn=-1 -color=9 -floor=0 -walls=0 -doors=0 -wdoors=0 -room_xp=0 -room_yp=0 -room_xn=0 -room_yn=0 +width: 2 +height: 2 +door-xp: 0 1 +color: 9 +floor-texture: 0 +wall-texture: 0 +door-texture: 0 +under-door-texture: 0 -[ACTOR] -template=box -pos=32 32 0 +actor: { + template: box + pos: 32 32 0 +} -[ACTOR] -template=box -pos=32 32 8 +actor: { + template: box + pos: 32 32 8 +} diff --git a/source/jfile.cpp b/source/jfile.cpp index e1c5123..90c20fa 100644 --- a/source/jfile.cpp +++ b/source/jfile.cpp @@ -261,17 +261,21 @@ 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, const bool zeroTerminated) { // Usem la funció anterior per a obtinde un FILE*, independentment de on pillem els recursos FILE *f = getFilePointer(resourcename, filesize, true); // Reservem memòria per al buffer - char *buffer = (char *)malloc(filesize); + // Si afegim el 0 al final, el tamany del buffer es 1 byte mes gran + char *buffer = (char *)malloc(filesize + zeroTerminated ? 1 : 0); // llegim el contingut del arxiu i el fiquem en el buffer fread(buffer, filesize, 1, f); + // Afegim el 0 al final si toca (i augmentem en 1 la variable filesize que tornem) + if (zeroTerminated) buffer[filesize++] = 0; + // Tanquem l'arxiu fclose(f); @@ -419,4 +423,44 @@ namespace file config.push_back({key, value}); saveConfigValues(); } + + void ignoreWhitespace(const char **buffer, const bool stopOnLineEnd=false) + { + if (!stopOnLineEnd) + while (**buffer!=0 && **buffer<=32) (*buffer)++; + else + while (**buffer!='\n' && **buffer!=0 && **buffer<=32) (*buffer)++; + } + + // Llig una cadena de l'arxiu especificat. En cas de no poder, torna nullptr. + const char *readString(const char **buffer, const bool stopOnLineEnd=false) + { + ignoreWhitespace(buffer); + } + + // Llig un enter de l'arxiu especificat. En cas de no poder, torna 0. + int readInt(const char **buffer) + { + ignoreWhitespace(buffer); + return atoi(readString(buffer)); + } + + // Escriu una cadena a l'arxiu especificat. + void writeString(const char **buffer, const char* str) + { + + } + + // Escriu un enter a l'arxiu especificat. + void writeInt(const char **buffer, const int value) + { + + } + + // Escriu un salt de linea a l'arxiu especificat. + void jumpLine(const char **buffer) + { + + } + } \ No newline at end of file diff --git a/source/jfile.h b/source/jfile.h index f356ba3..9cae587 100644 --- a/source/jfile.h +++ b/source/jfile.h @@ -34,8 +34,9 @@ namespace file /// @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 + /// @param zeroTerminated si afegim un caràcter 0 al final (per defecte no) /// @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, const bool zeroTerminated=false); // Funcions d'access a la configuració (clau = valor) // ----------------------------------------------------------------------------------------------------------- @@ -57,4 +58,32 @@ namespace file /// @param key clau a la que establir un valor /// @param value valor a establir per a la clau void setConfigValue(const std::string key, const std::string value); + + // Funcions per a treballar amb arxius de text + // ----------------------------------------------------------------------------------------------------------- + + /// @brief Llig un enter de l'arxiu especificat. En cas de no poder, torna 0. + /// @param buffer punter a l'arxiu d'on llegir + /// @return el enter llegit de l'arxiu + int readInt(const char **buffer); + + /// @brief Llig una cadena de l'arxiu especificat. En cas de no poder, torna nullptr. + /// @param buffer punter a l'arxiu d'on llegir + /// @param stopOnLineEnd Si s'ha de parar la búsqueda (i tornar nullptr) al trobar un final de linea + /// @return cadena llegida de l'arxiu. No alliberar la seua memòria, pero usar-la abans de tornar a llegir altre valor + const char *readString(const char **buffer, const bool stopOnLineEnd=false); + + /// @brief Escriu una cadena a l'arxiu especificat. + /// @param buffer punter a l'arxiu on escriure + /// @param str la cadena a escriure + void writeString(const char **buffer, const char* str); + + /// @brief Escriu un enter a l'arxiu especificat. + /// @param buffer punter a l'arxiu on escriure + /// @param value L'enter a escriure + void writeInt(const char **buffer, const int value); + + /// @brief Escriu un salt de linea a l'arxiu especificat. + /// @param buffer punter a'larxiu on escriure + void jumpLine(const char **buffer); }