Ya pasaron de moda, pero a veces tiene sentido hacer una aplicación que solamente necesite una terminal de modo texto. En ambientes UNIX esto es muy útil ya que fácilmente se pueden utilizar remotamente via SSH sobre enlaces que no necesitan ser demasiado eficientes.
En UNIX, una terminal es un dispositivo, real o imaginario, que sabe cómo interpretar un flujo de caracteres y representarlo para armar una intefaz para un usuario humano. Una terminal real, física, es hoy en día un bicho raro, es un aparato grandote con una pantalla y un teclado que se conecta via una conexión serie a una computadora central. En un UNIX moderno una parte del kernel se dedica a emular una terminal, que, solamente via un flujo de caracteres, conecta el uso de la pantalla y el teclado con el resto del sistema.
Todo lo que se representa en una terminal tiene que provenir de ese enlace. Y ese enlace es solamente un flujo de byte. Si una aplicación, corriendo vinculada a una terminal, puede hacer un "bip", es porque hay un caracter que, recibido por la terminal, provoca ese sonido. Ese byte es el 7. Hay también secuencias de bytes para mover el cursor, para cambiar el color de los próximos caracteres a mostrar.
Pero ojo, no es necesario aprender esas secuencias de caracteres. Gracias a Dios existe una biblioteca estandarizada que ofrece las funciones normales que uno espera. Esta biblioteca se llama curses, y la implementación en Linux es conocida como ncurses.
Hay una cosa que es bastante curiosa para los que venimos de otros
sistemas: ncurses está diseñada para funcionar sobre enlaces lentos. Las
terminales que ncurses sabe manejar solamente saben poner caracteres donde
está el cursor, por lo tanto para ir dibujando la pantalla hay que ir
haciendo movimientos de cursor. El cursor se mueve también naturalmente
cuando se escribe un carácter (avanza), y en este caso sin ninguna
indicación extra. Existe por lo tanto la posibilidad de estudiar el camino
mínimo que puede pedírsele al cursor para que dibuje una pantalla, es decir,
minimizar el uso de códigos de control que solamente mueven el cursor. Para
lograr esto el programador debe hacer todas las operaciones de escritura y
estas se recordarán, pero no pasará nada en la pantalla. Posteriormente,
al ser llamada la función refresh
la bilioteca analizará el
estado conocido de la pantalla actual y cómo debe verse la pantalla con las
modificaciones y calculará la manera óptima de llevar a cabo esas
modificaciones.
En algún momento continuaré la explicación sobre esta biblioteca. Por ahora, ojalá sirva esto que escribí a modo de introducción. =)
Volver al índice.