Чтение онлайн

на главную - закладки

Жанры

Разработка приложений в среде 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];

Поделиться:
Популярные книги

Муж на сдачу

Зика Натаэль
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Муж на сдачу

Системный Нуб

Тактарин Ринат
1. Ловец душ
Фантастика:
боевая фантастика
рпг
5.00
рейтинг книги
Системный Нуб

Око василиска

Кас Маркус
2. Артефактор
Фантастика:
городское фэнтези
попаданцы
аниме
5.00
рейтинг книги
Око василиска

Царь Федор. Трилогия

Злотников Роман Валерьевич
Царь Федор
Фантастика:
альтернативная история
8.68
рейтинг книги
Царь Федор. Трилогия

Идеальный мир для Лекаря 5

Сапфир Олег
5. Лекарь
Фантастика:
фэнтези
юмористическая фантастика
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря 5

Я граф. Книга XII

Дрейк Сириус
12. Дорогой барон!
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Я граф. Книга XII

В теле пацана 6

Павлов Игорь Васильевич
6. Великое плато Вита
Фантастика:
фэнтези
попаданцы
5.00
рейтинг книги
В теле пацана 6

Идеальный мир для Лекаря 4

Сапфир Олег
4. Лекарь
Фантастика:
фэнтези
юмористическая фантастика
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря 4

Ты предал нашу семью

Рей Полина
2. Предатели
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Ты предал нашу семью

Огненный князь 6

Машуков Тимур
6. Багряный восход
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Огненный князь 6

Маверик

Астахов Евгений Евгеньевич
4. Сопряжение
Фантастика:
боевая фантастика
постапокалипсис
рпг
5.00
рейтинг книги
Маверик

Рядовой. Назад в СССР. Книга 1

Гаусс Максим
1. Второй шанс
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Рядовой. Назад в СССР. Книга 1

Имперец. Том 1 и Том 2

Романов Михаил Яковлевич
1. Имперец
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Имперец. Том 1 и Том 2

В ожидании осени 1977

Арх Максим
2. Регрессор в СССР
Фантастика:
альтернативная история
7.00
рейтинг книги
В ожидании осени 1977