ΠΠ° ΠΏΠ΅ΡΠ²ΡΠΉ Π²Π·Π³Π»ΡΠ΄ Π²Π»ΠΎΠΆΠ΅Π½Π½ΡΠ΅ ΠΎΠΊΠ½Π° ΠΊΠ°ΠΆΡΡΡΡ Π±Π΅ΡΠΏΠΎΠ»Π΅Π·Π½ΡΠΌ ΡΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠΎΠΌ. ΠΠΎΡΠ΅ΠΌΡ Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡ ΠΏΡΠΎΡΡΠΎ ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΎΠ΅ ΠΎΠΊΠ½ΠΎ? ΠΡΠ½ΠΎΠ²Π½Π°Ρ ΡΡΠ΅ΡΠ° ΠΈΡ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ β ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΡΠΎΡΡΠΎΠ³ΠΎ ΡΠΏΠΎΡΠΎΠ±Π° ΠΏΡΠΎΠΊΡΡΡΠΊΠΈ Π΄ΡΡΠ³ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π°. ΠΠΎΡΡΠ΅Π±Π½ΠΎΡΡΡ Π² ΠΏΡΠΎΠΊΡΡΡΠΊΠ΅ Π½Π΅Π±ΠΎΠ»ΡΡΠΎΠΉ ΠΎΠ±Π»Π°ΡΡΠΈ ΡΠΊΡΠ°Π½Π° ΡΠ΄ΠΈΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΠ°ΡΡΠΎ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ ΠΏΡΠΈ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ curses. Π‘ΠΎΠ·Π΄Π°Π² Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ ΠΈ ΠΏΡΠΎΠΊΡΡΡΠΈΠ²Π°Ρ Π΅Π³ΠΎ, Π²Ρ Π΄ΠΎΠ±ΡΠ΅ΡΠ΅ΡΡ ΠΆΠ΅Π»Π°Π΅ΠΌΠΎΠ³ΠΎ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ°.
ΠΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΠ΅ΠΠ΄Π½ΠΎ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅, Π½Π°ΠΊΠ»Π°Π΄ΡΠ²Π°Π΅ΠΌΠΎΠ΅ Π½Π° ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π²Π»ΠΎΠΆΠ΅Π½Π½ΡΡ ΠΎΠΊΠΎΠ½, Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ ΠΏΠ΅ΡΠ΅Π΄ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ΠΌ ΡΠΊΡΠ°Π½Π° Π²ΡΠ·Π²Π°ΡΡ Π² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ ΡΡΠ½ΠΊΡΠΈΡ touchwin Π΄Π»Ρ ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΎΠ³ΠΎ ΠΎΠΊΠ½Π°.
ΠΡΠΏΠΎΠ»Π½ΠΈΡΠ΅ ΡΠΏΡΠ°ΠΆΠ½Π΅Π½ΠΈΠ΅ 6.5.
Π£ΠΏΡΠ°ΠΆΠ½Π΅Π½ΠΈΠ΅ 6.5. ΠΠ»ΠΎΠΆΠ΅Π½Π½ΡΠ΅ ΠΎΠΊΠ½Π°Π’Π΅ΠΏΠ΅ΡΡ, ΠΊΠΎΠ³Π΄Π° Π²Ρ ΠΏΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΠ»ΠΈΡΡ Ρ Π½ΠΎΠ²ΡΠΌΠΈ ΡΡΠ½ΠΊΡΠΈΡΠΌΠΈ, ΡΡΠΎΡ ΠΊΠΎΡΠΎΡΠΊΠΈΠΉ ΠΏΡΠΈΠΌΠ΅Ρ ΠΏΠΎΠΊΠ°ΠΆΠ΅Ρ, ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ Π΄Π΅ΠΉΡΡΠ²ΡΡΡ ΠΈ ΡΠ΅ΠΌ ΠΎΡΠ»ΠΈΡΠ°ΡΡΡΡ ΠΎΡ ΡΡΠ½ΠΊΡΠΈΠΉ ΠΎΠΊΠ½Π°, ΠΏΡΠΈΠΌΠ΅Π½ΡΠ²ΡΠΈΡ ΡΡ ΡΠ°Π½Π΅Π΅.
1. ΠΠ°ΡΠ°Π»ΡΠ½Π°Ρ ΡΠ΅ΠΊΡΠΈΡ ΠΊΠΎΠ΄Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ subscl.c ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅Ρ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° Ρ Π½Π΅ΠΊΠΎΡΠΎΡΡΠΌ ΡΠ΅ΠΊΡΡΠΎΠΌ:
#include <unistd.h>
#include <stdlib.h>
#include <curses.h>
int main() {
WINDOW *sub_window_ptr;
int x_loop;
int y_loop;
int counter;
char a_letter = '1';
initscr();
for (y_loop = 0; y_loop < LINES - 1; y_loop++) {
for (x_loop = 0; x_loop < COLS - 1; x_loop++) {
mvwaddch(stdscr, y_loop, x_loop, a_letter);
a_letter++;
if (a_letter > '9') a_letter = '1';
}
}
2. Π’Π΅ΠΏΠ΅ΡΡ ΡΠΎΠ·Π΄Π°ΠΉΡΠ΅ Π½ΠΎΠ²ΠΎΠ΅ ΠΏΠΎΠ΄ΠΎΠΊΠ½ΠΎ Ρ ΠΏΡΠΎΠΊΡΡΡΠΊΠΎΠΉ. ΠΠ°ΠΊ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΠΎΠ²Π°Π»ΠΎΡΡ, Π²Π°ΠΌ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΏΠ΅ΡΠ΅Π΄ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ΠΌ ΡΠΊΡΠ°Π½Π° "ΠΊΠΎΡΠ½ΡΡΡΡΡ" ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΎΠ³ΠΎ ΠΎΠΊΠ½Π°:
ub_window_ptr = subwin(stdscr, 10, 20, 10, 10);
scrollok(sub_window_ptr, 1);
touchwin(stdscr);
refresh();
sleep(1);
3. Π‘ΠΎΡΡΠΈΡΠ΅ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π°, Π²ΡΠ²Π΅Π΄ΠΈΡΠ΅ Π² Π½Π΅ΠΌ ΡΠ΅ΠΊΡΡ ΠΈ ΠΎΠ±Π½ΠΎΠ²ΠΈΡΠ΅ Π΅Π³ΠΎ. ΠΡΠΎΠΊΡΡΡΠΊΠ° ΡΠ΅ΠΊΡΡΠ° ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅ΡΡΡ ΡΠΈΠΊΠ»ΠΎΠΌ:
werase(sub_window_ptr);
mvwprintw(sub_window_ptr, 2, 0, "%s", "This window will now scroll");
wrefresh(sub_window_ptr);
sleep(1);
for (counter = 1; counter < 10; counter++) {
wprintw(sub_window_ptr, "%s", "This text is both wrapping and \
scrolling.");
wrefresh(sub_window_ptr);
sleep(1);
}
4. ΠΠ°Π²Π΅ΡΡΠΈΠ² ΡΠΈΠΊΠ», ΡΠ΄Π°Π»ΠΈΡΠ΅ Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ ΠΈ ΠΎΠ±Π½ΠΎΠ²ΠΈΡΠ΅ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΡΠΊΡΠ°Π½:
delwin(sub_window_ptr);
touchwin(stdscr);
refresh();
sleep(1);
endwin();
exit(EXIT_SUCCESS);
}
Π ΠΊΠΎΠ½ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π²Ρ ΡΠ²ΠΈΠ΄ΠΈΡΠ΅ Π²ΡΠ²ΠΎΠ΄, ΠΏΠΎΠΊΠ°Π·Π°Π½Π½ΡΠΉ Π½Π° ΡΠΈΡ. 6.6.
Π ΠΈΡ. 6.6
ΠΠ°ΠΊ ΡΡΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ
ΠΠΎΡΠ»Π΅ ΠΏΡΠΈΡΠ²ΠΎΠ΅Π½ΠΈΡ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ sub_window_ptr ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ° Π²ΡΠ·ΠΎΠ²Π° subwin Π²Ρ Π²ΠΊΠ»ΡΡΠ°Π΅ΡΠ΅ ΠΏΡΠΎΠΊΡΡΡΠΊΡ Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π°. ΠΠ°ΠΆΠ΅ ΠΏΠΎΡΠ»Π΅ ΡΠ΄Π°Π»Π΅Π½ΠΈΡ Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° (strdcr) ΡΠ΅ΠΊΡΡ Π½Π° ΡΠΊΡΠ°Π½Π΅ Π½Π΅ ΠΌΠ΅Π½ΡΠ΅ΡΡΡ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ ΠΎΡΠΊΠΎΡΡΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π»ΠΎ ΡΠΈΠΌΠ²ΠΎΠ»ΡΠ½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ ΡΠΊΡΠ°Π½Π° strdcr.
ΠΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½Π°Ρ ΠΊΠ»Π°Π²ΠΈΠ°ΡΡΡΠ°
ΠΡ ΡΠΆΠ΅ ΠΏΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΠ»ΠΈΡΡ Ρ Π½Π΅ΠΊΠΎΡΠΎΡΡΠΌΠΈ ΡΡΠ΅Π΄ΡΡΠ²Π°ΠΌΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ curses Π΄Π»Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΊΠ»Π°Π²ΠΈΠ°ΡΡΡΠ½ΠΎΠ³ΠΎ Π²Π²ΠΎΠ΄Π°. Π£ ΠΌΠ½ΠΎΠ³ΠΈΡ ΠΊΠ»Π°Π²ΠΈΠ°ΡΡΡ, ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡΠΌ, Π΅ΡΡΡ ΠΊΠ»Π°Π²ΠΈΡΠΈ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΊΡΡΡΠΎΡΠΎΠΌ ΠΈ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΠ΅ ΠΊΠ»Π°Π²ΠΈΡΠΈ. ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, Ρ ΠΌΠ½ΠΎΠ³ΠΈΡ ΠΊΠ»Π°Π²ΠΈΠ°ΡΡΡ Π΅ΡΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½Π°Ρ ΠΊΠ»Π°Π²ΠΈΠ°ΡΡΡΠ° ΠΈ Π΄ΡΡΠ³ΠΈΠ΅ ΠΊΠ»Π°Π²ΠΈΡΠΈ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, <Insert> ΠΈ <Home>.
ΠΠ»Ρ Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Π° ΡΠ΅ΡΠΌΠΈΠ½Π°Π»ΠΎΠ² ΡΠ°ΡΡΠΈΡΡΠΎΠ²ΠΊΠ° ΡΡΠΈΡ ΠΊΠ»Π°Π²ΠΈΡ β ΡΠ΅ΡΡΠ΅Π·Π½Π°Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΎΠ½ΠΈ ΠΏΠΎΡΡΠ»Π°ΡΡ ΡΡΡΠΎΠΊΡ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ², Π½Π°ΡΠΈΠ½Π°ΡΡΡΡΡΡ Ρ escape-ΡΠΈΠΌΠ²ΠΎΠ»Π°. ΠΠ΅Π»ΠΎ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ Π² ΡΠΎΠΌ, ΡΡΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΡΡΡΠ΄Π½ΠΎ ΠΎΡΠ»ΠΈΡΠΈΡΡ ΠΎΠ΄ΠΈΠ½ΠΎΡΠ½ΠΎΠ΅ Π½Π°ΠΆΠ°ΡΠΈΠ΅ ΠΊΠ»Π°Π²ΠΈΡΠΈ <Esc> ΠΎΡ ΡΡΡΠΎΠΊΠΈ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ², ΠΏΠΎΡΠ²ΠΈΠ²ΡΠ΅ΠΉΡΡ Π² ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ Π½Π°ΠΆΠ°ΡΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠΉ ΠΊΠ»Π°Π²ΠΈΡΠΈ, ΠΎΠ½ΠΎ Π΅ΡΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΡΠΏΡΠ°Π²Π»ΡΡΡΡΡ Ρ ΡΠ΅ΡΠΌΠΈΠ½Π°Π»Π°ΠΌΠΈ ΡΠ°Π·Π½ΡΡ ΡΠΈΠΏΠΎΠ², ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡΠΈΠΌΠΈ ΡΠ°Π·Π½ΡΠ΅ ΡΠΏΡΠ°Π²Π»ΡΡΡΠΈΠ΅ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ Π΄Π»Ρ ΠΎΠ΄Π½ΠΈΡ ΠΈ ΡΠ΅Ρ ΠΆΠ΅ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈΡ ΠΊΠ»Π°Π²ΠΈΡ.
Π ΡΡΠ°ΡΡΡΡ, Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° curses ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠ»Π΅Π³Π°Π½ΡΠ½ΠΎΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π΄Π»Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΠΌΠΈ ΠΊΠ»Π°Π²ΠΈΡΠ°ΠΌΠΈ. ΠΠ±ΡΡΠ½ΠΎ Π² ΡΡΡΡΠΊΡΡΡΠ΅ terminfo Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠ΅ΡΠΌΠΈΠ½Π°Π»Π° Ρ ΡΠ°Π½ΠΈΡΡΡ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ, ΠΎΡΠΏΡΠ°Π²Π»ΡΠ΅ΠΌΠ°Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠΉ ΠΊΠ»Π°Π²ΠΈΡΠ΅ΠΉ, ΠΈ Π²ΠΎ Π²ΠΊΠ»ΡΡΠ΅Π½Π½ΠΎΠΌ Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΡΠ°ΠΉΠ»Π΅ curses.h Π΄Π»Ρ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈΡ ΠΊΠ»Π°Π²ΠΈΡ Π΅ΡΡΡ Π½Π°Π±ΠΎΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠΉ, Π½Π°ΡΠΈΠ½Π°ΡΡΠΈΡ ΡΡ Ρ ΠΏΡΠ΅ΡΠΈΠΊΡΠ° KEY_.
ΠΠΎΠ³Π΄Π° curses ΡΡΠ°ΡΡΡΠ΅Ρ, ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠ΅ΠΉ Π² Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΊΠ»Π°Π²ΠΈΡΠΈ ΠΎΡΠΊΠ»ΡΡΠ΅Π½ΠΎ, ΠΈ Π΅Π³ΠΎ ΡΠ»Π΅Π΄ΡΠ΅Ρ Π²ΠΊΠ»ΡΡΠΈΡΡ Π²ΡΠ·ΠΎΠ²ΠΎΠΌ ΡΡΠ½ΠΊΡΠΈΠΈ keypad. ΠΡΠ»ΠΈ Π²ΡΠ·ΠΎΠ² ΡΡΠΏΠ΅ΡΠ΅Π½, ΡΡΠ½ΠΊΡΠΈΡ Π²Π΅ΡΠ½Π΅Ρ OK, Π² ΠΏΡΠΎΡΠΈΠ²Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ERR.
#include <curses.h>
int keypad(WINDOW *window_ptr, bool keypad_on);
ΠΠΎΠ³Π΄Π° ΡΠ΅ΠΆΠΈΠΌ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ ΠΊΠ»Π°Π²ΠΈΠ°ΡΡΡΡ Π²ΠΊΠ»ΡΡΠ΅Π½ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π²ΡΠ·ΠΎΠ²Π° ΡΡΠ½ΠΊΡΠΈΠΈ keypad Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠΌ keypad_on, ΡΠ°Π²Π½ΡΠΌ true, Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° curses ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ Π½Π° ΡΠ΅Π±Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΡ ΠΊΠ»Π°Π²ΠΈΠ°ΡΡΡΠ½ΡΡ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠ΅ΠΉ, ΡΠ°ΠΊ ΡΡΠΎ ΡΡΠ΅Π½ΠΈΠ΅ Ρ ΠΊΠ»Π°Π²ΠΈΠ°ΡΡΡΡ ΠΌΠΎΠΆΠ΅Ρ Π²Π΅ΡΠ½ΡΡΡ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ Π½Π°ΠΆΠ°ΡΡΡ ΠΊΠ»Π°Π²ΠΈΡΡ, Π½ΠΎ ΠΈ ΠΎΠ΄Π½ΠΎ ΠΈΠ· ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠΉ Π²ΠΈΠ΄Π° KEY_ Π΄Π»Ρ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈΡ ΠΊΠ»Π°Π²ΠΈΡ.
ΠΡΠΌΠ΅ΡΡΡΠ΅ ΡΡΠΈ Π½Π΅Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΡΡ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ, Π½Π°Π»Π°Π³Π°Π΅ΠΌΡΡ ΠΏΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ ΡΠ΅ΠΆΠΈΠΌΠ° Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ ΠΊΠ»Π°Π²ΠΈΠ°ΡΡΡΡ.
β‘ Π Π°ΡΠΏΠΎΠ·Π½Π°Π²Π°Π½ΠΈΠ΅ escape-ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠ΅ΠΉ ΡΡΠ΅Π±ΡΠ΅Ρ ΡΠ°Π·Π½ΠΎΠ³ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ, ΠΈ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΡΠ΅ΡΠ΅Π²ΡΠ΅ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Ρ ΡΠ³ΡΡΠΏΠΏΠΈΡΡΡΡ ΡΠΈΠΌΠ²ΠΎΠ»Ρ Π² ΠΏΠ°ΠΊΠ΅ΡΡ (ΡΡΠΎ ΠΏΡΠΈΠ²Π΅Π΄Π΅Ρ ΠΊ Π½Π΅Π²Π΅ΡΠ½ΠΎΠΌΡ ΡΠ°ΡΠΏΠΎΠ·Π½Π°Π²Π°Π½ΠΈΡ escape-ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠ΅ΠΉ) ΠΈΠ»ΠΈ ΡΠ°Π·Π΄Π΅Π»ΡΡ ΠΈΡ (ΡΡΠΎ ΠΏΡΠΈΠ²Π΅Π΄Π΅Ρ ΠΊ ΡΠ°ΡΠΏΠΎΠ·Π½Π°Π²Π°Π½ΠΈΡ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠ΅ΠΉ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΡ ΠΊΠ»Π°Π²ΠΈΡ, ΠΊΠ°ΠΊ ΠΊΠ»Π°Π²ΠΈΡΠΈ <Esc> ΠΈ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΡ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ²). Π’Π°ΠΊΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΡΠ°ΡΠ΅ Π²ΡΠ΅Π³ΠΎ Π½Π°Π±Π»ΡΠ΄Π°Π΅ΡΡΡ Π² ΡΠ΅Π³ΠΈΠΎΠ½Π°Π»ΡΠ½ΡΡ ΡΠ΅ΡΡΡ (Wide-Area Network, WAN) ΠΈ Π΄ΡΡΠ³ΠΈΡ ΠΌΠ΅Π΄Π»Π΅Π½Π½ΡΡ Π»ΠΈΠ½ΠΈΡΡ ΡΠ²ΡΠ·ΠΈ. ΠΠ΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΡΠΉ Π²ΡΡ ΠΎΠ΄ β ΠΏΠΎΠΏΡΡΠ°ΡΡΡΡ Π·Π°ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°ΡΡ ΡΠ΅ΡΠΌΠΈΠ½Π°Π»Ρ ΡΠ°ΠΊ, ΡΡΠΎΠ±Ρ ΠΎΠ½ΠΈ ΠΎΡΠΏΡΠ°Π²Π»ΡΠ»ΠΈ Π΅Π΄ΠΈΠ½ΠΈΡΠ½ΡΠ΅ ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΡΠ΅ ΡΠΈΠΌΠ²ΠΎΠ»Ρ Π² ΠΎΡΠ²Π΅Ρ Π½Π° Π½Π°ΠΆΠ°ΡΠΈΠ΅ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠΉ ΠΊΠ»Π°Π²ΠΈΡΠΈ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΠΎΠΉ Π²Π°ΠΌΠΈ, Ρ ΠΎΡΡ ΡΡΠΎ ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΡ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠΏΡΠ°Π²Π»ΡΡΡΠΈΡ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ².
β‘ ΠΠ»Ρ ΡΠΎΠ³ΠΎ ΡΡΠΎΠ±Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° curses ΠΌΠΎΠ³Π»Π° ΠΎΡΠ»ΠΈΡΠΈΡΡ Π½Π°ΠΆΠ°ΡΠΈΠ΅ ΠΊΠ»Π°Π²ΠΈΡΠΈ <Esc> ΠΎΡ ΠΊΠ»Π°Π²ΠΈΠ°ΡΡΡΠ½ΠΎΠΉ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ, Π½Π°ΡΠΈΠ½Π°ΡΡΠ΅ΠΉΡΡ Ρ ΡΠΈΠΌΠ²ΠΎΠ»Π° Esc, Π΅ΠΉ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠ΅ Π² ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΊΠΎΡΠΎΡΠΊΠΎΠ³ΠΎ ΠΏΡΠΎΠΌΠ΅ΠΆΡΡΠΊΠ° Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ. ΠΠ½ΠΎΠ³Π΄Π° ΠΏΡΠΈ Π²ΠΊΠ»ΡΡΠ΅Π½Π½ΠΎΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ ΠΊΠ»Π°Π²ΠΈΠ°ΡΡΡΡ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΌΠ΅ΡΠΈΡΡ Π»Π΅Π³ΠΊΡΡ Π·Π°Π΄Π΅ΡΠΆΠΊΡ ΠΏΡΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ΅ ΠΊΠ»Π°Π²ΠΈΡΠΈ <Esc>.
β‘ ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° curses Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ Π½Π΅ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΡΠ΅ escape-ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ. ΠΡΠ»ΠΈ Ρ Π²Π°ΡΠ΅Π³ΠΎ ΡΠ΅ΡΠΌΠΈΠ½Π°Π»Π° Π΅ΡΡΡ Π΄Π²Π΅ ΡΠ°Π·Π½ΡΠ΅ ΠΊΠ»Π°Π²ΠΈΡΠΈ, ΠΎΡΠΏΡΠ°Π²Π»ΡΡΡΠΈΠ΅ ΠΎΠ΄Π½Ρ ΠΈ ΡΡ ΠΆΠ΅ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ, Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΠΏΡΠΎΡΡΠΎ Π½Π΅ Π±ΡΠ΄Π΅Ρ Π΅Π΅ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ ΡΠ΅ΡΠΈΡΡ, ΠΊΠ°ΠΊΡΡ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΡΡ ΠΊΠ»Π°Π²ΠΈΡΡ ΡΠ»Π΅Π΄ΡΠ΅Ρ Π²Π΅ΡΠ½ΡΡΡ.
ΠΡΠΏΠΎΠ»Π½ΠΈΡΠ΅ ΡΠΏΡΠ°ΠΆΠ½Π΅Π½ΠΈΠ΅ 6.6.
Π£ΠΏΡΠ°ΠΆΠ½Π΅Π½ΠΈΠ΅ 6.6. ΠΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ ΠΊΠ»Π°Π²ΠΈΠ°ΡΡΡΡΠΠ°Π»Π΅Π΅ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π° ΠΊΠΎΡΠΎΡΠΊΠ°Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° keypad.c, Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΡΡΡΠ°Ρ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΡΠ΅ΠΆΠΈΠΌΠ° Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ ΠΊΠ»Π°Π²ΠΈΠ°ΡΡΡΡ. ΠΠΎΡΠ»Π΅ Π·Π°ΠΏΡΡΠΊΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π½Π°ΠΆΠΌΠΈΡΠ΅ ΠΊΠ»Π°Π²ΠΈΡΡ <Esc> ΠΈ ΠΎΡΠΌΠ΅ΡΡΡΠ΅ Π½Π΅Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΡΡ Π·Π°Π΄Π΅ΡΠΆΠΊΡ, Π² ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΏΡΡΠ°Π΅ΡΡΡ ΠΏΠΎΠ½ΡΡΡ: Esc β ΡΡΠΎ Π½Π°ΡΠ°Π»ΠΎ ΡΠΏΡΠ°Π²Π»ΡΡΡΠ΅ΠΉ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ ΠΈΠ»ΠΈ ΠΏΡΠΎΡΡΠΎ Π½Π°ΠΆΠ°ΡΠΈΠ΅ ΠΎΠ΄Π½ΠΎΠΉ ΠΊΠ»Π°Π²ΠΈΡΠΈ,
1. ΠΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ curses, Π²ΠΊΠ»ΡΡΠΈΡΠ΅ ΡΠ΅ΠΆΠΈΠΌ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ ΠΊΠ»Π°Π²ΠΈΠ°ΡΡΡΡ:
#include <unistd.h>
#include <stdlib.h>
#include <curses.h>
#define LOCAL_ESCAPE_KEY 27
int main() {
int key;
initscr();
crmode();
keypad(stdscr, TRUE);
2. ΠΡΠΊΠ»ΡΡΠΈΡΠ΅ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ², ΡΡΠΎΠ±Ρ ΠΏΠΎΠΌΠ΅ΡΠ°ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ΅Π½ΠΈΡ ΠΊΡΡΡΠΎΡΠ° ΠΏΡΠΈ Π½Π°ΠΆΠ°ΡΠΈΠΈ ΠΊΠ»Π°Π²ΠΈΡ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΊΡΡΡΠΎΡΠΎΠΌ. ΠΠΊΡΠ°Π½ ΠΎΡΠΈΡΠ°Π΅ΡΡΡ, ΠΈ Π²ΡΠ²ΠΎΠ΄ΠΈΡΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ΅ΠΊΡΡ. ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΆΠ΄Π΅Ρ Π½Π°ΠΆΠ°ΡΠΈΡ ΠΊΠ»Π°Π²ΠΈΡΠΈ ΠΈ Π΄ΠΎ ΡΠ΅Ρ ΠΏΠΎΡ, ΠΏΠΎΠΊΠ° Π½Π΅ Π½Π°ΠΆΠ°ΡΠ° ΠΊΠ»Π°Π²ΠΈΡΠ° <Q> ΠΈΠ»ΠΈ Π½Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ»Π° ΠΎΡΠΈΠ±ΠΊΠ°. Π‘ΠΈΠΌΠ²ΠΎΠ» Π½Π°ΠΆΠ°ΡΠΎΠΉ ΠΊΠ»Π°Π²ΠΈΡΠΈ Π²ΡΠ²ΠΎΠ΄ΠΈΡΡΡ Π½Π° ΡΠΊΡΠ°Π½. ΠΡΠ»ΠΈ Π½Π°ΠΆΠ°ΡΡΠ΅ ΠΊΠ»Π°Π²ΠΈΡΠΈ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠ΅ΠΉ Π΄Π»Ρ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ ΠΊΠ»Π°Π²ΠΈΠ°ΡΡΡΡ ΡΠ΅ΡΠΌΠΈΠ½Π°Π»Π°, Π²ΠΌΠ΅ΡΡΠΎ ΡΠΈΠΌΠ²ΠΎΠ»Π° Π²ΡΠ²ΠΎΠ΄ΠΈΡΡΡ ΡΡΠ° ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ.
noecho();
clear();
mvprintw(5, 5, "Key pad demonstration. Press 'q' to quit");
move(7, 5);
refresh();
key = getch();
while (key != ERR && key i= 'q') {
move(7, 5);
clrtoeol();
if ((key >= 'A' && key <= 'Z') || (key >= 'a' && key <= 'z')) {
printw("Key was%c", (char)key);
} else {
switch(key) {
case LOCAL_ESCAPE_KEY:
printw("%s", "Escape key");
break;
case KEY_END:
printw("%s", "END key");
break;
case KEY_BEG:
printw("%s", "BEGINNING key");
break;
case KEY_RIGHT:
printw("%s", "RIGHT key");
break;
case KEY_LEFT:
printw("%s", "LEFT key");
break;
case KEY_UP:
printw("%s", "UP key");
break;
case KEY_DOWN:
printw("%s", "DOWN key");
break;
default:
printw("Unmatched β %d", key);
break;
} /* switch */
} /* else */
refresh();
key = getch();
} /* while */
endwin();
exit(EXIT_SUCCESS);
}
ΠΠ°ΠΊ ΡΡΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ
ΠΠΊΠ»ΡΡΠΈΠ² ΡΠ΅ΠΆΠΈΠΌ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ ΠΊΠ»Π°Π²ΠΈΠ°ΡΡΡΡ, Π²Ρ ΡΠ²ΠΈΠ΄ΠΈΡΠ΅, ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ°ΡΠΏΠΎΠ·Π½Π°ΡΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΠ΅ ΠΊΠ»Π°Π²ΠΈΡΠΈ Π½Π° Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ ΠΊΠ»Π°Π²ΠΈΠ°ΡΡΡΠ΅, Π³Π΅Π½Π΅ΡΠΈΡΡΡΡΠΈΠ΅ escape-ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ. ΠΡ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΡΡΠΌΠ΅Π΅ΡΠ΅ Π·Π°ΠΌΠ΅ΡΠΈΡΡ, ΡΡΠΎ ΡΠ°ΡΠΏΠΎΠ·Π½Π°Π²Π°Π½ΠΈΠ΅ ΠΊΠ»Π°Π²ΠΈΡΠΈ <Esc> Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅, ΡΠ΅ΠΌ Π΄ΡΡΠ³ΠΈΡ ΠΊΠ»Π°Π²ΠΈΡ.