Editor de programación simple para dispositivos móviles con pantalla táctil

Started by Fede, June 19, 2016, 06:37:01 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Fede

Muuuuy buenaaaaas. :)

Tengo el placer de presentaros mi 'Editor de programación simple para dispositivos móviles con pantalla táctil'. (A ver si a alguien se le ocurre un nombre más cortito). :)

Últimamente he estado quitando un montón de bugs y parece que está bastante estable.
Además he rehecho gran parte del código porque los documentos estaban almacenados como una lista de punteros a string, y tras los comentarios de Splinter de que esto era altamente inestable, los he cambiado a una de punteros a 'trozos de memoria char' que voy creando y destruyendo conforme me va haciendo falta.

El código programado debe de reconocer la plataforma en la que se está trabajando, así que no es más que compilarlo para la que más os guste.

Por ahora va bien en Windows y en Wiz. Tengo que probarlas en Caanoo y en Pandora, pero cuando esto avance más. Si alguien es valiente, que lo haga. :)


Características y uso:
----------------------------


-Tecla Escape para sacar/ocultar el menú. (Tecla 'Menú' en consola).



-Syntax highlighting para el lenguaje BennuGd.

Definido en el fichero 'Colas.prg' proceso 'CargarConfiguracionLenguaje' línea 287.
Podéis añadir o decidme que añada algún comando que se me halla pasado.
Tened en cuenta que cuanto más comandos hay, más lenta se pinta la línea, pues tiene que andar buscando entre muchos.
Así que he quitado un montón por motivos de velocidad.

-Admite teclado físico y en pantalla. (Tecla F1 muestra el teclado en pantalla)



-Se puede elegir el tamaño de la ventana para adaptarla al dispositivo. (Todavía no comprueba que os paséis. Si esto ocurre borrar el fichero 'Config.cfg' y volver a crearlo en el menú).
El teclado se adaptará a la pantalla.


-Admite ratón en casi todos lados. (Menos en la parte de seleccionar ficheros, por ejemplo).


-Copia y pega bloques de líneas:

Marca el bloque donde muestra el número de líneas pintándola con un cuadrado rojo.
Una sola marca equivale a una línea. Dos marcas equivale a un principio y final de bloque.
Una pulsación pone la marca y otra la quita.
Luego usad el menú de bloques para copiar y pegar.
Si no encontráis las marcas de bloques, podéis borrarlas desde el menú de bloques.

-Muestra un pequeño disquete si se ha modificado el texto. Si se pulsa en él, se graba.


-Múltiples documentos abiertos.

Por ahora 50. Utilizo un array para gestionarlos y esto ocupa memoria.
Variando la constante podéis aumentar o reducir esa cantidad en tiempo de compilación.
Se cambia de documento con F9-F10 o L-R en consola y durante unos segundos os mostrará el nombre del documento en curso.
Para volver a mostrarlo o bien dais de nuevo a F9-F10, o vais a 'cambiar nombre' en el menú.
Buscar en 'Principal.prg' la constante 'cNumeroMaximoDocumentos=51' y poner uno más de los que queráis. El último documento se usa como 'temporal' para varias operaciones.

-Permite compilar y examinar la salida directamente  en el editor.
Para ello me apoyo en un fichero de lotes 'correr.bat'.
Bennu debe de estar instalado en "C:\devBennuTemp". (Por ahora).
En Windows compila y ejecuta, y luego te muestra la salida como si fuera otro fichero más. (Lo malo es que hay que cerrarla cada vez).


Esto es lo que no consigo que funcione en Wiz.
La función 'exec' me da continuamente 255 y no consigo que haga nada.
Acompaño un pequeño programa de prueba 'HolaMundoRun.prg' por si queréis probar.
Incluyo runme.gpe para ejecutar el editor en la Wiz.


Programación en curso....
-----------------------------------


Ahora mismo estoy en la fase de programar la búsqueda de cadena de caracteres.




Podéis comentar y sugerir lo que queráis, pero tened en cuenta que el objetivo es poder programar directamente en la Wiz/Caanoo.

No creo que implemente ninguna función que no sea factible su uso en estás consolas.
Como por ejemplo múltiples pestañas, tabs, iconos de lo que sea..., porque esto merma notablemente el área de trabajo, y la pantalla ya es lo suficientemente pequeña. :)

Por cierto, 'Principal.prg' es el fichero 'madre'.



Saludotes.
Si quieres ser sabio, aprende a interrogar razonablemente, a escuchar con atención, a responder serenamente y a callar cuando no tengas nada que decir.

Fede

Si quieres ser sabio, aprende a interrogar razonablemente, a escuchar con atención, a responder serenamente y a callar cuando no tengas nada que decir.

Drumpi

Ottia, pues mola un montón :)
Además, muy bien escogidos los colores, y todo ha quedado muy sencillo. Ahora hay que ver si funciona con una pantallita como la de una Wiz :D

¿Por qué has usado como temporal el último fichero del array en lugar del primero? No sé, si siempre los vas a usar lo lógico es que siempre sea el que está abierto. Y ese array ¿de qué tipo es? Lo digo porque te puede venir bien el uso de REALLOC si estás uando un array de INTs, de tipos de Bennu o de tipos definidos por ti que no incluyan strings. Un alloc/realloc a un puntero de tipo el que sea funciona igual con un array, salvo que primero tienes que hacer un ALLOC para tener un primer dato, REALLOC para modificar el tamaño, y FREE antes de cerrar para borrar todos los datos.

Hablando de strings. Yo hace tiempo creé un código para trabajar con una lista enlazada de cadenas de strings. En teoría tampoco debería funcionar pero hasta la fecha no he tenido ningún fallo, y no necesitas leerte el código para ver cómo funciona. Si te interesa, sólo tengo que buscar el fichero de ejemplos... pero creo que es lo mismo que hay en este hilo:
http://forum.bennugd.org/index.php?topic=2208
A lo mejor lo he ido corrigiendo un poquito, por si necesitas la última versión, que esa sí la tengo localizada (es la que he usado en el Tilemap Editor 2 para el fichero de idioma).

Nombres, nombres... lo único que se me ha ocurrido de momento ha sido "Touch my prog", "To my pro" si lo quieres contraido :D
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)

SplinterGU

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

Fede

Quote from: Drumpi on June 19, 2016, 06:58:19 PM
¿Por qué has usado como temporal el último fichero del array en lugar del primero? No sé, si siempre los vas a usar lo lógico es que siempre sea el que está abierto. Y ese array ¿de qué tipo es? Lo digo porque te puede venir bien el uso de REALLOC si estás uando un array de INTs, de tipos de Bennu o de tipos definidos por ti que no incluyan strings. Un alloc/realloc a un puntero de tipo el que sea funciona igual con un array, salvo que primero tienes que hacer un ALLOC para tener un primer dato, REALLOC para modificar el tamaño, y FREE antes de cerrar para borrar todos los datos.

Pues porque inicialmente no me hacía falta ningún temporal. Y cuando me hizo falta, creo que para reordenarlos, para copiar bloques, o para no me acuerdo qué, pues el código ya estaba implementado y me venía mejor usar el último que el primero.

Y no son ficheros. Está todo en memoria todo lo optimizado que he podido.

Por cierto, creo que hay un tope de 65535 líneas por documento.

Y respecto al array.... mejor ni te cuento.

No soy ni de lejos un programador y voy sobre la marcha.
Nada de planificación, ni de punteros ni de ná.
Llega un momento en que no hay más cojones que usar punteros, por ejemplo, y ves que no es tan difícil.

Cuando ya llevas un montón escrito, te das cuenta de la mierda que has escrito al principio y que si aplicas lo que vas aprendiendo, estaría muchísimo mejor.

Pero ahí se queda. ¿Funciona? Pues pa dentro, que si no, no avanzamos.

Total. Que la estructura de manejo de documentos es la re-ostia.
No son más que variables en array añadidas cada vez que me hace falta controlar algo.

Y por supuesto, montones de variables globales. :)


Quote from: Drumpi on June 19, 2016, 06:58:19 PM
Hablando de strings. Yo hace tiempo creé un código para trabajar con una lista enlazada de cadenas de strings. En teoría tampoco debería funcionar pero hasta la fecha no he tenido ningún fallo, y no necesitas leerte el código para ver cómo funciona. Si te interesa, sólo tengo que buscar el fichero de ejemplos... pero creo que es lo mismo que hay en este hilo:
http://forum.bennugd.org/index.php?topic=2208
A lo mejor lo he ido corrigiendo un poquito, por si necesitas la última versión, que esa sí la tengo localizada (es la que he usado en el Tilemap Editor 2 para el fichero de idioma).


Te lo agradezco, pero no. Como diría Alejandro Sanz. :)

He reescrito bastante para no usar punteros a string por consejo del maestro.
Tenía muchísimos cracks y no sabía si eran por los punteros a string o por bugs.

Total, que me he tirado cerca de un mes haciendo limpieza y reestructurando. (Tiempo real un montón de horas, que es lo que me dejan.) :)

Y he aprendido una cosa muy importante, que además ya has comentado tú: NO DEJES LOS BUGS PARA DESPUES.

Llega un momento en que no sabes si has provocado otro bug o es el mismo de antes. :)

Así que no me arriesgo a tener un programa inestable, que con lo que yo implemento ya tengo bastante. :)


Quote from: Drumpi on June 19, 2016, 06:58:19 PM
Nombres, nombres... lo único que se me ha ocurrido de momento ha sido "Touch my prog", "To my pro" si lo quieres contraido :D

Touch my prog.... ¡Mejor que el mio es! Así que por ahora me lo quedo. :D
Si quieres ser sabio, aprende a interrogar razonablemente, a escuchar con atención, a responder serenamente y a callar cuando no tengas nada que decir.

Fede

¡Ah! Se me olvidó comentar un truquito.

Como veréis el programa va bastante rápido.
Esto es porque yo no escribo en la pantalla todo el rato. Uso una idea que se le ocurrió a Drumpi hace muuuuuucho tiempo. :)

Escribo lo que necesito, luego capturo la pantalla y manejo esa pantalla virtual como si fuera un gráfico para hacer scroll. Borro el trozo que me interesa y escribo sólo ese trozo.

Write es bastante lento y WriteVar es menos lento, pero no me vale porque estoy cada dos por tres cambiado de color.

Total que con este sistema se gana muuuucho.

Y es el mismo que tengo implementado en mi TileMap.... Pero esa es otra historia. :)

Si quieres ser sabio, aprende a interrogar razonablemente, a escuchar con atención, a responder serenamente y a callar cuando no tengas nada que decir.


warrior_rockk

Quote from: Fede on June 19, 2016, 08:40:24 PM
¡Ah! Se me olvidó comentar un truquito.

Como veréis el programa va bastante rápido.
Esto es porque yo no escribo en la pantalla todo el rato. Uso una idea que se le ocurrió a Drumpi hace muuuuuucho tiempo. :)

Escribo lo que necesito, luego capturo la pantalla y manejo esa pantalla virtual como si fuera un gráfico para hacer scroll. Borro el trozo que me interesa y escribo sólo ese trozo.

Write es bastante lento y WriteVar es menos lento, pero no me vale porque estoy cada dos por tres cambiado de color.

Total que con este sistema se gana muuuucho.

Y es el mismo que tengo implementado en mi TileMap.... Pero esa es otra historia. :)


mmmm... me dejas intrigado con lo que comentas. Entiendo que, según tus indicaciones, es más rápido en Bennu escribir en un mapa en memoria que directamente en la screen, pero, ¿no se supone que Bennu ya hace eso? Supuestamente se escribe en memoria en los sucesivos frames de los procesos y se hace el volcado a pantalla tras completar todos los proceso ¿no?

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

Drumpi

Tu tranquilo, Fede que yo te entiendo. Con la limpieza del Echo me estoy encontrando algunas cosas que me dan hasta vergüenza leerlas, pero en su momento era lo mejor que podía programar, y hoy sé que se pueden hacer mejor... pero es lo que dices: si funciona, funciona. Puedes intentar modificarlo y hacerlo mejor pero hay que priorizar cosas. Cierto que luego te darás de coscorrones para cambiarlo, pero si la cosa está suficientemente aislada, pues se puede seguir.

Y si has conseguido hacer funcionar un scroll a mapa ¡Enhorabuena! has logrado lo que yo no he podido en años :D :D :D
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)

Fede

Quote from: warrior_rockk on June 20, 2016, 06:45:41 AM

mmmm... me dejas intrigado con lo que comentas. Entiendo que, según tus indicaciones, es más rápido en Bennu escribir en un mapa en memoria que directamente en la screen, pero, ¿no se supone que Bennu ya hace eso? Supuestamente se escribe en memoria en los sucesivos frames de los procesos y se hace el volcado a pantalla tras completar todos los proceso ¿no?

No, lo que hago es pintar una vez la pantalla, capturarla y luego ir modificando la captura.

Intento explicarme:

Pinto toda la pantalla normalmente, en este caso con write.
Cómo cada palabra va con un color, pues son un montón de writes.
Luego la capturo y le hago un scroll a la captura. Si lo que quiero es subir la pantalla, pues scroll para  arriba. Borro la línea de abajo y escribo la nueva.

Con este método sólo usas write para una línea, la de abajo. El resto te limitas a mover la imagen. Para las columnas es mucho más complicado, pero también le ganas.



Lo mismo el scroll de tiles.

Pintas un proceso cuyo gráfico ocupe toda la pantalla, y los tiles en dicho proceso con map_block_copy. (Ya no recuerdo si hay que añadirlo también al  fpg).
Si necesitas mover la pantalla, haces scroll del bloque del proceso que ocupa toda la pantalla.
Borras la fila o columna que te intereses y repintas de nuevo con los tiles actualizados.

De esta forma tan sólo dibujas una fila/columna de tiles, en vez de la pantalla entera.

Todo es más complicado, pero hacer cálculos es mucho más rápido que repintar un montón de tiles en pantalla.

Espero semayaentendio. :)

Voy a ver si cuelgo un ejemplo en otro hilo.
Si quieres ser sabio, aprende a interrogar razonablemente, a escuchar con atención, a responder serenamente y a callar cuando no tengas nada que decir.

Futu-block

me gusta mucho la idea de poder programar en wiz, bajo mi propia experiencia digo que barajes la posibilidad de poder poner el teclado arriba o abajo porque mi wiz da problemas tactiles en ''abajo derecha'' je je TT_TT

·por otro lao, siempre he querio hacer un programa de escritura usando los botones a,b,x,y,l,r+ direcciones; si quieres te puedo dar unas ideas

·y ya que estamos, ¿porque no un programa de arrastrar unos graficos que actuen de cierta manera y asi se hace el videojuego?
ahí lo dejo