블로그 이미지
올해목표 // 10월 어학연수 떠나자~ 자수씨

카테고리

전체글 (1457)
Brand New! (28)
주절주절 (213)
MOT (11)
해외쇼핑 (49)
쇼핑노트 (150)
취미생활 (94)
iPhone (4)
Eclipse (121)
Google (83)
Spring (31)
JAVA (176)
JavaScript (59)
WEB (49)
Database (20)
OS (26)
Tools (8)
Tips (26)
IT정보 (1)
Book (21)
Programming (37)
C/C++ (1)
C# (4)
Flex (2)
XML (1)
curses (8)
한컴 API (5)
인공지능 (4)
네트워크 (5)
DZone Refcardz (1)
ActionScript3 (0)
외부행사 (43)
주변인들 (17)
여행노트 (60)
학교생활 (30)
회사생활 (52)
사회생활 (5)
외국어공부 (12)
잡동사니 (30)
Total
Today
Yesterday
 
12-10 00:12
 

달력

« » 2024.12
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
 

최근에 올라온 글

최근에 달린 댓글


이번시간에는 box와 border에 대해서 설명드리겠습니다.



16번째 줄 wborder() 함수를 이용하여 기존 보더를 초기화 합니다.
  - 17번째 줄 wrefresh() 함수로 윈도우를 갱신하고...
32번째 줄 box() 함수로 윈도우에 외곽선을 그려줍니다.
  - 윈도우는 외각선을 1씩 차지하기 때문에, 소스의 5행 10열의 윈도우의 내부는 3행 8열이 됩니다.

관련 함수 정의


각 함수의 파라미터는 아래를 참조하시면 될 것 같습니다.

<< 실행 결과 >>

Posted by 자수씨
, |

이번 시간에는 window 에 대해서 알아보겠습니다.



이전에 비해 추가된 내용 위주로 설명 드리겠습니다.

12번째 줄 newwin() 함수는 새로운 윈도우를 추가하는 함수입니다.
  - WINDOW *newwin(int nlines, int ncols, int begin_y, int begin_x)
  - 1행 1열의 윈도우를 10행, 10열에 생성한다는 뜻입니다.
13번째 줄 waddch() 함수는 기존의 addch() 함수와 비슷한 역할을 합니다.
  - 대신 앞에 w라는 prefix를 붙여 윈도우에 문자를 추가하겠다는 의미입니다.
  - 다른 여러 함수들도 앞에 w가 붙어 있는 경우에는 윈도우 관련 함수라는 뜻입니다.
18, 21, 24, 27번째 줄
  - mvmove() 함수를 이용하여 윈도우를 이동시킵니다.
30번째 줄 wrefresh() 함수는 윈도우를 갱신하는 함수입니다.
  - 윈도우를 갱신하지 않으면 화면의 출력 내용이 보이지 않게 됩니다.
33번째 줄 delwin() 함수를 통해 생성된 윈도우를 지웁니다.
  - 윈도우는 논리적인 개체이므로 굳이 지우지 않아도 될 것 같습니다.

<< 실행화면 >>



불사조군이라고 생각하며 그렸는데... 여엉...


Posted by 자수씨
, |

curses 터미널 입력 옵션 제어 루틴들 입니다.



ㅁ int cbreak(void) / int nocbreak(void)
cbreak 모드일 경우, 사용자에 의해 문자를 입력하는 즉시 프로그램에서 사용가능하며, erase/kill 과 같은 character-processing 이 수행되지 않습니다.. cbreak 모드가 아닐 경우, 줄 바꿈 또는 캐리지 리턴 입력이 있을 때까지 버퍼에 입력된 문자를 저장합니다.

ㅁ int echo(void) / int noecho(void)
사용자 입력에 대해 화면 출력여부를 설정합니다. 기본적으로 echo 모드로 설정이 되어 있습니다.

ㅁ int halfdelay(int tenths)
half-delay mode 를 설정합니다. cbreak() 함수와 유사하며, 바로 프로그램에서 사용할 수 있습니다.
함수의 인자 tenths는 1/1000 초로 설정을 하며 설정된 값동안 딜레이 후, 값을 반환합니다. (1~255 값을 입력)

ㅁ int intrflush(WINDOW *win, bool bf)
TRUE로 설정하여 활성화시 키보드의 인터럽트 키(interrupt, break, quit ??)를 누르면 모든 입력 큐는 flushing 됩니다.
(사실 번역이 안되서 잘 모르겟네요... -_ㅜ)

ㅁ int keypad(WINDOW *win, bool bf)
사용자의 키패드의 입력을 활성화/비활성화 합니다.

ㅁ int meta(WINDOW *win, bool bf)
Initially, whether the terminal returns 7 or 8 significant bits on input depends on thecontrol mode of the tty driver (see termio(7I)). (무슨 뜻 일까요...)

ㅁ int nodelay(WINDOW *win, bool bf)
getch() 함수를 non-blocking call 합니다. 만약 입력이 없이 준비가 된다면 getch() 함수는 ERR을 반환합니다.

ㅁ int notimeout(WINDOW *win, bool bf)
입력 escape sequence를 해석하는 동안, wgetch() 함수는 다음 문자를 기다리는 동안의 타이머를 설정합니다.
notimeout(win, TRUE) 가 호출되면, wgetch() 함수는 타이머를 설정하지 않습니다.
타이머 제한의 목적은 sequence 간의 기능 키로부터 받은 입력을 차별화 하기 위함 입니다 (???)

ㅁ int raw(void) / int noraw(void)
cbreak() 모드와 유사. 차이점은 interrupt, quit, suspend, flow control 문자들은 생성된 신호를 대신하여 통과되어진다. (????????)

ㅁ void noqiflush(void) / void qiflush(void)
noqiflush() - normal flush of input and output queues associated with the INTR, QUIT and SUSP characters will not be done
qiflush() - 이들 제어 문자를 읽을 때 큐를 flush 할 수 있다.

ㅁ void timeout(int delay) / void wtimeout(WINDOW *win, int delay)
주어진 윈도우에 blocking / non-blocking 모드로 읽기를 설정합니다.
delay가 0일 경우 non-blocking 모드로 읽어들이며, delay가 양수이면 delay 시간만큼 delay 됩니다.

ㅁ int typeahead(int fildes)
파일 디스크립터 flides는 typeahead를 대신 확인하는데 사용합니다. flides가 -1이면 typeahead를 확인하지 않고 완료합니다.






Posted by 자수씨
, |
키보드 특수키 입력을 받기위한 예제입니다.



08번째 줄 keypad() 함수를 통해 키패드의 입력을 활성화 합니다.
  - stdscr는 최상위 윈도우 전역값 (나중에 윈도우 강좌에서 설명), 두번째 인자 TRUE를 통해 활성화합니다.
10번째 줄
  - KEY_F(1)은 F1 키를 의미합니다. 소스상에서 F1 키가 입력되면 프로그램을 종료하는 조건이 됩니다.
11번째 줄 clear() 함수를 통하여 화면을 지웁니다.
13 ~ 26번째 줄
  - 각 키보드 입력에 따라 각 메세지를 출력합니다.



아래를 보시면 각 키들의 이름을 확인할 수 있습니다. 


이상입니다. 끝~


Posted by 자수씨
, |

입력 함수
ㅁ int getch(void);
문자 하나를 입력받습니다.

ㅁ int getstr(char *str);
문자열을 입력받습니다.

ㅁ int scanw(char *fmt, ...);
scanf() 함수와 유사한 역할을 합니다.


출력 함수
ㅁ int addch(chtype ch);
해당 위치의 커서에 문자를 삽입합니다.

ㅁ int addstr(char *str);
해당 위치의 커서부터 문자열을 삽입합니다.

ㅁ int insch(chtype ch);
해당 위치의 커서에 문자를 수정합니다.

ㅁ int insstr(char* str);
해당 위치의 커서부터 문자열을 수정합니다.

ㅁ int printw(char *fmt, /* arg */ ...);
printf() 함수와 유사한 역할을 합니다.


이정도만 알아두면 유용할 듯 합니다.

Posted by 자수씨
, |
이번 시간에는 curses input/output 에 대해서 알아보겠습니다.



이전 강좌에서 추가된 부분을 중점으로 설명하겠습니다.

10번째 줄의 getch() 함수의 리턴값을 ch에 저장한 후, 11번째 줄 addch() 함수로 화면에 추가합니다.
13번째 줄의 getstr() 함수에 의해 str에 문자열을 저장한 후, 14번째 줄 addstr() 함수로 화면에 추가합니다.

<<실행화면>>
실행을 하면 getch() 함수에 의해 문자 입력을 대기합니다.


'a' 란 문자를 입력하였습니다. addch() 함수에 의해 a가 화면에 출력됩니다.


"helloworld!" 라는 문자열을 입력하고 엔터를 입력하였습니다.
getstr() 함수는 엔터를 입력할 때까지 문자열로 입력받는 함수입니다.
addstr() 함수에 의해 화면에 출력이 됩니다.



이상으로 간단한 입출력을 알아보았습니다.


Posted by 자수씨
, |

가장 기본적인 curses 예제입니다.



06번째 줄의 initscr() 함수는 curses mode로 화면을 전환합니다.
07번째 줄의 noecho() 함수는 문자 입력시 화면에 표시하는 echoing을 비활성화 한다는 뜻입니다.
09번째 줄의 getch() 함수를 통해 한 문자를 입력받습니다.
11번째 줄의 addch() 함수는 인자로 받은 문자를 화면에 출력합니다.
13번째 줄의 getch() 함수는 종료 대기를 위한 함수입니다. (로직에는 필요없는 함수)
14번째 줄의 endwin() 함수는 curses mode를 종료합니다.

<<컴파일 방법>>
gcc -o exam01 exam01.c -lcurses
-lcurses 옵션을 이용하여 컴파일을 진행합니다.

<<실행결과>>

프로그램이 시작되면 빈화면이 있고 문자를 하나 입력하면 화면 상단 좌측에 표시하고
13번째 줄의 getch()에 의해 대기를 하게됩니다. (아무 문자나 입력하면 프로그램 종료)


끝~

Posted by 자수씨
, |

오늘부터 '네트워크 프로그래밍 강좌 텀 프로젝트 시작' 기념 curses 강좌를 시작합니다.
저도 사실 이번에 처음해보는거라 많은 오류가 있을 듯 합니다. 흐흐;;;

CDK is a library written in C that provides a collection of widgets for text user interfaces (TUI) development. The widgets wrap ncurses functionality to make writing full screen curses programs faster. A Perl binding is also available.

There are two versions of the library. It was originally written by Mike Glover, introduced as version 4.6 in comp.sources.unix.[1] The other version was extended beginning in May 1999 by Thomas Dickey.
[reference] http://en.wikipedia.org/wiki/Curses_Development_Kit

위에서 말하는 CDK는 Curses Development Kit 의 약자입니다. 즉, C로 구성되어진 text user 인터페이스기반 위짓 라이브러리라고 생각하시면 될 것 같습니다.

ncurses 라고 해서 curses 프로그램을 좀 더 빠르게 랩핑된 라이브러리가 있는데, 제 개발환경에는 curses 밖에 없으므로 curses 기준으로 진행을 하겠습니다.


Posted by 자수씨
, |

글 보관함

최근에 받은 트랙백