ΠΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΡΠ²Π΅ΡΠ°
Π ΠΏΡΠΎΡΠ»ΠΎΠΌ ΠΎΡΠ΅Π½Ρ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΡΠ΅ΡΠΌΠΈΠ½Π°Π»Ρ Π²Π²ΠΎΠ΄Π°/Π²ΡΠ²ΠΎΠ΄Π° ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π»ΠΈ ΡΠ²Π΅ΡΠ°, ΠΏΠΎΡΡΠΎΠΌΡ Ρ Π±ΠΎΠ»ΡΡΠ΅ΠΉ ΡΠ°ΡΡΠΈ ΡΠ°ΠΌΡΡ ΡΡΠ°ΡΡΡ Π²Π΅ΡΡΠΈΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ curses Π½Π΅ Π±ΡΠ»ΠΎ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΈ ΡΠ²Π΅ΡΠΎΠ². Π¦Π²Π΅ΡΠ° ΠΏΠΎΡΠ²ΠΈΠ»ΠΈΡΡ Π² Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅ ncurses ΠΈ Π΄ΡΡΠ³ΠΈΡ ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡΡ curses. Π ΡΠΎΠΆΠ°Π»Π΅Π½ΠΈΡ, Π½Π° "Π½Π΅ΠΈΠ½ΡΠ΅Π»Π»Π΅ΠΊΡΡΠ°Π»ΡΠ½ΡΠΉ ΡΠΊΡΠ°Π½", ΠΏΠ΅ΡΠ²ΠΎΠΎΡΠ½ΠΎΠ²Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ curses, ΠΏΠΎΠ²Π»ΠΈΡΠ» API, ΠΈ curses ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ ΡΠ²Π΅ΡΠ° ΠΎΡΠ΅Π½Ρ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Π½ΡΠΌ ΡΠΏΠΎΡΠΎΠ±ΠΎΠΌ, ΠΎΡΡΠ°ΠΆΠ°ΡΡΠΈΠΌ ΡΠ»Π°Π±ΡΠ΅ Ρ Π°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊΠΈ ΡΡΠ°ΡΡΡ ΡΠ²Π΅ΡΠ½ΡΡ ΡΠ΅ΡΠΌΠΈΠ½Π°Π»ΠΎΠ².
ΠΠ°ΠΆΠ΄Π°Ρ ΡΠΈΠΌΠ²ΠΎΠ»ΡΠ½Π°Ρ ΡΡΠ΅ΠΉΠΊΠ° Π½Π° ΡΠΊΡΠ°Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π·Π°ΠΏΠΈΡΠ°Π½Π° ΠΎΠ΄Π½ΠΈΠΌ ΡΠ²Π΅ΡΠΎΠΌ ΠΈΠ· Π½Π°Π±ΠΎΡΠ° ΡΠ°Π·Π½ΡΡ ΡΠ²Π΅ΡΠΎΠ² Π½Π° ΡΠΎΠ½Π΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠ²Π΅ΡΠ° ΠΈΠ· Π½Π°Π±ΠΎΡΠ° ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΡΠ²Π΅ΡΠΎΠ² ΡΠΎΠ½Π°. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΠ²Π΅ΡΡΠΈ Π·Π΅Π»Π΅Π½ΡΠΉ ΡΠ΅ΠΊΡΡ Π½Π° ΠΊΡΠ°ΡΠ½ΠΎΠΌ ΡΠΎΠ½Π΅.
Π¦Π²Π΅ΡΠΎΠ²Π°Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° Π² Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅ curses Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π½Π΅ΠΎΠ±ΡΡΠ½Π°, Π² ΡΠΎΠΌ ΡΠΌΡΡΠ»Π΅, ΡΡΠΎ ΡΠ²Π΅Ρ ΡΠΈΠΌΠ²ΠΎΠ»Π° Π½Π΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎ ΠΎΡ ΡΠ²Π΅ΡΠ° ΡΠΎΠ½Π°. ΠΡ Π΄ΠΎΠ»ΠΆΠ½Ρ Π·Π°Π΄Π°ΡΡ ΡΠ²Π΅Ρ ΠΏΠ΅ΡΠ΅Π΄Π½Π΅Π³ΠΎ ΠΏΠ»Π°Π½Π° ΠΈ ΡΠΎΠ½Π° ΠΊΠ°ΠΊ ΠΏΠ°ΡΡ, ΠΈΠΌΠ΅Π½ΡΠ΅ΠΌΡΡ, ΡΡΠΎ Π½Π΅ΡΠ΄ΠΈΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ, ΡΠ²Π΅ΡΠΎΠ²ΠΎΠΉ ΠΏΠ°ΡΠΎΠΉ.
ΠΡΠ΅ΠΆΠ΄Π΅ ΡΠ΅ΠΌ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡ ΡΠ²Π΅ΡΠ° Π² curses, Π½ΡΠΆΠ½ΠΎ ΡΠ±Π΅Π΄ΠΈΡΡΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ ΡΠ΅ΠΊΡΡΠΈΠΉ ΡΠ΅ΡΠΌΠΈΠ½Π°Π» ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΡΠ²Π΅ΡΠ°, ΠΈ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΠΏΠΎΠ΄ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΡΠ²Π΅ΡΠΎΠΌ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ curses. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΡΠ΅ Π΄Π²Π΅ ΡΡΠ½ΠΊΡΠΈΠΈ: has_colors ΠΈ start_color.
#include <curses.h>
bool has_colors(void);
int start_color(void);
Π€ΡΠ½ΠΊΡΠΈΡ has_colors Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ true, Π΅ΡΠ»ΠΈ ΡΠ΅ΡΠΌΠΈΠ½Π°Π» ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΡΠ²Π΅ΡΠ°. ΠΠ°Π»Π΅Π΅ ΡΠ»Π΅Π΄ΡΠ΅Ρ Π²ΡΠ·Π²Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΡ start_color, ΠΊΠΎΡΠΎΡΠ°Ρ Π²Π΅ΡΠ½Π΅Ρ OK, Π΅ΡΠ»ΠΈ ΡΠ²Π΅ΡΠΎΠ²Π°Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° ΡΡΠΏΠ΅ΡΠ½ΠΎ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π°. ΠΠΎΡΠ»Π΅ Π²ΡΠ·ΠΎΠ²Π° start_color ΠΈ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΡΠ²Π΅ΡΠΎΠ² ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ COLOR_PAIRS ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, ΡΠ°Π²Π½ΠΎΠ΅ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠΌΡ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Ρ ΡΠ²Π΅ΡΠΎΠ²ΡΡ ΠΏΠ°Ρ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ ΡΠ΅ΡΠΌΠΈΠ½Π°Π». ΠΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ COLORS ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ Π΄ΠΎΡΡΡΠΏΠ½ΡΡ ΡΠ²Π΅ΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΡ , ΠΊΠ°ΠΊ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ, Π²ΠΎΡΠ΅ΠΌΡ. ΠΠ½ΡΡΡΠΈ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ° ΡΠΈΡΠ»Π° ΠΎΡ 0 Π΄ΠΎ 63 Π΄Π΅ΠΉΡΡΠ²ΡΡΡ ΠΊΠ°ΠΊ ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΡΠ΅ ID Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ· Π΄ΠΎΡΡΡΠΏΠ½ΡΡ ΡΠ²Π΅ΡΠΎΠ².
ΠΡΠ΅ΠΆΠ΄Π΅ ΡΠ΅ΠΌ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡ ΡΠ²Π΅ΡΠ° ΠΊΠ°ΠΊ Π°ΡΡΠΈΠ±ΡΡΡ, Π²Ρ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΡΠ²Π΅ΡΠΎΠ²ΡΠ΅ ΠΏΠ°ΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Ρ ΠΎΡΠΈΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ. ΠΠ΅Π»Π°Π΅ΡΡΡ ΡΡΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ init_pair. ΠΠ±ΡΠ°ΡΠΈΡΡΡΡ ΠΊ Π°ΡΡΠΈΠ±ΡΡΠ°ΠΌ, Π·Π°Π΄Π°ΡΡΠΈΠΌ ΡΠ²Π΅Ρ, ΠΌΠΎΠΆΠ½ΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ COLOR_PAIR.
#include <curses.h>
int init_pair(short pair_number, short foreground, short background);
int COLOR_PAIR(int pair_number);
int pair_content(short pair_number, short *foreground, short *background);
Π ΡΠ°ΠΉΠ»Π΅ curses.h ΠΎΠ±ΡΡΠ½ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Ρ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ Π±Π°Π·ΠΎΠ²ΡΠ΅ ΡΠ²Π΅ΡΠ°, Π½Π°ΡΠΈΠ½Π°ΡΡΠΈΠ΅ΡΡ Ρ ΠΏΡΠ΅ΡΠΈΠΊΡΠ° COLOR_. ΠΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ pair_content ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΈΠ·Π²Π»Π΅ΡΡ ΡΠ²Π΅Π΄Π΅Π½ΠΈΡ ΠΎ ΡΠ°Π½Π΅Π΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ ΡΠ²Π΅ΡΠΎΠ²ΠΎΠΉ ΠΏΠ°ΡΠ΅.
ΠΠ»Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΡΠ²Π΅ΡΠΎΠ²ΠΎΠΉ ΠΏΠ°ΡΡ Π½ΠΎΠΌΠ΅Ρ 1, ΠΊΠ°ΠΊ ΠΊΡΠ°ΡΠ½ΡΠΉ Π½Π° Π·Π΅Π»Π΅Π½ΠΎΠΌ, ΠΏΡΠΈΠΌΠ΅Π½ΠΈΡΠ΅ ΡΠ»Π΅Π΄ΡΡΡΡΡ ΡΡΡΠΎΠΊΡ:
init_pair(1, COLOR_RED, COLOR_GREEN);
ΠΠ°ΡΠ΅ΠΌ Π²Ρ ΡΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π΄ΠΎΡΡΡΠΏ ΠΊ ΡΡΠΎΠΉ ΡΠ²Π΅ΡΠΎΠ²ΠΎΠΉ ΠΏΠ°ΡΠ΅, ΠΏΡΠΈΠΌΠ΅Π½ΠΈΠ² ΡΡΠ½ΠΊΡΠΈΡ COLOR_PAIR ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
wattron(window_ptr, COLOR_PAIR(1));
ΠΠ½Π° ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡ Π²ΡΠ²ΠΎΠ΄ Π² Π±ΡΠ΄ΡΡΠ΅ΠΌ Π½Π° ΡΠΊΡΠ°Π½ ΠΊΡΠ°ΡΠ½ΡΡ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² Π½Π° Π·Π΅Π»Π΅Π½ΠΎΠΌ ΡΠΎΠ½Π΅.
ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ COLOR_PAIR β ΡΡΠΎ Π°ΡΡΠΈΠ±ΡΡ, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡΠΎΠ²Π°ΡΡ Π΅Π³ΠΎ Ρ Π΄ΡΡΠ³ΠΈΠΌΠΈ Π°ΡΡΠΈΠ±ΡΡΠ°ΠΌΠΈ. ΠΠ° ΠΠ ΡΠ°ΡΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±ΠΈΡΡΡΡ Π½Π° ΡΠΊΡΠ°Π½Π΅ ΡΠ²Π΅ΡΠΎΠ² ΠΏΠΎΠ²ΡΡΠ΅Π½Π½ΠΎΠΉ ΡΡΠΊΠΎΡΡΠΈ, ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½ΠΈΠ² Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΏΠΎΡΠ°Π·ΡΡΠ΄Π½ΠΎΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ OR Π°ΡΡΠΈΠ±ΡΡ COLOR_PAIR Ρ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠΌ Π°ΡΡΠΈΠ±ΡΡΠΎΠΌ A_BOLD:
wattron(window_ptr, COLOR_PAIR(1) | A_BOLD);
ΠΠ°Π²Π°ΠΉΡΠ΅ ΠΏΡΠΎΠ²Π΅ΡΠΈΠΌ ΡΡΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ Π² ΠΏΡΠΈΠΌΠ΅ΡΠ΅ color.c (ΡΠΏΡΠ°ΠΆΠ½Π΅Π½ΠΈΠ΅ 6.7).
Π£ΠΏΡΠ°ΠΆΠ½Π΅Π½ΠΈΠ΅ 6.7. Π¦Π²Π΅ΡΠ°1. Π‘Π½Π°ΡΠ°Π»Π° ΠΏΡΠΎΠ²Π΅ΡΡΡΠ΅, ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ Π»ΠΈ ΡΠ²Π΅ΡΠ° ΡΠ΅ΡΠΌΠΈΠ½Π°Π», ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΎΠΉ. ΠΡΠ»ΠΈ Π΄Π°, ΡΠΎ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠΉΡΠ΅ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΡΠ²Π΅ΡΠΎΠ²:
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <curses.h>
int main() {
int i;
initscr();
if (!has_colors()) {
endwin();
fprintf(stderr, "Error β no color support on this terminal\n");
exit(1);
}
if (start_color() != OK) {
endwin();
fprintf(stderr, "Error β could not initialize colors\n");
exit(2);
}
2. Π’Π΅ΠΏΠ΅ΡΡ ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΠ²Π΅ΡΡΠΈ Π΄ΠΎΠΏΡΡΡΠΈΠΌΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠ²Π΅ΡΠΎΠ² ΠΈ ΡΠ²Π΅ΡΠΎΠ²ΡΠ΅ ΠΏΠ°ΡΡ. Π‘ΠΎΠ·Π΄Π°ΠΉΡΠ΅ ΡΠ΅ΠΌΡ ΡΠ²Π΅ΡΠΎΠ²ΡΡ ΠΏΠ°Ρ ΠΈ Π²ΡΠ²Π΅Π΄ΠΈΡΠ΅ ΠΈΡ ΠΏΠΎ ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ Π½Π° ΡΠΊΡΠ°Π½:
clear();
mvprintw(5, 5, "There are %d COLORS, and %d COLOR_PAIRS available", COLORS, COLOR_PAIRS);
refresh();
init_pair(1, COLOR_RED, COLOR_BLACK);
init_pair(2, COLOR_RED, COLOR_GREEN);
init_pair(3, COLOR_GREEN, COLOR_RED);
init_pair(4, COLOR_YELLOW, COLOR_BLUE);
init_pair(5, COLOR_BLACK, COLOR_WHITE);
init_pair(6, COLOR_MAGENTA, COLOR_BLUE);
init_pair(7, COLOR_CYAN, COLOR_WHITE);
for (i = 1; i <= 7; i++) {
attroff(A_BOLD);
attrset(COLOR_PAIR(i));
mvprintw(5 + i, 5, "Color pair %d", i);
attrset(COLOR_PAIR(i) | A_BOLD);
mwprintw(5 + i, 25, "Bold color pair %d", i);
refresh();
sleep(1);
}
endwin();
exit(EXIT_SUCCESS);
}
ΠΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΠ° ΠΏΡΠΈΠ²Π΅Π΄Π΅Ρ ΠΊ Π²ΡΠ²ΠΎΠ΄Ρ, ΠΏΠΎΠΊΠ°Π·Π°Π½Π½ΠΎΠΌΡ Π½Π° ΡΠΈΡ. 6.7, Π·Π° Π²ΡΡΠ΅ΡΠΎΠΌ ΡΠ΅Π°Π»ΡΠ½ΡΡ ΡΠ²Π΅ΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π΅ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°ΡΡΡΡ Π½Π° ΡΠ΅ΡΠ½ΠΎ-Π±Π΅Π»ΠΎΠΌ ΡΠ½ΠΈΠΌΠΊΠ΅ ΡΠΊΡΠ°Π½Π°.
Π ΠΈΡ. 6.7
ΠΠ°ΠΊ ΡΡΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ
ΠΠΎΡΠ»Π΅ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΡΠΎΠ³ΠΎ, ΡΡΠΎ ΡΠΊΡΠ°Π½ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠ²Π΅ΡΠ°ΠΌΠΈ, ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅Ρ ΡΠ²Π΅ΡΠΎΠ²ΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΡ ΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΡΡΠ΄ ΡΠ²Π΅ΡΠΎΠ²ΡΡ ΠΏΠ°Ρ. ΠΠ°Π»Π΅Π΅ Π½Π° ΡΠΊΡΠ°Π½ Π²ΡΠ²ΠΎΠ΄ΠΈΡΡΡ ΡΠ΅ΠΊΡΡ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΡΠ²Π΅ΡΠΎΠ²ΡΡ ΠΏΠ°Ρ Π΄Π»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΠΏΡΠΎΠ΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΠΈ ΡΠ°Π·Π½ΡΡ ΡΠ²Π΅ΡΠΎΠ² Π½Π° ΡΠΊΡΠ°Π½Π΅.
ΠΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΡΠ²Π΅ΡΠΎΠ²
ΠΠ°ΠΊ ΠΏΠ΅ΡΠ΅ΠΆΠΈΡΠΎΠΊ, ΠΎΡΡΠ°Π²ΡΠΈΠΉΡΡ ΠΎΡ ΡΡΠ°ΡΡΡ Π½Π΅ΠΈΠ½ΡΠ΅Π»Π»Π΅ΠΊΡΡΠ°Π»ΡΠ½ΡΡ ΡΠ΅ΡΠΌΠΈΠ½Π°Π»ΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ³Π»ΠΈ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°ΡΡ ΠΎΡΠ΅Π½Ρ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ²Π΅ΡΠΎΠ² Π² ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ, Π½ΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ»ΠΈ Π½Π°ΡΡΡΠ°ΠΈΠ²Π°ΡΡ ΡΠ΅ΠΊΡΡΡΡ ΡΠ²Π΅ΡΠΎΠ²ΡΡ ΠΏΠ°Π»ΠΈΡΡΡ, Π² Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅ curses ΡΠΎΡ ΡΠ°Π½ΠΈΠ»Π°ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΏΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΡΠ²Π΅ΡΠΎΠ² Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ init_color:
#include <curses.h>
int init_color(short color_number, short red, short green, short blue);
ΠΠ½Π° ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΏΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΠΉ ΡΠ²Π΅Ρ (Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅ ΠΎΡ 0 Π΄ΠΎ COLORS) Π½ΠΎΠ²ΡΠΌΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌΠΈ ΡΡΠΊΠΎΡΡΠΈ ΡΠ²Π΅ΡΠ° ΠΈΠ· Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° ΠΎΡ 0 Π΄ΠΎ 1000. Π’Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π½Π°ΠΏΠΎΠΌΠΈΠ½Π°Π΅Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΡΠ²Π΅ΡΠΎΠ²ΡΡ Ρ Π°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊ Π² Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΡ ΡΠ°ΠΉΠ»Π°Ρ ΡΠΎΡΠΌΠ°ΡΠ° GIF.
ΠΠ°Π½Π΅Π»ΠΈ
ΠΡΠΈ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠΈ Π±ΠΎΠ»Π΅Π΅ ΡΠ»ΠΎΠΆΠ½ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ curses ΠΏΠΎΡΠΎΠΉ Π±ΡΠ²Π°Π΅Ρ Π»Π΅Π³ΡΠ΅ ΠΏΠΎΡΡΡΠΎΠΈΡΡ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈΠΉ ΡΠΊΡΠ°Π½ ΠΈ Π·Π°ΡΠ΅ΠΌ ΠΏΠΎΠ·ΠΆΠ΅ Π²ΡΠ²Π΅ΡΡΠΈ Π²Π΅ΡΡ ΠΈΠ»ΠΈ ΡΠ°ΡΡΡ ΡΠΊΡΠ°Π½Π° Π½Π° ΡΠΈΠ·ΠΈΡΠ΅ΡΠΊΠΈΠΉ ΡΠΊΡΠ°Π½. Π Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΡΠ»ΡΡΠ°ΡΡ Π»ΡΡΡΠ΅ ΠΈΠΌΠ΅ΡΡ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈΠΉ ΡΠΊΡΠ°Π½ Π±ΠΎΠ»ΡΡΠ΅Π³ΠΎ ΡΠ°Π·ΠΌΠ΅ΡΠ°, ΡΠ΅ΠΌ ΡΠΈΠ·ΠΈΡΠ΅ΡΠΊΠΈΠΉ ΡΠΊΡΠ°Π½ ΠΈ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ°ΡΡΡ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΡΠΊΡΠ°Π½Π° Π² Π»ΡΠ±ΠΎΠΉ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ.
ΠΡΠΎ Π½Π΅Π»Π΅Π³ΠΊΠΎ ΡΠ΄Π΅Π»Π°ΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ curses, Ρ ΠΊΠΎΡΠΎΡΡΠΌΠΈ Π²Ρ ΠΏΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΠ»ΠΈΡΡ ΠΊ ΡΡΠΎΠΌΡ ΠΌΠΎΠΌΠ΅Π½ΡΡ, Ρ.ΠΊ. Π²ΡΠ΅ ΠΎΠΊΠ½Π° Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ Π½Π΅ Π±ΠΎΠ»ΡΡΠ΅ ΡΠΈΠ·ΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΡΠΊΡΠ°Π½Π°. ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° curses ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΡ ΡΡΡΡΠΊΡΡΡΡ Π΄Π°Π½Π½ΡΡ , ΠΏΠ°Π½Π΅Π»Ρ (pad), Π΄Π»Ρ ΠΌΠ°Π½ΠΈΠΏΡΠ»ΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π΄Π°Π½Π½ΡΠΌΠΈ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΡΠΊΡΠ°Π½Π°, ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π΅ ΡΠΌΠ΅ΡΠ°ΡΡΡΡ Π² ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠΌ ΠΎΠΊΠ½Π΅.
Π‘ΡΡΡΠΊΡΡΡΠ° ΠΏΠ°Π½Π΅Π»ΠΈ ΠΏΠΎΡ ΠΎΠΆΠ° Π½Π° ΡΡΡΡΠΊΡΡΡΡ WINDOW, ΠΈ Π²ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ curses, Π½Π°ΠΏΠΈΡΠ°Π½Π½ΡΠ΅ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΠΎΠΊΠ½Π°ΠΌΠΈ, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡ ΠΈ ΠΊ ΠΏΠ°Π½Π΅Π»ΡΠΌ. ΠΠΎ Ρ ΠΏΠ°Π½Π΅Π»Π΅ΠΉ Π΅ΡΡΡ ΠΈ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ.
ΠΠ°Π½Π΅Π»ΠΈ ΡΠΎΠ·Π΄Π°ΡΡΡΡ Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΎΠΌ ΡΠ°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ ΠΎΠ±ΡΡΠ½ΡΠ΅ ΠΎΠΊΠ½Π°.
#include <curses.h>
WINDOW *newpad(int number_of_lines, int number_of_columns);
ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΡΠΎ, ΡΡΠΎ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ β ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΡΡΡΡΠΊΡΡΡΡ ΡΠΈΠΏΠ° WINDOW, ΡΠ°ΠΊΠΎΠ΅ ΠΆΠ΅, ΠΊΠ°ΠΊ Ρ ΡΡΠ½ΠΊΡΠΈΠΈ newwin. Π£Π΄Π°Π»ΡΡΡΡΡ ΠΏΠ°Π½Π΅Π»ΠΈ, ΠΊΠ°ΠΊ ΠΈ ΠΎΠΊΠ½Π°, ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ delwin.
ΠΠΎ ΠΊ ΠΏΠ°Π½Π΅Π»ΡΠΌ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡΡΡ Π΄ΡΡΠ³ΠΈΠ΅ ΠΏΠΎΠ΄ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ. ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΏΠ°Π½Π΅Π»Ρ Π½Π΅ ΠΏΡΠΈΠ²ΡΠ·Π°Π½Π° ΠΊ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠΉ ΡΠΎΡΠΊΠ΅ ΡΠΊΡΠ°Π½Π°, Π²Ρ Π΄ΠΎΠ»ΠΆΠ½Ρ Π·Π°Π΄Π°ΡΡ ΠΎΠ±Π»Π°ΡΡΡ ΠΏΠ°Π½Π΅Π»ΠΈ, ΠΊΠΎΡΠΎΡΡΡ Ρ ΠΎΡΠΈΡΠ΅ ΠΏΠΎΠΌΠ΅ΡΡΠΈΡΡ Π½Π° ΡΠΊΡΠ°Π½, ΠΈ Π΅Π΅ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π° ΡΠΊΡΠ°Π½Π΅. ΠΠ΅Π»Π°ΠΉΡΠ΅ ΡΡΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ prefresh.
#include <Ρurses.h>
int prefresh(WINDOW *pad_ptr, int pad_row, int pad_column, int screen_row_min, int screen_col_min, int screen_row_max, int screen_ΡΠΎl_max);
Π€ΡΠ½ΠΊΡΠΈΡ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ Π·Π°ΠΏΠΈΡΡ ΠΎΠ±Π»Π°ΡΡΠΈ ΠΏΠ°Π½Π΅Π»ΠΈ, Π½Π°ΡΠΈΠ½Π°ΡΡΠ΅ΠΉΡΡ Π² ΡΠΎΡΠΊΠ΅ (pad_row, pad_column), Π² ΠΎΠ±Π»Π°ΡΡΡ ΡΠΊΡΠ°Π½Π°, ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΡ ΠΎΡ (screen_row_min, screen_col_min) Π΄ΠΎ (screen_row_max, screen_col_max).
ΠΡΡΡ ΠΈ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½Π°Ρ ΠΏΠΎΠ΄ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° pnoutrefresh. ΠΠ½Π° Π΄Π΅ΠΉΡΡΠ²ΡΠ΅Ρ ΡΠ°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΡΡΠ½ΠΊΡΠΈΡ wnoutrefresh, ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Ρ Π±ΠΎΠ»Π΅Π΅ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΠ΅ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΡΠΊΡΠ°Π½Π°.
ΠΠ°Π²Π°ΠΉΡΠ΅ ΠΏΡΠΎΠ²Π΅ΡΠΈΠΌ ΡΡΠΎ Π½Π° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ΅ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ pad.Ρ (ΡΠΏΡΠ°ΠΆΠ½Π΅Π½ΠΈΠ΅ 6.8).
Π£ΠΏΡΠ°ΠΆΠ½Π΅Π½ΠΈΠ΅ 6.8. ΠΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΏΠ°Π½Π΅Π»ΠΈ1. Π Π½Π°ΡΠ°Π»Π΅ ΡΡΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π²Ρ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅ΡΠ΅ ΡΡΡΡΠΊΡΡΡΡ ΠΏΠ°Π½Π΅Π»ΠΈ ΠΈ Π·Π°ΡΠ΅ΠΌ ΡΠΎΡΠΌΠΈΡΡΠ΅ΡΠ΅ ΠΏΠ°Π½Π΅Π»Ρ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΠ°Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° Π½Π΅Π΅. ΠΡΡΠ°Π²ΡΡΠ΅ ΡΠΈΠΌΠ²ΠΎΠ»Ρ, Π·Π°ΠΏΠΎΠ»Π½ΡΡΡΠΈΠ΅ ΡΡΡΡΠΊΡΡΡΡ ΠΏΠ°Π½Π΅Π»ΠΈ (ΠΏΠ°Π½Π΅Π»Ρ Π½Π° 50 ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² ΡΠΈΡΠ΅ ΠΈ Π²ΡΡΠ΅ ΡΠΊΡΠ°Π½Π° ΡΠ΅ΡΠΌΠΈΠ½Π°Π»Π°):
#include <unistd.h>
#include <stdlib.h>
#include <curses.h>
int main() {
WINDOW *pad_ptr;
int x, y;
int pad_lines;
int pad_cols;
char disp_char;
initscr();
pad_lines = LINES + 50;
pad_cols = COLS + 50;
pad_ptr = newpad(pad_lines, padcols);
disp_char = 'a';
for (x = 0; x < pad_lines; x++) {
for (Ρ = 0; Ρ < pad_cols; y++) {
mvwaddch(pad_ptr, x, y, disp_char);