Додаткові риси

Ви вже знаєте достатньо, щоб написати хорошу програму, використовуючи 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;
}