dBASE가 돌아오나요?

발행: (2025년 12월 17일 오후 09:36 GMT+9)
4 min read
원문: Dev.to

Source: Dev.to

MS-DOS용 dBASE III+

dBASE III+와 사용 방법

dBASE III+는 데이터베이스를 매우 간단하고 명령형으로 다룰 수 있게 해 주었기 때문에 큰 상업적 성공을 거두었습니다 (SQL처럼 모든 것을 자동으로 처리해 주는 것이 아니라). 메뉴를 사용하거나 명령을 통해 조회, 구조 수정, 레코드 추가·수정·삭제를 할 수 있었습니다.

안녕, 세상

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

관련 글

더 보기 »

PS1용 Super Mario 64

번역할 텍스트를 제공해 주시겠어요? 텍스트를 알려주시면 한국어로 번역해 드리겠습니다.