Diferentes resultados con y sin --libmode

Started by darío, June 11, 2017, 09:45:00 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

darío

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

My sites:
Smart Fpg Editor - Painless FPG Edition for Bennu and PixTudio
fenixlib - .NET support for manipulating PixTudio, Bennu and Div graphic formats

SplinterGU

Download Lastest BennuGD Release: http://www.bennugd.org/node/2

SplinterGU

ya vi el problema, falta fixup de las variables gloables, lo que no recuerdo es si lo contemple o no, ahora recordar que hice...
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

SplinterGU

ya lo fixee, pero quiero probar con publicas (privadas no habria problemas).

el acceso a las globales ya funcionan (funcionaba el modificarlo)
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

darío

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.
My sites:
Smart Fpg Editor - Painless FPG Edition for Bennu and PixTudio
fenixlib - .NET support for manipulating PixTudio, Bennu and Div graphic formats

SplinterGU

el comportamiento es el mismo, si pones el mismo nombre que otra ya existente, falla
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

SplinterGU

fixeado en el svn, debo los binarios, en estos dias, lo hare.

probe tambien locales, publicas
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

darío

Puedo confirmar que funciona con la aplicación que motivó preparar el ejemplo.

Gracias!
My sites:
Smart Fpg Editor - Painless FPG Edition for Bennu and PixTudio
fenixlib - .NET support for manipulating PixTudio, Bennu and Div graphic formats

SplinterGU

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!
Download Lastest BennuGD Release: http://www.bennugd.org/node/2