Page 4 of 6

Traduccion

Posted: Wed 07 Apr 2010, 07:32
by Azulete
3.) RECOGER DATOS EN EL SCRIPT: Organizar y estructurar el codigo

Vamos a ver como funcionan los cuadros de dialogo y como recoger lo que pulsamos cuando hacemos yes o no. Vamos a dividir el los ejemplos en cuadros de dialogo en dos grupos simles y complejos. Los simples tendrán botones del tipo yes, no y los otros serán mas complejos. Tendran mas botones y mas opciones.

>> Simple
Los cuadros de dialogo simple normalmente estan esperando por una respuesta por parte del usuario del tipo:
- Desea continuar?
- Elija una opcion de la lista?
- ...
Cuando el usuario hace click en los botones yes/no/cancel/ok el script continua de una u otra manera dependiendo que boton haya pulsadoel usuario. Veamos un ejemplo:

Code:
#!/bin/bash
export script='
<vbox>
<text><label>Esta seguro?</label></text>
<hbox>
<button no></button>
<button yes><action>EXIT:sure</action></button>
</hbox>
</vbox>'

I=$IFS; IFS=""
for STATEMENTS in $(gtkdialog3 --program=script); do
eval $STATEMENTS
done
IFS=$I

[ $EXIT = sure ] && gxmessage 'Esta seguro'

Muestra dos botones <button no> y <button yes>. Se evalua una condicion $IFS y despues se ejecuta el bucle for. Lo que hace el bucle for es evaluar la entrada del ususario dependiendo del boton que haya pulsado.

>> Complejo
Para cuadros de dialogos mas complejos hemos de mantener el gui incluso si el usuario hace click en cualquier parte, por lo que la opcion de usar EXIT parece no ser la mas adecuada. La solucion pasa por usar las funciones que estan predefinidas en gtkdialog. Recordar que hemos de exportar las funciones antes de ejecutarlas en nuestro gui. Añadimos la siguiente linea para exportar la funcion y listo.
export -f now
Veamos un ejemplo:
Code:
#!/bin/sh

now () {
date > /tmp/date
}
export -f now

export script='
<vbox>
<entry>
<variable>ENTRY_DATE</variable>
<input>cat /tmp/date</input>
</entry>
<button>
<label>Refresh</label>
<action>now</action>
<action>refresh:ENTRY_DATE</action>
</button>
</vbox>'

gtkdialog3 -p script


>> Proyecto
Cuando tu proyecto crece en complegidad cambiene estructurarlo, hacer un menu de inicio, dividir el codigo en varios archivos. De esta manera si hay un error es mas facil localizarlo. Una solucion bastante comun suele ser poner las funciones en un archivo para cada vez que las necesitemos las usemos desde ese archivo. En el ejemplo que se muestra acontinuacion, el archivo que contiene nuestras funciones esta en /root/test . Veamos un ejemplo de como estructurar nuestro pequeño programa. Abrir un editor de texto y añadir:

Code:
#!/bin/sh

case $1 in
-funcionahora)
date > /tmp/date
exit;;
esac
Guardarlo con el nombre test dentro de /root/. Guardar otro archivo llamado ejemplo2.sh con el codigo y concederle permisos de ejecucion:
Code:
export script='
<vbox>
<entry>
<variable>ENTRY_DATE</variable>
<input>cat /tmp/date</input>
</entry>
<button>
<label>Refresh</label>
<action>/root/test - funcionahora </action>
<action>refresh:ENTRY_DATE</action>
</button>
</vbox>'

I=$IFS; IFS=""
for STATEMENTS in $(gtkdialog3 -p script); do
eval $STATEMENTS
done
IFS=$I

Que interesante SD.....

Posted: Wed 07 Apr 2010, 18:53
by mister_electronico
Que bueno tu post ujinsama , que interesante el SDL sobre todo para entorno de programacion de graficos...

g++ -L/usr/lib -lSDL -lSDL_image -lSDL_mixer -lSDL_ttf -lpthread -I/usr/include/SDL -D_REENTRANT /mnt/sda7/c01/game/main.cpp /mnt/sda7/c01/game/csprite.cpp -o /mnt/sda7/c01/game/magic_puzzle

Podias explicar mejor la compilacion, compilas los dos programas a la vez , csprite.cpp y main.cpp, aunque entiendo que csprite.cpp se comporta como un fichero de inclusion, ya que no tiene funcion main(), y te crea un fichero de salida magic_puzzle.

Al g++ creo enteder que le dices que las librerias estan en usr/lib pero lo demas no lo entiendo...

Otra cosa es la imagen que te sale en la presentacion ¿ de donde sale?

Bueno un saludo ... y gracias por tu post...

Voy a bajar el SDL y intentar instalarlo... te cuento..

Ah ahora empiezo a entender.....

Posted: Wed 07 Apr 2010, 19:14
by mister_electronico
Ahora empiezo a entender:


g++ -L/usr/lib -lSDL -lSDL_image -lSDL_mixer -lSDL_ttf -lpthread -I/usr/include/SDL -D_REENTRANT /mnt/sda7/c01/game/main.cpp /mnt/sda7/c01/game/csprite.cpp -o /mnt/sda7/c01/game/magic_puzzle




ISDL_image a sido la libreria que te bajaste SDL_imabe como dices,
ISDL_mixer la otra...
ISDL__ttf es otra...

REENTRANT no se que es .... ni leptheread...

Ok espero que sigas por aqui.... asiduamente.... Gracias por tu post.... y nos vemos...

Teclado-MK sound test con sdl

Posted: Wed 07 Apr 2010, 20:25
by goshujinsama
Hola de nuevo compañeros amantes de la programacion, bueno, walter aqui te dejo el programa con su codigo de lo que querias hacer de asignar sonido a una tecla, espero y no haberme equivocado en lo que querias.

mister-electronico, gracias por las flores :oops: , bueno, en cuanto a la compilacion -L/usr/lib, como dijiste es el directorio donde en mi caso tengo las librerias, -lSDL, -lSDL_image, lSDL_mixer y -lSDL_ttf, son las librerias que deseamos linkear, lpthread aun no tengo idea, pero supongo que decimos con esto al g++ que nos carge todos los archivos referantes a estas librerias, -I/usr/include/SDL es donde en mi caso tengo los archivos .h de SDL, -D_REENTRANT tampoco estoy muy seguro, pero supongo que con esto le decimos a g++ que compile y construya con mas de un archivo.

Con respecto a la imagen que dices, no es solo una, son 2, una de fondo que nos abarca toda la pantalla, es en la que salen las criaditas *W*, la otra es el cartel de magic puzzle, el programa tiene definido como color transparente el RGB 255,0,0, y tambien ahi hay un renderizado de un texto"Presione espacio para continuar o esc para salir", y no solo eso, ya que es imagen no se puede mostrar pero la aplicacion esta corriendo una musica de fondo.

la aplicacion esta leyendo los recursos desde su propia ruta, por ejemplo las imagenes se encuentran en el directorio raiz de la aplicacion en una carpeta llamada img, para cargarlas con las funciones de las librerias que incluimos en nuestro proyecto tendriamos que expecificarlas con "img/title.bmp" por ejemplo, esto aplica par cualquier tipo de formato que queramos usar y que sea compatible.

Posted: Wed 07 Apr 2010, 21:16
by goshujinsama
Por cierto, se me olvidaba, a este tipo de programas solo los he logrado corre dandole click en la aplicacion, no los puedo correr con la terminal, si alguien sabe por que se da esto, digamelo.

No me funciona...

Posted: Thu 08 Apr 2010, 21:38
by mister_electronico
como ya te dije el programa de juego no me funciono, se aperece el terminal en negro del terminal y me da el error de Segmentation fault


Para poder ejecutar los programas desde terminal hay que escribir ./programa

El caso que es que me he bajado el programa que hiciste para walter, lo he intentado ejecutar y el mismo error Segmentation fault....

Estoy pensando que pueda ser que lo estoy corriendo bajo un AMD 64 bits.. no lo se...

En fin probare en un pentiun y te contare...


Un saludo nos vemos...

hola

Posted: Sat 10 Apr 2010, 21:58
by walter leonardo
hola.
ami me pasa lo mismo mister:
Segmentation fault :? .
no funka jeje.
Bueno lo que yo tenia en mente era algo de esto que les voy a pasar, osea algo mas sencillo, no creo que sea complicado hacerlo.
el programa de ejemplo tiene 3 sonidos que al hacerle click con el mouse en algunos de los 3 botones se reproduce un sonido distinto, pero lo que yo quiero es que al tocar la letra E del teclado suene el sonido del botón excelent y cada ves que lo apriete el sonido comience desde cero y no espere a que termine de sonar el sonido para recién repetirse el sonido (osea que sea rápido).
Para ser mas preciso hacer una bateria de sonidos o caja de sonidos y efectos.

hola

Posted: Sat 10 Apr 2010, 22:10
by walter leonardo
creo que es mejor hacerlo en un script en gtk para adaptar directamente a puppy para menos problemas, pero faltan expertos en gtk aca en esta zona ispana.

Te tienes que esforzar un poco...

Posted: Sun 11 Apr 2010, 11:17
by mister_electronico
No es tan complicado hacerlo como el programa de goshujinsama pero en Gtk, solo tienes que hacer unos botones por cada una de las teclas de sonido que quieres que suene, y cada una de las teclas haga que actue el programa aplay archivo.wav que quieres que suene....

Vamos Walter que no estan dificil.... a cada boton le pones un nombre como Do, Re, Mi , Fa, So.......

Luego con el raton las vas picando............ Para eso no hace falta ser un genio en GTK.

Nos vemos .......... Un saludo..

Bueno me has conmovido....

Posted: Sun 11 Apr 2010, 12:48
by mister_electronico
Bueno me has conmovido, te mando un ejemplo, ante todo pedir disculpas a goshujinsama por que he usado los sonidos de su programa, era los que tenia mas a mano en este momento, espero que no le moleste...

Bueno el archivo comprimido que pongo aqui, lo teneis que descomprir dentro de Home, y os quedara el script ejecutable en Home que es organo.sh y un directorio /home/sounds que es donde esta los sonidos de goshujinsama
y un fichero LEEME.TXT que explica esto mismo que estoy explicando....

Para ejecutarlo abrimos un terminal dentro de home y tecleamos./organo.sh

Nos aparecera la ventana con los botones que segun vamos apretando con el raton producen los sonidos de goshujinsama.

Como veras Walter es mas sencillo que mecanismo de un chupete..

Espero que os sirva de utilidad y mis disculpas una vez mas a goshujinsama...

Nos vemos ..... Saludos.

SE ME OLVIDO DECIROS

Posted: Sun 11 Apr 2010, 12:56
by mister_electronico
Se me Olvido deciros ....... SUBIR TODOS LOS VOLUMES AL MAXIMO.

Nos vemos..

Hola

Posted: Sun 11 Apr 2010, 18:32
by goshujinsama
hola de nuevo, si, lo se, si intentas correrlo desde la terminal el programa marcara segmentation fault, pero si en lugar de eso vas a la carpeta donde lo tienes y la das click al binario, este se te ejecuta perfectamente, bueno, asi es mi caso, prueben dandole click al binario, y si no es por esto podria ser por que es un linkeo dinamico, si no han intentado asi como les digo, intentenlo y me dicen.

Esta bueno tu programa mister, pero por que no lo hiciste para que funcionara en cualquier ubicacion, creo que seria mas paractico.

NOTA: Si llegan a correr el programa del teclado, notaran diferencias en la reproduccion de sonido, esto se debe a las minimas diferencias del formato que tiene cada archivo.

A tu pregunta...

Posted: Sun 11 Apr 2010, 18:39
by mister_electronico
Intentare hacer lo que dices goshujinsama del programa.....

A tu pregunta de por que no hago que el programa corra desde cualquier sitio es por que
para ello tendria que colocar el script ejecutable organo.sh dentro del directorio ....

/usr/bin y puede que haya gente que no le guste por ahi estan los binarios ejecutables.

En cualquier caso si lo haces puedes correrlo desde cualquier sitio...

Bueno un saludo ........ nos vemos.

hola

Posted: Sun 11 Apr 2010, 18:52
by goshujinsama
Bueno, mister, a lo que me referia es de por que no lo haces para que teniendo el programa en cualquier carpeta se te corra el audio, creo que asi seria mas practico, aparte de que tener una arpeta y un script en home que la verdad no sirve para para algo util ahi, espero no ofenderte con este comentario, un saludo y pues nos vemos.

PD: Modifique tu script para que haga esto que quiero, espero y no te moleste.

hola

Posted: Sun 11 Apr 2010, 19:27
by walter leonardo
hola muchachos.
nose si se dieron cuenta que yo ise lo mismo que mister electronico, pero mi problema era otro.
descargen mi archivo sonidos.tar.gz .
Bueno el problemita es que cuando uno toca un boton y se reproduce un sonido y a tocar ese boton de vuelta antes de que termine de sonar ese sonido hay que esperar que se termine de reproducir para que recien vuelva a sonar, nose si se dieron cuenta de eso.
bueno yo quiero que al tocar el boton y suene el sonido que tiene ese boton y lo vuelva a tocar rapidamente que se vuelva a sonar desde el principio el sonido, como si fuese un reset del sonido, nose si me entienden.que no espere a que termine de sonar para volver a reproducirse sino que se corte al instante el sonido y vuelva a reproducirce desde cero.
Y seria mejor pulsar esos botones con el teclado para ser mas habil mas rapido no creen?

Posted: Sun 11 Apr 2010, 20:01
by goshujinsama
Hola de nuevo amigos, walter, mi programa hace eso que quieres hacer, bueno no para el sonido que se corrio antes, pero eso seria caso de unas variables y ya, pero pues dices que segmentation fault, ya intentastes correrlo dandole click al binario?, asi si deberia de funcianar mi programa.

Aparte para lo que dices, gtk deberia de darte acceso a varios canales, y no estoy muy seguro de que lo haga, aunque si te diera una funcion para parar el sonido podria ser mucho mas facil de lo que crees, y pues para el teclado, creo que con la funcion scanf es mas que suficiente, saludos.

hola

Posted: Sun 11 Apr 2010, 20:27
by walter leonardo
lo primero que hice fue abrirlo aciendo click en el binario pero no paso nada y despues lo trate de ejecutar desde consola y me da ese error de segmentation fault.
bueno lo dices muy cencillo pero yo nose como hacerlo, estaria bueno que me pases esa funcion para frenar el sonido y como darles variables y usar ese scanf.
con un ejemplo ya me dare cuenta :D .Recien estoy en esto de gtk y me esta gustando mucho.

que tal...

Posted: Sun 11 Apr 2010, 20:57
by mister_electronico
Hola que tal goshujinsama ante todo no me ofendes para nada, lo que pasa es que no entiendo muy bien, lo que me quieres decir......

si tu te vas a home y pones delante del ejecutable organo.sh el puntero del raton y aprietas el boton derecho, y seleccionas open as text te sale lo siguiente:


#!/bin/sh
# Programa hecho por Angel Gutierrez.
# Para cualquiera que lo quiera utilizar.
# los sonidos pertenecen a Fernando Escutia Rodriguez
# de su programa teclado.


export script='
<vbox>
<button>
<label>Anamalaty</label>
<action>aplay /mnt/home/sounds/animalaty.wav</action>
</button>

<button>
<label>Babality</label>
<action>aplay /mnt/home/sounds/babality.wav</action>
</button>

<button>
<label>Ecxelen</label>
<action>aplay /mnt/home/sounds/ecxelen.wav</action>
</button>

<button>
<label>Fatality</label>
<action>aplay /mnt/home/sounds/fatality.wav</action>
</button>

<button>
<label>Its_that_your_best</label>
<action>aplay /mnt/home/sounds/its_that_your_best.wav</action>
</button>

<button>
<label>Finish_him</label>
<action>aplay /mnt/home/sounds/finish_him.wav</action>
</button>

<button>
<label>Toasty</label>
<action>aplay /mnt/home/sounds/toasty.wav</action>
</button>

<button>
<label>Well_done</label>
<action>aplay /mnt/home/sounds/Well_done.wav</action>
</button>
<button>
<label>Salir</label>
</button>

</vbox>'

gtkdialog3 -p script


Este programas es un script que le pasa los valores a gtkdialog3 y bueno en definitiva como veras todos los <action> de los botones busca los sonidos dentro del directorio /mnt/home/sounds. Pero esto lo puedes variar y poner vosotros la direccion que querais y poner los sonidos donde os de la gana.

Por supuesto que no me importa para nada que modifiqueis este programa, para eso esta para que hagais lo que querais y lo mejoreis y lo modifiqueis a vuestra conveniencia...... no se puede considerar un programa sino un ejemplo.

Un saludo y estoy aqui para cualquier consulta que me querais hace...

Saludos nos vemos.

hola

Posted: Sun 11 Apr 2010, 21:01
by walter leonardo
mister lo que el decia era hacer esto.

Code: Select all

#!/bin/sh 
# Programa hecho por Angel Gutierrez. 
# Para cualquiera que lo quiera utilizar. 
# los sonidos pertenecen a Fernando Escutia Rodriguez 
# de su programa teclado. 


export script=' 
<vbox> 
<button> 
<label>Anamalaty</label> 
<action>aplay sounds/animalaty.wav</action> 
</button> 

<button> 
<label>Babality</label> 
<action>aplay sounds/babality.wav</action> 
</button> 

<button> 
<label>Ecxelen</label> 
<action>aplay sounds/ecxelen.wav</action> 
</button> 

<button> 
<label>Fatality</label> 
<action>aplay sounds/fatality.wav</action> 
</button> 

<button> 
<label>Its_that_your_best</label> 
<action>aplay sounds/its_that_your_best.wav</action> 
</button> 

<button> 
<label>Finish_him</label> 
<action>aplay sounds/finish_him.wav</action> 
</button> 

<button> 
<label>Toasty</label> 
<action>aplay sounds/toasty.wav</action> 
</button> 

<button> 
<label>Well_done</label> 
<action>aplay sounds/Well_done.wav</action> 
</button> 
<button> 
<label>Salir</label> 
</button> 

</vbox>' 

gtkdialog3 -p script

hola

Posted: Sun 11 Apr 2010, 21:05
by goshujinsama
Hola de nuevo walter, que malo lo de mi programa, tal vez puede ser lo de los permisos, pero bueno, dejo de nuvo el archivo subido pero ahora tambien trae una compilacion static para ver si me hacen favor de checarlo y ver si ahora si corre, el binario a ejecutar es el Teclado-MK_sound_test01 y pues si pueden chequenlo de favor.

Y sobre el ejemplo, dejame y investigo un poco nas de gtk ya que no soy muy fluido en el, pero por lo que he visto tiene demasiadas similitudes con el c.