- Treballant en la lectura de arxius de dades
This commit is contained in:
@@ -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
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user