ncurses は、端末に依存しない形式でテキストユーザインタフェース (TUI) を作成するためのライブラリです。ncursesのサンプルプログラムを集めてみました。リストはリンク先からの借り物です。 プログラムの作成はRaspberry Pi4で行っています。
インストールとコンパイル
インストール $ sudo apt install libncurses-dev コンパイル $ gcc -o hoge hoge.c -lncurses
リスト1
#include <ncurses.h> #include <stdio.h> #include <string.h> int main(int argc,char *argv[]) { initscr();//初期化 noecho(); //キーが入力されても表示しない curs_set(0);//カーソルを非表示 mvprintw(12, 30, "Hello World!"); while (true) { int ch = getch(); if (ch == 'q') break; } endwin();//終了処理 retuen 0; }
リスト2
#include <ncurses.h> #include <stdio.h> #include <string.h> int main(int argc,char *argv[]) { int x, y, w, h; char *str="Hello World"; int key; initscr();//初期化 noecho();//キー入力した文字の非表示モード curs_set(0);//カーソルを非表示 cbreak();//[Enter] キー不要の入力モード keypad(stdscr, TRUE);//特殊キー(カーソルキーなど)を有効化 //stdscr は端末画面を表わす定数である. 標準出力 stdout の curses 版だと考えればよい. getmaxyx(stdscr, h, w);//端末のサイズを取得 注意 ポインタ渡しではない y = h/2; x = (w-strlen(str))/2; while (1) { erase();//画面の消去 move(y, x);//表示位置指定 addstr(str);//文字を出力する refresh();//画面の再表示 key = getch();//キー入力 if (key == 'q') break; switch (key) { case KEY_UP: y--; break; case KEY_DOWN: y++; break; case KEY_LEFT: x--; break; case KEY_RIGHT: x++; break; } } endwin();//終了処理 return 0; }
リスト3
#include <ncurses.h> #include <stdio.h> #include <string.h> int main(int argc,char *argv[]) { // 端末の準備 initscr(); // 色の準備 start_color(); init_pair(1, COLOR_RED, COLOR_BLUE); // 色1 は青地に赤文字 init_pair(2, COLOR_GREEN, COLOR_BLUE); // 色2 は青地に緑文字 init_pair(3, COLOR_YELLOW, COLOR_BLUE); // 色3 は青地に黄文字 init_pair(10, COLOR_WHITE, COLOR_BLUE); // 色10 は青地に白文字 bkgd(COLOR_PAIR(10)); // 背景は色10 // 表示 attrset(COLOR_PAIR(1)); // 色1 を使う mvaddstr(5, 5, "Hello World"); attrset(COLOR_PAIR(2)); // 色2 を使う mvaddstr(5, 25, "Hello World"); attrset(COLOR_PAIR(3)); // 色3 を使う mvaddstr(5, 45, "Hello World"); attrset(COLOR_PAIR(1) | A_BOLD); // 色&強調表示 mvaddstr(6, 5, "Hello World"); attrset(COLOR_PAIR(2) | A_BOLD); mvaddstr(6, 25, "Hello World"); attrset(COLOR_PAIR(3) | A_BOLD); mvaddstr(6, 45, "Hello World"); attrset(COLOR_PAIR(1) | A_REVERSE); // 色&反転表示 mvaddstr(7, 5, "Hello World"); attrset(COLOR_PAIR(2) | A_REVERSE); mvaddstr(7, 25, "Hello World"); attrset(COLOR_PAIR(3) | A_REVERSE); mvaddstr(7, 45, "Hello World"); attrset(COLOR_PAIR(1) | A_REVERSE | A_BOLD); // 色&反転&強調 mvaddstr(8, 5, "Hello World"); attrset(COLOR_PAIR(2) | A_REVERSE | A_BOLD); mvaddstr(8, 25, "Hello World"); attrset(COLOR_PAIR(3) | A_REVERSE | A_BOLD); mvaddstr(8, 45, "Hello World"); // 終了 getch(); endwin(); return (0); }
参考
※コメント投稿者のブログIDはブログ作成者のみに通知されます