Busqueda

Resultados

viernes, 4 de junio de 2010

esperar pulsado de tecla en C

Saludos seguidores;

éste es un artículo enviado por Leonardo Mosquera de una lista de correo de programación (Programacion@listas.fi.uba.ar) el cual se tomo textualmente y respetando los creditos, deseo les sirva de ayuda a ustedes programadores:

On 9/11/07, Andorogynus ! <[EMAIL PROTECTED]> wrote:
>
> Como puedo hacer en C para simular un INKEY$ (que viejo !)
> Es decir, efectuar una pausa hasta que el tipo presione una tecla.
>
> Probe con getchar() pero no me permite abortar (Ctrl-C) el programa.
>

A continuacion te adjunto una contribucion que hizo alguien a la lista de mi
universidad una vez. Podes recortar todo lo que no sea getch() y su soporte.
Tene en cuenta la licencia, o al menos no copies/pegues sino que
"inspirate".

Nota: tradicionalmente se usa ncurses para eso que queres hacer, pero yo
mismo ya conclui que ncurses es demasiado armatoste si simplemente queres
pausar el programa por la duracion de exactamente 1 tecla.


------------------------------------------------------------------------

/* +++++++++++ conio.h de Porland (versión trucha del Borland :-)
+++++++++++
*
* Autor: Omar Murray (Crux_) Versión: 0.0.2
* Licencia: GPL Fecha: 05/06/07
*
* Esto intenta ser una recopilación de las funciones más utilizadas en
* la librería de Borland para poder generar código y compilar
* utilizando gcc en GNU/Linux, y luego poder correrlo en un entorno
* Borland sin necesidad de modificar el código escrito. Mayormente son
trozos
* de código obtenido de inet y recopilados en una sola librería. La
idea es
* utilizarlo para fines educativos; está en absoluto estado alfa, así
que su
* uso queda a riesgo de quien lo utilice.
*
* CHANGELOG
* v 0.0.1 Se implemente funciones getch() y clrscr().
* v 0.0.2 se agrega función gotoxy(), se ordena código.*/

#include < stdio.h >
#include < termios.h >
#include < unistd.h >
#include < stdlib.h >
#include < string.h >

//******************FUNCION GETCH****************************
int getch( ) {
struct termios oldt,
newt;
int ch;
tcgetattr( STDIN_FILENO, &oldt );
newt = oldt;
newt.c_lflag &= ~( ICANON | ECHO );
tcsetattr( STDIN_FILENO, TCSANOW, &newt );
ch = getchar();
tcsetattr( STDIN_FILENO, TCSANOW, &oldt );
return ch;
}

//******************FUNCION CLRSCR*****************************
void clrscr( ) {
system("clear");
}

//**************** **FUNCION GOTOXY*****************************
int gotoxy(int x, int y) {
char essq[100]; // String variable to hold the escape sequence
char xstr[100]; // Strings to hold the x and y coordinates
char ystr[100]; // Escape sequences must be built with characters

// ** Convert the screen coordinates to strings
sprintf(xstr, "%d", x);
sprintf(ystr, "%d", y);

// ** Build the escape sequence (vertical move)
essq[0] = '\0';
strcat(essq, "\033[");
strcat(essq, ystr);

// ** Described in man terminfo as vpa=\E[%p1%dd
// ** Vertical position absolute
strcat(essq, "d");

// ** Horizontal move
// ** Horizontal position absolute
strcat(essq, "\033[");
strcat(essq, xstr);

// // Described in man terminfo as hpa=\E[%p1%dG
strcat(essq, "G");

// ** Execute the escape sequence
// ** This will move the cursor to x, y
printf("%s", essq);
return 0;
}

_______________________________________________
Lista de correo Programacion.
Programacion@listas.fi.uba.ar
http://listas.fi.uba.ar/mailman/listinfo/programacion

No hay comentarios:

Publicar un comentario