Bennu Game Development

Foros en Español => Herramientas => Topic started by: DCelso on March 04, 2010, 12:09:22 AM

Title: Generador de módulos "wrappers"
Post by: DCelso on March 04, 2010, 12:09:22 AM
Hola a todos,
aqui va la madre de todas las madres :) ,
¿quieres crearte un módulo Bennu de una librería que usas mucho o que quisieras usar y te da mucha pereza ponerte a crearlo?
Ahora no tienes escusa, te traigo un programa que hace el trabajo pesado por ti.
Lo único que necesitas es crear un archivo .properties donde especificas el nombre del módulo, las funciones y el tipo de parámetros de cada función y este programa te genera el código fuente de tu módulo.
Dentro del zip viene un ejemplo de mod_dctools.
Para probar el ejemplo lo único que tienes que hacer es escribir en la consola de comandos mod_dctools.bat, esto creará un archivo mod_dctools.c en la carpeta src.

http://depositfiles.com/files/c9q7um8rl (http://depositfiles.com/files/c9q7um8rl)

También puede servir para crearte un código fuente esqueleto de un módulo propio, defines el nombre de tus funciones, los tipos de parámetros el nombre que le quieres dar, escribes el .properties con esa información, pasas este "vtl_parser" y tendrás tu código fuente c esqueleto para rellenar con tus funciones de tu módulo.

Nueva descarga:
http://code.google.com/p/fpg-editor/downloads/list
Title: Re: Generador de módulos "wrappers"
Post by: osk on March 04, 2010, 12:48:17 AM
OH DIOS MIO, NO PUEDE SER VERDAD!!!!!

Instant karmakarmakarmakarma!!!

Aaaagggghhhhh!!!!!!!
Title: Re: Generador de módulos "wrappers"
Post by: DCelso on March 04, 2010, 01:02:28 AM
 ;) ;D :D 8) ::) :P :)
Title: Re: Generador de módulos "wrappers"
Post by: Drumpi on March 04, 2010, 03:09:18 AM
Pero ¿pero esto qué es? ¡¿ESTO QUÉ ES?!

Juer, mola, ahora se puede hacer un módulo para usar las funciones OPEN, CLOSE, READ y WRITE de linux, y así tener acceso a todo el hardware O.O
Karma up.

Un momento ¿un .bat? :S
;D
Title: Re: Generador de módulos "wrappers"
Post by: SplinterGU on March 04, 2010, 03:13:10 AM
fantastico, me suena conocido...
Title: Re: Generador de módulos "wrappers"
Post by: DCelso on March 04, 2010, 08:02:00 AM
Quote from: SplinterGU on March 04, 2010, 03:13:10 AM
fantastico, me suena conocido...
¿A qué?, si se puede saber :D.

Es una aplicación JAVA casera que usa apache velocity para procesar las plantillas y que abre el .properties y lo convierte en variables velocity para que éste las pueda procesar en la plantilla.
Por cierto, se puede usar para casi cualquier cosa, es un generador de archivos a través de plantillas como cualquier otro, así que si sabeis velocity podeis entrar en el directorio "parser" y ahí modificar template.vtl a gusto, por ejemplo para hacer una plantilla para modulos cpp, o para hacer una plantilla para documentación html, o cualquier cosa que se os ocurra mientras useis las variables que definisteis en el .properties.

Llevaba mucho tiempo detrás de hacerla debido a que tenía en mente hacer varios módulos y quería automatizarme la tarea pero soy tan tonto que la he hecho después de hacer los módulos y no me ha servido :D.
Title: Re: Generador de módulos "wrappers"
Post by: FreeYourMind on March 04, 2010, 08:14:00 AM
Hombre, para hacer varios modulos tienes la opcion cut/paste heheheheheheh. Esta interesante la aplicación, pero no leo veo mucha utilidad, ya que tendrás que editar despues manualmente tu modulo tal como si lo hicieras con tu aplicación.
Title: Re: Generador de módulos "wrappers"
Post by: Windgate on March 04, 2010, 08:33:02 AM
Karma up y a ver a ver a ver :o

Yo había pensado en hacer un programita que a partir de un determinado TYPE generase automáticamente las operaciones observadoras y modificadoras de cada uno de sus campos, para evitar el problema de anidamiento de TYPES que supone tener que andar haciendo cosas como:

( * ( * ( * lista) . vertices ) . x ) = 4;

Y cosas peores, analizaré tu módulo DCelso, suena realmente sexy.

EDIT: "Y ahora sólo queda compilarlo con tu compilador favorito"

Ahí es donde creo que la mayoría tenemos el problema, que nos ponemos a añadir cosas al CodeBlocks y la cosa no compila ni pa dios. Si algún día te da por subir un video a Youtube en el que se vea qué es lo que añades exactamente para que te compile la cosa nos harías un hijo de madera, ya sea con Eclipse o con lo que tú uses :D

Por cierto, estaría bien que el foro soportase video de Youtube embebido :P
Title: Re: Generador de módulos "wrappers"
Post by: DCelso on March 04, 2010, 08:58:50 AM
Para hacer wrappers no.
Creo que no entendiste lo que hace, no es solo un copy/paste, hace algo más.
Lo suyo es probarlo y trastear con él, pero.
A ver si me explico mejor.
Imagínate una librería, llamemosla libmates.dll que tiene las siguiente funciones:

float real_entero(int parte_real, int parte_milesimial); // crea un real dando una parte entera y una parte milesimal.
float suma_divide(int valor_inicial,int valor_a_sumar, float valor_por_el_que_dividir) // suma un valor y divide por otro
int contrario(int valor); // devuelve el valor multiplicado por -1.


pues tu, para crear el módulo que llamase a estas funciones de la libmates.dll qué tendrías que hacer?
Primero ponerle un nombre como mod_mates, por ejemplo, luego inventarte un prefico como por ejemplo "MAT_"
luego crear tres entradas en __bgdexport( nombe_modulo, functions_exports), del tipo:
{"MAT_SUMA_DIVIDE", "IIF", TYPE_INT, puntero_a_funcion},
En este caso tres, pero ¿qué libreria te encuentras con solo tres funciones? Imagínate que tiene 15 o 20, no veas tu que rollo una a una, a ver que nombre vas poniendo a cada puntero, funcion bennu, que no se te olvide ningún parámetro, mete bien los tipos, etc.
Bueno ahora queda lo peor, tienes que crearte las funciones a las que estás apuntando siguiendo un esquema tipo

static int f_createFloat (INSTANCE * my, int * params) {
int result = -1;
int param_0 =params[0];
int param_1 =params[1];

float flt_ret = createFloat (param_0,param_1);
result =  *((int*) &flt_ret);

return result;
}

y son 15 o 20 veces digimos, luego a ver, tienes que extraer los parámetros y ponerlos en su verdadero tipo.
Osea no haces lo mismo con un entero que con un float o que con un string, recuerda hacer los
 const char * param_0 = string_get(params[0]); y los string_discard(params[0]);

Son muchas cosas que son repetitivas, que son como dices "copy, paste and repace" pero que llevan su tiempo y que la puedes cargar sin querer, que c es muy puñetero y puedes hacer perrerias como intentar pintar un string en una direccion de memoria de un entero.
En nuestro caso, para Bennu, todos los parámetros de entrada son enteros, así que puedes compilar perfectamente un módulo que usa strings como entrada e intentar usarlos como enteros en código (no digo a posta) y luego tener un módulo que hace cosas raras como colgar el programa :D.
Pues esta plantilla intenta evitar todo eso, simplemente creas un .properties con la información, sería este el del ejemplo

anio_creacion = 2010
autor = DCelso
nombre_modulo = mod_mates
prefijo = MAT

real_entero = F,I,I
suma_divide = F,I,I,F
contrario = I,I

Ya ves tu,
pones los datos de tu módulo y tuyos. (puse anio, porque la ñ no la trabajan bien algunos tipos de condificacion y ano queda como de muy culo :D)
luego pones el nombre de tu funcion, un igual, el tipo de valor de retorno, luego los tipos de los parámetros de entrada.
repites para todas tus funciones.
Este fichero lo pasas por el "vtl_parser" tal y como pongo en el ".bat" (Sí Drumpi, un .bat pero que llama a java para ejecutar un bytcode hecho en java eh)
Y te genera el .c correspondiente rellenando toda la información que puse, si son 20 funciones pues 20 funciones que te creó al canto.
Ya no necesitas editar el código del módulo como dices Free, solo necesitas compilarlo para sacar el mod_mates.dll que usará a libmates.dll para ejecutar las funciones.
Recuerda que esto es una encapsulación, no hemos creado ninguna lógica, simplemente son llamadas, ¿por qué no automatizarlo?

Además si quieres hacer alguna lógica, nadie te lo impide, accedes al código fuente que ya te ha quitado pues unas cuantas horas de trabajo (y copy paste como bien dices) y modificas a gusto lo que no te convenza demasiado.
Incluso para crearte tus propios módulos te quita una tarea bastante importante, aunque si eres un tanto en cuanto avispado y quieres crearte un módulo, lo lógico sería que te hicieras una librería normal, y luego le hiceras un "wrapper" (anda si para esto sirve esta aplicacion :D)

Está claro que no es la panacea, ni mucho menos, tampoco quiero defender el uso de éste, cada cual que haga módulos como quiera :D, pero ayudar ayuda, o eso creo.


PD: Quero karmasss, que ma costao lo mio.


PPD: es bromita, eh.



Title: Re: Generador de módulos "wrappers"
Post by: FreeYourMind on March 04, 2010, 10:15:02 AM
Te doy un Karma, pero atención, con tu nueva versión quiero la opción crear modulo con multithead, y cuando eso ocurra te doy 10 karmas de golpe  ;D
Title: Re: Generador de módulos "wrappers"
Post by: DCelso on March 04, 2010, 10:51:00 AM
Cuando termines tu módulo con multitreads y compartas el código, miro a ver qué tendría que hacer para crear una plantilla multihilo :D.

Edit: Yujuuu, 90 ya,  :o que viejo soy :(.
Title: Re: Generador de módulos "wrappers"
Post by: FreeYourMind on March 04, 2010, 11:10:29 AM
Hhahahahaha, me temo que si no me haces la plantilla para que pueda hacerlo no verá nunca la luz del dia (almenos sacado por mi).

Vete mirando las funciones de salida declaradas 2 veces, una con parametro "S" y otra "SP" (mod_map), ya es un principio para que puedas empezar a soñar con el pack '10 karmas' :)
Title: Re: Generador de módulos "wrappers"
Post by: DCelso on March 04, 2010, 11:28:13 AM
No me lo digas dos veces que me pono eh :D.
Pero no entendí que quieres que mire, ¿el código fuente de mod_map?
Title: Re: Generador de módulos "wrappers"
Post by: FreeYourMind on March 04, 2010, 11:45:58 AM
Según Splinter es como se define el multithead en los modulos que lo tienen, como es el caso, y tambien dice que sólo debe tener uno al principio.

Yo estaba creando cada beep con multithead (uno en cada), y como puedes ver en las pruebas del respectivo hilo, las theads seguian bloqueando la ejecución del resto en el programa.

Habrá que adaptar correctamente ese ejemplo a los beeps (o a lo que sea si haces otro ejemplo distinto).
Y usar una pila, tu tambien la utilizas en el tuyo.

Tienes el código de la actual version publicada, para ti hacer el cambio será pan comido, yo prefiero dedicarme a mi juego que llevo tiempo sin tocarlo y en eso estoy más a gusto, ni que sea para hacer algunos gráficos, por lo menos no me estancaré en el tiempo :)

Despues de ver como se hace en el modulo beep, que es super sencillo y lo conozco de sobra, ya me seria más facil hacerlo en otro modulo por ejemplo :)
Title: Re: Generador de módulos "wrappers"
Post by: Windgate on March 04, 2010, 01:16:21 PM
Por favor FreeYourMind, no llames multithead a los multithreads que alguno se va a pensar que estás hablando de otra cosa más rara xD

La idea es muy buena DCelso, la verdad, lo poco que he visto de módulos ya me había fijado que el sistema de paso de parámetros basado en ese array era muy automatizable, buena iniciativa has tenido.
Title: Re: Generador de módulos "wrappers"
Post by: SplinterGU on March 04, 2010, 01:18:11 PM
Quote from: DCelso on March 04, 2010, 08:02:00 AM
Quote from: SplinterGU on March 04, 2010, 03:13:10 AM
fantastico, me suena conocido...
¿A qué?, si se puede saber :D.

Es una aplicación JAVA casera que usa apache velocity para procesar las plantillas y que abre el .properties y lo convierte en variables velocity para que éste las pueda procesar en la plantilla.
Por cierto, se puede usar para casi cualquier cosa, es un generador de archivos a través de plantillas como cualquier otro, así que si sabeis velocity podeis entrar en el directorio "parser" y ahí modificar template.vtl a gusto, por ejemplo para hacer una plantilla para modulos cpp, o para hacer una plantilla para documentación html, o cualquier cosa que se os ocurra mientras useis las variables que definisteis en el .properties.

Llevaba mucho tiempo detrás de hacerla debido a que tenía en mente hacer varios módulos y quería automatizarme la tarea pero soy tan tonto que la he hecho después de hacer los módulos y no me ha servido :D.

A unos proyectos que yo hice laboralmente... y a algunos modelos de prueba que hice para bennu... no te persigas que no quise decir que lo copiaste... solo dije que me sonaba conocido...
Title: Re: Generador de módulos "wrappers"
Post by: SplinterGU on March 04, 2010, 01:20:27 PM
Quote from: FreeYourMind on March 04, 2010, 08:14:00 AM
Hombre, para hacer varios modulos tienes la opcion cut/paste heheheheheheh. Esta interesante la aplicación, pero no leo veo mucha utilidad, ya que tendrás que editar despues manualmente tu modulo tal como si lo hicieras con tu aplicación.

segun entiendo no deberias tener que escribir nada a mano, solo el .properties... es un wrapper... que DCelso me corrija si me equivoco.
Title: Re: Generador de módulos "wrappers"
Post by: SplinterGU on March 04, 2010, 01:33:50 PM
DCelso, no importa que sea la panacea o no, es muy util, yo una vez vendi algo similar para hacer interfaces jni.
Con respecto a Bennu, era uno de los pendientes que tenia, no se si alguna vez llegue a subir algun prototipo o solo comente la idea.
Pero es muy util, con esto no hay excusas para hacer un wrapper a cualquier dll o lib existente... por ejemplo, se podria hacer directo un wrapper a cualquier base de datos, a los sockets del operativo, al puerto serial, a lo que sea.
Title: Re: Generador de módulos "wrappers"
Post by: DCelso on March 04, 2010, 02:43:04 PM
Quote from: SplinterGU on March 04, 2010, 01:20:27 PM
Quote from: FreeYourMind on March 04, 2010, 08:14:00 AM
Hombre, para hacer varios modulos tienes la opcion cut/paste heheheheheheh. Esta interesante la aplicación, pero no leo veo mucha utilidad, ya que tendrás que editar despues manualmente tu modulo tal como si lo hicieras con tu aplicación.

segun entiendo no deberias tener que escribir nada a mano, solo el .properties... es un wrapper... que DCelso me corrija si me equivoco.
No te equivocas, ya le respondí dicendo eso mismo pero de forma más extensa.

Quote from: SplinterGU on March 04, 2010, 01:33:50 PM
...
Pero es muy util, con esto no hay excusas para hacer un wrapper a cualquier dll o lib existente... por ejemplo, se podria hacer directo un wrapper a cualquier base de datos, a los sockets del operativo, al puerto serial, a lo que sea.
Ya te digo, con esa idea exacta lo hice.
Title: Re: Generador de módulos "wrappers"
Post by: DCelso on November 30, 2010, 09:49:57 PM
Resubo wrapper con ejemplo de como convertir en módulo una librería llamada libdctools:
wrapper.zip (http://www.mediafire.com/?m33pa0dkpju1l71)
Como probar:
1.- Descomprimir
2.- Compilar libdctools:
  cd dctools
  make -f Makefile.linux
3.- Generar código fuente de mod_dctools.
  mod_dctools.sh
4.- Compilar mod_dctools
 make -f Makefile.linux.
Y ya está, en Release tendremos nuestro mod_dctools.so para usar en BennuGD.

Se podría hacer lo mismo con cualquier otra librería de la que dispongas de su .dll o su .so  y su lista de funciones (.h)

solo necesitas copiarte mod_dctools.sh y mod_dctools.properties con el nombre de tu modulo y modificar su contenido para enganchar con tu librería en vez de con libdctools
Title: Re: Generador de módulos "wrappers"
Post by: FreeYourMind on November 30, 2010, 10:13:06 PM
O sea, compilar y listo xDDDD
Y si hay dependencias ?
Title: Re: Generador de módulos "wrappers"
Post by: DCelso on November 30, 2010, 10:21:17 PM
¿dependencias de qué tipo?
Se supone que tienes un libloquesea.dll (o .so) con su loquesea.h ya compilado. Lo único que le estás haciendo es una capa (modulo) para poder llamar a sus funciones desde bennu, así que la única dependencia que tendrá el código fuente de tu módulo será esa librería en cuestión. El módulo final creado necesitará del libloquesea para funcionar, no reconstruye la librería ni nada , solo la usa, pero bueno si se necesitaran más dependencias ya te tendrías que liar con el Makefile.linux (o Makefile.win) para que compile.
Title: Re: Generador de módulos "wrappers"
Post by: DCelso on November 30, 2010, 10:27:54 PM
Tampoco es que sea compilar nada más, tienes que currarte el archivo .properties para definir nombre del módulo, nombre de las funciones (con sus tipos de parámetros de entrada y salida) que quieras portar al módulo.
Title: Re: Generador de módulos "wrappers"
Post by: FreeYourMind on November 30, 2010, 10:39:46 PM
Ya lo miraré este finde, que es grande, i promess.
Tengo pendiente de terminar un port de una dll tuya a Caanoo (que de momento su nombre esta en el secreto de los dioses xDD).
Title: Re: Generador de módulos "wrappers"
Post by: Drumpi on December 01, 2010, 01:37:33 AM
Karma por el reflote, estaba buscando esta herramienta, ya que se comentó en otro hilo.
Title: Re:Generador de módulos "wrappers"
Post by: DCelso on February 08, 2013, 05:07:33 PM
nueva descarga:
http://code.google.com/p/fpg-editor/downloads/list