Terminfo

frameless|right
**Terminfo**는 프로그램이 단말기를 장치 독립적인 방식으로 사용할 수 있도록 하는 라이브러리이자 데이터베이스이다. 메리 앤 호턴은 termcap에 대한 개선책으로 1981-1982년에 최초의 terminfo 라이브러리를 구현했다. 개선 사항은 다음과 같다.
* 저장된 단말기 설명에 더 빠르게 접근
* 터미널 기능에 대한 더 길고 이해하기 쉬운 이름
* 단말기로 전송되는 문자열에 대한 일반 표현식 평가

terminfo는 유닉스 시스템 V 릴리스 2에 포함되었고, 곧 System V에서 (BSD가 계속 사용했던) termcap 대신 선호되는 단말기 설명 형식이 되었다. 이는 파벨 커티스에 의해 1982-1984년에 pcurses에서 모방되었으며, 메리 호턴의 수정 사항을 적용하거나 통합하여 다른 유닉스 구현에서도 사용할 수 있었다. 더 자세한 정보는 1986년 12월 `comp.sources.unix` 뉴스그룹 게시물을 참조하라.

terminfo 데이터베이스는 수백 가지의 다른 단말기 디스플레이 기능을 설명할 수 있다. 이를 통해 외부 프로그램은 단말기 유형에 독립적으로 문자 기반 디스플레이 출력을 가질 수 있다.

일부 구성은 다음과 같다.
* 화면의 줄 수
* 모노 모드; 색상 억제
* 경고음 대신 가시 벨 사용

## 데이터 모델
terminfo 데이터베이스는 하나 이상의 단말기 설명으로 구성된다.

### 색인
각 설명은 단말기의 표준 이름을 포함해야 한다. 또한 단말기 이름에 대한 하나 이상의 별칭을 포함할 수 있다. 표준 이름 또는 별칭은 라이브러리가 terminfo 데이터베이스를 검색하는 키이다.

### 데이터 값
설명에는 관례적인 이름을 가진 하나 이상의 기능이 포함된다.
기능은 불리언, 숫자, 문자열 유형을 가진다.
terminfo 라이브러리는 각 기능 이름에 대해 미리 정의된 유형을 가지고 있다.
다음 구문을 통해 각 기능의 유형을 확인한다.
* 문자열 기능은 기능 이름과 그 값 사이에 "="가 있다.
* 숫자 기능은 기능 이름과 그 값 사이에 "#"가 있다.
* 불리언 기능은 관련 값이 없다 (지정된 경우 항상 참이다).

terminfo를 사용하는 애플리케이션은 각 기능에 대한 유형을 알고 있으며, 미리 정의된 유형 기능 중 하나에 기능 이름이 해당할 때만 성공적으로 반환하는 라이브러리 호출을 사용하여 terminfo 데이터베이스에서 기능 값을 얻는다.

termcap과 마찬가지로 일부 문자열 기능은 키보드의 특수 키를 눌러 호스트로 보낼 수 있는 이스케이프 시퀀스를 나타낸다. 다른 기능은 애플리케이션이 단말기로 보낼 수 있는 문자열을 나타낸다. 후자의 경우, terminfo 라이브러리 함수는 (termcap 라이브러리와 마찬가지로) 애플리케이션 매개변수를 전송되는 문자열에 대체하는 기능을 수행한다. 이러한 함수는 스택 기반 표현식 파서를 제공하는데, 이는 주로 SGR (Select Graphic Rendition)과 같이 선택적 매개변수를 가지는 제어 시퀀스에 대해 전송되는 문자 수를 최소화하는 데 도움을 주기 위해 사용된다. 대조적으로, termcap 라이브러리는 대부분의 단말기에 유용한 제한된 수의 연산만 제공한다.

### 계층
terminfo 설명은 하나의 설명의 내용을 다른 설명에 포함시키거나, 포함된 설명의 기능을 억제하거나, 기능을 재정의하거나 추가함으로써 구성될 수 있다. 어떤 저장 모델이 사용되든, terminfo 라이브러리는 독립 실행형 도구(예: **tic**)를 사용하여 컴파일된 데이터를 이용하여 요청된 설명에서 단말기 설명을 반환한다.

## 저장 모델
terminfo 데이터는 이진 파일로 저장되어 termcap보다 수정하기가 덜 간단하다. 데이터는 저장된 파일에서 terminfo 라이브러리에 의해 검색될 수 있다. 데이터 자체는 불리언, 숫자, 문자열 기능에 대한 테이블로 각각 구성된다. 이는 메리 호턴이 고안한 방식이며, 사용 가능한 이름에 대한 일부 차이점을 제외하고 대부분의 terminfo 구현에서 사용된다. X/Open은 컴파일된 단말기 설명의 형식을 지정하지 않는다. 사실, 흔히 사용되는 **tic** 또는 **infocmp** 유틸리티조차 언급하지 않는다. 컴파일된 terminfo 항목은 각 기능이 할당된 테이블 내 색인을 식별하는 메타데이터를 포함하지 않으므로, 구현 간에 반드시 호환되지는 않는다. 그러나 대부분의 구현이 동일한 전체 테이블 구조(including 헤더 및 데이터 항목의 크기 포함)를 사용하기 때문에, 특정 구현에 대한 데이터를 읽을 수 있는 사용자 지정 terminfo 라이브러리를 자동으로 구성할 수 있다. 예를 들어, Ncurses는 여러 다른 구현을 위한 terminfo 데이터와 일치하도록 빌드될 수 있다.

### 디렉터리 트리
terminfo 라이브러리의 원본(가장 일반적인) 구현은 디렉터리 계층에서 데이터를 검색한다. 단말기 설명 이름의 첫 글자를 경로 이름의 한 구성 요소로 사용하고, 단말기 설명 이름을 검색할 파일의 이름으로 사용하여 terminfo 라이브러리는 일반적으로 큰 termcap 파일을 검색하는 것보다 성능이 뛰어나다.

### 해시된 데이터베이스
terminfo의 일부 구현은 단말기 설명을 해시된 데이터베이스(예: 버클리 DB 버전 1.85와 같은 것)에 저장한다. 이들은 두 가지 유형의 레코드를 저장한다. 표준 항목을 가리키는 별칭과 단말기 기능에 대한 데이터를 포함하는 표준 항목 자체이다.

## 제한 및 확장
오픈 그룹은 terminfo의 제한(최소 보장 값)을 문서화하는데, 이는 소스 파일에만 적용된다.
이 중 특히 중요한 두 가지는 다음과 같다.
* 단말기 별칭의 최대 14자
* 숫자 값의 최대 32,767

14자 제한은 파일 이름이 그 이상 길 수 없었던 매우 오래된 파일 시스템을 대상으로 한다. 그러한 파일 시스템은 일반적으로 구식이 되었지만, 이 제한은 1980년대 후반부터 문서화되어 있었고 그 이후로 검토되지 않았다.

32,767 제한은 부호 있는 2의 보수 16비트 값의 양수 값에 대한 것이다. terminfo 항목은 취소되거나 없는 값을 나타내기 위해 음수를 사용할 수 있다.

termcap과 달리 terminfo는 소스 및 컴파일된 표현을 모두 가진다. 컴파일된 표현에 대한 제한은 지정되지 않았다. 그러나 대부분의 구현은 **tic**(터미널 정보 컴파일러)에 대한 문서에서 컴파일된 항목이 4,096바이트를 초과할 수 없음을 명시한다.

## 같이 보기
* Curses
* tput

## 각주

## 외부 링크
* 현재 terminfo 데이터
* 에릭 레이먼드 웹사이트의 Termcap/Terminfo 자료 페이지
* man terminfo(5)

분류:데이터베이스 관리 시스템
분류:유닉스 소프트웨어
분류:텍스트 모드