Códigos viejos de los años 90

Aprendí a programar en C a principio de los 90 del siglo XX.

Recuerdo que era divertido. Casi mágico.

Aprendí usando libros de Herbert Schildt, al que yo llamaba “el Sensei”. En aquella época sólo podía disponer de acceso a internet desde el aula de informática de la facultad: el mítico ftp a sunnet o la universidad de Valencia…

Comencé usando el Turbo C de Borland versión 2 en un 8088 con 512 KB de memoria y sin disco duro… Arrancaba desde diskette un MS-DOS 6.2. Luego metía el diskette con el compilador y el IDE y lo ejecutaba. Al compilar, me pedía otro disco que tenía las librerías… así que como el programa fuese un poco largo tenía que sacar y meter diskettes durante la compilación y lincado…

Bueno, no todo fue tan duro: durante la última etapa, cuando ya controlaba un poco, tuve un 386 con MS-Windows 3.1 primero y MS-Windows95 después (esta es la máquina con la que he tenido una relación más larga). Durante un tiempo seguí con el Turbo C de Borland, pero no tardé en instalarme el DJGPP (http://www.delorie.com/djgpp/, que venía siendo una versión del GCC para MS-DOS. También traía versiones para DOS de comandos POSIX, lo que me introdujo en el camino de Linux y el código portable…

El caso es que hice cositas curiosas durante aquella época pre-linux que pondré en esta página, junto con una versión “modernizada” siempre que sea posible.

Día Juliano (djuliano) y hora sidérea (hsidere1):

Pongo junto estos códigos porque tienen fuente en común que compilo por separado para luego lincar. Podéis bajaros la versión modernizada aquí: djuliano_hsiderea.tgz.

  • djuliano calcula el día juliano para una fecha dada.

  • hsidere1 genera bonitas tablas con la hora T.U., día juliano, hora sidérea en Greenwich y hora sidérea local para una longitud dada entre dos fechas y con un intervalo de tiempo dado.

Para realizar la versión modernizada de un antiguo código para MS-DOS hay que lidiar con varios problemas:

  • Recodificar el juego de caracteres de “latin-1”, que era lo que yo usaba allá por los 90, a UTF8. Para hacer esto uso el comando: recode l1/cl..utf8 fichero.c

  • Recodificar las “cajitas” hechas con caracteres IBM-PC específicos por algo más portable. Se puede hacer con el comando: recode -g IBM-PC/CR-LF..utf8 fichero.c

  • Deshacerse de las cabeceras y librerías específicas de MS-DOS (ejemplo típico, es “conio.h”). Algunas de estas funciones tienen equivalente en “ncurses.h”. Usar ncurses complica algo el código, pero es lo que hay. Un tutorial de ncurses que me resultó práctico fue http://tldp.org/HOWTO/NCURSES-Programming-HOWTO/. Documentación en castellano tenéis también en. http://es.tldp.org/Tutoriales/NCURSES/tutorial-ncurses.html

Para el que le interese, dejo el código original en djuliano_hsiderea_originales_anos_90.tgz

Notad que los códigos originales de los 90 contienen también un hsidere2… Ese programita no lo porté a Linux porque es una joyita que usa interrupciones de MS-DOS para paginar la pantalla y usar el ratón….

Me explico: el IBM-PC tenía varias “páginas de pantalla”, una especie de “pantallas virtuales” donde podías imprimir lo que quisieras. La pantalla que realmente aparecía en el monitor se escogía llamando a una interrupción del SO. Así podías imprimir cosas en varias “páginas de pantalla” y pasar a ver una u otra en el monitor de forma instantánea…

Además, hsidere2 usa también el ratón de la forma en que se hacía en MS-DOS: usando también interrupciones de SO…

Todo esto hace que para que funcionase en Linux habría que reescribir hsidere2 casi completamente de 0… y es mucho curro… Pero si tenéis curiosidad en cómo se usaba el ratón en MS-DOS, podéis echarle un vistazo.

Una última nota: no me juzguéis por el código. Aunque lo he portado a Linux, he intentado conservar el diseño y estructura originales… que non las que usaría ahora. El código tiene 20 años, algo debo haber aprendido desde entonces.