Hace 18 meses me estuve peleando con Dbase 3 y xHarbour (clon libre de Clipper) para hacer un roguelike en dbase y tratar luego de convertirlo a un ejecutable.
Aunque en dbase funcionaba, fui incapaz de hacer algo que se pudiera auto-traducir a Clipper, porque la sintaxis tiene cambios importantes (cosas que han de estar en ficheros distintos en dbase deben estar en el mismo fichero en clipper, palabras reservadas que deben estar dentro de un procedimiento en dbase 3 deben estar dentro en Clipper, etcétera).
Este año me enteré de una jam para juegos de CGA y he estado mirando cómo convertir todo en algo que pueda funcionar en basic (en C suelo invocar desastres). Lo que más me preocupaba eran los campos memo, que eran también uno de los problemas de incompatibilidad (parece que la especificación cambió entre dbase 3 y dbase 4, que es lo que usa harbour). Durante años, el formato de los campos memo había sido un misterio para mí.
Pues bien, es *lo más cutre del mundo.*
Los campos memo de dbase son una referencia en forma de número de 10 cifras (ascii, es decir, "10" es un "1" (0x31) seguido de un "0" (0x30), en vez del carácter 0xA).
El texto del campo memo simplemente se archiva en el archivo .DBT en la posición referencia*512, marcando su final con 0x1A 0x1A (dos caracteres de fin-de-archivo MS-DOS).