Этот алгоритм используется, если количество и характер данных, передаваемых контроллером в ответе, заранее не известны. Примером является Ш711/1, текст драйвера для которого приведен ниже.
При разборе ответа от контроллера по данному алгоритму МРВ выполняет следующие операции.
1. Проход по базе с ее начала и выбор каналов с тем же подтипом, дополнением к подтипу и двумя младшими байтами удаленного адреса (ia.i[0] == ia1.i[0]). Количество вызываемых каналов определяется значением параметра q_rec, возвращаемым Get_xxx.
2. Для каждого из найденных каналов вызывается функция zCompare_xxx. В ней надо проанализировать принадлежность выбранного канала к разбираемому блоковому запросу. Если данные для анализируемого канала в запросе не содержатся, то функция должна вернуть значение 0. В противном случае возвращаемая величина должна быть на 1 больше индекса элемента массива структур RSDATA, где размещено значение для записи в канал.
3. По каждому из каналов, значения которых формируются данным запросом, анализируется элемент p[ind].F.fmt[1] массива p структур RSDATA, где ind –уменьшенное на 1 значение, возвращенное по данному каналу функцией zCompare_xxx. Значение этого элемента определяет следующие действия:
0 – присвоить входу канала значение элемента p[ind].V.v массива структур RSDATA;
1 – сформировать для канала признак аппаратной недостоверности;
Выход из алгоритма осуществляется либо после прохода по всем каналам, либо при равенстве количества выбранных каналов значению q_rec.