Популярные статьи
Реклама
|
Новости
|
11/5 Графический пользовательский интерфейс |
11/5 Графический адаптер |
|
11/5 Шрифты |
11/5 Растровые изображения |
| Проблема эквивалентности устройств |
|
Проблема эквивалентности устройств. Логически в конце строки текста одним из них нужен код возврата каретки, чтобы переместить курсор обратно на первую позицию, и код перевода строки, чтобы перейти на новую строку. Требования к пользователям ставить оба этих кода в конце каждой строки вряд ли было бы встречено с восторгом. Поэтому драйвер устройства должен конвертировать все в формат, используемый операционной системой, независимо от того, что именно было введено. В UNIX код клавиши ENTER конвертируется для внутреннего запоминания в код перевода строки, а в Windows он конвертируется в код возврата каретки, за которым следует код перевода строки. Если стандартным является хранение кода перевода строки (как в соглашении UNIX), то коды возврата каретки (генерируемые при нажатии клавиши ENTER) должны быть превращены в коды перевода строки. Если внутренний формат предусматривает хранение обоих кодов (как в соглашении Windows), то драйвер должны сгенерировать код возврата строки при получении кода возврата каретки и код возврата каретки при получении кода перевода строки. Независимо от используемого внутреннего соглашения монитор для отображения ввода может потребовать и код перевода строки, и код возврата каретки, чтобы правильно осуществлять обновление экрана. На многопользовательских системах, например на больших универсальных машинах, у разных пользователей могут быть разные типы терминалов, подключенных к машине, и драйвер клавиатуры должен получать всевозможные комбинации кодов возврата каретки/перевода строки и преобразовывать их во внутренний стандарт системы, а также выстраивать их таким образом, чтобы отображение выполнялось правильно. Символ ERASE позволяет пользователю стереть только что введенный символ. Обычно для этого применяется клавиша удаления — backspace (CTRL+H). Он не добавляется в очередь символов, а удаляет вместо этого из нее предыдущий символ. Чтобы удалить предыдущий символ с экрана, он должен быть отображен в виде последовательности из трех символов, забоя, пробела и забоя. Если предыдущий символ был символом табуляции, его удаление зависит от того, как он был обработан при наборе. Если он немедленно был превращен в несколько пробелов, то для определения, насколько символов следует вернуться, нужна дополнительная информация. Если в очереди ввода сохранен сам символ табуляции, то он может быть удален, а вся строка может быть выведена на экран заново. В большинстве систем при забое будут всего лишь стираться символы в текущей строке. Забой не будет стирать возврат каретки и возвращать курсор на предыдущую строку. Если пользователь заметит ошибку при наборе в самом начале строки, то чаще всего удобнее удалить всю строку и начать ее набор заново. Символ KILL удаляет всю строку. Многие системы убирают стертую строку с экрана, но к отображению ввода на некоторых старых системах добавляется возврат каретки и перевод строки, поскольку некоторые пользователи предпочитают видеть прежний вариант строки. В конечном счете, способ отображения ввода символа KILL — это дело вкуса. Как и в случае с символом ERASE, уйти назад за пределы текущей строки не представляется возможным. При удалении блока символов драйвер может испытывать, а может и не испытывать затруднения с возвратом задействованных буферов в пул. |