When a commodity opens its broker, it can ask commodities exchange not to
launch another broker with the same name (nb_name). the purpose of the
uniqueness feature is to prevent the user from starting duplicate
commodities. If a commodity asks, Commodities Exchange will not only
refuse to create a new, similarly named broker, but it will also notify
the original commodity if someone tries to do so.
A commodity tells Commodities Exchange not to allow duplicates by setting
certain bits in the nb_unique field of the newbroker structure it sends to
cxbroker():
NBU_UNIQUE bit 0
NBU_NOTIFY bit 1
Setting the NBU_UNIQUE bit prevents duplicate commodities. Setting the
NBU_NOTIFY bit tells Commodities Exchange to notify a commodity if an
attempt was made to launch a duplicate. Such a commodity will receive a
cxm_command cxmessage with an id of cxcmd_unique when someone tries to
duplicate it. Because the uniqueness feature uses the name a programmer
gives a commodity to differentiate it from other commodities, it is
possible for completely different commodities to share the same name,
preventing the two from coexisting. For this reason, a commodity should
not use a name that is likely to be in use by other commodities (like
"filter" or "hotkey"). Instead, use a name that matches the commodity
name.
When hotkey.c gets a cxcmd_unique cxmessage, it shuts itself down.
HotKey.c and all the windowless commodities that come with the Release 2
Workbench shut themselves down when they get a CXCMD_UNIQUE CxMessage.
Because the user will expect all windowless commodities to work this way,
all windowless commodities should follow this standard.
When the user tries to launch a duplicate of a system commodity that has a
window, the system commodity moves its window to the front of the display,
as if the user had clicked the "Show" gadget in the controller program's
window. A windowed commodity should mimic conventions set by existing
windowed system commodities, and move its window to the front of the
display.