Bennu Game Development

Foros en Español => General => Topic started by: darío on June 11, 2017, 09:45:00 PM

Title: Diferentes resultados con y sin --libmode
Post by: darío on June 11, 2017, 09:45:00 PM
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

Title: Re:Diferentes resultados con y sin --libmode
Post by: SplinterGU on June 12, 2017, 03:21:40 PM
lo revisare, gracias
Title: Re:Diferentes resultados con y sin --libmode
Post by: SplinterGU on June 12, 2017, 03:44:55 PM
ya vi el problema, falta fixup de las variables gloables, lo que no recuerdo es si lo contemple o no, ahora recordar que hice...
Title: Re:Diferentes resultados con y sin --libmode
Post by: SplinterGU on June 12, 2017, 03:55:07 PM
ya lo fixee, pero quiero probar con publicas (privadas no habria problemas).

el acceso a las globales ya funcionan (funcionaba el modificarlo)
Title: Re:Diferentes resultados con y sin --libmode
Post by: darío on June 12, 2017, 05:31:33 PM
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.
Title: Re:Diferentes resultados con y sin --libmode
Post by: SplinterGU on June 12, 2017, 06:06:01 PM
el comportamiento es el mismo, si pones el mismo nombre que otra ya existente, falla
Title: Re:Diferentes resultados con y sin --libmode
Post by: SplinterGU on June 13, 2017, 03:12:41 AM
fixeado en el svn, debo los binarios, en estos dias, lo hare.

probe tambien locales, publicas
Title: Re:Diferentes resultados con y sin --libmode
Post by: darío on June 13, 2017, 09:28:01 PM
Puedo confirmar que funciona con la aplicación que motivó preparar el ejemplo.

Gracias!
Title: Re:Diferentes resultados con y sin --libmode
Post by: SplinterGU on June 13, 2017, 10:13:22 PM
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!