|
|
|
|
Конфигурация с помощью команд управления вводом/выводом
MS-DOS обеспечивает выполнение команд конфигурации ("Получить
или Установить информацию устройства"), поддерживаемых
IOCTL-функцией. На рисунке 6-2 показано 16-битовое слово конфигурации, используемое функциями "Получить/Установить информацию устройства"
(коды 0 и 1). В текущих версиях MS-DOS могут быть определены только младшие 8 бит этого слова. Ниже описано назначение
тех битов слова конфигурации, которые имеют значение для драйверов устройств или влияют на способ обработки драйвером данных.
IOCTL БИТ 14: CTRL
Бит CTRL устанавливается в 1 если драйвер может обрабатывать
управляющие последовательности. Этот бит точно отражает состояние
IOCTL бита в слове атрибутов драйвера устройства. IOCTL-бит используется драйвером для оповещения MS-DOS о том, что драйвер будет принимать
управляющие последовательности. Этот бит применим как к файлам, так и к устройствам.
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
ЙНННСНННСНННСНННСНННСНННСНННСНННСНННСНННСНННСНННСНННСНННСНННСННН»
є R і C і і і і і і і I і E і B і S і I і I і I і I є
є E і T і і і і і і і S і O і I і P і S і S і S і S є
є S і R і R E S E R V E D і D і F і N і E і C і N і C і C є
є і L і і і і і і і E і і і C і L і U і O і I є
є і і і і і і і і V і і і L і K і L і T і N є
ИНННПНННПНННПНННПНННПНННПНННПНННПНННПНННПНННПНННПНННПНННПНННПНННј
ЗНАЧЕНИЯ БИТОВ УСТРОЙСТВО
CTRL =1 : Поддержка управляющего EOF =0 : Конец файла на входе
канала BIN =1 : Работа в двоичном
ISDEV=1 : Канал - это устройство режиме
=0 : Канал - это файл SPECL=1 : Специальное устрой-
ство
ISCLK=1 : Устройство "ЧАСЫ"
ФАЙЛ ISNUL=1 : Устройство NUL
После записи в канал биты с 0 по ISCOT=1 : Консоль вывода
5 - это номер блокового устр-ва ISCIN=1 : Консоль ввода
Рисунок 6-2. Слово конфигурации устройства.
|
IOCTL БИТ 7: ISDEV
Бит ISDEV равен 1 если канал (или описатель) открыт к устройству. Если канал открыт к файлу, то этот бит сбрасывается в 0.
IOCTL БИТ 5: BIN
Пятый бит конфигурации (BIN) определяет подготовленный или неподготовленный режим работы драйвера. Другими словами, этот бит
определяет будут ли данные проходить дополнительную обработку при
передаче или MS-DOS будет просто передавать "сырую" двоичную информацию между устройством и прикладной программой. Под дополнительной обработкой
подразумевается обработка определенных управляющих символов, расширение символов табуляции, проверка на нажатие клавиш CTRL-BREAK и т.п.
Более традиционными для этих функций являются термины "двоичный режим" и "ASCII режим", соответствующие неподготовленному и
подготовленному режимам. В руководстве программиста для MS-DOS
приводятся более детальные инструкции о том, как проверить и установить пятый бит. Мы, в свою очередь, обсудим влияние этого бита на работу
символьных драйверов. (Заметьте, что, как показано на рис.6-2, этот бит не используется для блоковых драйверов).
Если символьный драйвер находится в подготовленном режиме (по
умолчанию), данные передаются побайтно. Другими словами, одно обращение к драйверу приводит к передаче одного символа. Это происходит вне зависимости
от того, какое количество байт затребовано прикладной программой при обращении к MS-DOS. Например, если
прикладной программе требуется вывести 128 байт на символьное устройство, а драйвер работает в подготовленном режиме, то MS-DOS
сделает 128 обращений к драйверу с функцией "ВЫВОД" или "ВЫВОД С ПРОВЕРКОЙ", передавая за один вызов один байт.
Посимвольного ввода/вывода можно избежать, переведя драйвер в
неподготовленный режим. Последний может быть установлен только с
помощью IOCTL функции. В неподготовленном режиме количество передаваемых байт, заданное прикладной программой, используется также
при обращении к драйверу. Пользуясь тем же самым примером, если
прикладная программа требует вывода 128 байт на символьное устройство, и драйвер работает в неподготовленном режиме, то MS-DOS
сделает единственное обращение к драйверу с функцией "ВЫВОД" или "ВЫВОД С ПРОВЕРКОЙ", задавая количество передаваемых байт равным 128.
IOCTL БИТ 4: SPECL
Подобно биту CTRL, бит SPECL в слове конфигурации точно отражает состояние бита SPECL в слове атрибутов. Будучи установленным, этот бит означает,
что данный драйвер (который почти всегда является драйвером консоли) способен выполнять высокоскоростной
вывод в двоичном режиме, используя прерывание INT 29H.
Бит BIN, определяющий неподготовленный режим, также требует
разрешения высокоскоростного режима вывода, определяемого атрибутом SPECL. Если установлены как бит слова конфигурации BIN, так и
бит слова атрибутов SPECL, значит драйвер будет работать в режиме
высокоскоростного вывода. Этот режим и бит атрибутов SPECL обсуждаются более глубоко в разделе "Слове атрибутов заголовка драйвера".
|
|