Hi Charlie,
I don't know how I missed your question earlier. Must have been one of those days I skipped out.
What you are looking for is a variation on the "functional Global" called a "Action Engine". I use these to serve as a central clearing house of related I/O groups.
The Idea goes as follows. You take the functional global that comes with a read and write and add the functions you will be perfroming in your code. Functions are added by adding new cases. Common functions for FP would be Open, Close, Read, Write, etc. Insatead of the functional global just soring a value, it uses a connection ID that is stored in one of the Action engine's shift registers. The last read value can also be stored there so that a dozen threads monitoring a "stop" button I/O poi
nt don't cause alot of extra I/O. The last witten values saved in another shifter register is actually preferable to read from the FP output point due to latencies.
Ask away if you need more details.
Ben