# "Curses!: Una historia del hardware y software de interfase en UNIX"

ROGUE nos permite dilucidar en cierta parte la senda tecnológica seguida
y que incluso continúa siendo relevante actualmente en las herramienetas
de programación más utilizadas.


##TERMINALES TELETIPO Y UNIX DE INVESTIGACIÓN

La historia comienza desde hace muchos años. Desde mediados del siglo
XIX se inventó el TELÉGRAFO, pero para usarlo se necesitaba dominar el
uso del código Morse, y hacerlo de forma efectiva. También tenía
limitaciones serias en la cantidad de líneas telegráficas que se podían
tender, y como entrenar a los telegrafistas (siempre existió el deseo de
disminuir la cantidad de habilidades necesarias para poder comunicarse
con este dispositivo).

Este deseo llevó a la invención de muchas TELE-IMPRESORAS, incluso
algunas que empleaban teclados y mecanismos similares a los del piano
para sus modulaciones. Para principios del siglo XX estos habían
evolucionado a máquinas un poco más prácticas, fundamentalmente máquinas
de escribir eléctricas conectadas a una línea telegráfica o enlace en
serie, que contactaban a otra máquina al otro extremo de la línea.
Básicamente se ponía la teletipo en "emisión", y se mecanografiaba en un
lugar, y se recibía una copia impresa en la otra máquina distante a
muchos kilómetros. Era mucho más sencillo de aprender y de entrenar así
a la gente para que las utilizara, lo que las hizo especialmente útiles
gracias a los circuitos dedicados a la difusión de noticias
periodísticas ("cables" o "télex"). El estándar primigenio convenido por
estas máquinas teletipo fue el código Baudot, de 5 bits
(incidentalmente, la velocidad actualmente se mide en "baudios").

##MULTICS

A mediados de la década de 1960, la inductria del cómputo (aparecida
desde la década de 1940) se encontró en la evolución desde un modelo de
COMPUTO POR LOTES (máquinas que utilizaban tarjetas perforadas como
método de entrada de datos) a los SISTEMAS DE TIEMPO DE COMPUTO
COMPARTIDO, multiusuario y multitarea.

De este modo AT&T, General Electric y Bell Labs obraron juntas para
desarrollar un sistema de cómputo de tiempo compartido de estas
características, el MULTICS, que visionaba la computadora como una
utilidad (una premonición de la actual "nube"). Habría una gran
computadora en un edificio especializado, y los usuarios accederían a
sus programas y utilidades de manera remota, a través de un servicio de
comunicación por suscripción. El sistema que tenían que inventar debía
ser extremadamente robusto, ya que tenía que hacer todo tipo de tareas
de computación, y para todos.

El sistema operativo MULTICS originalmente estuvo pensado para funcionar
en un mainframe particularmente grande, una computadora GE-645 que
contaba con 2,25MB de memoria RAM, cifra enorme a mediados de los 60s.
Para conectarse a ella resultó bastante obvia la opción de usar las
viejas TELETIPOS.

La telefónica Bell poseía por entonces a la principal fabricante,
Teletype Corp, adquirida desde la década de 1930, de modo que los
investigadores de los Laboratorios Bell que trabajan en MULTICS
decidieron hacer uso de sus Teletipos Modelo 37 para tareas de
comunicación. Estas eran de avanzada, simplemente porque contaban con
mayúsculas y minúsculas, además de la capacidad de utilizar cintas de
papel de cinco perforaciones como medio propio de entrada y de salida.

##UNIX

En 1969 los Laboratorios Bell abandona el proyecto MULTICS, y su
dirección técnica negó a sus antiguos desarrolladores adquirir nuevas
computadoras grandes; básicamente, para evitarse el problema de apuntar
a tal tipo de desarrollo. Muchos de sus desarrolladores más avezados
querían seguir utilizando un buen sistema de tiempo compartido, pero no
les fue aceptada la idea de adquirir una de las caras mainframes nuevas.
Sólo encontraron en las instalaciones del laboratorio una vieja máquina
PDP-7 con escasos 9KB de memoria RAM.

A falta de algo mejor, comenzaron a trabajar con ella para desarrollar
un sistema, simplemente porque les permitía contar con potencia de
cómputo gratuita. Comenzaron a elaborar un muy pequeño sistema de tiempo
de cómputo compartido para ella: el UNICS. Eventualmente demostraron que
era práctico, y terminaron comprando una computadora más potente para el
mismo: una PDP-11 con 24K de memoria RAM. Esta inverción permitió que el
sistema - ahora llamado UNIX - pudiese realmente correr en ella de forma
autocontenida.


##MANEJO DE TELETIPOS

En UNIX el manejo de las terminales se reveló como un problema complejo
resuelto de manera simple.

Por entonces, para ingresar a la máquina se utilizaba un puerto de
conexión serial, o un módem de discado telefónico adosado al mismo. En
UNIX "todo es un archivo" y tenia un nodo denominado /dev/tty y un
número que indicaba el número de teletipo correspondiente.

Primeramente usaban un programa llamado ioctl, un "control de entrada y
salida" utilizado para defenir las caracteristicas de los teletipos. El
sistema había sido concebido con una gran predisposición para los
teletipos del modelo 37, y los detectaba gracias a "magia" (como les
decían a estas opciones cuyo código estaba imbuído directamente en el
sistema operativo). Mas adelante los "magos de UNIX" fueron agregando
soporte para otros modelos de teletipos a través de instrucciones al
comando stty, que permitía definir las características de las distintas
teletipos utilizadas. Incluso en 1972 se instruia "utilizar con cuidado
este sistema pues podía obstruir la efectiva comunicación del teletipo
con el UNIX".

Para el momento en que la 6ta edición del UNIX hizo su aparición en
1975, la complejidad de integrar todas las teletipos y terminales
disponibles en un mercado rebozante hizo comprender finalmente que el
uso y abuso de rutinas de stty implicaba un gran problema, por lo que se
intentó incluir paquetes con las espeficaciones de algunas terminales
populares en lugar de intentar definir todas las distintas opciones de
las mismas.

##Terminales CRT y BSD

En 1970 comienzan a aparecer las primeras unidades de presentación de
videos como terminales de computadora. Al principio no eran
impresionantes, pero comenzaron a mejorar de forma aguda en este período
gracias a la tecnologías de semiconductores y miniaturización de la
electrónica, lo que permitían unidades autocontenidas, provistas de
pantalla, teclado, y puerto de comunicación serial.

A finales de los 70s aparece la primer terminal sumamente vendida, la
VT100 de DEC, que se convirtió en el estándar defacto. Podía dibujar
rápidamente mayúsculas y minúsculas, borrar la pantalla, mover un cursor
en ella, en una matriz de 80x24, y para 1980 la VT220 mejoró su
desempeño y precio.

Ante estas, Bell Labs fue lenta en abandonar sus teletipos. Se habían
abocado grandes esfuerzos allí a controlar las terminales gráficas con
tecnología de vectores, que utilizan un trazador sobre una pantalla de
tubos catódicos. En particular, la Tektronik 1406 era sumamente capaz
para gráficas y planos en base a vectores definidos por software. En
estos se envían comandos para trazar líneas, controladas por un tubo de
rayos catódico móvil que excita una pantalla de fósforo de muy larga
duración. Su pantalla se borraba entera, con un flash de luz verde.

En lugar de ello, a finales de los 70s y principios de los 80s en la
Universidad de California en Berkeley se abocó a la adquisición y uso de
nuevas terminales Siegler ADM3, mucho más veloces y con caracteres
instantáneos en memoria ROM (apodadas "teletipos de vidrio"), y las
fueron adaptando progresivamente en los centros de computación que
dependían de la institución educativa. Además contaban con un teclado
cuyas letras H J K y L contaban con flechas en él, para direccionar el
cursor de escritura.

Las funciones avanzadas de alguna de estas terminales, como usar letras
en negrita, video invereso, subrayado, a color, etcétera, se comienzan a
incorporar a mansalva, y muchos fabricantes comienzan a crear sus
propias videoterminales pensadas para competirles en precio, a la vez
que intentando abocarse especialmente con alguna de estas funciuones de
video o presentación avanzada. Ciertas marcas eran incluso mututamente
incompatibles. Todo ello requirió software más avanzado si se deseaba
mantener compatibillidad entre todas ellas y los sistemas operativos de
base a los que debían controlar.

Esto daría origien a la liberaía VI, CURSES y eventualmente, ROGUE.

El editor de texto "canónico" de UNIX es ED, se trata de un editor
orientado a lineas diseñado para ser operado desde un teletipo que
imprime hojas de papel. Está bien diseñado para ello, y opera muy
adecuadamente... si la entrada es un teclado, y si la salida esa una
máquina de escribir. En efecto, no es fácil de utilizar, y para ello fue
eventualmente modernizado por otro programador en la forma de EM, que se
distinguía por ser algo más amistoso.

EM fue adoptado por Bill Joy y otros en la Universidad de Berkeley,
logrando eventualmente el EX y una biblioteca de programación adjunta
denominada TERMCAP, que definía las capacidades de las distintas
terminales en boga. Agregaron estos programas en una cinta magnética
para la distribución de la versión de UNIX propia de la uUiversidad, el
BSD.

Una de las cosas más populares del EX fue de hecho su "modo visual", al
que se podía activar en las videoterminales. Al ingresar "visual" en el
prompt de comandos, en lugar de utilizar las antiguoa órdenes de estilo
teletipo - donde se debe recordar la línea de trabajo, y se indica
crípticamente qué se quiere hacer -, se visualiza directamente todo en
la pantalla de video de la terminal.

Por entonces, esto era muy nuevo y revolucionario.

Para que todo esto funcionase se delimitó cierto código para reescribir
la pantalla, y en lugar de incorporarlos de forma fija en el editor, se
dispusieron en un fichero aparte, que cobró forma de base de datos que
describía las características del modelo de terminal. Ciertamente
también era críptico para leer y editar, pero constituia una mejora con
respecto a dejarlo fijo en el código del editor.

De esta manera, la biblioteca TERMCAP podía consultar esta base de datos
archivada y comprender cómo hacer el manejo de la terminal, y hacerlo
con independencia de dispositivos. Finalmente, si se utilizaba el
comando vi, directamente se entraba a EX en modo visual.

En 1979 el desarrollo de vi se entrega a otra hackeresa, Marian Horton.

Para 1980 sale la versión 4BSD, que incluye la bibliuoteca CURSES. Ken
Arnold tomó el código de reescritura de pantalla del código fuente de
VI, y la incorporó en una biblioteca que permitía describir cómo tenía
que verse la pantalla. CURSES se encargaba entonces de hacer la mínima
cantidad de movimientos de cursor y reescrituras en la pantalla. Esto
permitía hacer mucho más eficiente la velocidad de refresco en una
pantalla de una matriz de caracteres, permitiendo trabajar de forma
interactiva de manera más cómoda.

Y a partir de esta biblioteca CURSES se podía escribir programas
realmente muy interesantes, mejorando la presentación, utilizando
caracteres, letras y números. Permitía las TUI, interfaces de usuario en
base a texto.

Ciertamente las primeras aplicaciones en utilizar la biblioteca fueron
algunos comandos de UNIX similares en función al WHO, y demás
aplicaciones de gestión del sistema, pero la primer aplicación realmente
extendida que hacía uso de CURSES fue el juego de exploración de
mazmorras ROGUE.

##GRÁFICOS DE MAPAS DE BITS, GUERRAS UNIX, CÓDIGO ABIERTO

A principios de los 80s, los Laboratorios Bell se dedicaba a desarrollos
de avanzada en todas las áreas, y en esta particular destacaba su
terminal gráfica BLIT para UNIX. Esta podía presentar interfases
gráficas de usuario (GUI) con ventanas programables, descargar código
para su ejecución interna a través de su enlace serial, etc. Pero no se
vendió fuera de Bell Labs.

En 1982, Marian Horton demostró en la convención USENIX un paper
denominado "nCurses y TERMINFO", demostrando una reimplementación de
CURSES, y que la biblioteca TERMCAP que tenía problemas de velocidad,
con una base de datos que tenía información legible.

Para 1984 se hizo fuerza por parte de BSD de integrar las terminales con
gráficas de mapas de bits, lanzándose para ellas en 1986 se lanza la
especificación de servicios y clientes gráficos de UNIX, al que se llamó
"Sistema Xwindow". Esta se realizó bajo una licencia de difusión abierta
concebida en el MIT, lo que la hizo inmediatamente popular, y la
convertiría en cimiento del ecosistema de código abierto moderno.

##CODIGO ABIERTO

En los siguientes años se producen una serie de hitos importantes.

En 1982 Pavel Curtis fue comisionado por Marian Horton para clonar la
librería pCurses de forma independiente, para poder demostrar a la gente
por fuera de los laboratorios Bell las mejoras realizadas a CURSES.

En 1984 Richard Stallman da inicio a los trabajos en el PROYECTO GNU
para poder publicar un sistema operativo clon de UNIX que no contase con
ningún código fuente encumbrado propiedad de AT&T/Bell Labs, al cual se
lo pudiese distribuir de manera libre.

En 1986 surge 4.3BSD, el último BSD que contenía código fuente propiedad
de AT&T en sí.

En 1991 vemos la primer aparición del kernel LINUX, y también de 386BSD
de la hackeresa Lynne Jolitz, un clon al que le removieron mucho del
viejo código encumbrado de AT&T.

pCurses había languidecido desde 1986, cuando había salido su última
versión, pero en 1993 resurgió como n-curses, y este es lo último que
salió con código de Ken Arnold. Este fue también un gran año, pues
aparecen Slackware y NetBSD, y hasta mediados de los 90s contamos con
grandes ponentes de lo que hoy constituye el Movimiento del Código
Abierto, decidods de abandonar los vestigios del UNIX de Investigación
de AT&T y mudarse a una base de GNU/Linux, a la vez que prestan más
atención a la manera en la cual el licenciamiento de su software
afectará el crecimiento y proyección del mismo.

##VI y sus EDITORES

Pasaron ya casi 50 años desde el desarrollo del editor ED, pero aún el
intérprete de comandos, la Shell de UNIX, nos habla como si se estuviese
dirigiendo a un teletipo en los laboratorios Bell en 1969.

Las ideas que surgieron de allí avanzan, pero son "pegajosas":
influencian a las nuevas generaciones de soft3ware que usamos para leer
y escribir.

VisualStudio CODE es probablmente más avanzado que VIM, pero aún está
influenciado por la manera en la cual las ADM3 y las VT100 operaban en
la Universidad de Berkeley, tenían teclas de Control, flechas en HJKL, y
aún se pueden activar los atajos de Vi en VisualStudio CODE, porque el
software que usamos incluencia lo que queremos en el software futuro.