Разработка приложений в среде Linux. Второе издание
Шрифт:
28: if (speednum >= 2400) return B2400;
29: if (speednum >= 1800) return B1800;
30: if (speednum >= 1200) return B1200;
31: if (speednum >= 600) return B600;
32: if (speednum >= 300) return B300;
33: if (speednum >= 200) return B200;
34: if (speednum >= 150) return B150;
35: if (speednum >= 134) return B134;
36: if (speednum >= 110) return B110;
37: if (speednum >= 75) return B75;
38: return B50;
39: }
40:
41: /*
Это нужно для области видимости в пределах файла, так что
42: * их можно будет использовать в обработчиках сигналов */
43: /* старые настройки порта termios для восстановления */
44: static struct termios pots;
45: /* старые настройки stdout/stdin termios для восстановления */
46: static struct termios sots;
47: /* файловый дескриптор порта */
48: int pf;
49:
50: /* восстановить первоначальные настройки терминала при выходе */
51: void cleanup_termios(int signal) {
52: tcsetattr(pf, TCSANOW, &pots);
53: tcsetattr(STDIN_FILENO, TCSANOW, &sots);
54: exit(0);
55: }
56:
57: /* обработать одиночный управляющий символ */
58: void send_escape(int fd, char c) {
59: switch (c) {
60: case 'q':
61: /* восстановить настройки termios и выйти */
62: cleanup_termios(0);
63: break;
64: case 'b':
65: /* послать символ разрыва*/
66: tcsendbreak(fd, 0);
67: break;
68: default:
69: /* пропустить символ */
70: /* "C-\ C-\" sends "C-\" */
71: write(fd, &c, 1);
72: break;
73: }
74: return;
75: }
76:
77: /* обработать управляющие символы, записывая их в вывод */
78: void cook_buf(int fd, char * buf, int num) {
79: int current = 0;
80: static int in_escape = 0;
81:
82: if (in_escape) {
83: /* cook_buf
последний раз вызывался с незавершенной
84: управляющей последовательностью */
85: send_escape(fd, buf[0]);
86: num--;
87: buf++;
88: in_escape = 0;
89: }
90: while (current < num) {
91: # define CTRLCHAR(c) ((c)-0x40)
92: while ((current < num) && (buf[current] != CTRLCHAR('W')))
93: current++;
94: if (current) write (fd, buf, current);
95: if (current < num) {
96: /* найден управляющий символ */
97: current++;
98: if (current >= num) {
99: /*интерпретировать первый символ следующей последовательности*/
100: in_escape = 1;
101: return;
102: }
103: send_escape(fd, buf[current]);
104: }
105: num -= current;
106: buf += current;
107: current = 0;
108: }
109: return;
110: }
111:
112: int main(int argc, const char * argv[]) {
113: char с; /* используется для разбора аргументов */
114: struct termios pts; /* настройки termios для порта */
115: struct termios sts; /* настройки termios для stdout/stdin */
116: const char *portname;
117: int speed = 0; /* используется при разборе аргументов для скорости */
118: struct sigaction sact; /* используется для инициализации обработчика сигналов */
119: struct pollfd ufds[2]; /* взаимодействие с poll */
120: int raw = 0; /* неформатированный режим? */
121: int flow = 0; /* тип управления потоком, если применяется*/
122: int crnl = 0; /* посылать ли символ возврата каретки с символом новой строки? */
123: int i = 0; /* используется в цикле мультиплексирования*/
124: int done = 0; 125: # define BUFSIZE 1024
126: char buf[BUFSIZE];
Поделиться:
Популярные книги
Идеальный мир для Лекаря 8
8. Лекарь
Фантастика:
юмористическое фэнтези
аниме
7.00
рейтинг книги
Последняя Арена 6
6. Последняя Арена
Фантастика:
рпг
постапокалипсис
5.00
рейтинг книги
По воле короля
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Душелов. Том 4
4. Внутренние демоны
Фантастика:
юмористическая фантастика
ранобэ
фэнтези
фантастика: прочее
хентай
эпическая фантастика
5.00
рейтинг книги
Темный Лекарь 2
2. Темный Лекарь
Фантастика:
фэнтези
аниме
5.00
рейтинг книги
Эволюция мага
2. Гибрид
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
(Не) моя ДНК
6. Сапфировые истории
Любовные романы:
современные любовные романы
эро литература
5.00
рейтинг книги
Протокол "Наследник"
1. Гибрид
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Измена. Наследник для дракона
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Неудержимый. Книга II
2. Неудержимый
Фантастика:
городское фэнтези
попаданцы
5.00
рейтинг книги
Камень. Книга 4
4. Камень
Фантастика:
боевая фантастика
7.77
рейтинг книги
Измена. Право на сына
4. Измены
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Инквизитор Тьмы 4
4. Инквизитор Тьмы
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Кротовский, сколько можно?
5. РОС: Изнанка Империи
Фантастика:
попаданцы
альтернативная история
5.00