ncurses 05 – 윈도우에서의 문자

창이라는 개념에 대해서는 hello world를 출력하면서 간단하게 설명하고 넘겼는데, 이젠 이걸 좀 제대로 설명해야겠다.

curses 시스템에 의한 창이라는 개념은 가상의 화면이다. 우리가 일반적으로 아는 윈도우 시스템과 같이 경계선(보더) 쳐저있는 그런 윈도우를 의미하지 않는다는 것입니다. curses가 초기화 되면, 80×25 사이즈 혹은 현재 실행중인 크기의 화면을 나타내는 stdscr이라는 기본 창 구조체를 만든다. 그냥 적은 수의 문자열을 인쇄(출력)하거나 입력을 읽어내는 등의 간단한 작업을 수행하는 경우 이 단일 창을 모든 용도로 안전하게 사용할 수 있다. 또한 지정된 창에서 명시적으로 작동하는 창을 만들고 이에 대한 함수를 호출할 수도 있다.

예를 들어,

printw(“hi there!”);
refresh();

이런 코드를 작성하면, stdscr에 해당되는 문자열을 출력하는데, 출력하는 것이 현재의 커서 포지션에서 출력을 하게 된다. 현재 커서 포지션은 stdscr에 있는 커서 포지션이 기준이 된다. 비슷하게 refresh() 함수를 부르면, stdscr 구조체에 대해서만 작동을 하게 된다.

이걸 윈도우를 만들어서 처리를 하게 되는 함수가 있는데, 함수 앞에 주로 w가 붙어있다. 또한 만들어진 윈도우 객체와 함께 호출된다. 이 부분은 윈도우에 대한 이해가 좀 되어야 하기 때문에 윈도우에서 좀 더 자세히 다루겠다.

이 외에도 stdscr에 출력하는 데 있어서 위치를 이동하여 처리할 수 있는 함수가 있다. mvprintw 함수를 이용하는데, 아래에 예제를 만들었다. 일전에 이용하였던 hello world를 일부 수정하였다.

스크린샷 2017-10-28 오후 4.03.57.png

수정한 부분이라고 해봐야, 문자열을 밖으로 뺐고, printw 함수 뒤에 mvprintw 함수를 썼다, (x, y) 좌표는 (5, 5) 로 해서 설정하였다. 이렇게 해서 refresh를 하면 화면에 해당 글씨가 두번 써진 상태로 출력이 될 것이다.

스크린샷 2017-10-28 오후 4.04.26스크린샷 2017-10-28 오후 4.04.47

실제로 출력이 되었다. 커서 기준으로 (5,5) 이동이기 때문에 줄바꿈 5칸, 스페이스바 5칸 만큼 이동하였다.

이걸로 이제 단순한 수준의 기본 윈도우가 어떤 것인지 알아보고 출력 가능한 화면이 이동할 수 있다는 것들을 볼 수 있었다. 설명이 좀 부실한 부분에 대해서는 양해를 바란다. 이 부분을 아예 자세히 다루게 되면 엄청난 양을 다루게 되는데 그 부분을 최대한 좀 없앴다. 기본적인 화면에 대해서는 가상의 화면이고, stdscr이라는 구조체가 그 기본이 되며, 윈도우라는 별도의 창과 같은 개념을 이용하여 처리할 수 있는 부분이 존재하고, 화면 위치를 내가 설정하여 출력할 수 있다는 것이 된다는 걸 알아두었으면 한다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

이 사이트는 스팸을 줄이는 아키스밋을 사용합니다. 댓글이 어떻게 처리되는지 알아보십시오.