[DEV] Bennu como scripting embebido (Ejemplo)

Started by SplinterGU, August 10, 2008, 12:34:22 AM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

DCelso

#30
He conseguido compilar el ejemplo, pero parece ser que al menos en windows no va.
Me casca en la línea 52
   r = instance_new (proc, 0) ; // Create Function
Dice
c:\codeblocks\workspace\pruebaBennuEmbebido\bin\Debug>pruebaBennuEmbebido
.exe
Assertion failed: code < string_allocated && code >= 0, file strings.c, line 264


This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.
Adjunto proyecto Codeblocks 8.02 con los headers, dlls necesarios y los resultados compilados(prg y dcb resultado).
El foro no me deja subir zips con exes, asi que adjunto enlace  mediafire con el exe
http://www.mediafire.com/?zgdmjjdtm0w

Sería muy bueno que alguien intentase compilarlo y ejecutarlo en codeblocks de linux para ver si allí no falla
Monstruos Diabólicos

"A PAck of classic GAMEs For BennuGD" en desarrollo
http://code.google.com/p/apagame4be/

DCelso

Por cierto la idea es buena pero no queda a la altura de otros lenguajes scripting embebidos en c.
Por ejemplo tcl (http://wiki.tcl.tk/2074) embebido en c es algo como hacer lo siguiente:

Obtener intérprete.
Inicializar intérprete.
Crear comando TCL en un string
Evaluar comando a través del intérprete.
O bien Evaluar archivo guardado.

Bennu se parece un poco a TCL en este sentido, TCL también va por modulos llamados paquetes y para usar algunas funciones es necesario poner "package require nombrepaquete"  análogo al import de bennu y estas funcionalidad también  puede ejecutarle desde el interprete creado en c,.

Sería muy buena idea que bennu se pudiera comportar también así.
Monstruos Diabólicos

"A PAck of classic GAMEs For BennuGD" en desarrollo
http://code.google.com/p/apagame4be/

SplinterGU

perdon, pero te equivocas... si esta a la altura, ese que mencionas es diferente porque incluye el compilador en el runtime, cosas que en bennu va por separado... incluso puede que TCL ni lo compile, que lo interprete directamente, cosa tambien diferente a bennu... bennu compila el .prg y ejecuta la compilacion de este...

son diferentes filosofias...

en un futuro lo sera, pero no sera asi, sino sera mas bien compilacion dinamica...
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

SplinterGU

obviamente, a mi me funciona el ejemplo que puse en el inicio.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Windgate

Hola, siento offtopicar un poquito, pero el buscador del foro me ha llevado a este hilo donde se habla de este error:


Me ha pasado al actualizar a la nueva RC de Bennu, anteriormente tenía una RC anterior y sí que me funcionaba sin problemas :S

Por si os sirve de algo, sólo me ha pasado al ejecutar los proyectos que usan Bennu 3D, tanto con el Bennu 3D de Irrlicht como con el de bullet, es error de ejecución y se me cierra el juego sólo en el primer frame.
Iván García Subero. Programador, profesor de informática, monitor de actividades culturales y presidente de TRINIT Asociación de Informáticos de Zaragoza. http://trinit.es

osk

Bueno, he conseguido resolver a media el problema que tenía al compilar el programa C que hace uso de Bennu embebido.
Repito mi configuración, por si alguien lo quiere tener en cuenta:
CodeBlocks en Windows, haciendo uso de GNU GCC Compiler (en realidad MinGW). En el menú Settings->"Compiler&Debugger" tengo puesto dos cosas:
           -En la pestaña "Search directories"->"Compiler", las rutas a los includes de dentro de las subcarpetas bgdi, core i bgdrtm, del código fuente de Bennu además de la ruta del código fuente de zlib
           -En la pestaña "Linker settings", la ruta de libbgdrtm.dll

Bien. Resulta que el fallo ha sido principalmente mío, ya que intentaba abrir el código fuente de C como un fichero aislado, y parece ser que CodeBlocks no hace lo que tiene que hacer. Si, en cambio, genero un proyecto de tipo "Shell Application" e incluyo dicho fichero, la compilación se hace CASI correctamente.

¿Y por qué digo CASI? Porque no va bien del todo. Resulta que salen unos warnings así:

warning: implicit declaration of function `string_init'
warning: implicit declaration of function `string_new'
warning: implicit declaration of function `string_use'
warning: implicit declaration of function `do_exit'

Qué curioso, las mismas cuatro funciones problemáticas de antes...Bueno, no pasaría nada si no fuera porque, ADEMAS, SIGUE OCURRIENDO UN ERROR. Éste:

undefined reference to `_do_exit'

He intentado buscar en todos los códigos fuentes de que dispongo, ya sea de Bennu como de las dependencias dónde aparece esta dichosa función, pero nada. Incluso en las cabeceras estándar de MinGW. No he visto nada. Así que, ni corto ni perezoso, he comentado esa línea y listo. Y por si acaso, he escrito exit(0); que al menos se le parece. Y se lo ha tragado. Al menos, ahora compila y el ejemplo hace lo que creo que tiene que hacer...

Pero no sé la razón de tanto fallo...seguro que es problema mío, pero al CodeBlocks ya le he intentado decir dónde está todo para que lo pueda encontrar, sea lo que sea, pero nada. No sé, es un poco rollo.

Venga, hasta luego.



DCelso

A mi me pasó lo mismo con do_exit, o bien es de linux, o bien Splinter la tiene hecha en otra librería dinámica, yo también lo cambie por el exit(0).
También tuve que cambiar unos cuantos includes que en el código bennu vienen entre <> cuando en realidad deben de ir entre "" por no ser del sistema ya que el gcc se me quejaba.
En cuanto a los warnings a mi no me dan, ese warning es típico de haber usado una función que el compilador conoce pero en la que en su .c olvidaste poner su cabecera. Cuando a mi me dan esos warnings lo que hago es poner el cursor encima de la función que lo da, dar click derecho, dar a buscar definición (o implementación podría valer si tienes el código fuente), al hacer esto se abre el header en el que está definida así que me quedo con la copla y lo incluyo en el archivo en el que dió el warning.
Entonces, ¿a ti no te da luego un error al ejecutar el .exe?
Monstruos Diabólicos

"A PAck of classic GAMEs For BennuGD" en desarrollo
http://code.google.com/p/apagame4be/

SplinterGU

el do_exit cambia por 

void bgdrtm_exit( int exit_value )

el entry es


void bgdrtm_entry( int argc, char * argv[] )
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

DCelso

#38
Gracias era Eso y la versión del libbgdrtm lo que me fallaba a mi, ya me va perfect.
Osk, ahora veo que para quitar los warnings le metí al ejemplo #include "xstrings.h" que es donde esta el string_init y demás.
Así que
1.- creas el proyecto en codeblocks
file - new - project .. - console application - C .
Copias el ejemplo de Splinter.
Cambias do_exist por bgdrtm_exit
Añades #include "xstrings.h"
2.- Para la dependencia de zlib, me instalé zlib-dev y zlib-bin para mingw (Nota: hay dos zlibs uno para msys y otro para mingw, yo me bajé este último)  (http://sourceforge.net/projects/mingw/files/)
3.- Ahora hay dos formas de enganchar con bennugd,
primero te bajas el código fuente de bennugd
segundo añades a codeblock el libbgdrtm
project -build options - linker settins - link libraries - C:\BennuGD\bin\libbgdrtm.dll
Y tercero
O bien añades los siguientes directorios de cabeceras
project -build options - searh directories - Compiler - C:\BennugD\src\core\include
                                                       C:\BennugD\src\core\bgdrtm\include
O bien copias al directorio del proyecto de codeblocks todos los headers de esos dos directorios. (no necesariamente son todos, con ir compilando y ver cuales falta, poco a poco puedes sacarr los imprescindibles pero es más rápido copiarlos todos, total para lo que ocupan :D)
Adjunto proyecto codeblocks ejemplo con todo lo necesario para que sea independiente del código fuente de bennugd. Solo necesitarás los binarios.
Monstruos Diabólicos

"A PAck of classic GAMEs For BennuGD" en desarrollo
http://code.google.com/p/apagame4be/

Patonsky1

#39
Se me han planteado unos problemillas...


  • No logro cargar nada usando el motor 2D
  • ¿Como cargar una función en vez de un proceso?
  • ¿Hay alguna documentación (por minima que sea) en algún lado sobre estas funciones de C?
  • En caso de poder usarse modo gráfico... ¿Se puede usar el modo grafico sin la ventana de consola detrás?

Lo siento pero es que esto me trae un poco perdido, a pesar de haber hecho pinitos con este codigo...

OFFTOPIC: Me acabo de imaginar mi avatar en movimiento metido en uno de los cajetines de avatar de DCelso xDDDD

DCelso

¿Me estás pidiendo un ávatar? ;D
Yo te lo sabría hacer fijo, nunca me he puesto ha hacer un gif animado, no sabría por donde empezar, si quieres, eres libre para usar mi plantilla, por ahí he ido dejando unos cuantos svgs de los que podrías sacar el marco. :-[
Monstruos Diabólicos

"A PAck of classic GAMEs For BennuGD" en desarrollo
http://code.google.com/p/apagame4be/

Windgate

Hi Patonsky,
siento no poder ayudarte con el scripting embebido, simplemente quería decir que comparto una de tus dudas:

QuoteEn caso de poder usarse modo gráfico... ¿Se puede usar el modo grafico sin la ventana de consola detrás?

En ese sentido también me he preguntado muchas veces si podría ejecutarse Bennu en el tray, sin ventana visible, aunque supongo que non :P

En cualquier caso Patonsky, sube TODO lo que vayas haciendo sobre embebido, aunque sea un Hello World, que por exceso de ejemplos no habrá problema alguno xD
Iván García Subero. Programador, profesor de informática, monitor de actividades culturales y presidente de TRINIT Asociación de Informáticos de Zaragoza. http://trinit.es

DCelso

cagoen tu gif está pensado solo para fondo blanco, me llevaría mucho tiempo adaptarlo, esto es lo que he consegido con GIMP.
¿Así te lo imaginabas?
Monstruos Diabólicos

"A PAck of classic GAMEs For BennuGD" en desarrollo
http://code.google.com/p/apagame4be/

Patonsky1

Quote from: DCelso on October 23, 2009, 08:10:03 AM
¿Me estás pidiendo un ávatar? ;D
Yo te lo sabría hacer fijo, nunca me he puesto ha hacer un gif animado, no sabría por donde empezar, si quieres, eres libre para usar mi plantilla, por ahí he ido dejando unos cuantos svgs de los que podrías sacar el marco. :-[
Quote from: DCelso on October 23, 2009, 11:25:27 AM
cagoen tu gif está pensado solo para fondo blanco, me llevaría mucho tiempo adaptarlo, esto es lo que he consegido con GIMP.
¿Así te lo imaginabas?

No te preocupes... Es una abominación que nadie que no esté tan enfermo como Windgate o como yo podría concebirla, ya me pondré este fin de semana xDDD

Quote from: Windgate on October 23, 2009, 10:42:56 AM
Hi Patonsky,
siento no poder ayudarte con el scripting embebido, simplemente quería decir que comparto una de tus dudas:

QuoteEn caso de poder usarse modo gráfico... ¿Se puede usar el modo grafico sin la ventana de consola detrás?

En ese sentido también me he preguntado muchas veces si podría ejecutarse Bennu en el tray, sin ventana visible, aunque supongo que non :P

En cualquier caso Patonsky, sube TODO lo que vayas haciendo sobre embebido, aunque sea un Hello World, que por exceso de ejemplos no habrá problema alguno xD

De acuerdo. subiré ejemplos y pondré el codigo visible y bién comentado en la medida de lo que pueda hacer, aunque no será gran cosa :-/

Respecto a lo del modo gráfico... ¿Ayudaría una screenshot del momento del error?

Como último punto, yo crearía un thread para poner en común conocimientos y probatinas, y así no saturar este...

Windgate

No abras nuevo hilo, ÉSTE es el hilo xD

Cualquier cosa que subas será de ayuda, y las screenshots siempre son valiosas. La verdad es que somos un poco perezosos, pero sería grande si las usásemos más a menudo... Yo ahora con mi hosting no me corto y pongo screen siempre que tengo ocasión.
Iván García Subero. Programador, profesor de informática, monitor de actividades culturales y presidente de TRINIT Asociación de Informáticos de Zaragoza. http://trinit.es