write_string ¿puede funcionar de esta manera?

Started by Danielo515, September 25, 2008, 09:49:32 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Danielo515

Me preguntaba si se puede de algún modo conseguir que el comportamiento de write string pudiera ser como el siguiente

[code language="bennu"]private[
string texto[]="a","b";
begin
write_string(0,100,100,4,&texto);

loop
         if(algo)i=0;end
         if(otra)i=1;end
frame;
end[/code]

y que el texto que aparece se modifique en funcion de la variable i;

SplinterGU

#1
no, no se puede... tecnicamente no es posible... pensa solo en la sintaxis de lo que esas escribiendo... "&texto[ i ]"... "&"... "address"... le estas pasando un address de memoria, y eso es lo que imprime, es imposible...
otra cosa diferente es si usas una variable XXX y luego le asignas a esta el valor de un vector segun necesidad...
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

kim-elet-o

#2
Si y muy facil:  ;) ;) ;)

[code language="bennu"]
private
string texto[]="a","b";
string textoVar;
begin
write_string(0,100,100,4,&textoVar);

loop
       if(algo)TextoVar = Texto[0];end
       if(otra)TextoVar = Texto[1];end
frame;
end
[/code]

"yasta!".
|/
|\im-elet-o el yayo programador.

Danielo515

Mas facil aún no?

[code language="bennu"]
private
string texto[]="a","b";
string textoVar;
begin
write_string(0,100,100,4,&textoVar);

loop
       if(algo)i=0;end
       if(otra)i=1;end

TextoVar = Texto;end

frame;
end
[/code]

Gracias kim ¿puedo llamarte kim? ja ja ja

kim-elet-o

Jejejeje si puedes, de hecho es mi nombre de pila.
Si, pero la forma en que opera bennu no es posible hacerlo asi, la instruccion recibe como parametro la direccion de una variable, y no un rango de direcciones, aunque podrias inventarte un proceso que emulara el funcionamiento del write como tu quieres, añadiendo una variable que tuviera la direccion de la variable de control de rango, jejejeje, no te voy a decir como hacerla, por que quiero que la rumies un poquitin antes, digamos que te lo dejo como ejercicio, jejejejeje.

|/
|\im-elet-o el yayo programador.

SplinterGU

Quote from: SplinterGU on September 25, 2008, 09:58:02 PM
otra cosa diferente es si usas una variable XXX y luego le asignas a esta el valor de un vector segun necesidad...
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Danielo515

Por lo que yo entiendo
Texto[0]="a"

por lo que

[code language="bennu" options="singleline"]Textovar="a"[/code]; y [code language="bennu" options="singleline"]Textovar=texto[0];[/code]  es lo mismo...

Y si
[code language="bennu" options="singleline"]texto[/code] cuando i=0 es lo mismo que [code language="bennu" options="singleline"]texto[0] [/code] No entiendo por qué no puede ser así

gracias por las clases, a todos

Packo_z007

Espero poder despejar tus dudas. La funcion write_string recibe como parametro un puntero a string.. no un string ,es por eso que se antepone & al nombre de la variable ( &Textovar o &Texto[0]).
Cuando llamas a la funcion, le pasas como parametro el lugar en la memoria de donde tiene que leer el texto a mostrar, no el texto en si.. (por eso no tiene sentido escribir write_string(0,0,0,0,"cadena"))
Si bien el texto ubicado en ese "lugar" puede cambiar, el lugar debe mantenerse fijo. Texto[0] y Texto[1] estan en diferentes lugares en la memoria. Es por esto que se usa una variable auxiliar.. en este caso Textovar. El lugar que ocupa Textovar es siempre el mismo. Saludos
[STRING] *PANIC Too many strings, allocating more space

SplinterGU

es un poco complicado de entender si no tenes muy claro el tema de los punteros, te sugiero busques en el foro "punteros" o "pointers" y hay un documento que yo puse un link que te puede aclarar un poco el tema...
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Danielo515

Sí se como funcionan los punteros, los estudié cuando me dio por el c, aunque no pasé de las listas enlazadas.
Lo que no se es si me he explicado yo, si texto[0] contiene "a", cuando yo hago textovar=texto[0] entonces textovar vale "a", textovar está en la misma posición de memoria, lo que cambia es su valor, por eso no entiendo que tiene de malo el ejemplo de
[code language="bennu"]loop
       if(algo)i=0;end
       if(otra)i=1;end

TextoVar = Texto;end[/code]

Packo_z007

ese ejemplo esta bien... el que pusiste primero es el que esta mal.
[STRING] *PANIC Too many strings, allocating more space

SplinterGU

claro, ese ejemplo esta bien... yo pense que hablablas del primer ejemplo...
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

kim-elet-o

Yo tambien creia que hablabas del primer ejemplo, el segundo ejemplo esta correcto, no me fije bien en el mensaje tuyo ya que tenia mucho sueño, y estaba a punto de irme a dormir.
|/
|\im-elet-o el yayo programador.

Danielo515

Ja ja, era lo que me imaginaba,  un malentendido. Muchas gracias por intentar resolver mis dudas aun teniendo sueño.
Un abrazo a todos.