Содержание · Работа · Меню · Диск · Параметры ввода-вывода Диалог ввода-вывода

### Скрипт обработки ввода-вывода

Скрипт может использоваться для журналирования ошибок ввода-вывода, а также для расширенной обработки ошибок (включая вызовы внешних программ). Функция доступна только в Professional Edition.

Скрипт можно загрузить или изменить через окно Параметров ввода-вывода (кнопка Скрипт).

Файл ondevhsc.txt содержит краткое описание доступных команд и некоторые примеры.

Допустимые строки команд имеют вид:
IF УСЛОВИЕ КОМАНДА
или
КОМАНДА
или
:МЕТКА
где УСЛОВИЕ задается равенством или неравенством (!=, >, <, >=, <=, =) двух величин,
величинам могут быть целые числа (0, 1, ...) или переменные (список ниже) или простые математические выражения (операторы +, -, *, %, /, без скобок, математический порядок операций игнорируется), например, %ERROR%=0
Комментарии предваряются двумя минусами (--)

#### Переменные

Целые, включая ноль

%CONFIRM% - =1, если нажата кнопка Подтвердить, =0, если Отменить
(выводится окно диалога и ожидается выбор пользователя)
-- %DISKNUM% - номер диска в RAID-массиве
-- %TRYNUM% - номер попытки ввода-вывода
-- %LBA% - первый сектор в операции ввода-вывода
-- %SECNUM% - число секторов
-- %ERROR% - номер ошибки
-- %ATASTATUS% - значение регистра ATA Status (если снят бит BSY, только DOS ATA)
-- %ATAERROR% - значение регистра ATA Error (если установлен бит ERR в %ATASTATUS%)
-- %LINE% - текущий номер строки в скрипте
-- %SERVICE% - тип ввода-вывода:
-- 0-ATA 1-ATAPI 3-BIOSINT13OLD 4-BIOSINT13
-- 5-DOSINT25 6-DOSINT73 8-DOSMSCDEX 9-DOSFILE
-- 11-WINFILE 12-WINSCSI 14-WIN9XINT13 20-LINUXFILE
-- %LASTRES% - результат предыдущей команды
-- %LASTERR% - ошибка предыдущей команды

#### Команды

-- SHOWDLG - принудительно показать окно диалога ввода-вывода
-- WAIT - ожидать выбор пользователя
-- DELAY N - ожидать N мсек.
-- EXECCMD CMDLINE - выполнить внешнюю команду CMDLINE используя командый процессор
(эквивалентно "cmd CMDLINE" в Windows)
-- EXECCMDQ CMDLINE - выполнить без создания нового консольного окна
-- EXEC "FILENAME" CMDLINE - вызвать внешнюю программу FILENAME с параметрамии CMDLINE
-- EXECQ "FILENAME" CMDLINE - вызвать без создания нового консольного окна
-- MSDOS - вызвать командный процессор (не поддерживается в Linux)
-- GOTO LABELNAME - перейти к метке LABELNAME в скрипте (к строке :LABELNAME)
-- RETURN - прервать выполнение скрипта, обработать ошибку согласно параметрам ввода-вывода
-- RETRETRY - прервать выполнение скрипта как при нажатии на кнопку Retry
-- RETIGNORE - прервать выполнение скрипта как при нажатии на кнопку Ignore
-- RETABORT - прервать выполнение скрипта как при нажатии на кнопку Abort
-- ADDLOG "FILENAME" LOGLINE - записать строку LOGLINE в файл FILENAME
(строка LOGLINE может содержать переменные)
-- CANCELIO - вызов CancelIO (только WinNT+)
(доступно, если устройство открыто с опцией overlapped)
-- OVLRESLT N - ожидать результат Overlapped-операции (N=1: ожидать; N=0: не ожидать) (только WinNT+)
(должно использоваться, если устройство открыто с опцией overlapped)
-- RESETHANDLE - заново открыть устройство (только WinNT+)
-- ATARESET - выполнить сброс ATA Soft Reset (только DOS ATA)
-- ATARESETDET - выполнить сброс ATA Soft reset и ATA Identify (только DOS ATA)

#### Спецификаторы формата

-- Для форматирования числа после имени переменной через двоеточие
-- может быть добавлен специфиактор by, например,
-- %LBA:8x% - ширина: 8, шестнадцатеричный вывод

#### Пример

IF %ERROR%=0 RETURN -- выйти, если нет ошибки
IF %ERROR%=128 GOTO LABEL1
IF %ERROR%=5 GOTO LABEL1
RETURN
:LABEL1
IF %CONFIRM%=0 RETRETRY -- повтор, если нажата кнопка Отмена
-- продолжить выполнение скрипта, если нажата кнопка Подтвердить
EXECCMD /K ECHO error %ERROR% at LBA: %LBA% (%SECNUM%) try: %TRYNUM%. Type EXIT to return.
IF %TRYNUM%<2 RETRETRY
DELAY 500
ADDLOG "C:\ERRORS.LOG" error %ERROR:x% at LBA: %LBA:10% (%SECNUM%) try: %TRYNUM%
RETIGNORE