FIFO для булевых переменных в CDS 3.5

Сообщение от
B.S.V
А что еще надо? Истина - в очереди, лож - вылетаешь.
основное - что CDS.
Код:
FUNCTION_BLOCK ?? //обязательно FB...
VAR_INPUT
in1, ...., inXX: BOOL; //XX здесь и дальше - сами. Но и 254 можно запилить
END_VAR
VAR_OUTPUT
Out: BYTE; //номер того кто на выходе, 0 - никто
END_VAR
VAR
Pin: POINTER TO ARRAY[1..XX] OF BOOL; //.. потому что FB
P: POINTER TO BYTE;
Str1: STRING(1) := '*';
Очередь: STRING(XX);
Pos: INT;
END_VAR
-------------------------------------------
Pin := ADR(in1);
P := ADR(Str1);
FOR P^ := 1 TO XX DO
Pos := FIND(Очередь, Str1);
IF Pos <> 0 AND NOT Pin^[P^] THEN //был и лож - вылетаешь (жопу поднял - место потерял)
Str := DELETE(Очередь, 1, Pos);
ELSIF Pos = 0 AND Pin^[P^] THEN //не был, но Истина - в очереди(ь)
Str := CONCAT(Очередь, Str1); //но FIFO
END_IF
END_FOR
P := ADR(Очередь);
Out := P^;
всё