NCURSE 로 만들어 보는 유저 인터페이스(UI) - 4회 폰트에 변화를 주자 - 2009/02/09 17:11

이번 회와 다음 회에 걸쳐 문자 출력 폰트들에 다양한 효과를 줄 수 있는 방법들을 알아 볼 것 입니다.

리스팅1은 예로써 사용될 NCURSE 프로그램이며 아래의 그림은 그 실행 결과(예제 attr 실행 결과)입니다.

 
예제 attr 실행 결과
 
리스팅 1


#include <ncurses.h>

/*
사용 가능한 폰트의 속성 필드
======================================
A_NORMAL Normal display (no highlight)
A_STANDOUT Best highlighting mode of the terminal.
A_UNDERLINE Underlining
A_REVERSE Reverse video
A_BLINK Blinking
A_DIM Half bright
A_BOLD Extra bright or bold
A_PROTECT Protected mode
A_INVIS Invisible or blank mode
A_ALTCHARSET Alternate character set
A_CHARTEXT Bit.mask to extract a character
COLOR_PAIR(n) Color.pair number n
*/

//
// Ncurse 출력 속성
//
int main(void)
{
        int y, x;
        char c= 'V';
        int atts;

        initscr();


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


// sector #01
        addch(c|A_BOLD);


// sector #02
        atts= A_BLINK|A_BOLD;
        attrset(atts);  // 속성 세팅 '볼드체'
        move(3, 0);
        addstr("hello, world");


// sector #03
        attroff(atts);  // 속성 변경 'OFF'
        move(4, 0);
        addstr("hello, world");


// sector #04
        attron(atts);   // 속성 변경 'ON'
        move(5, 0);
        addstr("hello, world");


// sector #05
        attrset(A_UNDERLINE);   // 속성 세팅 '밑줄'
        move(6, 0);
        addstr("hello, world");


// sector #06
        attrset(A_NORMAL);      // 속성 '보통체'
        move(8, 0);
        printw("Life is life(A_NORMAL)\n");

        attrset(A_STANDOUT);    // 속성 '강조'
        printw("Life is life(A_STANDOUT)\n");

        attrset(A_REVERSE);     // 속성 '역상'
        printw("Life is life(A_REVERSE)\n");

        attrset(A_BLINK);       // 속성 '깜빡임'
        printw("Life is life(A_BLINK)\n");

        attrset(A_DIM); // 속성 '연한밝기'
        printw("Life is life(A_DIM)\n");

        attrset(A_BOLD);        // 속성 '볼드체'
        printw("Life is life(A_BOLD)\n");

        attrset(A_UNDERLINE);   // 속성 '밑줄'
        printw("Life is life(A_UNDERLINE)\n\n");

        refresh();


        attrset(A_BOLD);
        getmaxyx(stdscr,y,x);
        mvprintw(y-1,0,"%s","Enter the any button to continue!");
        getch();


// sector #07
        move(8,0);
        chgat(-1, A_REVERSE, 0, NULL);

        mvprintw(y-1,0,"%s","Enter the any button to exit!    ");
        getch();


        endwin();
        return 0;
}

/* 03_attr.c */



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

gcc -o attr 03_attr.c -lncurses

./attr [엔터]


 
 
소스해설
 
addch()
리스팅1의 [sector #01]을 보시면 addch 라는 함수가 사용된 것을 알 수 있습니다. 현재의 커서 위치에 1 글자를 출력하는 함수 입니다.
글자의 속성(attr)도 부여 할 수가 있어서 'A_BOLD' 라는 글자 속성으로 표현하고 있습니다. 이 방법은 현재 출력한 문자(열)에만 속성이 부여 된다는 점이 앞으로 설명할 함수들과 차이점 정도가 될 것입니다.
A_BOLD 이외에 사용 할 수 있는 문자 속성 필드들은 리스팅1의 상단 '사용 가능한 폰트의 속성 필드'를 참고 하시거나 혹은,  사용중인 시스템의 '/usr/include' 나 이에 상응하는 표준 헤더 파일 경로내에서 'ncurses.h' 을 찾으신 후 그 파일 내용을 참고 하시기 바랍니다.
 
attrset()
이 함수는 폰트의 속성을 결정 짓습니다. 한번의 세팅으로 이후의 모든 출력은 이 속성 값의 지배를 받게 됩니다. 이 함수는 이전의 속성값을 무시하고 새롭게 속성을 재 정의 하게 되므로 이에 주의를 하고 사용 하여야 할 것입니다.

attron(),  attroff()
attron 함수는 지정한 속성을 이전의 속성에 더해줍니다('+'의 특징). 예를 들어 기존의 속성이 'A_UNDERLINE' 이었고 attron(A_REVERSE); 라고 실행 하였을 경우 새로운 속성은 'A_UNDERLINE | A_REVERSE' 가 될 것입니다.
이에 반하여 attroff 는 그와 반대로 ('-'의 특징)을 갖습니다. 예를 들어 기존의 속성이 'A_UNDERLINE | A_REVERSE' 이었고 attroff(A_UNDERLINE); 라고 실행 하였을 경우 새로운 속성은 'A_REVERSE' 가 될 것입니다.
 
chgat()
이 함수는 이미 화면상에 디스플레이 되어 있는 폰트의 속성에 변화를 줄 수 있습니다.  [sector #07]처럼  chgat(-1, A_REVERSE, 0, NULL); 하였을 경우 첫째인수는 현재 커서 위치부터 속성 변경코저 하는 문자의 수가 됩니다. 특별히 -1로 하였을 경우 이는 해당 라인의 모든 문자를 대상으로 합니다. 두번째인수는 변경할 속성 값입니다. 세번째인수는 보통은 '0'입니다.(COLOR 모드에서는 '1'). 네번째는 항상 NULL 입니다.
 
attrget()
본 예 에서는 사용되지 않았고 한편, 자주 사용 되지는 않지만 필요시 요긴하게 사용 할 수도 있습니다. 현재의 속성값을 읽어오는 함수 입니다.

다음 시간에는 ncurse 에서 를 사용하는 방법들을 다룹니다.
NEXT . . .
posted by 가일(GUILE)

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

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