extensión dctools

Started by DCelso, September 30, 2009, 02:46:31 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

DCelso

Hola a todos, he creado mi primer módulo para bennu después de muchos fracasos.
Lo he intentado hacer lo más simple posible para que sirva a modo didáctico.
Son un tanto en cuanto unas funciones un poco inútiles pero sencillas de entender:
un printf, fibonnaci, factorial, calculo de la letra del dni, inversión de derecha a izquierda de una cadena.

DLSYSFUNCS __bgdexport( mod_dctools, functions_exports) [] = {
{"DCPRINT", "S", TYPE_INT, moddctools_dcprint},
{"DCFIBONACCI", "I", TYPE_INT, moddctools_dcfibonacci},
{"DCFACTORIAL", "I", TYPE_INT, moddctools_dcfactorial},
{"DCLETRADNI", "S", TYPE_CHAR, moddctools_dcletradni},
{"DCMIRRORSTR", "S", TYPE_STRING, moddctools_dcmirrorstr},
{0, 0, 0, 0}
};

Espero que os sirva a todos para entrar en el mundillo de creación de módulos, la licencia es LGPL, podeis usarla tal cual os plazca :D.
Monstruos Diabólicos

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

DCelso

Un ejemplo de uso sería el siguiente:

Program pruebadctools;

import "mod_video"
import "mod_key"
import "mod_draw"
import "mod_proc"
import "mod_map"
import "mod_screen"
import "mod_time"
import "mod_text"
import "mod_dctools"

Global
profundidad = 32;
FPSteoriocos = 30;
ancho = 800;
alto = 600;
resultado[10];
char letra;
string cadena_ret;
Begin
set_mode(ancho,alto,profundidad);
set_fps(FPSteoriocos,0);
    put_screen(0,load_png("recursos/despegue.png"));
    resultado[0]=dcprint("hola mundo");
    resultado[1]=dcfibonacci(8);
    resultado[2]=dcfactorial(4);
    letra = dcletradni("75030555");
    cadena_ret = dcmirrorStr("hola mundo");
    write_var(0,50,20,0,resultado[0]);
    write_var(0,100,20,0,resultado[1]);
    write_var(0,150,20,0,resultado[2]);
    write_var(0,200,20,0,letra);
    write_var(0,300,20,0,cadena_ret);
    while (!key(_esc))
        if (key(_f))
            full_screen = !full_screen;
            set_mode(ancho,alto,profundidad);
        end
        frame;
end
let_me_alone();
end


Monstruos Diabólicos

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

osk

¡Muchísimas gracias!
¡Es justo lo que estaba intentando hacer yo para mi manual!

splinter_work

:D

jejeje, me alegra mucho DCelso, felicitaciones y gracias por el ejemplo... podrias armar un minituto, no estaria mal para otros que se inician... ya que lo estas viendo desde el punto de vista de un usuario que hace su primer modulo, nada mejor que eso...

gracias nuevamente...

te estas llevando muchos karmas... ;)

DCelso

Pues la verdad es que como es tan básico, por sí solo se entiende, no sabría por donde empezar el minitutorial, soy muy malo enseñando :(, en serio. Lo mío es aprender :D.
Esperemos a que lo monte osk y lo criticamos, que eso se me da mejor :D juasjuasjau.
Por cierto osk, me alegra leerte, aún más cuando dices que sigues con el manual. Lo di ya por perdido :D.

A ver, como datos adicionales, el adjunto viene con un Makefile que enseña las reglas para generar el obj y el exe final con los flags necesarios para que gcc funcione bien.
También adjunté los archivos del projecto en eclipse(qué haría yo sin este gran IDE  ::)) para poder abrirlo desde éste.
Por cierto, necesitas tener instalado mingw y zlib-dev. No pude quitar la dependencia de zlib, aunque no la use me la pide por culpa de los headers que me copié del SVN de bennu. Tendría que dedicarle un poco más de tiempo para eliminar esta dependencia. Quizás como paso intermedio debería de meter en el ejemplo los headers de zlib y el dll necesario para eliminar la dependencia de tener instalado zlib-dev.
Monstruos Diabólicos

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

Drumpi

Mola, yo también tengo que aprender a hacer módulos, así que espero también que se haga un tutorial. Si no sabes por dónde empezar, podrías intentarlo con lo necesario para desarrollar dlls. Había un pequeño tuto por ahi para hacer dlls en Fenix, lo puedes tomar como ejemplo.
Como incentivo, karma++.
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)

osk

Sí...estoy acabando ya el manual...se me está haciendo un poco pesado pero creo que me está quedando bien. Espero que para la semana que viene ya lo tenga (casi) listo.

Precisamente tenía pensado hacer un minituto de hacer módulos, y cogeré el ejemplo tuyo como demostración práctica. Ya avanzo de que yo no soy ningún especialista y lo que he ido probando lo he hecho a base de prueba y error...así que no será muy técnico ni riguroso: está escrito por un usuario "de a pie" a otro usuario "de a pie". Y he utilizado el CodeBlocks, ya que es muy intuitivo y es multiplataforma.

Venga, hasta luego

DCelso

Ok, lo esperamos con los brazos abiertos muchos de nosotros. :D
Por cierto, faltaría añadirle algo más de complejidad, como crear nuevas variables globales dentro de nuestro módulo o usar funciones de otros módulos, pero eso no lo hice aún, tendré que investigar y probar más.
Monstruos Diabólicos

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

Prg

yo tambié quiero aprender a hacer módulos, je je, ya lo descargué, a ver si luego lo miro con detenimiento :)
gracias y karma ++ :)
en humos puedes mover la camara con los cursores. es necesario para los niveles a partir del dos :)

Windgate

Repito todo lo que se ha dicho ya, era algo que llevaba 65 millones de años esperando, karma++
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

Windgate

#10
He mirado a fondo tu ejemplo, a primera vista parece sencillo, aunque veo unos parámetros INSTANCE * my que me resultan sospechosos ¬¬

También alguna cosa más que no termina de convencerme del todo, como la redeclaración de alguna cabecera de función y la presencia de 2 cabeceras distintas para cada función, aunque esto último supongo que serán respectivamente la cabecera para ese 'C' en el que se escriben las DLL y la cabecera que luego será utilizable (o interfaceable) desde Bennu.

Ahora mismo estoy instalando el Eclipse para poder compilar y probar a fondo todo, aunque ya te aviso que yo con Eclipse/Visual Studio/CodeBlocks me llevo faltal y siempre terminamos arrojándonos errores gratuitos, primero él a mí, pero luego yo a él :o

Gracias de nuevo DCelso, os mantendré informado sobre mis descubrimientos en el nuevo mundo de las DLL, cualquier consejo adicional bienvenido será.

EDIT: Cojones vaginales... La última vez me lo pasaron en un pen para hacer un trabajito y fue coser y cantar, pero ahora entro a eclipse.org y me ofrecen decenas de versiones, para Java, para C, de diferentes tamaños, para EE (Que no sé qué es ???). En resumen, ¿Qué versión de Eclipse me recomiendas para meterme en este corral? Si además me ofrece soporte para Java y C++ mejor.
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

EE, Enterprise Edition: es para hace programas tipo WAMP (windows apache mysql php) de forma profesional (generalmente se usa a nivel empresarial WAOJ o UAOJ, Windows/Unix Apache Oracle JAVA), básicamente son páginas web dinámicas de gestión de datos a través de ataque a un servidor de Base de Datos.
Yo tengo instalada esa versión a la que le he añadido C++ y Perl, ahí a tope con todo a la vez y porque no existe. Yo quizas te recomendaría que tengas varios eclipses distintos, uno para JAVA y otro para C++, para no liar mucho la cosa, total hoy en día de espacio vamos sobrados :D.
Date cuenta que eclipse solo es el IDE (Integrated Development Environment), para C necesitas instalar un compilador externo como GCC (Mingw32 o Cygwin te valdrán)
Para JAVA necesitarás, almenos el JRE, (Runtime envirotment), pero Te recomendaría el JDK (Development Kit) ya que trae el código fuente de JAVA y los documentos de ayuda y muchas veces te servirán para conocer un poco como usar los métodos de una clase o las propiedades que te ofrecen.

PD: toma castaña pilonga de siglas :D.
Monstruos Diabólicos

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

blostec

Se me había pasado por alto este tema, ahora la bajo a ver que tal esta. Saludos DCelso!

Windgate

Yo ahora estoy instalando el Eclipse para C++, miedo me da :S

¿Sólo se pueden hacer DLLs con funciones programadas en C++? Quiero decir, ¿Sería posible meter en una DLL FUNCTIONS programadas con el propio Bennu?

Es que tengo algunos .prg de utilidad general que no me importaría tener en una DLL para no tocar ni ver más su código ya que las considero FERPECTAS!
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

Pues me parece que no se puede.
A ver podrías hacer bennu embebido en c pero eso no te convierte el dcb en dll, necesitarías las dos cosas, así que es mas rollo.
Monstruos Diabólicos

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