Популярные статьи
Реклама
Новости
|
11/5 Графический пользовательский интерфейс |
11/5 Графический адаптер |
|
11/5 Шрифты |
11/5 Растровые изображения |
| Второй подход |
|
Второй подход: драйвер обрабатывает все редактирование внутри строки, а пользовательской программе предоставляются уже скорректированные строки. Первый подход является символьно-ориентированным, а второй — строчно-ориентированным. Первоначально они назывались соответственно режимом без обработки и режимом с обработкой. Для описания строчно-ориентированного подхода в стандарте POSIX используется менее образный термин канонический режим. А термин неканонический режим является эквивалентом для режима без обработки, хотя многие особенности его поведения могут быть изменены. POSIX-совместимые системы предоставляют несколько библиотечных функций, поддерживающих выбор обоих режимов и изменение многих параметров. Если клавиатура находится в каноническом режиме (с обработкой), символы должны храниться до тех пор, пока не будет набрана вся строка, поскольку пользователь, приступив к набору, может впоследствии принять решение об удалении части строки. Даже если клавиатура находится в режиме без обработки, программа могла еще не запрашивать входные данные, поэтому символы должны храниться в буфере, позволяя пользователю осуществлять упреждающий ввод. Для этих целей должен использоваться либо специализированный буфер, либо буфер, выделенный из пула. В первом случае на упреждающий ввод накладывается определенный лимит, а во втором нет. Наиболее четко необходимость буфера проявляется, когда пользователь осуществляет ввод в окне оболочки (или в окне командной строки, если говорить о Windows) в то время, когда предыдущая команда (например, на компиляцию) еще не завершена. Последовательно набираемые символы должны скапливаться в буфере, поскольку оболочка еще не готова их прочитать. Системных программистов, не дающих возможности пользователям осуществлять предварительный ввод с клавиатуры, нужно вымазывать смолой и вываливать в перьях или, и того хуже, заставлять работать на их же собственных системах. Хотя логически клавиатура и монитор являются отдельными устройствами, многие пользователи привыкли к тому, чтобы набираемые ими символы появлялись на экране. Этот процесс называется отображением (echoing). Отображение усложняется тем, что программа может осуществлять вывод на экран другой информации как раз в то время, когда пользователь что-нибудь набирает с помощью клавиатуры (опять представьте, что вводите данные в окно оболочки). По крайней мере, драйвер клавиатуры должен определить, куда помещать новый ввод, чтобы на него не накладывался программный вывод. Отображение ввода усложняется и тем, что при вводе более 80 символов их надо отображать в 80-символьных строках (или в строках другой длины). В зависимости от приложения, в данном случае можно применить перенос на следующую строку Некоторые драйверы просто урезают строку до 80 символов, отбрасывая все символы после 80-й позиции. Другой проблемой является обработка символа табуляции. Обычно именно драйвер должен вычислять текущую позицию курсора, учитывая как вывод, осуществляемый программой, так и вывод в процессе отображения ввода, и вычислять точное количество отображаемых пробелов. |