[PSP] Leer archivo de configuracion?

Vereis, estoy intentado crear un archivo ini de configuracion para una cosilla que estoy haciendo, pero no me acaba de salir muy bien que digamos :p

Buscando buscando, he encontrado en http://www.psp-programming.com/code/index.php?id=c:getconfig_example esta funcion de harleyg que deberia servirme para leer el archivo de configuracion:

#include
#include
#include
char *getconfig(const char *location, const char searchstr[]) {
FILE *file;
char *w[100], string[100], line[100], c;
int z[100], x[100], i=0, v;
file = fopen (location, "r");
if (file == NULL) return NULL;
else {
while(fgets(string , 100 , file) != NULL) {
x[i] = strlen(string)-1;
if(string[0] == '#') continue;
w[i] = strchr(string,'=')-1;
*w[i] = 0;
if(!strcmp(searchstr, string)) {
char *crlf = strpbrk(w[i]+3, "\r\n");
if(crlf)
*crlf = 0;
return w[i]+3;
}
i++;
}
fclose(file);
return NULL;
}
}


La cosa es que no acabo de entender muy bien como usarla.

Si no me equivoco (cosa muy probable) la funcion deberia usarse así:

getconfig("ms0:/config.ini", cuadrado)

Cuadrado seria la cadena a buscar verdad?

Entonces la funcion busca esa cadena, omitiendo lineas comentadas con # y cuando lo encuentra devuelve lo que hay despues de la estructura "cuadrado = " (con espacios incluidos en " = ")

Si todo lo que dije hasta ahora esta bien entendido... mi problema se"reduce" a que no se donde me saca lo que va despues de "cuadrado = valordeconfiguracion" [+risas]
como consejo sería mejor que codificases una función a mano tu mismo... pero bueno si no puedes creo que esta funciona bien he mirado el código por encima y si busca la subcadena y te devuelve el valor como un puntero a cadena.

aún así no crees que sería mejor usar un fichero xml y un parser??
¿tal vez sea de aquí?
char *crlf = strpbrk(w[i]+3, "\r\n");

Según puedo imaginar lo que hará sera que coja todo lo que haya en w[] + 3 (vamos, por lo de espacio = espacio )

Tal vez no sea eso y la haya cagado, que será lo más seguro xD
mmm no creo ... ya que devueve un fragmento de w... no se yo no lo ubiese hecho así... pero weno
Al final me he puesto a leer que hacia exactamente cada funcion y he conseguido hacerlo a andar, y a la primera (que no me ha dado errores de configuracion claro)

Hay que declarar esto para usarla:

char *haisa;
haisa = getconfig("ms0:/PSP/SYSTEM/autoboot.ini", "wlanoff");

Entonces se almacena en "haisa" lo que hay despues de "wlanoff = " , como por ejemplo "ms0:/eboot.pbp"


La verdad es que es muy util la funcion esta, aunque tal cual esta ahi tiene una limitacion de 100 caracteres.
4 respuestas