Lectura de cadenas formateadas

Started by DCelso, August 17, 2008, 11:49:59 AM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Windgate

Resucito este hilo tras casi medio año... Veo que incluso tengo aquí varios mensajes escritos de cuando todavía usaba Fénix :o :o :o

La cuestión es que me gustaría poder usar un único write() de forma que en el texto a escribir pueda incluir algunos saltos de linea. Me explico con un ejemplo muy sencillo:

Me gustaría que con:
   write(0,0,0,0, "Hola" + CONST_SALTO_LINEA + "que" + CONST_SALTO_LINEA + "tal?");

Obtenga esta salida en pantalla:
   Hola
   que
   tal

He probado con /n con / con \ con itoa(10) con itoa(13) con (char)10 con (char)13... Pero no lo consigo. ¿Alguien sabe algo al respecto?
Iván García Subero. Programador, profesor de informática, monitor de actividades culturales y presidente de TRINIT Asociación de Informáticos de Zaragoza. http://trinit.es

DCelso

por lo que sé, creo que no se puede, write está preparado para escribir a partir de la coordenada que le digas. tendrás que hacer un for para recorrer las líneas a mostrar avanzando y de 20 en 20 o similar dependiendo del tamaño del tipo de letra.
Si solo es para depurar, creo que say sí que interpreta los salto de línea.
Monstruos Diabólicos

"A PAck of classic GAMEs For BennuGD" en desarrollo
http://code.google.com/p/apagame4be/

Windgate

No, es para mostrar texto en un cuadro, cuando se trata de algo demasiado largo mi idea era poner esos "hipotéticos saltos de línea"...

Será cuestión de usar las funciones de troceo de cadenas, vaya chasco :-\

Al menos haré un módulo que se encargue de comerse el marrón para la próxima vez... Porque siempre hay una próxima vez ;D
Iván García Subero. Programador, profesor de informática, monitor de actividades culturales y presidente de TRINIT Asociación de Informáticos de Zaragoza. http://trinit.es

darío

Yo tengo un código que hice para Fenix que servía para mostrar texto por pantalla. Era altamente configurable, permitía por ejemplo mostrar un gráfico de fondo distinto en función del número de líneas, definir el máximo número de líneas, escribir a modo "máquina de escribir", hacer efectos de entrada del cuadro y otras muchas cosas.

Lo estoy adaptando a Bennu (ya lo he compilado, pero voy a separar ejemplo de rutina para que se use como include), ahora en un ratito lo subo. Creo que te podrá servir para lo que pretendes.

En una hora más o menos lo subo (tengo que hacer unas cosas antes).

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

Windgate

Joder, estaría de lujo, ¿También permitía saltar de línea si el texto era demasiado largo?

Lo espero ansioso. A ver si es sencillito de verdad, que he intentado usar varias veces código de terceros pero casi siempre se me calienta la cabeza y según lo que sea me lo codeo yo desde 0...

Si lo veo útil y lo termino incluyendo en mi aplicación te doy un karmazo :o
Iván García Subero. Programador, profesor de informática, monitor de actividades culturales y presidente de TRINIT Asociación de Informáticos de Zaragoza. http://trinit.es

darío

Hola, perdona, al final he tenido que corregir alguna cosilla que otra más para que funcionase...

Lo del salto de línea, sí, lo hace automáticamente.

Es bastante configurable, lo que hace también que sea documentable perder un poco de tiempo leyendo la documentación. Lo hice hace bastante tiempo así que hay algunas cosas que a día de hoy las hubiera hecho de otra manera. También es posible que exista algún fallo.

La documentación está en el archivo WDB.h, pero el archivo que puedes compilar y ejecutar para probar es el ejemplo.prg.

Puesto que creo que tu no quieres escribir a modo "máquina de escribir", deberás ajustar los parámetros de velocidad (ya verás lo que digo cuando leas la documentación) a 0. De este modo no habrá espera (el texto se muestra inmediatamente).

Si tienes cualquier duda no dudes en preguntar.

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

Windgate

#21
Dario, me ha funcionado, pero como estoy en Linux he tenido que pasar a minúsculas algún nombre de archivo. Te dejo aquí el link con exactamente lo mismo que me has pasado tú pero el archivo .fnt y el archivo .map pasado a minúsculas, junto con un .sh para autocompilar y ejecutar en Linux:

DESCARGAR: http://www.mediafire.com/?rxydgmqjmtr

Karma up!!!

Una consulta, tu paquete interpreta  sólamente desde fichero, ¿Verdad? Es que en mi caso no me sirve, ya que lo que yo quiero que escriba es una cadena con algunos argumentos utilizando el operador '+':

"El puntero en la direccion: " + list_head + " almacena el valor: " + (*list_head).dato + " y su siguiente dato se encuentra en la direccion: " + (*list_head).next

Quizá el ejemplo parece excesivo... Pero la cuestión, quiero que sea capaz de escribir ese tipo de "cadenas con atributos" formateadas de la misma forma que hace tu programa.

Voy a revisar tu código a ver si puedo meterle alguna cosa para hacerlo funcionar...

Gracias!!!

EDIT: CONSEGUIDO!!! He cogido la cadena esa con todos sus atributos, la he metido con fputs en un fichero, se la he pasado a tu WD y sale perfectamente formateada. Incluso los valores de puntero que son números muy largos saltan de línea correctamente, estoy excitado :o

Voy a meter tu WD como modulo de mi juego y le asociaré un pequeño módulo encargado de pasar a fichero la cadena para casos en los que quieres mostrar una cadena en lugar de un fichero. Grande, muy grande sí señor, saldrás en los créditos ;D
Iván García Subero. Programador, profesor de informática, monitor de actividades culturales y presidente de TRINIT Asociación de Informáticos de Zaragoza. http://trinit.es

darío

Hola, me alegro de que te pueda servir :). Lo que dices de los nombres de archivos, es algo que antes no tenía en cuenta (ahora sí suelo tenerlo), pero gracias en cualquier caso por el apunte y las correcciones.

No es necesario cargar el texto del archivo. Simplemente sustituye:

wd_load_text("./texto.txt",1, &wd.rTexto);

por:

wd.rTexto = "Este es mi texto. &Y esto está en otra línea";

y prueba...

Si no lo has hecho, recomiendo encarecidamente que te leas la documentación incluida en el archivo WDB.h. Está casi todo explicado y verás cosas que se pueden configurar que no se usan en el ejemplo. También sería interesante que leyeses un apartado que pone "Limitaciones" para que evites situaciones extrañas.

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

Windgate

Aahhh, me había leído el uso de los campos de esa estructura pero no había caído en que ahí se guardaba la cadena...

Ya lo tengo solventado, pero lo tendré en cuenta para la próxima vez.

He tenido que modificar un poco las cosas ya que para la aplicación que estoy haciendo quería que esos muestreos de texto sean "bloqueantes", así que he cambiado PROCESS por FUNCTION y he tenido que prescindir de efectos que congelaban/descongelaban al "padre" del proceso.

En cualquier caso, lo he mirado bastante a fondo y lo veo muy muy bien, sólo he echado en falta un detalle sencillísimo: Uno de los campos indica el graph a usar, ¿No convendría tener también un file por si hay varios FPG cargados como era mi caso?

Es algo que también he solucionado por mi cuenta, pero es por darte ideas, por si algún día te pones a hacer nueva versión o lo que sea :P

Thanks again!
Iván García Subero. Programador, profesor de informática, monitor de actividades culturales y presidente de TRINIT Asociación de Informáticos de Zaragoza. http://trinit.es

darío

Lo de los Process por functions... bueno, cuando hice esto ni siquiera existían los function en Fenix creo jeje.

Lo del file, la verdad es que sí hubiese sido buena idea ponerlo (no se me ocurrió) así que bueno, si algún día me pongo a retocar esto lo tendré en cuenta :).

Ah y gracias por el karma.

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

splinter_work

yo uso textos como procesos en el instalador bennu.

write_in_map
map_put

Windgate

Todavía no he usado la escritura de textos como procesos, aunque las flechas del radar de mi Sardines serían una buena opción donde probarlos... Por ejemplo para indicar el nombre del "enemigo" al que están señalando.

Ahora me preocupaba la escritura de una única cadena de texto que pueda aparecer en varias líneas si no cabe dentro de su cuadro de texto, por el momento está resuelto, menos mal...

En cuanto me ponga a probar la escritura de textos como procesos si tengo alguna duda te pregunto Splinter :D
Iván García Subero. Programador, profesor de informática, monitor de actividades culturales y presidente de TRINIT Asociación de Informáticos de Zaragoza. http://trinit.es