Haciendo pruebas con --libmode me he topado con un problema que no se si es por que no entiendo algo o con el funcionamiento de libmode, estoy usando algo mal o porque me he topado con un bug.
No se ni como describirlo, así que he preparado un ejemplo.
Ejecutandolo todo sin libmode funciona como me esperaría:
bgdc -DMONOLITIC=1 test.prg
bgdi test
Muestra 0 y 1.
Sin embargo, cuando "modularizo" usando --libmode obtengo un resultado diverso
bgdc --libmode b.lib
bgdc --libmode -Lb.dcl a.lib
bgdc -La.dcl test.prg
bgdi test
Muestra 16, 16.
El archivo zip adjunto contiene el código necesario, que copio a continuación.
b.h
#ifndef __B_H__
#define __B_H__
import "mod_mem"
Type t_sprite
int id_sprite = -1;
End
#endif
b.lib
#ifndef __SPRITE_LIB__
#define __SPRITE_LIB__
#include "b.h"
Global
int sprite_CountSprites = 0;
End
Function sprite_new(t_sprite pointer dest)
Begin
[dest].id_sprite = sprite_CountSprites;
sprite_CountSprites++;
End
#endif
a.lib
import "mod_text"
import "mod_proc"
#ifndef __A_LIB__
#define __A_LIB__
#include "b.h"
Global
t_sprite sprites[10];
End
Function initialize()
Begin
sprite_new(sprites[0]);
sprite_new(sprites[1]);
End
Process a()
Private
int a, int b;
Begin
a = sprites[0].id_sprite;
b = sprites[1].id_sprite;
write_int(0, 0, 0, 0, 0, &a);
write_int(0, 0, 10, 0, 0, &b);
Loop
Frame;
End
End
#endif
test.prg
import "mod_video"
import "mod_proc"
import "mod_text"
import "mod_key"
#include "b.h"
#ifdef MONOLITIC
#include "b.lib"
#include "a.lib"
#endif
Begin
set_mode(320, 240, 16);
set_fps(48, 0);
initialize();
a();
Repeat
Frame;
Until(key(_ESC))
let_me_alone();
End
lo revisare, gracias
ya vi el problema, falta fixup de las variables gloables, lo que no recuerdo es si lo contemple o no, ahora recordar que hice...
ya lo fixee, pero quiero probar con publicas (privadas no habria problemas).
el acceso a las globales ya funcionan (funcionaba el modificarlo)
Genial,
En cuanto lo subas al SVN lo pruebo.
Qué comportamiento cabe esperar con una global definida en una librería? funciona cómo cualquier otra global de cara a los programas que utilizan dicha librería? Se puede definir otra global con el mismo nombre o fallará a la hora de incluir la librería?
Muy buen trabajo lo de las librerías, hace que se puedan modularizar todo mucho más.
el comportamiento es el mismo, si pones el mismo nombre que otra ya existente, falla
fixeado en el svn, debo los binarios, en estos dias, lo hare.
probe tambien locales, publicas
Puedo confirmar que funciona con la aplicación que motivó preparar el ejemplo.
Gracias!
Quote from: darío on June 13, 2017, 09:28:01 PM
Puedo confirmar que funciona con la aplicación que motivó preparar el ejemplo.
Gracias!
de nada, a vos por reportar el error, gracias!