TERM(5)

명칭
term - 컴파일 끝난 term 파일의 형식

서식
term

해설

컴파일 끝난 terminfo 속성 기술은 디렉토리 /usr/share/misc/terminfo 아래에 있습니다. UNIX 시스템의 거대한 디렉토리를 선형 탐색하는 것을 피하기 (위해)때문에, /c/name 라고 하는 형태의 2 계층의 명명 규칙이 이용됩니다. (여기서, name (은)는 단말의 이름으로, c 하 name 의 최초의 캐릭터입니다. ) 그러니까, act4 (은)는, /usr/share/misc/terminfo/a/act4 라고 하는 파일명으로 찾아낼 수가 있습니다. 같은 단말을 나타내는 동의인 이름은, 같은 컴파일이 끝난 파일에의 복수의 링크로서 실장되고 있습니다.

이 형식은, 모든 하드웨어로 같게 되도록(듯이) 선택되고 있습니다. 1 바이트가 8 비트 이상인 것은 가정하고 있습니다만, 바이트 오더나 부호 확장의 방식에 대해서는 가정하고 있지 않습니다.

컴파일 끝난 파일은 tic 프로그램에 의해 생성되어 setupterm routine에 의해 읽어내집니다. 이 파일은 6 개의 부분에 분할됩니다. 즉, 헤더, 단말의 명칭, 불리언 값의 플래그, 수치, 캐릭터 라인, 및 캐릭터 라인 테이블입니다.

헤더 섹션은 파일의 모두에 있습니다. 이 섹션은, 이하에 나타내는 형식의 short 형의 정수 6 개로부터 됩니다. 이러한 정수는 (1) magic number (8 진으로 0432), (2) 명칭 섹션의 바이트 단위에서의 크기, (3) 불리언 값의 섹션에 포함되는 바이트의 개수, (4) 수치 섹션에 포함되는 short 형 정수의 개수, (5) 캐릭터 라인 섹션에 포함되는 오프셋(offset)의 개수 (short 형 정수), (6) 캐릭터 라인 테이블의 바이트 단위에서의 크기 입니다.

short 형의 정수는 2 개의 8 비트 바이트에 격납되고 있습니다. 최초의 바이트는 값의 최하정도 8 비트를, 2 번째의 아르바이트는 최상정도 8 비트를 포함합니다. (즉, 값은 256*second+first 로 표현됩니다. ) 값 -1 은 2 바이트 0377, 0377 으로 표현됩니다만, 그 외의 부의 값은 구문 위반입니다. 일반적으로, 이 값은, 어느 케이파비리티가 그 단말에 갖춰지지 않은 것을 가리킵니다. 이 형식은 VAX 와 PDP-11 의 하드웨어에 일치하는 것인 것에 주의해 주세요 (이것들은 little endian 머신입니다). 이것에 일치하지 않는 하드웨어의 머신에서는, 정수를 2 개의 바이트로서 읽어들여, little endian치를 산출할 필요가 있습니다.

다음에 나타나는 것은 단말명 섹션입니다. 이것은, 단말의 다양한 이름을 `|'캐릭터로 단락지어 열거한, terminfo 기술의 최초의 행을 포함합니다. 이 섹션은 1 개의 ASCII NUL 캐릭터로 종단 됩니다.

불형의 플래그는, 플래그 1 개에 대해 1 바이트를 차지합니다. 이 바이트는, 플래그가 존재할까 하지 않는 것처럼 따라서, 0 이나 1 이 될 필요가 있습니다. 케이파비리티는 파일 <term.h> 에 포함되는 것과 같은 차례로 줄섭니다.

수치 섹션이 짝수 바이트눈으로부터 개시되도록(듯이), 불리언 값의 섹션과 수치 섹션의 사이에는, 필요하면 1 개의 널 바이트를 삽입합니다 (이것은 PDP-11 의 워드 어드레스 아키텍쳐의 자취이며, 원래는 홀수 바이트 경계상의 워드를 주소 하는 것으로 발생하는 IOT 트랩을 피하기 위해서(때문에) 디자인되었습니다). 모든 short 형 정수는 short 형의 워드 경계에 가지런히 해 배치됩니다.

수치 섹션은 플래그 섹션과 같습니다. 각 케이파비리티는 2 바이트를 차지해 little endian의 short 형 정수로서 격납됩니다. 만약 표현된 값이 -1 라면, 그 케이파비리티는 존재하지 않는 것과 해석됩니다.

캐릭터 라인 섹션도 또 같습니다. 각 케이파비리티는 상기의 형식에 따라, 2 바이트의 short 형 정수로서 격납됩니다. 값 -1 은, 케이파비리티가 존재하지 않는 것을 의미합니다. 그 이외의 경우, 값은, 캐릭터 라인 테이블의 선두로부터의 오프셋(offset)로서 해석됩니다. ^X 나 \c 라고 하는 기법으로 나타난 특수 캐릭터는, 그 기법을 해석한 결과의 형태로 격납되어 인쇄 가능 표현에서는 격납되지 않습니다. 패드 정보 $<nn> 와 파라미터 정보 %x 는 해석을 행하지 않고 그대로의 형태로 격납됩니다.

마지막 섹션은 캐릭터 라인 테이블입니다. 이것은 캐릭터 라인 섹션으로 참조되고 있다 모든 캐릭터 라인 케이파비리티의 값을 포함합니다. 각 캐릭터 라인은 널로 종단 되고 있습니다.

setupterm routine에서는, 파일에 실제로 존재하는 케이파비리티 (와)과는 다른 것이 예상될 수 있는 것에 주의해 주세요. setupterm 하지만 재컴파일 된 후에 데이타베이스가 갱신된다 (파일에 몇개의 미지의 엔트리가 포함되는 결과가 됩니다)인가, 데이타베이스가 마지막에 컴파일 된 후에 프로그램이 재컴파일 된다 (존재하지 않는 엔트리를 낳는 결과가 됩니다) 양쪽 모두의 가능성이 있습니다. routine setupterm (은)는 양쪽 모두의 가능성에 대비할 필요가 있습니다 - 이것이, 데이터내에 개수와 크기가 포함되어 있는 이유입니다. 또, 새로운 케이파비리티는 항상, 불리언 값, 수치, 캐릭터 라인의 케이파비리티리스트의 각각의 마지막에 추가하지 않으면 안됩니다.

수치에 little endian를 사용해 그 밖에 스스로 기술한 서식을 사용해도, 상용 UNIX 버젼과의 바이너리 terminfo 엔트리의 호환성을 신용하는 것은 영리하지는 않습니다. 문제는, 적어도 3 종의 terminfo (HP-UX AIX, OSF/1)가 SVr1 후에 System V 무늬 분기 해, System V 와 XSI 의 Curses 확장과 (바이너리 서식에 대해) 충돌한다 확장 케이파비리티를 캐릭터 라인 테이블에 추가한 것입니다. terminfo 소스의 호환성에 관한 상세한 논의는, terminfo(5)을 참조해 주세요.

예로서 Lear-Siegler ADM-3 의 기술의 16 진수 덤프를 나타냅니다. 이것은, 파퓰러입니다만, 바보같은 초기의 단말입니다:

adm3a|lsi adm3a,
        am,
        cols#80, lines#24,
        bel=^G, clear= 32$<1>, cr=^M, cub1=^H, cud1=^J,
        cuf1=^L, cup=\=%p1%{32}%+%c%p2%{32}%+%c, cuu1=^K,
        home=^^, ind=^J,

000  1a 01 10 00 02 00 03 00  82 00 31 00 61 64 6d 33  ........ ..1.adm3
0010  61 7c 6c 73 69 20 61 64  6d 33 61 00 00 01 50 00  a|lsi ad m3a...P.
0020  ff ff 18 00 ff ff 00 00  02 00 ff ff ff ff 04 00  ........ ........
0030  ff ff ff ff ff ff ff ff  0a 00 25 00 27 00 ff ff  ........ ..%. '...
0040  29 00 ff ff ff ff 2b 00  ff ff 2d 00 ff ff ff ff  ).....+.  ..-.....
0050  ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff  ........ ........
0060  ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff  ........ ........
0070  ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff  ........ ........
0080  ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff  ........ ........
0090  ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff  ........ ........
00a0  ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff  ........ ........
00b0  ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff  ........ ........
00c0  ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff  ........ ........
00d0  ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff  ........ ........
00e0  ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff  ........ ........
00f0  ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff  ........ ........
0100  ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff  ........ ........
0110  ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff  ........ ........
0120  ff ff ff ff ff ff 2f 00  07 00 0d 00 1a 24 3c 31  ....../.  .....$<1
0130  3e 00 1b 3d 25 70 31 25  7b 33 32 7d 25 2b 25 63  >..=%p1% {32}%+%c
0140  25 70 32 25 7b 33 32 7d  25 2b 25 63 00 0a 00 1e  %p2%{32} %+%c....
0150  00 08 00 0c 00 0b 00 0a  00                       ........ .

몇개의 제한: 컴파일 끝난 엔트리는 4096 바이트를 넘는 것이 할 수 없습니다. 이름 필드는 128 바이트를 넘을 수가 없습니다.

관련 파일
/usr/share/misc/terminfo/*/*    컴파일 끝난 단말 케이파비리티데이타베이스

관련 항목
curses(3X), terminfo(5).