Содержание · Меню · Диск

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

Параметры ввода-вывода Диалог ввода-вывода

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

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

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

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

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

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

%CONFIRM% | =1, если нажата кнопка Подтвердить, =0, если Отменить (выводится окно диалога и ожидается выбор пользователя)
%DISKNUM% | номер диска в RAID-массиве
%TRYNUM% | номер попытки ввода-вывода
%LBA% | первый сектор в операции ввода-вывода
%SECNUM% | число секторов
%ERROR% | номер ошибки
%ERROREX% | дополнительный код ошибки для режимов доступа IO SCSI, IO ATA
%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 7-DOSASPI 8-DOSMSCDEX 9-DOSFILE 11-WINFILE 12-WINSCSI 13-WIN9XINT13 14-WINATA 20-LINUXFILE 21-LINUXSCSI
%LASTRES% | результат предыдущей команды
%LASTERR% | ошибка предыдущей команды

#### Команды

SHOWDLG -- принудительно показать окно диалога ввода-вывода
WAIT -- ожидать выбор пользователя
DELAY N -- ожидать N мсек.
EXECCMD CMDLINE -- выполнить внешнюю команду CMDLINE используя командый процессор
(эквивалентно "cmd CMDLINE" в Windows)
EXECCMDQ CMDLINE -- выполнить без создания нового консольного окна
EXEC "FILENAME" CMDLINE -- вызвать внешнюю программу FILENAME с параметрамии CMDLINE
EXECQ "FILENAME" CMDLINE -- вызвать без создания нового консольного окна
MSDOS -- вызвать командный процессор (OS Windows, DOS)
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 -- заново открыть дескриптор диска
RESETDEVLIST -- обновить список устройств, заново открыть дескриптор диска 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