- 1. ソース
- 2. Makefile
- 3. 実行
1. ソース
/home/hogehoge/lang/cpp/ncurses/ncurses.c
というソースを作成して、以下のように記述しました。
#include <limits.h>
#include <locale.h>
#include <ncurses.h>
#include <stdlib.h>
#include <time.h>
int main(int argc, char *argv[])
{
char *term;
int cols, lines;
WINDOW *win;
setlocale(LC_ALL, "ja_JP.UTF-8");
term = getenv("TERM");
if (setenv("TERM", "vt100", true) != 0)
{
printf("\n端末の設定に失敗しました。\n\n");
return 0;
}
initscr();
win = newwin(LINES, COLS, 0, 0);
keypad(win, 4);
noecho();
nodelay(win, true);
halfdelay(10);
while(true)
{
bool bbreak = false;
char atime[LINE_MAX] = {};
int y = LINES / 2;
int x = COLS / 4;
time_t t = time(NULL);
struct tm stm = {};
localtime_r(&t, &stm);
strftime(atime, sizeof(atime), "%Y年%m月%d日 %H:%M:%S", &stm);
werase(win);
mvwprintw(win, y-1, x, atime);
mvwprintw(win, y++, x, "何かキーを入力してください ");
mvwprintw(win, y++, x, "終了するには e を入力します ");
wrefresh(win);
int n = wgetch(win);
switch (n)
{
case 'e':
case 'E':
bbreak = true;
break;
default:
break;
}
if (bbreak != false)
{
break;
}
}
werase(win);
wrefresh(win);
delwin(win);
endwin();
setenv("TERM", term, true);
return 0;
}
2. Makefile
「Makefile」は、以下のように作成しました。
CC = clang
target : ncurses.o Makefile
$(CC) -O0 -g -o ncurses ncurses.o -lncursesw
.c.o : Makefile
$(CC) -O0 -g -c $< -o $@
3. 実行
make して実行するとこんな感じ
> make
clang -O0 -g -c ncurses.c -o ncurses.o
clang -O0 -g -o ncurses ncurses.o -lncursesw
> ./ncurses
もともとの端末の画面サイズの影響を受けますが・・・。
ほぼ中央に、メッセージが表示され、上段の日時は刻々と変化していくのがわかるかと思います。
キーボードで e ないし E を入力すると画面を消去して終了します。
|