3.2. Устройства ввода Устройства ввода можно рассматривать с двух точек зрения. Прежде всего, их можно анализировать как физические устройства, например клавиатуру или мышь, и рассматривать физические принципы работы. Конечно же, программист должен иметь определенное представление о том, как работают устройства, с которыми он сталкивается практически ежеминутно. Однако с точки зрения прикладного программирования нежелательно использовать в программе конкретные характеристики физического устройства определенного типа. Следует скорее рассматривать такое устройство как логическое, свойства которого можно специфицировать в терминах функций, которые оно выполняет в прикладной программе. Логическое устройство характеризуется интерфейсом достаточно высокого уровня с программой пользователя, а не физическими параметрами. Термин "логическое устройство" знаком всем программистам, работающим с языками высокого уровня. Например, в языке С ввод и вывод данных осуществляется с помощью функций printf (), scanf (), getchar() и putchar(), аргументами которых являются переменные стандартных типов языка. При выводе строки с помощью функции printf () в качестве физического устройства используется дисплей терминала, принтер или файл на диске. Выводимые данные могут быть использованы как входные для другой программы. Нюансы форматирования, характерные для конкретного устройства, при этом никак не заботят прикладного программиста.
В компьютерной графике работа с логическими устройствами ввода организуется несколько сложнее, поскольку формат входной информации может сильно отличаться от простой последовательности битов или символов, которой вполне достаточно для неграфических данных. Например, можно использовать мышь - физическое устройство - либо для указания позиции на экране ЭЛТ, либо для выбора определенного пункта меню. .В первом случае в прикладную программу возвращается пара значений (х, у) в некоторой системе координат, а во втором - программа получает целое число, которое однозначно идентифицирует выбранный пункт меню. Такое отделение физического устройства от логического позволяет программе использовать одно и то же физическое устройство совершенно по-разному. Кроме того, такая программа способна нормально работать без всякой коррекции даже в том случае, когда мышь заменена другим физическим устройством, например планшетом или трекболом.