Hace más de un año publiqué algunas funciones para manejar colores en la terminal de forma fácil. (Ver link). El objetivo era aprender un poco cómo funciona la terminal, y de paso ayudarme con mis alumnos de clases particulares (casi todos utilizan conio.h), yo quería una alternativa; por otra parte, facilitar el uso en proyectos pequeños, ya que si queremos algo más, para eso está ncurses.
Me he decidido sacar una segunda versión, ya que la primera no disponía de sustituto para getch() ni kbhit(), recordemos que estas funciones son para pedir un carácter desde teclado sin echo y sin necesidad de pulsar ENTER, y detectar la pulsación de una tecla sin parar la ejecución del programa respectivamente.
Tengo que avisar también de que este código no funciona con las flechas del teclado (estas teclas no tienen un carácter asociado y lo que hacen es devolver varios códigos de tecla, el primero de ellos ESC (27)), lo dejo para la próxima actualización.
También hay algunas correcciones, y algunas novedades internas.
Para descargar: stermp.h y stermp.c
Para compilar stermp (Simple Terminal Play):
$ gcc -c stermp.c
Para compilar nuestros proyectos:
$ gcc -o proyecto proyecto.c stermp.o
Y ahora un pequeño código de prueba:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 | #include <stdio.h> #include <time.h> #include "stermp.h" void update_time() { struct tm *tm; time_t _time; char texto[50]; textcolor(YELLOW); _time=time(NULL); tm = localtime(&_time); strftime(texto,50,"%d/%m/%Y %H:%M:%S", tm); gotoxy(1,1); printf("%s ", texto); } int main() { int x,y; int ancho, alto; int tecla; term_init(); ancho = screenwidth(); alto = screenheight(); /* Rellenamos de verde la pantalla */ textbackground(GREEN); clrscr(); textbackground(BLUE); /* Rellenamos de azul la primera fila */ for (x=0; x<ancho; x++) printf(" "); gotoxy(1,alto); /* Rellenamos de azul la última fila */ for (x=0; x<ancho; x++) printf(" "); gotoxy(2,2); while ((tecla=kbhit2())==0) update_time(); printf("Has pulsado: %d\n", tecla); term_defaults(); } |
Pingback: Bitacoras.com /
Y como hago para utilizarlo con codeblocks?
Introduce el .h y el .cpp en tu proyecto y compílalo. Debería funcionar. Espero tu comentario.
Estoy tratando de hacer andar el ejemplo «proyecto.c» pero tengo probkemas,
Me da error la compilación, la cual realizo asi:
$ gcc -o proyecto proyecto.c stermp.o
/tmp/cc3nHWoW.o: In function `main’:
proyecto.c:(.text+0xa2): undefined reference to `term_init’
proyecto.c:(.text+0x14f): undefined reference to `kbhit2′
proyecto.c:(.text+0x174): undefined reference to `term_defaults’
collect2: ld returned 1 exit status
El binario (ejecutable) no se genera.
Desde ya te felicito por el aporte y te agradezco si me podés pasar algún dato.
PD: stermp.c lo he probado con otro ejemlo y funciona bien. Claro, el mismo no tiene llamados a term_init, kbhit2, term_defaults.
@Adrian
Gracias por tu comentario. Compilaste primero stermp.c ? Puedes probar también gcc -o proyecto proyecto.c stermp.c a ver qué tal.
Saludos
@Gaspar Fernández
Es bastante raro que no te deje compilar, a lo mejor te ha traicionado algún carácter en el copia y pega, tipo comillas o <>
Saludos
Pingback: Poesía binaria » Escribir con colores en la terminal al estilo C++ /
Hola. No se si aun estés activo aquí. Creo que ando un poquito atrasado en esta web pero es el mejor ejemplo que he encontrado, el cual me funciona a la perfección. Pero cuando quiero usar la misma parte del while(tecla=kbhit2()==0) en otro programa compila bien pero al correrlo me marca invalid argument Errno=22. Alguna idea del por qué?????
@psycho
Perdona mi tardanza psycho, hay una versión actualizada en github (https://github.com/blakeyed/stermp) que arregla ese fallo.
Tengo una librería en C ( stermp.c, stermp.h), una librería en C++ ( serialib.cpp, serialib.h). Además tengo un archivo.cpp donde está el programa principal y que necesita hacer uso de las dos librerías antes mencionadas. Compilando y haciendo uso de las librerías por separado, todo va bien. Cuando se compila el archivo.cpp que tiene el programa principal da error.
Como se logra compilar y ejecutar correctamente?
Por favor, pásame el error que te da y te echo una mano.