PDA

Ver la versión completa : Alguien usaria esto en sus programas??



mortimor
13/11/2003, 20:06
Pues la pregunta la rehago de la siguiente forma:

¿Creeis que es o seria de utilidad una especie de biblioteca de funciones para manejar lenguajes de marcas tipo XML en GP32??

Ya le comente el tema una vez a Chui y ahora que tengo casi terminada una version preliminar (la he hecho por hobby) me gustaria saber si seria realmente util para alguien. Si alguien la considerara util me plantearia publicarla, si no no tiene sentido hacerlo.

Tengo que decir que he seguido una politica bastante "estraña" a la hora de programarla, he hecho una "simulacion" de COM. Cuando digo extraña me refiero a lo siguiente, un ejemplo de una funcion que genera un documento XML utilizandola:

int HacerDoc (void)
{
int i;
char text[20];
IMLProcessInstruction ppi=NULL, ppi_tmp=NULL;
IMLElement pe=NULL, pe2=NULL, pe_tmp=NULL;
IMLAttribute pa=NULL;
IMLText pt=NULL;
IMLNode pn=NULL,pn1=NULL;

/*Creamos un documento ML*/
DocumentFromCOM (IID_IMLDocument,&doc);

/*Creamos una instruccion de proceso y le damos nombre*/
doc->CreateProcessInstruction(doc,IID_IMLProcessInstruc tion,&ppi);
ppi->SetName(ppi,"xml");
/*Creamos un atributo, le damos nombre, le añadimos un dato y se lo añadimos a la instruccion de proceso*/
doc->CreateAttribute(doc,IID_IMLAttribute,&pa);
pa->SetName(pa,"version");
pa->SetData(pa,strlen("1.0")*sizeof(char),(void*)"1.0");
ppi->SetAttribute(ppi,pa);
/*Ahora añadimos la instruccion de proceso al documento*/
doc->AppendProcessInstruction(doc,ppi,&ppi_tmp);
/*Liberamos las interfaces para poder utilizarlas en otras operaciones*/
if (pa) pa->Release(pa);
if (ppi!=NULL) ppi->Release(ppi);
if (ppi_tmp!=NULL) ppi_tmp->Release(ppi_tmp);

doc->CreateText(doc,IID_IMLText,&pt);
pt->SetData(pt,strlen("\n")*sizeof(char),(void*)"\n");
pt->QueryInterface(pt,IID_IMLNode,(void **)&pn);

doc->AppendChild(doc,pn,&pn1);
if (pn1) pn1->Release(pn1);

/*Creamos un elemento y le damos nombre*/
doc->CreateElement(doc,IID_IMLElement,&pe);
pe->SetName(pe,"raiz");
/*Creamos un atributo, le damos nombre, le añadimos un dato y se lo añadimos al elemento*/
doc->CreateAttribute(doc,IID_IMLAttribute,&pa);
pa->SetName(pa,"autor");
pa->SetData(pa,strlen("Mortimor"),"Mortimor");
pe->SetAttribute(pe,pa);
pa->Release(pa);

pt->SetData(pt,strlen("\n ")*sizeof(char),(void*)"\n ");

for (i=0;i<5;i++)
{
pe->AppendChild(pe,pn,&pn1);
if (pn1) pn1->Release(pn1);

doc->CreateElement(doc,IID_IMLElement,&pe2);
sprintf(text,"subelemento%d",i);
pe2->SetName(pe2,text);
pe->AppendElement(pe,pe2,&pe_tmp);
pe2->Release(pe2);
pe_tmp->Release(pe_tmp);
}

pt->SetData(pt,strlen("\n")*sizeof(char),(void*)"\n");
pe->AppendChild(pe,pn,&pn1);
if (pn1) pn1->Release(pn1);
if (pn) pn->Release(pn);
if (pt) pt->Release(pt);

/*Ahora añadimos elemento al documento*/
doc->AppendElement(doc,pe,&pe_tmp);
/*Liberamos las interfaces para poder utilizarlas en otras operaciones*/
pe->Release(pe);
pe_tmp->Release(pe_tmp);

return 0;
}

Por cierto: doc es una interfaz IMLDocument.

Por favor, que las criticas sean constructivas. Si a alguien le parece una estupidez hacer algo como esto... decirlo, que ****.

Anarchy
13/11/2003, 20:31
mortimor, cualquier tipo de aplicaciones de esta indole son positivas para la GP32, lo mires por donde lo mires. Si es de código abierto, mejor que mejor, ya que posibilitas que alguien pueda aplicarlo a futuras aplicaciones.

Un saludo
Anarchy

chui
13/11/2003, 22:08
Parece codigo en C++, si puedes pasalo a C porque a muchos nos da problemas el C++.

Buen trabajo, quizas sea util en Vorton para los mapas de cada nivel.

mortimor
13/11/2003, 22:58
Esta en C, solo que he "simulado" OO de una forma que creo eficiente. En cierto modo, mas que una biblioteca de funciones es un componente COM. Se carga igual que estos componentes y se utiliza igual, todo mediante interfaces (los objetos controlan su creacion y su destruccion; tambien la generacion y liberacion de la memoria dinamica, la cual se usa intensivamente); muy natural para aquellos que hayan utilizado el MSXML (de hecho las interfaces son casi calcadas, creo que se podrian utilizar programas hechos para MSXML sin muchos cambios cuando lo termine).

De hecho tengo pensado ampliar la simulacion de OO y COM para que tenga un colector de basura para objetos no liberados.

Kawn
13/11/2003, 23:04
Ultimamente se ha puesto de moda guardar los datos, la configuracion del juego y esas cosas en XML. Asi que la libreria para gp32 util si que es :)

mortimor
14/11/2003, 23:32
Bueno, como los foros van muy rapido y me temo que este hilo no lo habra visto mucha gente, pongo este post para actualizar.

Reitero mi pregunta: ¿alguien cree que este "proyecto" le seria de utilidad a alguien?

Zheo
15/11/2003, 00:41
Yo no tengo ni idea de XML ni de sus aplicaciones, pero me parece interesante. Se podría utilizar aunque sea para guardar los juegos o algo así (savegames) ?
Lo digo por decir algo.

Miki-chan
16/11/2003, 18:31
Hombre, si no es muy difícil de usar y pones algún tutorial, siempre se animará alguien (yo me lo pensaré después de probar mis capacidades para hacer juegos) pero vamos, no entiendo gran cosa de los COM y de OO no tengo ni idea por eso digo lo de "si no es muy difícil".

De todos modos, tú hazlo, que cuantas más cosas se tengan para programar, mejores juegos saldrán ;)