Syntax:
SCAN(<list name>, / <pointer> /) <associated instruction>;This instruction is used to examine lists of messages to point, modify and extract messages.
<list name>
is a name of an IL or EL. It may be of any node.
<pointer>
is a variable declared as POINTER.
When executed, it scans the list indicated. For each
scanned message the fields are passed to the
O_<fields>
and
the <associated instruction>
is executed.
Then the O_<fields>
are passed to the fields of the message.
The scanning may be suspended when a STOPSCAN instruction is
executed. Otherwise, it continues until the end of the list is
reached. If a <pointer>
is included, it will contain a point to
the last processed message. A system generated
pointer
points to the previous message in the list. This allows the user
to manage the pointed message.
If during the execution of the <associated instruction>
a SENDTO
instruction is executed the message in process is extracted and
sent to the place indicated by the SENDTO. The scanning continues.
This instruction can be used in nodes of any type.
Examples:
Heating (A) Process :: IT := 10; SCAN(EL_Line) BEGIN O_Temp := O_Temp + UNIF(1.2, 1.3); IF O_Temp > 15.5 THEN SENDTO(Process); END;When
Heating
is activated (each 10 units of time) the EL of a node
Line
is scanned. A quantity (random value between 1.2 and 1.3) is
added to the value of the field Temp
of the message. If one message
surpasses the value 15.3, it is extracted and sent to Process
.Depot (R) :: TakeHighest (A) Group :: H := 0; PHigh := NIL; SCAN(IL_Depot, Pt) IF O_Height > H THEN BEGIN PHigh := Pt; H := O_Height END; SCAN(EL_Group, Pg) IF O_X = 3 THEN STOPSCAN; IF PHigh <> NIL THEN EXTR(IL_Depot, PHigh) SENDTO(Pg, A, Group);When TakeHighest is activated, the message of the IL of Depot with highest value in the field Height is found and sent to the EL of Group and put after the first message with field X equal to 3.