Rules for Tools/Tracks
In order to have a variable number of Tracks, Bars&Pipes uses a linked list of Track
structures. With the variable `functions->tracklist' (see struct Functions), Bars&Pipe
points at the top of the Track list. Most of the fields within the Track structure are
used by the display routines, so they are of no interest. Rather than discuss the
entire structure, we'll discuss just the fields you can use:
Each Track structure has three Clips embedded within it. The first, `track->clip',
stores the sequence. The second, `track->cut', is used for cut and paste editing in
the sequence display. The third, `track->undo', is used as the Undo buffer in the
sequence display. `track->clip' also holds the name and notes strings for the Track.
The Track, with the variable `track->toollist', points to the list of Tools in the
PipeLine. Also in the Track structure is the Track's sequence Tool, `track->tool'.
Bars&Pipes inserts this Tool, which records and plays Events, in the list of Tools. If
you scan the Tool list, you will always find `track->tool' in the middle, between the
Tools on the input PipeLine and the Tools on the output PipeLine.
Two fields, `track->channelin' and `track->channelout' select the MIDI channels for
the input and output Tools.
Finally, `track->mode' holds flags that determine whether the Track is in Record or
Play, whether it is Mute, Through, or neither, and whether or not it is a RealTime
Track. See struct Track.