манда похожа на обычную символьную команду INPUT, она все же име-
ет несколько заметных отличий :
* Отсутствует буфер данных и счетчик количества переданных
данных. При вызове этой команды требуемое количество байт
всегда равно 1 и если устройство готово предоставить байт
данных, он возвращается в поле "Считанный из устройства
байт" блока запроса.
* Нет ожидания. Если устройство не готово предоставить очеред-
- 6-42 -
Команда NONDESTRUCTIVE INPUT WITHOUT WAIT
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ЙННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН»
є є
є Команда NONDESTRUCTIVE INPUT WITHOUT WAIT (5) є
є є
є ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД ЪДДД¬ є
є +00 : 14 Длина ¦ ¦ Блок. драйверы є
є ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД АДДДЩ є
є +01 : Устройство ЪДДД¬ є
є ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД ¦ X ¦ Симв. драйверы є
є +02 : 05 Команда АДДДЩ є
є ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД є
є +03 : Статус є
є ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД ЧТЕНИЕ ЗАПИСЬ є
є Зарезервировано є
є ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД ЪДДД¬ ДДДДД ЪДДД¬ ДДДДє
є +13 : Считанный из устр-ва байт ¦ ¦ ¦ X ¦ є
є ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД АДДДЩ ДДДДД АДДДЩ ДДДДє
є є
ИНННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННј
ной символ, то драйвер должен установить бит BUSY в дополне-
ние к биту DONE в слове состояния и незамедлительно вернуть
управление.
* Чтение неразрушающее. Если устройство готово выдать байт
данных, то драйвер обязан не только возвратить этот байт, но
и сохранить его для чтения последующей командой INPUT. Если
вводимые данные помещаются драйвером в очередь (как в управ-
ляемых прерываниями драйверах), то возвращаемый этой коман-
дой байт должен остаться в очереди.
Эта команда предназначена для того, чтобы MS-DOS могла,
во-первых, определить наличие данных, не используя команду INPUT,
которая может привести к длительному ожиданию данных, и, во-вто-
Команды STATUS и FLUSH INPUT/OUTPUT
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ЙНННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН»
єКоманды STATUS и FLUSH INPUT/OUTPUT (6,7,10,11) є
є є
єДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД ЪДДД¬ є
є+00 : 13 Длина ¦ ¦ Блок. драйверы є
єДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД АДДДЩ є
є+01 : номер # Устройство ЪДДД¬ є
єДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД ¦ X ¦ Симв. драйверы є
є+02 : команда Команда АДДДЩ є
єДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД є
є+03 : Статус ЪДДДДДДДДДДДДДДДДДДДД¬ є
єДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД ¦ КОМАНДЫ : ¦ є
є Зарезервировано ¦ ¦ є
єДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД ¦ 6: INPUT STATUS ¦ є
є ¦ 7: INPUT FLUSH ¦ є
є ¦ 10: OUTPUT STATUS ¦ є
є ¦ 11: OUTPUT FLUSH ¦ є
є АДДДДДДДДДДДДДДДДДДДДЩ є
ИННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННј
- 6-43 -
рых, анализировать следующий символ в буфере без изъятия его от-
туда.
Команды I/O STATUS и I/O FLUSH (команды 6,10 и 7,11, соответс-
твенно) требуются только для символьных устройств и не использу-
ются блоковыми.
Команды INPUT STATUS и INPUT FLUSH имеют смысл только для тех
драйверов символьных устройств, которые поддерживают управляемые
прерываниями очереди вводимых данных, хотя эти команды могут вы-
зываться для любого символьного драйвера.Команда INPUT STATUS ис-
пользуется для индикации состояния очереди следующим образом:
* Если очередь есть, но она пуста, то драйвер должен устано-
вить биты DONE и BUSY в слове состояния и вернуть управле-
ние.
* Если в очереди есть символы, доступные для чтения, то драй-
вер должен установить бит DONE, сбросить бит BUSY и вернуть
управление.
* Если очередь не поддерживается, то драйвер должен установить
бит DONE, сбросить бит BUSY в слове состояния и вернуть уп-
равление. Это выглядит странным - уведомлять MS-DOS о нали-
чии символа, когда даже очереди нет.Объяснение заключается в
том, что после такого ответа MS-DOS выдаст команду INPUT для
считывания символа. Если же этого не сделать, то MS-DOS бу-
дет продолжать опрашивать статус ввода бесконечно, так как
из-за отсутствия очереди статус всегда будет одним и тем же.
Команда INPUT FLUSH применяется для уведомления драйвера о не-
обходимости удаления всех находящихся в данный момент во входной
очереди символов. После очистки очереди (если таковая имеется)
драйвер должен установить бит DONE и вернуть управление. При об-
работке этой команды не должно возникать никаких ошибок, по край-
ней мере MS-DOS предполагает, что эта команда всегда завершается
успешно.
Команда OUTPUT STATUS используется для проверки состояния вы-
ходной очереди или устройства. Если драйвер не поддерживает вы-
ходную очередь, то следует, по возможности, вернуть состояние са-
мого устройства. Состояние определяется битом BUSY ("занято")
слова состояния (состояние "занято" означает что вывод задержива-
ется). Установив состояние, драйвер должен установить бит DONE и
вернуть управление.
Команда OUTPUT FLUSH предназначена для указания драйверу необ-
ходимости удалить все находящиеся в выходной очереди символы (ес-
ли очередь поддерживается) и, если это возможно, немедленно прек-
ратить любые операции вывода. После выполнения этих действий
драйвер должен установить бит DONE в слове состояния драйвера и
вернуть управление MS-DOS.
Команды DEVICE OPEN и DEVICE CLOSE (команды 13 и 14) являются
необязательными командами, поддерживаемые MS-DOS версий 3.0 и вы-
ше, и используются только если драйвер имеет атрибут OCRM (бит 11
слова атрибутов драйвера равен 1). Однако Microsoft рекомендует
использовать эти команды во всех новых создаваемых драйверах.
- 6-44 -
Команды DEVICE OPEN/CLOSE и REMOVABLE MEDIA
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ЙНННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН»
є є
єКоманды DEVICE OPEN/CLOSE и REMOVABLE MEDIA (13,14,15) є
є є
єДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД ЪДДД¬ є
є+00 : 13 Длина ¦ X ¦ Блок. драйверы є
єДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД АДДДЩ є
є+01 : номер # Устройство ЪДДД¬ є
єДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД ¦ ¦ Симв. драйверы є
є+02 : команда Команда АДДДЩ є
єДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД є
є+03 : Статус ЪДДДДДДДДДДДДДДДДДДДД¬ є
єДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД ¦ КОМАНДЫ : ¦ є
є Зарезервировано ¦ ¦ є
єДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД ¦ 13 : DEVICE OPEN ¦ є
є ¦ 14 : DEVICE CLOSE ¦ є
є ¦ 15 : REMOVABLE ¦ є
є ¦ MEDIA CHECK ¦ є
є АДДДДДДДДДДДДДДДДДДДДЩ є
ИННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННј
Команда REMOVABLE MEDIA (15) является дополнительной командой
для блоковых драйверов в MS-DOS 3.0 и выше и используется только
при наличии у драйвера атрибута OCRM (бит 11 слова атрибутов). Эта
команда также рекомендуется к использованию фирмой Microsoft во
всех новых драйверах.
Условия, при которых происходит обращение к командам
DEVICEOPEN и DEVICECLOSE, описаны выше в подразделе "Слово атри-
бутов", подзаголовок "БИТ 11 : OCRM".
Для блоковых устройств со сменным носителем информации эти ко-
манды могут использоваться для отслеживания количества открытых
на устройстве файлов, позволяя, таким образом, обнаруживать ситу-
ацию недопустимой замены носителя (которая возникает при замене
диска, на котором еще имеются открытые файлы).
Для символьных устройств эти команды могут использоваться для
предотвращения одновременного доступа различных программ к одному
устройству (такому как принтер) или для обеспечения возможностей
перед и после обработки устройства (например, операций загрузки и
сброса принтера).
Команда REMOVABLEMEDIA может быть выдана прикладной програм-
мой, используя подфункцию "Проверка заменяемости носителя" функ-
ции IOCTL (подфункция 08H функции 44H). При вызове этой функции
прикладная программа должна задать номер интересующего ее диско-
вода. Получив команду REMOVABLEMEDIA, драйвер должен определить
имеет ли упомянутое устройство возможность замены носителя и вер-
нуть статус битом BUSY слова состояния драйвера. Если устройство
не поддерживает смены носителя, то драйвер должен установить бит
BUSY, в противном случае сбросить его.
Команда GENERIC IOCTL (19) является дополнительной командой,
поддерживаемой MS-DOS начиная с версии 3.20. Использование этой
команды разрешается установленным в 1 атрибутом GIOCTL (бит 6)
слова состояния.
- 6-45 -
Команда GENERIC IOCTL
~~~~~~~~~~~~~~~~~~~~~~~