NCURSE 로 만들어 보는 유저 인터페이스(UI) - 6회 사용자 입력 함수 - 2009/02/09 17:13

이번 시간은 사용자 키보드 입력 방법을 알아 볼 것 입니다.

리스팅1은 예로써 사용될 NCURSE 프로그램입니다.

 
리스팅 1


#include <string.h>
#include <ncurses.h>

//
// 버튼 키입력을 이용한 사용자 대화형 프로그램
//
int noWayOut(char* prompt);

 

int main(void)
{
        initscr();

// sector #01
        /* 펑션키의 사용을 위해 키패드 초기화 */
        keypad(stdscr, TRUE);

// sector #02
        /* set default init mode */
        noecho();
        cbreak();

        printw("Press any key to exit!    ");
        getch();

// sector #03
        while( !noWayOut("Confirm?[Y/N]") )
        {
                sleep(1);
        }

        sleep(1);
        endwin();
        return 0;
}

 

int noWayOut(char* prompt)
{
        int reply;

 

// sector #04
        // save current terminal state
        savetty();

        // set appropriate terminal mode
        noecho();
        raw();

// sector #05
        // clear message line
        move(LINES-1, 0);
        clrtoeol();

// sector #06
        // print prompt
        mvaddstr(LINES-1, 0, prompt);
        move(LINES-1, strlen(prompt)+1);
        refresh();

// sector #07
        // get response from user
        for(reply= -1; reply == -1;){
                switch(getch()){
                case 'y':
                case 'Y':
                        reply = 1;
                        break;
                case 'n':
                case 'N':
                        reply= 0;
                        break;
                case KEY_DOWN:
                        // down arrow key
                case KEY_UP:
                        // up arrow key
// sector #08
                default:
                        beep();
                        break;
                }
        }

// sector #09
        // display feedback string
        addstr(reply == 1? "[Yes]" : "[No]");
        refresh();

// sector #10
        // restore terminal state and return
        resetty();

        return(reply);
}

 

/* 06_getch.c */
 

 

 
본 칼럼에서 사용된 예제를 직접 동작 시켜보기 위하여는 '06_getch.c' 라는 새 파일을 만드신 후 리스트1의 소스를 카피 해 넣으시고 아래의 컴파일및 실행요령을 따라 하시면 되겠습니다.
 
컴파일및 실행요령

 

gcc -o getch 06_getch.c -lncurses

./getch [엔터]


 
 
소스해설
 
keypad()
방향 키(LEFT, RIGHT, UP, DOWN)나 F1, F2 등의 특수 키등을 프로그램에서 인식(사용)하도록 하려면 본 함수를 초기화시 한번 실행 시키면 됩니다.
 
cbreak(), noecho()
cbreak 함수는 raw() 와 상대적으로 사용되는 것으로서 일반문자 뿐만 아니라 'CTRL+C' 와 같은 제어문자 까지도 모두 응용 프로그램에서 가로채어 사용 할 수 있도록 하여 줍니다.
noecho() 는 사용자 키 입력의 반향(echo)을 제어 합니다. 현재의 세팅 값은 반향을 끄도록 합니다.

noWayOut()
[sector #03]의 함수 'noWayOut()'는  사용자 키 입력을 설명하기 위한 예제 함수 입니다.
 
savetty()
현재의 터미널 상태 정보를 저장(backup)합니다.
 
getch()
[sector #07]에서는 사용자 입력키 중 Y(혹은 y) 와 N(혹은 n) 만을 입력 받도록 하고 있습니다. 더불어 이외 키의 경우 beep() 을 이용하여 비프음을 발생하도록 합니다.
한편, [sector #09] 에서는 사용자 키 입력 정보를 YES 혹은 NO 문자로 확인 시켜 줍니다.
 
resetty()
현재의 터미널 상태 정보를 복원(restore)합니다.
 
마지막으로 금번의 예에서는 소개되지 아니 하였지마는 scanw() 나 getstr()도 키 입력을 받는 용도로 사용 할 수 있는 함수들 입니다.
NEXT . . .
posted by 가일(GUILE)

♡ 포스팅이 유익 하셨다면 E-mail로 가일의 임베디드 스쿨을 구독하세요->

Trackback Address :: http://www.hongikcom.com/trackback/26 관련글 쓰기
Name
Password
Homepage
Secret
< PREV |  1  |  ...  103  |  104  |  105  |  106  |  107  |  108  |  109  |  110  |  111  |  ...  131  |  NEXT >