첫 번역이라 많이 미흡합니다 모자란 점이 있으면 지적해 주시기 바랍니다. --gsong
작성 Pradeep Padala p_padala_at_yahoo.com
v1.9, 2005-06-20 Revision History Revision 1.9 2005-06-20 Revised by: ppadala ncurses는 MIT 라이센스로 변경되었습니다. 프로그램은 이에 따라 재 허가 됩니다. Revision 1.8 2005-06-17 Revised by: ppadala Lots of updates. Added references and perl examples. Changes to examples. Many grammatical and stylistic changes to the content. Changes to NCURSES history. Revision 1.7.1 2002-06-25 Revised by: ppadala Added a README file for building and instructions for building from source. Revision 1.7 2002-06-25 Revised by: ppadala Added "Other formats" section and made a lot of fancy changes to the programs. Inlining of programs is gone. Revision 1.6.1 2002-02-24 Revised by: ppadala Removed the old Changelog section, cleaned the makefiles Revision 1.6 2002-02-16 Revised by: ppadala Corrected a lot of spelling mistakes, added ACS variables section Revision 1.5 2002-01-05 Revised by: ppadala Changed structure to present proper TOC Revision 1.3.1 2001-07-26 Revised by: ppadala Corrected maintainers paragraph, Corrected stable release number Revision 1.3 2001-07-24 Revised by: ppadala Added copyright notices to main document (LDP license) and programs (GPL), Corrected printw_example. Revision 1.2 2001-06-05 Revised by: ppadala Incorporated ravi's changes. Mainly to introduction, menu, form, justforfun sections Revision 1.1 2001-05-22 Revised by: ppadala Added "a word about window" section, Added scanw_example.
이 문서는 ncurses 와 그 자매 라이브러리로 프로그래밍을 하는 데 있어 "All in One" 가이드를 지향하고 있다. 간단한 "Hello World" 프로그램 부터 보다 더 복잡한 폼 처리 까지 다룬다. ncurses 의 선행경험은 필요치 않다. 이 문서의 최신 버전은 나의 웹 사이트 에서 찾을 수 있다. p_padala_at_yahoo.com 이 주소로 비평을 보내주길 바란다.
-
- 1. NCURSES Programming HOWTO
-
- 1.1. Introduction
- 1.2. Hello World 프로그램
- 1.3. The Gory Details
- 1.4. 초기화
- 1.5. 윈도우에 관해
- 1.6. printw() 같은 출력 함수에 대해
- 1.7. scanw() 같은 입력함수에 대해
- 1.8. 속성
- 1.9. 윈도우 함수의 모든 것
- 1.10. 색상에 대해서
- 1.11. 키 입력 다루기. 펑션키, 방향키 등을 어떻게 입력받는가.
- 1.12. 마우스 처리하기
- 1.13. 화면 제어
- 1.14. 그외 기능들
- 1.15. 그외 라이브러리들
- 1.16. 패널 라이브러리
- 1.17. 메뉴 라이브러리
- 1.18. 폼 라이브러리
- 1.19. 툴과 위젯 라이브러리들
- 1.20. Just For Fun !!!
1.1. Introduction
예전 원거리 터미널은 컴퓨터로부터 떨어진 채 시리얼 케이블을 통해 연결되어 있었다. 그 터미널들에 어떤 특정한 바이트들을 보냄으로써 터미널을 설정할 수 있었다. 터미널의 이 모든 기능들 (커서를 새 위치로 옮기거나, 화면의 일부를 지우거나, 화면을 스크롤 하거나, 모드를 바꾸거나, 화면의 형태, 색, 밝기, 깜빡임, 밑줄, reverse video 등을 설정하는 등) 은 흔히 escape sequences 라 불리는 바이트들에 의해서 이뤄졌다. 이 바이트들은 escape(0x1B) 문자로 시작하기 때문에 escape sequences 라 불린다. 심지어 오늘날에도 적절한 에뮬레이션 기능이 있으면, 우리는 escape sequences 를 에뮬레이터에 보내어 터미널 창에서 똑같은 효과를 볼 수 있다. 즉 만약 당신이 컬러로 한 줄을 찍고 싶다면, 다음을 당신의 콘솔에서 실행해보아라.
echo "^[[0;31;40mIn Color"
^ 와 [ 의 두개의 문자처럼 보이는 첫번째 캐릭터는 이스케이프 캐릭터 이다. 저것을 찍어볼려면 CTRL+V키를 누르고나서 ESC 키를 누르면 된다. 다른 모든 문자들은 일반적으로 입력하는 것과 같다. 그리고 당신은 문자들인 붉은색으로 찍히는 걸 보게 될 것 이다. 따로 변경을 하지 않으면 계속 그 상태이고, 원래대로 돌아갈려면 다음을 입력하라.
echo "^[[0;37;40m"
자, 저 마술같은 캐릭터들이 뭘 의미할까? 이해하기 어려운가? 게다가 저 문자들은 터미널들이 다르다면 또 달라질 수도 있다. 그래서 UNIX 의 디자이너들은 termcap 이라 불리는 매커니즘을 발명했다. 그것은 각각의 터미널들의 기능과 거기에 따른 특정한 효과를 내기위한 escape sequence 들을 나열해 놓은 파일이다. 후에 이것은 terminfo 에 의해 대체되었다. 이 매커니즘의 개념을 간략히 얘기하자면, 어플리케이션 프로그램에서 terminfo 데이터베이스에 쿼리를 하여 터미널이나 터미널 에뮬레이터에 보낼 control 문자들을 얻어오게 하는 것이다.
1.1.1. NCURSES 란 무엇인가?
아마 당신은 이 모든 기술적인 횡수들이 뭘 얘기하고자 하는 것인지 궁금할 것이다. 앞서에서 모든 어플리케이션 프로그램은 terminfo 를 쿼리하고 필요한 일들을 수행한다고 얘기했었다(control 문자들을 보내는 일 등등.). 이 복잡한 것을 다루는 것은 금방 어려워지며 이로 인해 'CURSES' 가 탄생하게 된다. Curses 는 "cursor optimization"을 재밌게 발음한 것이다. Curses 라이브러리는 raw 터미널코드 위에 wrapper 를 형성하고 있으며, 상당히 유연하고 효율적인 API(Application Programing Interface) 를 제공한다. 그것은 커서를 움직이거나, 윈도우를 생성하고, 색깔을 만들고, 마우스를 가지고 노는것 등의 함수를 제공한다. 어플리케이션 프로그램은 그 근간을 이루는 터미널의 기능에 대해서는 걱정할 필요가 없다.
자 그럼 NCURSES 는 무엇인가? NCURSES 는 원래의 System V Release 4.0(SVr4) curses 의 클론이다. 그것은 자유롭게 배포될수 있는 라이브러리이며, curses 의 구버전과 완벽히 호환된다. 쉽게말해 어플리케이션의 문자표현 -cell terminals 을 다루는 함수들의 라이브러리이다. 이제 이후로는 curses 와 ncurses 는 같은 뜻으로 쓰일 것이다.
ncurses 패키지는 원래 Pavel Curtis 에 의해 개발되었다. 이 패키지의 원 관리자는 Zeyd Ben-Halim <zmbenhal_at_netcom.com> 이다. Eric S. Raymond <esr_at_snark.thyrsus.com> 는 1.8.1 버전에서 많은 새로운 기능을 추가하였다. Jürgen Pfeifer 는 menu 와 form 에 관련된 모든 코드는 물론 Ada95 에 대한 바인딩을 추가하였다. 현재 Thomas Dickey <dickey_at_herndon4.his.com> 와 Jürgen Pfeifer <juergen.pfeifer_at_gmx.net> 에 의해 개발이 진행되고 있다. Florian La Roche <florian_at_gnu.org> 는 ncurses 의 copyright 를 가진 Free Software Foundation 의 관리자로 활동하고 있다. 현재 관리자에게 메일을 보내기 위해서는 bug-ncurses_at_gnu.org로 연락하기 바란다.
1.1.2. NCURSES 로 무엇을 할 수 있는가?
Ncurses 는 터미널 기능의 wrapper 를 만들어줄 뿐만 아니라 텍스트모드에서 멋진 UI (User Interface)를 만들수 있는 튼튼한 프레임웍도 제공한다. 그것은 윈도우등을 만들 수 있는 함수를 제공한다. 그것의 자매 라이브러리인 패널, 메뉴, 폼등은 기본적인 curses 라이브러리에 확장성을 제공한다. 이 라이브러리들은 보통 curses 와 같이 설치된다. 누구나 다중 윈도우와 메뉴, 패털 그리고 폼을 포함하고 있는 어플리케이션을 작성할 수 있다. 윈도우들은 각각 독립적으로 다뤄지며, 'scrollability' 기능도 있고, 심지어 hidden 될 수도 있다.
메뉴들은 사용자에게 쉬운 명령선택을 할 수 있게 해준다. 폼은 data entry 를 사용하는 것과 윈도우를 표현하는 것을 쉽게 해준다. 패널들은 겹쳐지거나 쌓인 윈도우들을 다룰 수 있게 ncurses 의 기능을 확장시켜 준다.
이것들은 우리가 ncurses 로 할 수 있는 기본적인 것들에 불과하다. 다음으로 넘어갈 수록 우리는 이 라이브러리들의 모든 기능들을 알게 될 것이다.
1.1.3. 어디서 그것을 구하는가?
자, ncurses로 어떤 일이 가능한지 알았으니, 써보고 싶어 근질근질하실 것 같다. ncurses 는 보통 설치할때 자동으로 깔린다. 만약 그것이 없거나, 당신만의 라이브러리로 컴파일하고 싶다면 아래를 계속 읽어보아라.
패키지 컴파일하기
ncurses 는 ftp://ftp.gnu.org/pub/gnu/ncurses/ncurses.tar.gz 나 http://www.gnu.org/order/ftp.html 에 나와있는 아무 ftp 사이트에서 얻을 수 있다. 최근 안정화 버전은 5.2 20001021 이다.
설치하는 방법을 자세히 알고자 한다면 README 와 INSTALL 파일을 읽어보아라. 보통 다음과 같은 작업들을 포함하고 있다.
tar zxvf ncurses<version>.tar.gz # unzip and untar the archive cd ncurses<version> # cd to the directory ./configure # configure the build according to your # environment make # make it su root # become root make install # install it
RPM 을 이용한 설치
rpm -i <downloaded rpm>
1.1.4. 문서의 목적 및 범위
이 문서는 ncurses 와 그것의 자매 라이브러리로 프로그래밍 하는 데 있어 통합 가이드가 되는 것을 목표로 하고 있다. 단순한 "Hello World" 프로그램부터 더 복잡한 기능의 프로그램까지 다룰 것이다. ncurses 의 선행경험을 필요로 하지는 않는다.
출처 : https://wiki.kldp.org/wiki.php/NCURSES-Programming-HOWTO
코멘트 : 해당 페이지로 이동하면 더 상세히 볼 수 있습니다.
정말 섬세한 번역에 꼼꼼한 구성까지.. 책으로 써도 될만큼 괜찮습니다.
커시스? 라이브러리로 멋진 UI를 만들어 보면 어떨까요?
'Skills > Unix, Linux' 카테고리의 다른 글
kernel system call - do_brk() (0) | 2014.04.16 |
---|---|
What makes an operating system “Unix-Like”? (0) | 2014.04.16 |
pscp로 파일 전송하기 (1) | 2014.04.15 |
context switching (1) | 2014.03.31 |
리눅스 커널의 이해(2): 리눅스 커널의 동작 (0) | 2014.03.31 |
댓글