Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- Napisz program demonstrujący obsługę terminala w trybie niekanonicznym (Może to być np. program posiadający menu, które jest uaktywnione naciśnięciem klawisza, bez konieczności potwierdzania klawiszem Enter).
- */
- #include <stdio.h>
- #include <stdlib.h>
- #include <unistd.h>
- #include <termios.h>
- void restore_settings(struct termios default_settings)
- {
- if(tcsetattr(STDIN_FILENO, TCSANOW, &default_settings) == -1) {
- perror("tcsetattr restore_settings");
- exit(EXIT_FAILURE);
- }
- }
- void set_no_echo_mode(void)
- {
- struct termios attr;
- if(tcgetattr(STDIN_FILENO, &attr) == -1) {
- perror("tcgetattr set_no_echo_mode");
- exit(EXIT_FAILURE);
- }
- attr.c_lflag &= ~(ICANON | ECHO);
- attr.c_cc[VMIN] = 1;
- attr.c_cc[VTIME] = 0;
- if(tcsetattr(STDIN_FILENO, TCSANOW, &attr) == -1) {
- perror("tcsetattr set_no_echo_mode");
- exit(EXIT_FAILURE);
- }
- }
- void draw_menu(void)
- {
- char ch;
- printf("1. Pierwsza opcja\n2. Druga opcja\n3. Trzecia opcja\n");
- read(STDIN_FILENO, &ch, 1);
- switch(ch){
- case '1':
- printf("Wybrales pierwsza opcje!\n");
- break;
- case '2':
- printf("Wybrales druga opcje!\n");
- break;
- case '3':
- printf("Wybrales trzecia opcje!\n");
- break;
- default:
- printf("Niepoprawny wybor!\n");
- }
- }
- int main(void)
- {
- struct termios default_settings;
- if(!isatty(STDIN_FILENO)) {
- perror("isatty");
- return EXIT_FAILURE;
- }
- if(tcgetattr(STDIN_FILENO, &default_settings) == -1) {
- perror("tcgetattr main");
- return EXIT_FAILURE;
- }
- set_no_echo_mode();
- draw_menu();
- restore_settings(default_settings);
- return EXIT_SUCCESS;
- }
Add Comment
Please, Sign In to add comment