dBASE가 돌아오나요?
Source: Dev.to
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)가 변수 이름을 복원할 수 있었던 이유를 설명합니다. 해당 코드는 자체 가상 머신용으로 미리 컴파일되기 때문입니다.
