Syntax:
DISASSEMBLE <associated instruction>;This instruction is used to extract messages from an assemble list generated by an ASSEMBLE instruction.
<associated instruction> is executed. The fields of the message
are in the O_<fields>.
If the <associated instruction> executes
a SENDTO, the O_<fields> are passed to the message which is
extracted from the assemble list and it is sent to the indicated
node. If no sending is occured, the
O_<fields>, that may have
been changed, are passed to the message and this remains in the
assemble list. The representant message (see instruction ASSEMBLE, 6.1)
may be disposed before
or after the execution of the DISASSEMBLE instruction.
DISASSEMBLE may be used in nodes of G, D, E ,and of general type and in the RELEASE instruction of an R node.
Examples:
Travel (R) :: RELEASE
DISASSEMBLE SENDTO(Depot[Typ]); SENDTO(Parking);
STAY := Travel_Time(Weather);
After remaining in the IL of the node Travel for a time that
is a function of the variable Weather, the representants are
released and their assembled lists are disassembled.
Messages of the assembled list (transported items) are sent
to the different nodes Depot according the value of the field
Typ; the representant (transporter) is sent to the
node Parking. Bus_Stop Exit_Pas (E) ::
DISASSEMBLE
BEGIN By_Bus := TRUE; N_Arr := N + 1;
IF By_Air THEN SENDTO(Airport)
ELSE SENDTO(RailRoad)
END;
Messages (passengers) of the assembled list of the first
message (bus) are marked in the field By_Air to TRUE and a number
of arrival is put to each (N was initialized to 0). Those with
the field By_Air are sent to the node Airport, the others are sent
to Railroad. As the node is of E type, the original message is
destroyed (See example 13, GLIDER examples book).