NCURSE 로 만들어 보는 유저 인터페이스(UI) - 3회 여러가지 출력함수 - 2009/02/09 17:10

이번 시간에는 ncurse 에서 사용 할 수 있는 여러가지 출력 함수들의 유형을 살펴보도록 합니다.

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

 
리스팅 1


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

//
// Ncurse 출력 함수
//
int main(void)
{
        int y, x;
        int cb[]={'n', 'c', 'u', 'r', 's', 'e'};
        char* string= "Welcome to the curse programming";


        initscr();


        /* set default init mode */
        noecho();
        raw();


// sector #01
        addch(cb[0] | A_BOLD | A_UNDERLINE);
        addch(cb[1]);
        addch(cb[2] | A_BOLD | A_UNDERLINE);
        addch(cb[3]);
        addch(cb[4] | A_BOLD | A_UNDERLINE);
        addch(cb[5]);


// sector #02
        move(3,4); /* 커서를 가로축(x) 4, 세로축(y) 3 위치로 이동시킨다 */
        addch('s');


// sector #03
        mvaddch(3,5,'q');


// sector #04
        addstr(string);
        mvaddstr(y, x, string);


// sector #05
        printw("\nHello Ncurse!\n");


// sector #06
        getmaxyx(stdscr,y,x);
        mvprintw(y/2,(x-strlen(string))/2,"%s",string);


// sector #07
        refresh();
//      while(1);


        getch(); // 사용자 키 입력을 대기
        endwin();
        return 0;
}

/* 02_text.c */



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

gcc -o text 02_text.c -lncurses

./text [엔터]


 
 
소스해설
 
noecho(), raw()
이 함수 들은 모두 초기화 코드들로 불리우며 터미널(단말)의 속성을 결정 짓는 기능을 수행합니다. 이후의 칼럼들(후반부)에서 다루어 지게 될 것입니다.
 
addch()
리스팅1의 [sector #01]을 보시면 addch 라는 함수가 사용된 것을 알 수 있습니다. 현재의 커서 위치에 1 글자를 출력하는 함수 입니다.
글자의 속성(attr)도 부여 할 수가 있어서 'A_BOLD | A_UNDERLINE' 라는 글자 속성으로 표현하고 있습니다. curse 에서는 이 말고도 여러가지 속성 기능이 있으며 심지어 글자에 색(COLOR)도 입힐 수가 있습니다. 이는 다음회 칼럼에서 곧 다루어 지게 될 것입니다.
한편, addch 함수가 현재의 커서 위치에 문자를 출력하는 함수라고 한다면 [sector #02] 와 같은 방법을 이용하면 내가 원하는 좌표(y,x)에 글자를 출력할 수도 있습니다. 이는 기존에 우리가 알고 있는 표준출력함수 printf()나 putc() 와는 다른 ncurse 만의 특징이라 할 수 있겠습니다. 예상 하시다시피 move(y,x) 는 현재의 커서 위치를 내가 원하는 행(ROW, y)과 열(COL, x) 위치로 이동 시킵니다.
 
mvaddch()
mvaddch(y,x,ch) 을 이용하면 이를 좀 더 편하게 할 수도 있습니다. [sector #03] 참조. 이 함수는 내가 원하는 좌표상에 문자를 출력합니다.

addstr(),  mvaddstr()
addch 와 mvaddch의 스트링 버젼입니다. 이 함수들을 이용하여 문자열을 출력 할 수 있습니다. [sector #04] 참조

printw()
표준 출력 함수인 printf()와 사용법은 같습니다. 현재의 커서 위치에 문자열을 출력 해 줍니다. [sector #05] 참조
 
getmaxyx(), mvprintw()
getmaxyx 함수는 현재 터미널의 가로, 세로 크기를 얻어 옵니다. [sector #06] 에서는 이를 이용하여 출력한 예를 보입니다.
mvprintw 함수는 printw 에 좌표 지정 기능이 추가된 기능입니다.
 
refresh()
지난 시간 칼럼에서 refresh 함수는 실제 화면상에 그 내용을 출력해 주는 기능으로 설명 한 바있습니다.
[sector #07] 에서 주석으로 처리되어 있는 // while(1); 문장을 활성화 시킨 후 다시 컴파일 하여 동작 시켜 보세요. 화면상에 아무 내용도 출력 되지 않을 것입니다.
마지막으로 다음처럼 한가지를 더 해 보세요. [sector #07] 의 코드 2줄을 모두 비 활성화 한 후 다시 컴파일 하여 동작 시켜 보세요.
.
.동작 결과를 보고 한번 곰곰히 생각해 보신 후 아래 내용을 보세요
.
.
.
.
.
getch() 함수에는 refresh 의 동작도 겸하고 있는듯 합니다. 어쨋든 이로써 우리는 ncurse 프로그래밍시 유의 해 야할 것들을 다시금 확인 한 셈이 됩니다.
결론적으로 우리는 refresh()을 적재 적소에 넣어 주는 것을 게을리 하지 않아야 합니다.
 
다음 시간에는 ncurse 의 글자에 속성을 부여하는 기능들을 다룹니다.
NEXT . . .
posted by 가일(GUILE)

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

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