$POOL N=<Name> ; SEQ=<RandomP>;

The $POOL command ( together with the corresponding $ENDPOOL command ) are enclosing movements. It is a relative of the segmentation commands, as it has a set of movements and the control for selecting the next movement from the set, the SEQ= parameter controls the sequence as for the other segemntation commands.

The difference is, that $POOL doesn't get a screen area to let it's movements to run, it only stores them. The lines containing the POOL= parameter invoke the next movement from the pool:

POOL=<NameList>;

<NameList> == <Name> || <NameList> , <Name>

the names should be the names of pools - given by the N= parameter at the pool definition. Usually you will put here only one pool name, getting the movement from a single pool, but it is possible to get different parameters from diferent pools - for example, storing movements with the train definitions in one pool, and baclground definitions on another.

The advantage of this organization is, that you can invoke the next movement and train from the set in different environements - for a full-screen background picture, for a low background stripe, for single movements before the default background, or in scenes. More tracks in the scene can use the same set of movements. You can achieve a similar effect by defining the trains in a macro with a huge  selection, but this method has 2 advantages compared with the train macro:

As the pools are not part of an active segment ( $SECTION ), they cannot be defined inside a $SECTION, $GROUP, $SCENE or $LINE block.

If we take a closer look on the $POOL command and the invoking POOL= parameter, we will notice, that the mechanism only stores and retrieves parameter sets, it does not deal with the movements themselves. So, it is possible to use the $POOL / POOL= mechanism for retrieving other parameters - for example, background and foreground definitions.