¿Vuelve dBASE?

Published: (December 17, 2025 at 07:36 AM EST)
2 min read
Source: Dev.to

Source: Dev.to

dBASE III+ para MS-DOS

dBASE III+ y su modo de uso

dBASE III+ fue un auténtico éxito comercial porque permitía manejar bases de datos de manera muy sencilla e imperativa (no como SQL, que se supone que lo hace todo por ti). Podías trabajar con los menús o bien usar comandos para hacer consultas, modificar la estructura, añadir, modificar o eliminar registros.

Hola, mundo

procedure main()
     * This is an example
     clear
     ? "Hello, the weather is fine today"
return

Clipper

Poco después surgió Clipper, un compilador que permitía distribuir ejecutables sin que el cliente tuviese instalado dBASE.

Crear una base de datos de contactos

* Inicia la base de datos de contactos
procedure ini_contactos()
    create contactos
    use contactos

    * Campo nombre
    append blank
    replace field_name with "nombre"
    replace field_type with "c"
    replace field_length with 30

    * Campo email
    append blank
    replace field_name with "email"
    replace field_type with "c"
    replace field_length with 20
    close
return

La instrucción create crea un archivo contactos.dbf. use lo abre y, tras definir los campos, close lo cierra.

Insertar un contacto

* Inserta un nuevo contacto
procedure inserta_contacto(nombre, email)
    use contactos
    append blank
    replace nombre with nombre
    replace email with email
    close
return

Pedir datos de un nuevo contacto

* Pide los datos de un nuevo contacto y lo inserta
procedure nuevo_contacto()
    local nombre, email

    clear

    * Muestra el prompt de entrada
    @ 5, 10 say "Nombre:" get nombre
    @ 7, 10 say "Email :" get email

    inserta_contacto( nombre, email )
return

En Clipper la arroba (@) mueve el cursor, say escribe texto y get solicita la entrada del usuario. Las variables no tienen tipo fijo, adoptando el tipo del valor que almacenan (como en Python).

Harbour: alternativa moderna

Una empresa ha retomado el testigo de dBASE con dBASE LLC, pero también existe una alternativa moderna y de código abierto: Harbour. He podido compilar el código anterior con Harbour, que genera primero código fuente C y luego lo compila.

Código generado por Harbour

HB_INIT_SYMBOLS_BEGIN( hb_vm_SymbolInit_CONTACTOS )
{ "CONTACTOS", {HB_FS_PUBLIC | HB_FS_FIRST | HB_FS_LOCAL}, {HB_FUNCNAME( CONTACTOS )}, NULL },
{ "INI_CONTACTOS", {HB_FS_PUBLIC | HB_FS_LOCAL}, {HB_FUNCNAME( INI_CONTACTOS )}, NULL },
...
HB_FUNC( INI_CONTACTOS )
{
    static const HB_BYTE pcode[] =
    {
        36,3,0,176,2,0,106,10,99,111,110,116,97,99,
        116,111,115,0,100,100,9,100,20,5,36,4,0,176,
        3,0,9,100,106,10,99,111,110,116,97,99,116,111,
        115,0,100,100,9,20,6,36,7,0,176,4,0,20,
        0,36,8,0,106,7,110,111,109,98,114,101,0,78,
        5,0,36,9,0,106,2,99,0,78,6,0,36,10,
        0,92,30,78,7,0,36,13,0,176,4,0,20,0,
        36,14,0,106,6,101,109,97,105,108,0,78,5,0,
        36,15,0,106,7,110,111,109,98,114,101,0,78,5,
        0,36,16,0,106,2,99,0,78,6,0,36,17,0,
        92,20,78,7,0,36,18,0,176,8,0,20,0,36,
        19,0,7
    };

    hb_vmExecute( pcode, symbols );
}

Este p‑code explica por qué existió una herramienta de decompilación para Clipper (Rescue5) que podía recuperar nombres de variables: el código se precompila a una máquina virtual propia.

Back to Blog

Related posts

Read more »

Super Mario 64 for the PS1

Article URL: https://github.com/malucard/sm64-psx Comments URL: https://news.ycombinator.com/item?id=46221925 Points: 45 Comments: 8...

8086 Microcode Browser

Article URL: https://nand2mario.github.io/posts/2025/8086_microcode_browser/ Comments URL: https://news.ycombinator.com/item?id=46140244 Points: 13 Comments: 0...