NAME
ModifyIDCMP -- Modify the state of a window's IDCMPFlags.
SYNOPSIS
[Success =] ModifyIDCMP( Window, IDCMPFlags )
[D0] A0 D0
[BOOL] ModifyIDCMP( struct Window *, ULONG );
/* returns BOOL in V37 and greater */
FUNCTION
This routine modifies the state of your window's IDCMP (Intuition
Direct Communication Message Port). The state is modified to reflect
your desires as described by the flag bits in the value IDCMPFlags.
The four actions that might be taken are:
- if there is currently no IDCMP in the given window, and IDCMPFlags
is zero, nothing happens
- if there is currently no IDCMP in the given window, and any of the
IDCMPFlags is selected (set), then the IDCMP of the window is
created, including allocating and initializing the message ports
and allocating a signal bit for your port. See the "Input and
Output Methods" chapter of the Intuition Reference Manual for full
details
- if the IDCMP for the given window exists, and the
IDCMPFlags argument is zero, this says that you want
Intuition to close the ports, free the buffers and free
your signal bit. You MUST be the same task that was active
when this signal bit was allocated (either by ModifyIDCMP()
or OpenWindow() ).
- if the IDCMP for the given window is opened, and the IDCMPFlags
argument is not zero, this means that you want to change the
state of which events will be broadcast to you through the IDCMP
NOTE: You can set up the Window->UserPort to any port of your own
before you call ModifyIDCMP(). If IDCMPFlags is non-null but
your UserPort is already initialized, Intuition will assume that
it's a valid port with task and signal data preset and Intuition
won't disturb your set-up at all, Intuition will just allocate
the Intuition message port half of it. The converse is true
as well: if UserPort is NULL when you call here with
IDCMPFlags == NULL, Intuition will deallocate only the Intuition
side of the port.
This allows you to use a port that you already have allocated:
- OpenWindow() with IDCMPFlags equal to NULL (open no ports)
- set the UserPort variable of your window to any valid port of your
own choosing
- call ModifyIDCMP with IDCMPFlags set to what you want
- then, to clean up later, set UserPort equal to NULL before calling
CloseWindow() (leave IDCMPFlags alone) BUT FIRST: you must make
sure that no messages sent your window are queued at the port,
since they will be returned to the memory free pool.
For an example of how to close a window with a shared IDCMP,
see the description for CloseWindow().
INPUTS
Window = pointer to the Window structure containing the IDCMP ports
IDCMPFlags = the flag bits describing the new desired state of the
IDCMP
RESULT
Starting in V37, this function returns NULL if it was unable
to create the necessary message ports. (The possibility of
failure exists in earlier releases, but no return code was offered).
Do not check the return code under V36 or earlier.
BUGS
SEE ALSO
OpenWindow(), CloseWindow()
[Back to Amiga Developer Docs]