dBASE会回来吗?

发布: (2025年12月17日 GMT+8 20:36)
3 min read
原文: Dev.to

Source: Dev.to

dBASE III+ for MS-DOS

dBASE III+ 及其使用方式

dBASE III+ 之所以取得巨大的商业成功,是因为它能够以非常简单且命令式的方式(不像 SQL 那样假设全部由系统完成)来操作数据库。你可以使用菜单,也可以直接输入命令进行查询、修改结构、添加、修改或删除记录。

Hello, world

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

Clipper

不久之后出现了 Clipper,这是一种编译器,能够在客户机未安装 dBASE 的情况下分发可执行文件。

创建联系人数据库

* 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

create 语句会创建一个 contactos.dbf 文件。use 打开它,在定义完字段后,close 将其关闭。

插入联系人

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

请求新联系人的数据

* 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

在 Clipper 中,@ 用来移动光标,say 用来输出文字,get 用来获取用户输入。变量没有固定类型,会根据所存储的值自动采用相应的类型(类似 Python)。

Harbour:现代替代方案

一家企业在 dBASE LLC 继续了 dBASE 的传承,但同时也有一个现代的开源替代方案:Harbour。我已经使用 Harbour 编译了上面的代码,Harbour 先生成 C 源代码,再进行编译。

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 );
}

这段 p‑code 解释了为什么曾经有针对 Clipper 的反编译工具(Rescue5)能够恢复变量名:代码会预编译成其自有的虚拟机指令集。

Back to Blog

相关文章

阅读更多 »

8086 微代码浏览器

请提供您希望翻译的文章摘录或摘要文本,我才能为您进行简体中文翻译。