problemas con mi dcl

Started by Prg, January 04, 2011, 11:18:46 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Prg

Hola, todo iba genial hasta que llegué al uso de una función que retorna una cadena. cómo y dónde se hará la declaración de esta función para que la función retorne correctamente el tipo?
en humos puedes mover la camara con los cursores. es necesario para los niveles a partir del dos :)

SplinterGU

Los dlc tienen autodeclaracion de funciones, al cargarse primero no hace falta declarar las funciones, pero si tu dcl va a usar una funcion que esta definida en otro dcl o en el programa principal, entonces si debe declararse, pero solo en el dlc.

lo que no se puede hacer (por ahora) es declarar una funcion que existe en un dcl en el programa principal, ya que las funciones se declaran al linkear contra el dcl que las contiene.

no se si quedo claro, si necesitas que lo explique de otra forma, pedilo.

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

Prg

ok, creo que entendí, pero eso no me está sucediendo

[code language="bennu"]import "mod_key";
import "mod_video";
import "mod_text";
import "mod_proc";
import "mod_grproc";
import "mod_say";
import "mod_scroll";
import "mod_map";
import "mod_screen";
import "mod_mouse";
import "mod_draw";
import "mod_mem";
import "mod_string";

begin
say(am());
say("antes mouse.left");
while (not mouse.left)
frame;
end
say("despu[es mouse.left");
say(dg());

say("___________");

say(dgh());

end

function dgh()
begin
while (mouse.left)
frame;
end
say("paso");
return(45);
end[/code]

[code language="bennu"]import "mod_key";
import "mod_video";
import "mod_text";
import "mod_proc";
import "mod_grproc";
import "mod_say";
import "mod_scroll";
import "mod_map";
import "mod_screen";
import "mod_mouse";
import "mod_draw";
import "mod_mem";
import "mod_string";

function string am()
begin
return("sd");
end
declare function int dg()
end

function int dg()
begin
while (mouse.left)
frame;
end
say("paso");
return(45);
end[/code]





Quote> Executing: C:\Program Files (x86)\ConTEXT\ConExec.exe "bgdi" programa

28
antes mouse.left
despu[es mouse.left
65538
___________
paso
paso
45
> Execution finished.

la función am debería retornar una cadena que say imprimiría como "sd", la función dg se comporta como un proceso por tener un frame, pero debería ser función.

la otra función se pone como ejemplo del comportamiento que esperaba.

espero no meter la pata. je je... saludos
en humos puedes mover la camara con los cursores. es necesario para los niveles a partir del dos :)

SplinterGU

es correcto, lo incorpora como proceso, cuando debe ser funcion...

vamos a ver como lo soluciono...

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

SplinterGU

ya lo solucione!

muchas gracias por el reporte... ya mismo armo binarios y subo fix!

gracias y karma!
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

SplinterGU

podrias probarlo y comentarme como te va?

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

Prg

Quote from: SplinterGU on January 05, 2011, 01:16:19 AM
podrias probarlo y comentarme como te va?

gracias!
claro, lo pruebo y te digo
:)
en humos puedes mover la camara con los cursores. es necesario para los niveles a partir del dos :)

Prg

Funciona muy bien, gracias.

Por lo pronto para lo de las cadenas usaré un puntero en lugar de retornarla.

saludos y muchas gracias por tu ayuda amigo. karma++
en humos puedes mover la camara con los cursores. es necesario para los niveles a partir del dos :)

SplinterGU

me alegro que funcione.

punteros a cadenas no es bueno...

podrias poner punteros a un array de chars.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Prg

También puedo definirlas en el .h y retornar la cadena como lo hacía antes. Eso sí funciona.

Eso no genera problemas? 
en humos puedes mover la camara con los cursores. es necesario para los niveles a partir del dos :)

SplinterGU

Quote from: Prg on January 05, 2011, 02:36:07 AM
También puedo definirlas en el .h y retornar la cadena como lo hacía antes. Eso sí funciona.

Eso no genera problemas? 


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

Prg

tengo en el .h

[code language="bennu"]function string gui_CopiaTS(p)
private
   gui_texto a;
   gui_areaTexto b;
begin
   a=b=p;
   if (p_tipo(p) == type gui_texto)
      return(a.Tselect);
   elseif(p_tipo(p) == type gui_areaTexto)
      return(b.Tselect);
   end
end[/code]

y en el código tengo:

[code language="bennu"]if (boton==1 and not mouse.left)
      copiado=gui_CopiaTS(idTexto);
      boton=0;
   end[/code]
donde copiado es una cadena

gracias nuevamente

Ya he acomodado todos los test de gui_so para usar el dcl y todo funciona de maravilla. está genial  :)   ;D
en humos puedes mover la camara con los cursores. es necesario para los niveles a partir del dos :)

SplinterGU

ah, no, eso no es necesario meterlo en el .h, es mas recomiendo que no lo hagas y lo metas en el dcl.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Prg

Quote from: SplinterGU on January 05, 2011, 04:28:14 AM
ah, no, eso no es necesario meterlo en el .h, es mas recomiendo que no lo hagas y lo metas en el dcl.

perdón, cuando decía que estaba en el código me refería el programa que usa el dcl.

Estas lineas
[code language="bennu"]if (boton==1 and not mouse.left)
  copiado=gui_CopiaTS(idTexto);
  boton=0;
end[/code]

están en el programa que usa el dcl,


Mientras que la función de abajo la puse en el .h para que si retorne el string.
[code language="bennu"]function string gui_CopiaTS(p)
private
gui_texto a;
gui_areaTexto b;
begin
a=b=p;
if (p_tipo(p) == type gui_texto)
return(a.Tselect);
elseif(p_tipo(p) == type gui_areaTexto)
return(b.Tselect);
end
end[/code]

bueno, habiendo aclarado esto, me gustaría ver que opinas nuevamente. perdón por tanta pregunta.

saludos y gracias.
en humos puedes mover la camara con los cursores. es necesario para los niveles a partir del dos :)

SplinterGU

si, habia entendido bien, pero no me explique.

yo decia que no pongas ese codigo en el .h, que lo pongas en el dcl.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2