1 minute read

5.6. Controlar la consola

Ejemplo A continuación se muestra otro ejemplo de acceso a puertos de E/S: se trata de leer el registro de datos del teclado, puerto 60h.

El código siguiente hace un bucle que muestra el código de la tecla pulsada (scancode) hasta que se pulsa la tecla ESC.

Advertisement

El registro 60h almacena en los 7 bits de menos peso el código de cada tecla que se pulsa.

#include <stdio.h> #include <stdlib.h> #include <sys/io.h>

#define KBD_DATA 0x60

int main(){ int salir=0; char data;

if (ioperm(KBD_DATA, 1, 1)) { perror("ioperm"); exit(1); }

while (salir==0){ data=inb(KBD_DATA); //se muestra el código de la tecla pulsada, scancode //se hace una AND lógica ('&') para tomar solo los // 7 bits menos significativos del dato leído printf("tecla: %0x\n", fecha & 0b01111111); //se pulsa ESC para salir del bucle, scancode=1 if ((data & 0b01111111) == 1) salir=1; } if (ioperm(KBD_DATA, 1, 0)) { perror("ioperm"); exit(1); } }

5.6. Controlar la consola

En Linux no existen funciones estándar o servicios del sistema operativo para controlar la consola, por ejemplo, para mover el cursor. Disponemos, sin embargo, de la posibilidad de escribir secuencias de escape que nos permiten manipular el emulador de terminal de Linux, entre otras operaciones: mover el cursor, limpiar la consola, etc.

Una secuencia de escape es una cadena de caracteres que empieza con el carácter ESC (que corresponde al código ASCII 27 decimal o 1Bh).

Las principales secuencias de escape son las siguientes:

1) Mover el cursor. Para mover el cursor hay que considerar que la posición inicial en un terminal Linux corresponde a la fila 0 de la columna 0; para mover el cursor escribiremos la cadena de caracteres siguiente:

ESC[F;CH

This article is from: