Biblioteca de manejo de consola conio
La biblioteca conio proporciona funciones para en modo texto en el entorno de MS-DOS(R) y Windows(R).
La versión original es de la empresa Borland(R) y, posteriormente, han surgido emulaciones
como la que va con el compilador Dev-Cpp.
Compilado y linkado
Para compilar un programa que use esta biblioteca hay que incluir el fichero de cabecera conio.h:
Para linkar un programa que use esta biblioteca hay que incluir el fichero de fuentes conio.c o
enlazar la biblioteca libconio.a.
Las rutinas
Rutinas de inicialización y finalización
Para usar las rutinas de la biblioteca conio no es necesario inicializar ninguna estructura ni llamar a ninguna rutina
de inicialización
Rutinas de escritura
void gotoxy(int x, int y);
Mueve el cursor a la posición x, y de la pantalla. La posición especificada es relativa a la esquina superior izquierda
de la ventana, que tiene las coordenadas (1,1). Si las coordenadas no son válidas, se ignora la llamada.
int putch(int c);
Escribe el carácter pasado como parámetro directamente a la ventana de texto.
int cputs(const char cadena[]);
Escribe la cadena que se pasa como parámetro en la ventana de texto.
void clrscr(void);
Esta rutina borra la pantalla escribiendo blancos en todas las posiciones.
void _setcursortype(int tipo_cursor);
Este rutina establece la apariencia del cursor en la pantalla. El argumento
puede tomar tres valores:
| _NOCURSOR | El cursor no aparece |
| _NORMALCURSOR | Cursor normal |
| _SOLIDCURSOR | Cursor es un cuadrado relleno |
Rutinas de lectura
int getch(void);
Esta rutina lee un carácter del buffer de teclado sin hacer eco del carácter
leído en la pantalla.
int getche(void);
Esta rutina lee un carácter del buffer de teclado haciendo eco del carácter
leído en la pantalla.
Las teclas extendidas ocupan dos caracteres. En la primera lectura getch() devuelve un
valor especial que indica que estamos leyendo una tecla extendida. El segundo carácter
leído indica qué tecla es.
Las teclas de cursor son teclas extendidas cuyo primer carácter leído es el 224
1. Para el segundo carárcter,
los valores 72, 75, 77 y 80 corresponden a los cursores hacia arriba, a la derecha, a la
izquierda y hacia abajo, respectivamente.
char *cgets(char *cad);
Esta rutina lee una cadena de caracteres y la guarda en el parámetro. Esta
función lee hasta un número máximo de caracteres o hasta que se llega al fin de
línea (caracteres CR/LF). El usuario establece el número máximo de caracteres a
leer escribiendo ese número en cad[0]. Al acabar la función, cad[1] tiene el
número de caracteres que se ha leído realmente. Los datos de la cadena empiezan
realmente a partir de cad[2].
int kbhit(void);
Esta función devuelve 0 si no hay ninguna tecla pulsada y un valor distinto en
caso contrario.
Otras rutinas
void gettextinfo(struct text_info *ti);
Obtiene la información de vídeo del modo texto. Esta información es guardada en
una estructura apuntada por el argumento *ti. La estructura text_info se define de esta manera:
struct text_info {
unsigned char winleft; /* Coordenada izquierda de la ventana */
unsigned char wintop; /* Coordenada superior de la ventana */
unsigned char winright; /* Coordenada derecha de la ventana */
unsigned char winbottom; /* Coordenada inferior de la ventana */
unsigned char attribute; /* Atributo de texto */
unsigned char normattr; /* Atributo normal*/
unsigned char currmode; /* Modo en Uso: BW40, BW80, C40, C80, o C4350 */
unsigned char screenheight; /* Altura de la pantalla de texto */
unsigned char screenwidth; /* Anchura de la pantalla de texto */
unsigned char curx; /* Coordenada X de la ventana en uso */
unsigned char cury; /* Coordenada Y de la ventana en uso */
};
Algunos enlaces con más información
- http://c.conclase.net/Borland/libreria.php?lib=conio
- http://www.cc65.org/doc/funcref-11.html
Ejemplo:
El siguiente programa mueve el carácter '@' por la pantalla circularmente
siguiendo la pulsación de los cursores. El programa acaba cuando se pulsa la
tecla ESC, que corresponde al carácter 27.
Nota para compilar con Dev-Cpp: La versión de conio que incluye Dev-Cpp por
defecto tiene implementadas muy pocas funciones. En la página
http://www.lcc.uma.es/~alvarezp/bibliotecas aparecen versiones más completas de
los ficheros necesarios, conio.h, que ha de guardarse en el directorio
c:\dev-cpp\include 2
y conio.c y libconio.a, que han de guardarse en el directorio c:\dev-cpp\lib.
Para generar el ejecutable puede incluirse el fichero conio.c como un fichero fuente
más del proyecto.
La otra opción es enlazar la biblioteca libconio.a. Para ello, hay que
incluir en la opción
Herramientas->Opciones del Compilador->Añadir ... al llamar al
compilador la opción -lconio. El inconveniente de esta solución es
que se compilarán todos los programas con esa biblioteca.
Para compilar con la biblioteca conio sólo aquellos programas que la necesiten,
es mejor crear un proyecto, en el que hay que incluir en
Proyecto->Opciones del Proyecto->Parámetros;Linker la opción -lconio.
#include <conio.h>
using namespace std;
int main()
{
int tecla;
int max_x, max_y, pos_x, pos_y;
bool fin = false;
struct text_info txtinf;
gettextinfo(&txtinf);
max_x = int(txtinf.screenwidth);
max_y = int(txtinf.screenheight);
pos_x = max_x / 2;
pos_y = max_y / 2;
clrscr();
_setcursortype(_NOCURSOR);
do
{
gotoxy(pos_x, pos_y);
putch('@');
tecla = getch();
gotoxy(pos_x, pos_y);
putch(' ');
switch(tecla)
{
case 224:
switch(getch())
{
case 72: // hacia arriba
pos_y = pos_y - 1;
if (pos_y == 0) { pos_y = max_y;}
break;
case 75: // hacia la izquierda
pos_x = pos_x - 1;
if (pos_x == 0) { pos_x = max_x;}
break;
case 77: // hacia la derecha
pos_x = (pos_x % max_x) + 1;
break;
case 80: // hacia abajo
pos_y = (pos_y % max_y) + 1;
break;
}
break;
case 27: // tecla ESC
fin = true;
break;
}
} while (!fin);
return 0;
}
Notas sobre otras versiones:
Las versiones actuales de conio que se ofrecen en las páginas web
http://c.conclase.net/ y http://conio.sourceforge.net/ no
funcionan correctamente.
Footnotes:
1la rutina getch() de
la versión tradicional de la biblioteca conio para MS-DOS(R), devuelve 0.
2se supone que el directorio
de instalación del compilador es c:\dev-cpp.
File translated from
TEX
by
TTH,
version 3.59.
On 24 May 2004, 19:02.