본문 바로가기
  • AI (Artificial Intelligence)
Skills/Unix, Linux

NCURSES Programming HOWTO

by 로샤스 2014. 4. 16.

첫 번역이라 많이 미흡합니다 모자란 점이 있으면 지적해 주시기 바랍니다. --gsong


번역 gsong Mgsong_at_hanmail.net

작성 Pradeep Padala Mp_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 의 선행경험은 필요치 않다. 이 문서의 최신 버전은 [http]나의 웹 사이트 에서 찾을 수 있다. Mp_padala_at_yahoo.com 이 주소로 비평을 보내주길 바란다.

Contents

 [-]
1. NCURSES Programming HOWTO
1.1. Introduction
1.1.1. NCURSES 란 무엇인가?
1.1.2. NCURSES 로 무엇을 할 수 있는가?
1.1.3. 어디서 그것을 구하는가?
1.1.4. 문서의 목적 및 범위
1.1.5. 프로그램들에 대해
1.1.6. 문서의 다른 포맷들
1.1.6.1. tldp.org 에 있는 포맷들
1.1.6.2. 소스로 부터 빌드하기
1.1.7. 크레디트
1.1.8. Wish List
1.1.9. Copyright
1.2. Hello World 프로그램
1.2.1. Ncurses 라이브러리와 같이 컴파일 하기
1.2.2. 분석
1.2.2.1. initscr() 에 대해
1.2.2.2. 신기한 refresh()
1.2.2.3. endwin() 에 대해
1.3. The Gory Details
1.4. 초기화
1.4.1. raw() 등의 초기화 함수에 대해서
1.4.2. raw() 와 cbreak()
1.4.3. echo()와 noecho()
1.4.4. keypad()
1.4.5. halfdelay()
1.4.6. 그외 잡다한 초기화 함수들
1.4.7. 예제
1.5. 윈도우에 관해
1.6. printw() 같은 출력 함수에 대해
1.6.1. addch() 류의 함수들
1.6.2. mvaddch(), waddch()와 mvwaddch()
1.6.3. printw() 류의 함수들
1.6.3.1. printw() 와 mvprintw
1.6.3.2. wprintw() 와 mvwprintw
1.6.3.3. vwprintw()
1.6.3.4. 간단한 printw 예제
1.6.4. addstr() 류의 함수들
1.7. scanw() 같은 입력함수에 대해
1.7.1. getch() 류의 함수들
1.7.2. scanw() 류의 함수들
1.7.2.1. scanw()와 mvscanw
1.7.2.2. wscanw() 와 mvwscanw()
1.7.3. getstr() 류의 함수들
1.7.4. 몇몇 예제
1.8. 속성
1.8.1. 세부 사항
1.8.2. attron() 대 attrset()
1.8.3. attr_get()
1.8.4. attr_ 함수들
1.8.5. wattr 함수들
1.8.6. chgat() 함수들
1.9. 윈도우 함수의 모든 것
1.9.1. 개괄
1.9.2. 윈도우가 있으라 !!!
1.9.3. 설명
1.9.4. 예제의 다른 부분
1.9.5. 다른 테두리 함수들
1.10. 색상에 대해서
1.10.1. 개괄
1.10.2. 색상 정의 바꾸기
1.10.3. 색상 값
1.11. 키 입력 다루기. 펑션키, 방향키 등을 어떻게 입력받는가.
1.11.1. 개괄
1.11.2. 간단한 키 사용 예제
1.12. 마우스 처리하기
1.12.1. 개괄
1.12.2. 이벤트 받아오기
1.12.3. 전부 실습해보자
1.12.4. 그외 잡다한 함수들
1.13. 화면 제어
1.13.1. getyx() 함수들
1.13.2. 화면 덤프
1.13.3. 윈도우 덤프
1.14. 그외 기능들
1.14.1. curs_set()
1.14.2. 일시적으로 curses 모드 나가기
1.14.3. ACS_ 변수들
1.15. 그외 라이브러리들
1.16. 패널 라이브러리
1.16.1. 개괄
1.16.2. 패널 라이브러리와 컴파일 하기
1.16.3. 패널 윈도우 탐색
1.16.4. 사용자 포인터 쓰기
1.16.5. 패널 이동 및 크기 변경
1.16.6. 패널 숨기기 및 보여주기
1.16.7. panel_above() 와 panel_below() 함수들
1.17. 메뉴 라이브러리
1.17.1. 개괄
1.17.2. 메뉴 라이브러리와 컴파일 하기
1.17.3. Menu Driver: 메뉴 시스템의 큰 일꾼
1.17.4. 메뉴 윈도우
1.17.5. 메뉴 스크롤 하기
1.17.6. 여러 열을 가진 메뉴
1.17.7. 여러 값을 가진 메뉴
1.17.8. 메뉴 옵션들
1.17.9. 유용한 사용자 포인터
1.18. 폼 라이브러리
1.18.1. 개괄
1.18.2. 폼 라이브러리와 컴파일 하기
1.18.3. 필드 가지고 놀기
1.18.3.1. 필드의 위치와 크기 가져오기
1.18.3.2. 필드 이동하기
1.18.3.3. 필드 정렬
1.18.3.4. 필드 표현 속성
1.18.3.5. 필드 옵션 비트
1.18.3.6. 필드 상태
1.18.3.7. 필드 사용자 포인터
1.18.3.8. 크기가 변하는 필드
1.18.4. 폼 윈도우
1.18.5. 필드 인증
1.18.6. 폼 드라이버: 폼 시스템의 큰 일꾼
1.18.6.1. 페이지 탐색 리퀘스트
1.18.6.2. 필드간 탐색 리퀘스트
1.18.6.3. 필드 내 탐색 리퀘스트
1.18.6.4. 스크롤 리퀘스트
1.18.6.5. 에디트 리퀘스트
1.18.6.6. Order Requests
1.18.6.7. 어플리케이션 명령들
1.19. 툴과 위젯 라이브러리들
1.19.1. CDK (Curses Development Kit)
1.19.1.1. 위젯 리스트
1.19.1.2. 몇몇 매력적인 기능들
1.19.1.3. 결론
1.19.2. 다이얼로그
1.19.3. Perl Curses Modules CURSES::FORM and CURSES::WIDGETS
1.20. Just For Fun !!!
1.20.1. The Game of Life
1.20.2. Magic Square
1.20.3. Towers of Hanoi
1.20.4. Queens Puzzle
1.20.5. Shuffle
1.20.6. Typing Tutor

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 <Mzmbenhal_at_netcom.com> 이다. Eric S. Raymond <Mesr_at_snark.thyrsus.com> 는 1.8.1 버전에서 많은 새로운 기능을 추가하였다. Jürgen Pfeifer 는 menu 와 form 에 관련된 모든 코드는 물론 [http]Ada95 에 대한 바인딩을 추가하였다. 현재 Thomas Dickey <Mdickey_at_herndon4.his.com> 와 Jürgen Pfeifer <Mjuergen.pfeifer_at_gmx.net> 에 의해 개발이 진행되고 있다. Florian La Roche <Mflorian_at_gnu.org> 는 ncurses 의 copyright 를 가진 Free Software Foundation 의 관리자로 활동하고 있다. 현재 관리자에게 메일을 보내기 위해서는 Mbug-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://ftp.gnu.org/pub/gnu/ncurses/ncurses.tar.gz  [http]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 을 이용한 설치

ncurses RPM 은 [http]http://rpmfind.net 에서 찾아서 다운로드하면 된다. RPM 은 루트 권한으로 다음의 명령을 실행하면 설치가 된다.

    rpm -i <downloaded rpm>                                                  

1.1.4. 문서의 목적 및 범위 


이 문서는 ncurses 와 그것의 자매 라이브러리로 프로그래밍 하는 데 있어 통합 가이드가 되는 것을 목표로 하고 있다. 단순한 "Hello World" 프로그램부터 더 복잡한 기능의 프로그램까지 다룰 것이다. ncurses 의 선행경험을 필요로 하지는 않는다.

 

 

 

 

 

 

 

 

 

출처 : https://wiki.kldp.org/wiki.php/NCURSES-Programming-HOWTO

코멘트 : 해당 페이지로 이동하면 더 상세히 볼 수 있습니다.
            정말 섬세한 번역에 꼼꼼한 구성까지.. 책으로 써도 될만큼 괜찮습니다.
            커시스? 라이브러리로 멋진 UI를 만들어 보면 어떨까요?

 

 

 

 

 


 

 

댓글