CAAD
http://foro.caad.es/

[InfSP6] reinicializar Buffer y número máx. de parámetros
http://foro.caad.es/viewtopic.php?f=12&t=3439
Página 1 de 1

Autor:  jarel [ 02 Dic 2009 01:42 ]
Asunto:  [InfSP6] reinicializar Buffer y número máx. de parámetros

Buenas, he extraído la parte del código de Fhablao.h en la que se detecta el número de opción elegida en los menús de conversación:
Código:
do{
KeyboardPrimitive(buffer, parse);
i=TryNumber(1);
} until ((i >= 0) && (i <= NUMERO_DE_OPCIONES));


Esto es: en la variable i, se almacena el número que hayamos tecleado tras pulsar [return].
El problema es que la siguiente vez, si en lugar de escribir un número pulsas [return] directamente el programa traga aplicando el último valor tecleado.
¿Cómo podría borrarle la memoria al buffer?

Y otra cuestión. En el mismo código de Fhablao leo que Inform admite un máximo de 7 parámetros a enviar a una función. ¿Se refiere esto a la Máquina Z o también es aplicable a Glulx?

Saludos

Autor:  Eliuk Blau [ 02 Dic 2009 05:32 ]
Asunto:  Re: [InfSP6] reinicializar Buffer y número máx. de parámetros

Hombre... eso yo lo reparé hace muuuucho tiempo en mi librería Datoki. Hay una copia funcional con la corrección que puedes sacar de la última versión (la última última) de FHablaOO.h para InformATE!, porque le mandé el código arreglado a Morgul. Como la versión de InformATE! y la de INFPS6 son idénticas... supongo que no tendrás problemas en copiarlas.

Ahora, si quieres, puedo enviarte una copia de Datoki. Tiene funcionalidad aumentadas. Muchas cosas más útiles... gramática muy mejorada, soporte de temas (como Palique.h) soporte para subdiálogos, menús numéricos, relanzado automático de diálogo, copias de seguridad de los Quips (en Datoki se llaman "tokis"), los mensaje son todos personalizables sin hackeos (como textos o rutinas), rutinas after() y before(), etc. No está documentada, pero no deberías tener problemas en entenderla, y siempre estoy yo acá para cualquier consulta. :D

Como sea, te mando el código de Datoki que corrige ese problema. No identico al de FHablaOO.h porque yo cambié el flujo del loop de conversación para optimizarlo, pero es básicamente la idea...

Spoiler: Mostrar
Código:
          ! averigua la opcion elegida y responde
          new_line;
          do {
            .Hay_InputLimpio;
            ! la primera parte del mensaje: 'Elige una opcion valida'
            PrintOrRun(self,msg_elegir_opcion1,1);
            ! solo si el dialogo no esta 'bloqueado' se debe mostrar
            ! la segunda parte del mensaje: '(0 para no decir nada)'
            if (self hasnt locked) {
              print " "; PrintOrRun(self,msg_elegir_opcion2,1);
            }
            PrintOrRun(self,msg_elegir_opcion3,1);
            KeyboardPrimitive(buffer, parse);
           
            ! averiguamos si se ha escrito algun numero
            #ifdef TARGET_ZCODE;
                hay_num = parse->1;
            #ifnot; ! TARGET_GLULX
                hay_num = parse-->0;
            #endif; ! TARGET_
           
            ! si no hay numero quiere decir que el input ha sido en blanco (limpio),
            ! por lo tanto vuelve a lanzarlo para obtener un numero correcto
            if (hay_num == 0) { jump Hay_InputLimpio; } ! saltamos al inicio del bucle
           
            ! si hay input efectivo (con numero), entonces averiguamos su valor
            toki_sel = TryNumber(1);
           
            ! si el dialogo esta 'bloqueado' no se debe permitir la opcion
            ! cero (no decir nada); se pedira un nuevo input de opcion valida
            if (self has locked && toki_sel==0) { jump Hay_InputLimpio; }
           
          ! el 'until' ahora comprueba que el numero este dentro del rango
          ! de la lista en el menu de dialogos
          } until ((toki_sel >= 0) && (toki_sel <= toki_num));


Saludos! Si quieres Datoki, nada más pídemela. :wink:

Autor:  Eliuk Blau [ 02 Dic 2009 05:41 ]
Asunto:  Re: [InfSP6] reinicializar Buffer y número máx. de parámetros

jarel escribió:
Y otra cuestión. En el mismo código de Fhablao leo que Inform admite un máximo de 7 parámetros a enviar a una función. ¿Se refiere esto a la Máquina Z o también es aplicable a Glulx?


Es limitación de la máquina Z. Glulx soporte cantidad de argumentos variables. Máquina-Z no. Y como FHablaOO.h es biplataforma, tiene que adaptarse a las características comunes entre los dos... estos es, no más de 7 argumentos por llamada a función.

En Datoki mejoré un poco la rutina de activación de los Tokis (quips)... y sólo debes indicar el toki que quieres activar o desactivar... con un máximo de 7, siendo (si usas el toki cero) el primer argumento de la llamada (si no usas el toki cero, da lo mismo el orden de los tokis). La llamada se realiza entonces de manera mucho más corta que la que trae originalmente FHablaOO.h

En cualquier caso, puedes hacer tantas activaciones de Quips (o Tokis) en FHablaOO.h/Datoki simplemente llamando a la rutina de activar estos una tras otra, tantas como quieras. Solo al final del ciclo de respuesta los nuevos Quips/Tokis activados serán computados.

Saludos! :D

Autor:  jarel [ 02 Dic 2009 15:33 ]
Asunto:  Re: [InfSP6] reinicializar Buffer y número máx. de parámetros

Muchas gracias Eliuk, funciona perfectamente.

¡Y ya sabía que lo habías arreglado! De hecho antes de escribir este mensaje entré en tu página buscando la librería, pero no la encontré.
De momento con esto me vale, es para hacer una especie de menús.

Saludos

PD: La intrucción "jump" no la conocía, como el "goto" en BASIC, otra cosa interesante que he aprendido de rebote :)
PD2: Buscando en el disco duro, resulta que tengo una versión de Datoki del 2007.

Autor:  Eliuk Blau [ 02 Dic 2009 17:54 ]
Asunto:  Re: [InfSP6] reinicializar Buffer y número máx. de parámetros

jarel escribió:
Muchas gracias Eliuk, funciona perfectamente.


Cool! :D

jarel escribió:
PD2: Buscando en el disco duro, resulta que tengo una versión de Datoki del 2007.


Bueno, si de todas formas te interesa... igual puedes pedírmela luego. Creo que tengo una versión más mejorada que la del 2007. :)

P.D: Por cierto, el sistema de configuración de Datoki está pintado para hacer menús numéricos genéricos. Hay opciones que te permiten "despersonalizar" cualquier menú, quitando todos los mensaje relacionados con "conversación" y dejar simples menús genéricos, àla ZIPI, :)

Página 1 de 1 Todos los horarios son UTC + 1 hora
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/