4. C言語 - curses - 画面の右上に時刻を表示する

 
4.1 画面の右上に時刻を表示する

4.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);
}
 操作は前項までと同じですが、右上に日時が表示されて、更新されるはずです。