다음 이전 차례

6. 콘솔 문자 세트

커널은 우선 사용자가 입력한 바이트가 어떤 모양의 심볼인지 알아보고, 현재 폰트에서 어디에 위치해 있는지 확인한다.

커널은 콘솔-스크린 심볼로 들어오는 바이트를 해석하는 5가지 방법을 알고있다. 유니코드 (UTF-8) 모드에서 UTF-8 모드는 직접 유니코드로 변환된다. 변환시에는 필요한 모든 심볼이 유니코드에 있다고 가정한다. 이 가정이 만족되지 않는 경우에는 코드 0xff**가 직접 폰트에 접근할 수 있도록 보존된다. 유니코드 모드가 아닌 경우에는 4가지 변환 테이블중 하나를 사용한다. 4가지 테이블은 a) Latin1 -> Unicode, b) VT100 그림문자 -> Unicode, c) PC -> Unicode, d) 사용자 정의 문자.

문자 세트에는 G0와 G1이 있고 이 중 하나가 현재 문자 세트로 사용된다. (초기값은 G0) ^N이라고 쳐 넣으면 G1이 현재 문자 세트가 되고 ^O라고 하면 G0가 현재 문자 세트로 된다.

이 변수 G0와 G1은 변환 테이블을 가리키며, 이것들은 사용자가 바꿀 수 있다. 초기값은 각각 테이블 a)와 b)를 가리키게 되어 있다. 시퀀스 ESC ( B, ESC ( U, ESC ( K라고 하면 각각 G1이 변환 테이블 a), b), c), d)를 가리키게 된다.

시퀀스 ESC c는 터미널을 재설정하는데, 이 기능은 스크린이 먹통이 되었을 때 유용하다. 종종 추천되는 방식인 echo ^V^O는 단지 G0를 현재 문자 세트로 설정할 뿐이므로 G0가 테이블 a)를 가리키게 된다는 보장이 없다. 배포본 중에는 echo ^[c를 수행해주는 reset(1)이라는 프로그램이 있는 경우도 있다. 콘솔에 사용되는 termcap 항목이 올바르다면 (그리고 :rs=\Ec: 항목이 있다면), setterm -reset이라고 해도 같은 효과를 얻을 수 있다.

mapscrn(8)을 사용하면 사용자 정의 맵 테이블을 설정할 수 있다. 매핑을 하게 되면, 예를 들어 심볼 c를 화면에 찍으려면 심볼 s = map[c]를 비디오 메모리로 보내게 된다. s에 대응되는 비트맵이 문자 ROM에 있으며, setfont(8)을 사용하면 바꿀 수 있다.


다음 이전 차례