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

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.