Додаткові риси
Ви вже знаєте достатньо, щоб написати хорошу програму, використовуючи curses. Але існує декілька додаткових функцій, корисних в окремих випадках. Давайте розглянемо їх.
curs_set()
Ця функція може зробити курсор невидимим. Її параметрами можуть бути
0 - робить курсор невидимим
1 - робить курсор звичайним
2 - виділяє курсор
Тимчасовий вихід з режиму Curses
Іноді, у вас може винукнути необхідність тимчасово повернутися до звичного (зі звичайним режимом буферування) стану. В такому разі, вам спочатку потрібно буде зберегти режим tty (терміналу) за допомогою функції def_prog_mode(), після чого викликати endwin(), щоб завершити режим cusrses. Це поверне вас до початкового режиму терміналу. Щоб повернутися назад до curses, викличте reset_prog_mode(). Ця функція відновить термінал до режиму, збереженому функцією def_prog_mode(). Після цього, виконайте refresh(), і ви назад у режимі curses. Ось приклад із послідовністю функцій, які слід виконати.
Приклад 12. Тимчасовий вихід із режиму curses
#include <ncurses.h>
int main()
{
initscr(); /* Розпочинає режим curses */
printw("Hello World !!!\n"); /* Записує Hello World */
refresh(); /* Виводить текст на дійсний екран */
def_prog_mode(); /* Зберігає режими tty */
endwin(); /* Тимчасово завершує режим curses */
system("/bin/sh"); /* Ваші дії в звичному режимі */
reset_prog_mode(); /* Повертається до попереднього режиму
* tty, збереженому def_prog_mode() */
refresh(); /* refresh(), щоб відновити вміст
* екрану */
printw("Another String\n"); /* Назад до curses, застосовуючи */
refresh(); /* всі можливості curses */
endwin(); /* Завершення режиму curses */
return 0;
}
Змінні ACS_
Якщо ви коли-небудь програмували в DOS, то напевне пам'ятаєте ті кебетні символи розширеного набору символів. Вони друковні тільки на певних терміналах. Така функція ncurses, як box() застосовує саме такі символи. Їхні позначення починаються з ACS, що означає "альтернативний набір символів" (англ. alternative character set). Можливо, ви вже помітили використання деяких з них у програмах вище. Наступний приклад виводить список усіх цих символів.
Приклад 13. Змінні ASC_
#include <ncurses.h>
int main()
{
initscr();
printw("Upper left corner "); addch(ACS_ULCORNER); printw("\n");
printw("Lower left corner "); addch(ACS_LLCORNER); printw("\n");
printw("Lower right corner "); addch(ACS_LRCORNER); printw("\n");
printw("Tee pointing right "); addch(ACS_LTEE); printw("\n");
printw("Tee pointing left "); addch(ACS_RTEE); printw("\n");
printw("Tee pointing up "); addch(ACS_BTEE); printw("\n");
printw("Tee pointing down "); addch(ACS_TTEE); printw("\n");
printw("Horizontal line "); addch(ACS_HLINE); printw("\n");
printw("Vertical line "); addch(ACS_VLINE); printw("\n");
printw("Large Plus or cross over "); addch(ACS_PLUS); printw("\n");
printw("Scan Line 1 "); addch(ACS_S1); printw("\n");
printw("Scan Line 3 "); addch(ACS_S3); printw("\n");
printw("Scan Line 7 "); addch(ACS_S7); printw("\n");
printw("Scan Line 9 "); addch(ACS_S9); printw("\n");
printw("Diamond "); addch(ACS_DIAMOND); printw("\n");
printw("Checker board (stipple) "); addch(ACS_CKBOARD); printw("\n");
printw("Degree Symbol "); addch(ACS_DEGREE); printw("\n");
printw("Plus/Minus Symbol "); addch(ACS_PLMINUS); printw("\n");
printw("Bullet "); addch(ACS_BULLET); printw("\n");
printw("Arrow Pointing Left "); addch(ACS_LARROW); printw("\n");
printw("Arrow Pointing Right "); addch(ACS_RARROW); printw("\n");
printw("Arrow Pointing Down "); addch(ACS_DARROW); printw("\n");
printw("Arrow Pointing Up "); addch(ACS_UARROW); printw("\n");
printw("Board of squares "); addch(ACS_BOARD); printw("\n");
printw("Lantern Symbol "); addch(ACS_LANTERN); printw("\n");
printw("Solid Square Block "); addch(ACS_BLOCK); printw("\n");
printw("Less/Equal sign "); addch(ACS_LEQUAL); printw("\n");
printw("Greater/Equal sign "); addch(ACS_GEQUAL); printw("\n");
printw("Pi "); addch(ACS_PI); printw("\n");
printw("Not equal "); addch(ACS_NEQUAL); printw("\n");
printw("UK pound sign "); addch(ACS_STERLING); printw("\n");
refresh();
getch();
endwin();
return 0;
}