- 1. 画面の右上に時刻を表示する
1. 画面の右上に時刻を表示する
画面の右上に時刻を表示する画面の右上に時刻を表示します。
main の内容は前項までと同じなので省略します。
36行目、keypad、このウィンドウでファンクションキーが入力されたときにそのコードを返すようにします。
これを指定していない場合は、エスケープシーケンスとして入力され、1回のキー入力で2文字が返ってきます。
37行目、noecho、キーボードの入力をエコーバックしないようにします。
38行目、nodelay、getch 等のキー入力を非ブロッキングモードにします。
非ブロッキングモード時は、入力バッファにデータがない場合は、エラーが返されます。
39行目、halfdelay、引数の数値×10分の1秒待って入力がない場合、エラーとします。
#include <errno.h>
#include <locale.h>
#include <ncurses.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h> ← 追加
#include <time.h>
#define SETTERM "xterm"
#define COLUMN 80 // カラム数
#define LINES 24 // 行数
WINDOW *win;
int nend = 0;
void sub01(void);
void printtime(void); ← 追加
int main(int argc , char* argv[])
{
char *aterm; // 端末設定ワーク
・・・ 省略
return 0;
}
void sub01(void)
{
int ninput = 0;
werase(win);
printtime(); ← 追加
wmove(win, LINES-1, 0); ← 追加
wrefresh(win);
ninput = wgetch(win);
switch (ninput)
{
case ' ':
case 'q':
case 'Q':
case 'x':
case 'X':
nend = 1;
break;
default:
break;
}
}
void printtime(void)
{
char atime[COLUMN+1] = {};
time_t mytime = 0;
struct tm mytm = {};
mytime = time(NULL);
localtime_r(&mytime, &mytm);
snprintf(atime, sizeof(atime), "%04d-%2d-%2d %02d:%02d:%02d",
mytm.tm_year+1900, mytm.tm_mon, mytm.tm_mday, mytm.tm_hour, mytm.tm_min, mytm.tm_sec);
mvwprintw(win, 0, COLUMN-strlen(atime), atime);
}
操作は前項までと同じですが、右上に日時が表示されて、更新されるはずです。
|
    |