The user can hook in the IO subsystem by installing functions that will be invoked when certain operations on IO spaces are being performed.
The functions in ios_open_hook are invoked once a new IO space
has been opened.
The functions in ios_close_pre_hook are invoked when an IO
space is about to be closed. Note that a close_pre hook can prevent
the closing operation to be performed by raising an exception.
The functions in ios_close_hook are invoked when an IO space
has been closed.
The functions in ios_set_hook are invoked when an IO space
becomes the current IO space.
All the hooks above get the id of an IO space as arguments:
type IOS_Hook_Fn = (int<32>)void
The different io* built-ins can be then used by the handlers in
order to fetch additional properties of the IO space. For example:
fun my_open_handler = (int<32> ios) void:
{
printf ("*** The IO space '%s' (%i32d) has been opened.\n",
iohandler (ios), ios);
}
type IOS_Hook_Close_Fn = (int<32>)void;