Autor Tema: Diferentes resultados con y sin --libmode  (Leído 219 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Conectado darío

  • Sr. Member
  • ****
  • Mensajes: 449
  • Karma: 48
  • Sexo: Masculino
    • Ver Perfil
Diferentes resultados con y sin --libmode
« en: Junio 11, 2017, 01: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:
Código: [Seleccionar]
bgdc -DMONOLITIC=1 test.prg
bgdi test

Muestra 0 y 1.

Sin embargo, cuando "modularizo" usando --libmode obtengo un resultado diverso
Código: [Seleccionar]
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
Código: [Seleccionar]
#ifndef __B_H__
#define __B_H__

import "mod_mem"

Type t_sprite
    int id_sprite = -1;
End

#endif

b.lib
Código: [Seleccionar]
#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
Código: [Seleccionar]
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
Código: [Seleccionar]
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

Conectado SplinterGU

  • Hero Member
  • *****
  • Mensajes: 12461
  • Karma: 367
  • Sexo: Masculino
    • Ver Perfil
Re:Diferentes resultados con y sin --libmode
« Respuesta #1 en: Junio 12, 2017, 07:21:40 am »
lo revisare, gracias
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Conectado SplinterGU

  • Hero Member
  • *****
  • Mensajes: 12461
  • Karma: 367
  • Sexo: Masculino
    • Ver Perfil
Re:Diferentes resultados con y sin --libmode
« Respuesta #2 en: Junio 12, 2017, 07:44:55 am »
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

Conectado SplinterGU

  • Hero Member
  • *****
  • Mensajes: 12461
  • Karma: 367
  • Sexo: Masculino
    • Ver Perfil
Re:Diferentes resultados con y sin --libmode
« Respuesta #3 en: Junio 12, 2017, 07:55:07 am »
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

Conectado darío

  • Sr. Member
  • ****
  • Mensajes: 449
  • Karma: 48
  • Sexo: Masculino
    • Ver Perfil
Re:Diferentes resultados con y sin --libmode
« Respuesta #4 en: Junio 12, 2017, 09:31:33 am »
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

Conectado SplinterGU

  • Hero Member
  • *****
  • Mensajes: 12461
  • Karma: 367
  • Sexo: Masculino
    • Ver Perfil
Re:Diferentes resultados con y sin --libmode
« Respuesta #5 en: Junio 12, 2017, 10:06:01 am »
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

Conectado SplinterGU

  • Hero Member
  • *****
  • Mensajes: 12461
  • Karma: 367
  • Sexo: Masculino
    • Ver Perfil
Re:Diferentes resultados con y sin --libmode
« Respuesta #6 en: Junio 12, 2017, 07:12:41 pm »
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

Conectado darío

  • Sr. Member
  • ****
  • Mensajes: 449
  • Karma: 48
  • Sexo: Masculino
    • Ver Perfil
Re:Diferentes resultados con y sin --libmode
« Respuesta #7 en: Junio 13, 2017, 01:28:01 pm »
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

Conectado SplinterGU

  • Hero Member
  • *****
  • Mensajes: 12461
  • Karma: 367
  • Sexo: Masculino
    • Ver Perfil
Re:Diferentes resultados con y sin --libmode
« Respuesta #8 en: Junio 13, 2017, 02:13:22 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