ncurses para remolones
(46001 lectures)
Por Carles Pina i Estany
cpina
(http://pinux.info)
Creado el 04/04/2004 01:10 modificado el 04/04/2004 01:10
|
Las ncurses son unas librerías que ayudan a la programación en modo texto para Linux. Es decir, movimientos de cursores, colores, recoger teclas (sin tener que esperar el "Intro") y un largo etcétera. Lo que hacia conio.h en otros sistemas.
También hay gente que a veces tiene problemas con printf y scanf/fgets, debido a buffers intermedios de Linux. Con las ncurses ya no habrá este problema.
En el escrito en cuestión veremos como empezar a programar con ncurses de forma práctica. |
Pagina1/1 |
Introducción
Muchos habíamos usado la librería conio.h con el BorlandC o otros compiladores. En Linux existe una librería que intenta "emularla", llamada uConio pero no es estándard de Unix ni hay paquete para Debian, etc.
En lugar de usar la librería uConio, podemos usar las ncurses. Estas pueden ser usadas desde una forma muy simple hasta para hacer auténticas maravillas. En este artículo veremos una introducción práctica para empezar a usarlas.
Existe bastante documentación por Internet, pero suele ser demasiado profunda al acercarnos por primera vez a la programación usando esas librerías. Incluso, en muchas ocasiones no necesitamos muchas de las funcionalidades que nos ofrecen.
Para compilar programas que usen las ncurses en Debian tendremos que instalar el paquete libncurses5-dev. Seguramente lo tendremos instalado ya que también se necesita para compilar el Kernel.
En otras distribuciones necesitaremos instalar un paquete de nombre parecido.
Preparativos
Un programa de ncurses tendrá dos cosas significativas:
- Tendrá este include:
#include <ncurses.h>
- Se compilará de una forma parecida a
gcc -lncurses fichero.c
Programando con ncurses
El "Hola mundo" con ncurses
Probaremos un programa así:
#include <ncurses.h>
int main() {
initscr();
printw("Hola Bulma!!!");
refresh();
getch();
endwin();
return 0;
}
initscr: es para entrar en modo ncurses
printw: es para imprimir en la "ventana"*. Es importante usar printw, scanfw, etc. y no usar printf, scanf, ya que tendríamos resultados no deseados.
refresh: aquí es donde realmente se refresca la pantalla. Podemos hacer varios printw y al final un solo refresh para actualizar la pantalla. Si no hacemos el refresh quizás no saldrá impreso por pantalla.
getch: espera una sola pulsación de una tecla. Nos devuelve el código ASCII de la tecla pulsada como un entero. Fijaros que no espera el "Enter" final de línea
endwin: terminamos el modo de ncurses. Si no lo hacemos, nos quedará el terminal medio desconfigurado. Para solucionarlo podríamos hacer reset desde la misma consola.
Recordar una vez más de compilar con gcc -lncurses programa.c
(*)En ncurses podemos gestionar ventanas, escribir en ellas de forma independiente, generar scrolls, etc.. Para hacer una ventana usaríamos la función newwin, para eliminarla delwin, y un largo etcétera (man newwin). En este escrito, no crearemos ventanas, por tanto todo el terminal en sí será considerado una ventana.
Entrada de teclado
Para pedir cosas a un usuario con ncurses haríamos:
#include <ncurses.h>
int main () {
char cadena[128];
initscr();
printw("Dime tu nombre\n");
scanw("%s",cadena);
printw("Te llamas: %s\n",cadena);
refresh();
getch();
endwin();
return(0);
}
La sintaxis del scanw es la misma que la del scanf tradicional.
Si no quisiéramos que lo que escribe el usuario saliera por pantalla (sin echo):
printw("Escribe la contraseña: ");
noecho();
scanw("%s",cadena);
echo();
printw("La contraseña es: %s\n",cadena);
Fácil, ¿no?
"Limpiar" la pantalla
Para "limpiar" la pantalla podemos hacer, sencillamente:
erase();
Moviendonos por la pantalla
Si nos queremos posicionar en un sitio de la pantalla usaremos la función move:
move (10,2);
printw("Escribe la contraseña: ");
¡Ojo! que es move(int y, int x); (fila, columna). Los que habíamos usado la conio.h era gotoxy(int x, int y) (va al revés).
Igualmente podríamos haber usado:
mvprintw(10,2,"Escribe la contraseña: ");
Poniendo colores en la pantalla
Si quisiéramos hacer un printw con colores:
if (has_colors()) {
start_color();
init_pair(1,COLOR_RED,COLOR_YELLOW);
attron(COLOR_PAIR(1));
printw("Escribe la contraseña: ");
attroff(COLOR_PAIR(1));
}
has_colors: devuelve 0 o 1 si el terminal tiene soporte para colores o no.
start_color: inicia el modo de colores. Si no lo hacemos no veremos los colores.
init_pair: asociamos el "par" 1 el color rojo para el texto y el amarillo para el fondo (los colores disponibles con BLACK, RED, GREEN, YELLOW, BLUE, MAGENTA, CYAN, WHITE).
attron: y ponemos los colores de forma activa.
También podríamos hacer:
attron(COLOR_PAIR(1) | A_UNDERLINE);
Y así lo tendríamos subrallado. Tenemos disponibles A_NORMAL,A_BLINK, A_BOLD, etc. (man attron para ver más opciones)
Es más, si queremos se pueden personalizar los colores en sí mediante la función init_color (man init_color).
Enlaces
Queda mucho para hacer con esas librerías. Por ejemplo toda la gestión de ventanas, crearlas, modificarlas, imprimir dentro; menús, submenús; usar el mouse, etc.
Eso sólo ha sido una manera de introducirnos en la programación de ncurses, a partir de aquí podemos hacer si lo queremos muchas otras cosas.
Comentar que hay un port para Perl de las ncurses (paquete libcurses-perl) y, también desde Perl, una manera rápida de hacer ventanas y formularios usando las libcurses (paquete libcurses-widgets-perl) |
|
|
|
|
|
Comentarios Es posible que se hayan omitido algunos comentarios considerados poco constructivos
|
1. Re: ncurses para remolones (04/04/2004 14:09, #20511) Por: Anònim |
| de lujo!! yo soy un remolón que dejó de usar c en gnu/linux por esta razón, era adicto conio.h
Por lo menos has conseguido que me lie de nuevo con c. |
No es pot respondre |
2. Re: ncurses para remolones (04/04/2004 15:00, #20513) Por: cpina (http://pinux.info) |
Me alegro!
Gracias! | No es pot respondre |
3. Re: ncurses para remolones (12/08/2006 00:20, #34284) Por: XUPALO |
| ERAS ADICTO AL COÑO???? jajaja fuerte lo tuyo makakero qls
jajaja | No es pot respondre |
4. Re: ncurses para remolones (17/01/2007 19:53, #37845) Por: Anónimo |
| no podía no ser chileno | No es pot respondre |
|
|
5. Re: ncurses para remolones (04/04/2004 17:24, #20516) Por: bufalo73 |
Gracias por la iniciación. ¿Qué tal un cursillo de ncurses? :) Por ejemplo, una explicación de como usar los pads, que van muy bien para hacer clientes de cualquier cosa (creo).
Es sólo una sujerencia |
No es pot respondre |
6. Re: ncurses para remolones (05/04/2004 01:29, #20520) Por: cpina (http://pinux.info) |
Me lo pensaré, si veo interés de la gente quizás hago alguna otra entrega de uso de Ventanas y Pads.
Todo un curso seguramente sería muy largo y sería replicar un poco la documentación del Howto de ncurses, aunque alguna área sí que lo podría hacer...
Muchas gracias por la sugerencia. | No es pot respondre |
7. Re: ncurses para remolones (05/04/2004 10:23, #20524) Por: Anònim |
| Me apuntaria rapidamente a ese cursito :). Hace tiempo habia mirado el de Eric S. Raymond y con mis conocimientos de C y lo enrollado que esta el manual, no me habia enterado de mucho. Este tuyo me ha animado a mirar el NCURSES Programming HOWTO, que esta mucho mejor. Me pregunto si habra algo para programar con estas librerias desde Python, me suena hace tiempo haber visto algo...eso tb estaria genial verlo por aqui. Un saludo y gracias. | No es pot respondre |
|
|
8. Re: ncurses para remolones (05/04/2004 06:30, #20522) Por: euler |
En este momento me sente en la PC para escribir algunos scripts (en bash) para la gestion de maui-openpbs, en pocas palabra un cluster.
La idea era crear unos menus que le hicieran mas facil y 'placentero' el dia a los investigadores para los que trabajo.
Ni hablar los hare con ncurses
:-):-):-):-)
Realmente os agradesco
EOT |
No es pot respondre |
9. Re: ncurses para remolones (05/04/2004 10:35, #20527) Por: cpina (http://pinux.info) |
Con ncurses no lo hagas que "te cansarás" :-) de todas formas lo suyo para eso seria el dialog o whiptail.
Creo que de dialog hay un artículo en Bulma, es para mostrar ventanas en modo texto de forma _muy simple_, quizás ya lo conozcas.
Me alegro que te haya gustado, gracias. | No es pot respondre |
10. Re: ncurses para remolones (03/04/2005 11:39, #26076) Por: Anònim (http://gawab.com) |
| I waant more ncurses lectures in c++ | No es pot respondre |
|
11. Re: ncurses para remolones (05/04/2004 08:39, #20523) Por: caravena (http://pagci.unap.cl/~caravena) |
| El ncurses es compatible con Windows? |
No es pot respondre |
12. Re: ncurses para remolones (05/04/2004 10:32, #20526) Por: cpina (http://pinux.info) |
Hola,
Directamente no (al menos que yo sepa). De todas formas las puedes usar mediante cygwin, que sí que tiene soporte para ncurses si recuerdo bien.
Cygwin es para tener y compilar programas de Linux, Unix, etc. en Windows. | No es pot respondre |
13. Re: ncurses para remolones (29/03/2005 20:58, #25984) Por: Sulfuro |
| Ncurses si que es valida para windows, pero tienes que compilar para ms-dos | No es pot respondre |
14. Re: ncurses para remolones (30/06/2006 04:56, #33514) Por: elArlequin |
| si es para compilar en DOS no es para Windows. | No es pot respondre |
|
15. Re: ncurses para remolones (18/01/2007 20:59, #37879) Por: Anónimo |
| No!!!!!!!!!!!!! inutil | No es pot respondre |
|
16. Re: ncurses para remolones (05/04/2004 10:32, #20525) Por: Keeper |
| Nunca me habia planteado usar las Ncurses para algo que no fuera interfaz hacia mí como usuario.
La verdad es que con esta introducción me ha picado la curiosidad y me habeis despertado muchas ideas. Gracias, mi pc os lo agradecerá.
Agur |
No es pot respondre |
17. Re: ncurses para remolones (05/04/2004 11:08, #20529) Por: Anònim |
Hace tiempo que intenté hacer pruebas con ncurses, pero no sabia ni por donde pillarlo. Realmente en este artículo parece superfácil.
Por favor, te animo a que hagas otros artúculos sobre este tema.
Gracias. |
No es pot respondre |
18. duda (05/04/2004 12:21, #20531) Por: Anónimo |
Buenas, me ha gustado mucho el articulo y yo tambien te animo a que hagas mas :-).
Creia que era un fallo tuyo pero lo he probado y he visto que no ;)...:
en el segundo ejemplo, despues de
printw("Dime tu nombre\n");
¿lo logico no seria hacer un refresh() y despues el scanw() o scanw() ya hace refresh por si mismo?
Otro buen articulo de mis amigos los de disidents:
http://www.hackemate.com.ar/ezines/disidents/disidents004/disidents0 04/0X10.txt
Adios |
No es pot respondre |
19. Re: duda (05/04/2004 16:32, #20536) Por: cpina (http://pinux.info) |
| Hola,
Sí, seria más correcto hacer un refresh antes del scanw, aunque el scanw ya lo suele hacer (tampoco he visto que lo garantizara, pero tiene su lógica).
No onocia este artículo de los disidentes, el inicio es idéntico, está bien :-)
Gracias! | No es pot respondre |
20. Re: duda (29/09/2005 22:52, #28661) Por: Anónim |
| en realidad, usar scanw es un poco inseguro, pues te da los problemas del famoso "buffer overflow", asi que evita usarlo. En vez de ello usa la librería "form" de ncurses.
Recursos:
http://en.tldp.org/HOWTO/NCURSES-Programming-HOWTO/form s.html
http://en.tldp.org/HOWTO/NCURSES-Programming-HOWTO/index.html | No es pot respondre |
|
21. Re: ncurses para remolones (05/04/2004 15:44, #20534) Por: Kabutor |
Hombre para programas en ncurses, yo me puse hace unos meses y lo mas facil es usar la "libreria" Curses UI de Perl
http://search.cpan.org/~marcus/Curses-UI-0.92/
Con eso hice yo un programa con menus y acceso a una bbdd en unos ratos, la documentacion esta completilla y resulta facil de programar. Y sin tener ni idea de perl vaya, y sin tener ni idea de ncurses,... |
No es pot respondre |
22. Re: ncurses para remolones (05/04/2004 16:28, #20535) Por: cpina (http://pinux.info) |
| Aunque me encanta Perl para algunas cosas, no siempre lo podemos hacer todo con Perl.
El manual este está bien, no lo conocía, he hecho cosas con curses y Perl pero saqué la información de otra página, creo... | No es pot respondre |
23. Re: ncurses para remolones (06/04/2004 01:13, #20541) Por: Kabutor |
Pues si puedes instalalo y mira la carpeta examples, muy claros los ejemplos y muy faciles de hacer en dos plumazos un programa con menus, si interesa te paso el codigo sin acabar de lo que hice, corto y funcionaba (aun no me lo creo).
Esto me recuerda que un dia tengo que acabarlo.. :(
(kabutor at terra . es ) | No es pot respondre |
|
|
24. Re: ncurses para remolones (07/04/2004 17:06, #20564) Por: Jacobo (http://tarrio.org/) |
| Como comentario, el GoldED+, un lector de correo de Fidonet que viene de DOS, Windows y OS/2, tiene el interfaz (modo texto) de su versión Unix implementado con ncurses (se lo hice yo). Puede servir como referencia para ver cómo se hacen algunos trucos :-) |
No es pot respondre |
25. Re: ncurses para remolones (11/04/2004 22:41, #20623) Por: Timesman (http://www.timesman.com.ar) |
Muy buena introducción. Tengo que hacer un tp y usas ncurses a contra reloj, esta intro me dio un panorama genial y rápido.
Ahora voy a internarme en el tema.
Saludos y Gracias!!!
Gastón Belyin
(Linux Red Hat 9) |
No es pot respondre |
26. Re: ncurses para remolones (11/04/2004 22:43, #20624) Por: Dario |
Tenes razón, yo estoy en una situación parecida.
Muy buen Curso!!
Saludos a Todos en Bulma!!
Dario | No es pot respondre |
|
27. Re: ncurses para remolones (15/04/2004 13:40, #20683) Por: Anònim |
Si voleu fer menus simples teniu el "replimenu"
http://replimenu.sf.net |
No es pot respondre |
28. Re: ncurses para remolones (31/07/2004 12:09, #22595) Por: Anónimo |
| Gracias por tu artículo, me has ahorrado mucho tiempo, un besote. |
No es pot respondre |
29. Re: ncurses para remolones (13/08/2004 02:01, #22761) Por: James |
Felicidades, me parece un buen articulo. Pero se me hace algo corto, he ido leyendo, escribiendo, compilando y al llegar al final me qedado con ganas de mas.
Es cierto q ahi fuera hay mucha informacion, pero cada manual aporta lo suyo y cada uno tiene un tono distinto. Tu escribes de manera clara y muy concreta, algunos manuales de ahi afuera so nun verdadero toston.
Te animo para que te escribas alguna seccion mas. Yo particularmente estaba buscando cositas de manejo de teclado, pues tengo q recojer pulsaciones (y despulsaciones) de varias teclas a la vez y no se muy bien por donde meterle mano. (aunq para cuando tu hagas mas secciones yo ya espero haberlo leido en algun otro sitio)
Animo cpina, me ha gustado. |
No es pot respondre |
30. Re: ncurses para remolones (15/08/2004 00:01, #22789) Por: cpina (http://pinux.info) |
1000 gracias por los ánimos.
Cuando tenga tiempo (en un mes aprox.) trataré de ampliarlo...
Hasta pronto! | No es pot respondre |
|
31. Re: ncurses para remolones (02/09/2004 18:15, #23109) Por: Anónimo |
| Como puedo yo habilitar el soporte en mi terminal para habilitar los colores?
No me funciona siempre se va por el lado que no tiene soporte!!!!!!! |
No es pot respondre |
32. Re: ncurses para remolones (19/10/2004 11:46, #23859) Por: Tarod |
| Sencillamente... curradisimo. Muchisimas gracias, es gracias a personas como tu que los que tenemos conocimientos de programacion muuuuy limitados podemos salir adelante, Yo andaba haciendo un programa de menus para varios SO y no he podido hacerlo con secuencias de escape ansii porque no me las soportaban los terminales desde los que me conectaba, asi que tuve que recurrir a ncurses,y... lo dicho, este fabuloso curso me ha salvado la vida.
Muchisimas gracias.
Atte:
Tarod |
No es pot respondre |
33. Re: ncurses para remolones (19/10/2004 11:47, #23860) Por: Tarod |
| Sencillamente... curradisimo. Muchisimas gracias, es gracias a personas como tu que los que tenemos conocimientos de programacion muuuuy limitados podemos salir adelante, Yo andaba haciendo un programa de menus para varios SO y no he podido hacerlo con secuencias de escape ansii porque no me las soportaban los terminales desde los que me conectaba, asi que tuve que recurrir a ncurses,y... lo dicho, este fabuloso curso me ha salvado la vida.
Muchisimas gracias.
Atte:
Tarod |
No es pot respondre |
34. Re: ncurses para remolones (19/10/2004 12:16, #23861) Por: Anónimo |
Perdon por repetir el post, tube un pequeño problema de conexion y pense que no lo habia enviado. Ya aprovecho este post para preguntar una duda:
tengo este miniprograma pero me activa siempre el modo gris (semibrillo) no cuando yo le digo que lo active que deberia ser en el segundo printw. aqui te posteo el codigo
#include
#include
int main()
{
int ch;
if (initscr()) {
start_color();
attrset(A_NORMAL);
noecho();
keypad(stdscr, TRUE);
ch = getch();
printw("Leido: %d \n", ch);
refresh();
move(15,2);
attrset(A_DIM);
printw("Leido: %d \n", ch);
refresh();
sleep (5);
endwin();
} else{
printf("PROBLEMAS !!!!!!!!! \n");
}
return 0;
}
PD: Me hace todo bien, lectura del caracter y posicionamiento, lo unico que me falla es que desde que entra en modo ncurses me activa el modo sombra. |
No es pot respondre |
35. Re: ncurses para remolones (19/12/2004 19:08, #24724) Por: Anònim |
| yo escribo mi programa con ncurses y luego el g++ no crea el binaro
si compilo con g++ -c prograa.cc -o nuevo, no me crea el ejecutable tampoco. tngo suse
POR FAVOR NESECITO AYUDA! |
No es pot respondre |
36. Re: ncurses para remolones (14/01/2005 06:03, #25039) Por: Droper (http://pedro.utpinux.org) |
| g++ -o programa programa.cpp -lncurses , el codigo fuente de un programa en c++ es recomendable que se guarde como .cpp | No es pot respondre |
37. Re: ncurses para remolones (16/04/2005 18:37, #26260) Por: Anónimo |
| Si usas -c sólo generas código objeto, no el ejecutable. En realidad lo que etás haciendo es generar un fichero objeto con el nombre "nuevo" | No es pot respondre |
|
38. Re: ncurses para remolones (06/05/2005 10:40, #26536) Por: Javier Almansa (javieralso) |
| Sencillamente genial. Buena la introducción, ya puedo hacer las prácticas para la facultad, éra lo que me faltaba. Muuuuchas gracias. :-D |
No es pot respondre |
39. Re: ncurses para remolones (14/06/2005 20:22, #27116) Por: Luciano |
| hola Bulma, en referencia a una consulta que se hiciera en este mismo articulo anteriormente:
"Como puedo yo habilitar el soporte en mi terminal para habilitar los colores? No me funciona siempre se va por el lado que no tiene soporte!!!!!!! "
Tienes alguna referencia de como puedo hacer para habilitar los colores en la terminal?
Sinceramente me ha parecido muy bueno el artículo pero no he conseguido habilitar los colores en la terminal dado que "has_color" siempre me retorna false :(
Desde ya muchas gracias por tu respuesta, saludos;
Luciano-. |
No es pot respondre |
40. Re: ncurses para remolones (20/06/2005 05:09, #27181) Por: Anónimo |
| Hola necesito que cuando el usuario coloque en pantalla ctrl-j realice una funcion ay definida.... Como hago???.... muchas gracias!!!!! |
No es pot respondre |
41. Re: ncurses para remolones (29/09/2005 22:59, #28662) Por: Anònim |
| La librería "form" de ncurses te va a ayudar, lee el ejemplo 26 de esta página:
http://en.tldp.org/HOWTO/NCURSES-Programming-HOWTO/forms.html | No es pot respondre |
|
42. Re: ncurses para remolones (01/08/2005 06:32, #27718) Por: 601n6t0th3h3II |
| buen articulo, felicidades :D, he aqui un link hacia una web para los que quieran leer un pocomo mas sobre el tema.
http://es.tldp.org/LinuxFocus/pub/mirror/LinuxFocus/Castellano/March200 2/article233.shtml |
No es pot respondre |
43. Re: ncurses para remolones (09/01/2006 21:44, #30429) Por: Anónimo |
| buen articulo me parece interesante
bueno aunque me falta mucho entenderle
yo soy una huevada |
No es pot respondre |
44. Re: ncurses para remolones (04/06/2006 13:53, #32948) Por: Anónimo |
| buenas a todos mi problemas es este tengo echo un menu y ahora lo quiero con ncuses y claro el gets no funciona correctamente
do{
gets("%c",opcion);
menu=opcion[0];
switch (menu)
que puedo hacer para que funcione gest y me guarde solo un
caracter para mi switch |
No es pot respondre |
45. Re: ncurses para remolones (14/10/2006 19:50, #35657) Por: rene |
| estoy programando en Dev-C++4.9
pero no puedo usar ncurses como le hago |
No es pot respondre |
46. Re: ncurses para remolones (05/11/2006 02:54, #36217) Por: nacho (http://www.aprendeaprogramar.com) |
Si quieres usar "curses" con DevC++, tienes una "imitación" de curses que está disponible para distintos sistemas operativos. Se llama PDCURSES.
En el caso de DevC++, lo puedes instalar directamente desde el entorno: En el menú "Herramientas", eliges "Buscar actualizaciones". El repositorio llamado "devpaks.org" debería funcionar. Aparecerán muchos paquetes, entre ellos "pdcurses". Lo marcas y ya está instalado.
Cuando quieras crear un programa con "ncurses", basta que lo indiques al empezar el proyecto: Archivo / Nuevo / Proyecto, y luego, en la pestaña "Other" tendrás "Curses Application".
Suerte!!!
| No es pot respondre |
|
47. duda sobre puerto serie en Dev C++ (06/11/2006 20:28, #36249) Por: Bart |
| me encanta esta pagina porque tiene muchas cosas interesantes, bueno tengo una duda, quiero hacer un programa para una comunicacion de una tarjeta con el software pero el problema es que lo estoy haciendo en Dev C++ y la comunicacion lo quiero hacer por puerto serie pero en Dev C++ no tiene Conio de borland, y es por eso que no lo he podido hacer, si alguien puede ayudarme se lo agradeceria. ya intente con la simulacion de conio para dev c++´pero no me funciona el programa, quisiera saber si hay otra libreria que simule al conio de borland para dev c++ |
No es pot respondre |
48. Re: ncurses para remolones (24/03/2007 08:10, #39246) Por: Anònim |
| saludos..
esto de ncurses es muy bueno..
pero.. algo para hacerlo con c++..
estuve leyendo sobre ncursesxx ..
pero es un lio total para compilar las librerias..
o yo me hago un lio :S.
alguien conoce algun paquete deb de ncursesxx (ya q no hay en los repos :( ), o si alguien logro instalarlo.. podria comentarlo.
gracias por la atencion ;) : |
No es pot respondre |
49. Re: ncurses para remolones (06/05/2007 19:57, #41166) Por: Anònim |
| Ksjioeiogf
didovergilkoenigindidozt
konzertdidozt
staneminemdidozt
didodontleavehomezt
songtextthankyoudidozt
ticketdidozt
didolifeforrentlyricszt
mylifedidozt
whiteflaglyricsdidozt
whiteflagsingledidozt
unrsinlididohotmailzt |
No es pot respondre |
50. Re: ncurses para remolones (07/06/2007 03:43, #42673) Por: Kalisto |
| Muy groso
felicidades :) |
No es pot respondre |