Check for SYS/GL during library init. Reason is that
[AROS.git] / workbench / devs / diskimage / ra_gui / cxbroker.c
blobafce3c348470a0a9ed909a34ea26a60e0f562bea
1 /* Copyright 2007-2012 Fredrik Wikstrom. All rights reserved.
2 **
3 ** Redistribution and use in source and binary forms, with or without
4 ** modification, are permitted provided that the following conditions
5 ** are met:
6 **
7 ** 1. Redistributions of source code must retain the above copyright
8 ** notice, this list of conditions and the following disclaimer.
9 **
10 ** 2. Redistributions in binary form must reproduce the above copyright
11 ** notice, this list of conditions and the following disclaimer in the
12 ** documentation and/or other materials provided with the distribution.
14 ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
15 ** AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16 ** IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
17 ** ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
18 ** LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
19 ** CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
20 ** SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
21 ** INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
22 ** CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
23 ** ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
24 ** POSSIBILITY OF SUCH DAMAGE.
27 #include "diskimagegui.h"
28 #include <proto/exec.h>
29 #include <proto/utility.h>
30 #include <proto/commodities.h>
32 struct Library *CxBase;
33 struct MsgPort *BrokerPort;
34 CxObj *Broker;
36 BOOL RegisterCxBroker (void) {
37 struct NewBroker nb;
38 STRPTR popkey;
40 CxBase = OpenLibrary("commodities.library", MIN_OS_VERSION);
41 if (!CxBase) {
42 goto error;
45 BrokerPort = CreateMsgPort();
46 if (!BrokerPort) {
47 goto error;
50 ClearMem(&nb, sizeof(nb));
51 nb.nb_Version = NB_VERSION;
52 nb.nb_Name = PROGNAME;
53 nb.nb_Title = PROGNAME;
54 nb.nb_Descr = (STRPTR)GetString(&LocaleInfo, MSG_APPDESCRIPTION);
55 nb.nb_Unique = NBU_UNIQUE|NBU_NOTIFY;
56 nb.nb_Flags = COF_SHOW_HIDE;
57 nb.nb_Pri = TTInteger(Icon, "CX_PRIORITY", 0);
58 nb.nb_Port = BrokerPort;
60 Broker = CxBroker(&nb, NULL);
61 if (!Broker) {
62 goto error;
65 popkey = TTString(Icon, "CX_POPKEY", NULL);
66 if (popkey && TrimStr(popkey)[0]) {
67 CxObj *filter, *sender, *translate;
68 filter = CxFilter(popkey);
69 sender = CxSender(BrokerPort, EVT_POPKEY);
70 translate = CxTranslate(NULL);
71 AttachCxObj(Broker, filter);
72 AttachCxObj(filter, sender);
73 AttachCxObj(filter, translate);
74 if (!filter || !sender || !translate) {
75 goto error;
79 ActivateCxObj(Broker, TRUE);
81 return TRUE;
82 error:
83 UnregisterCxBroker();
84 return FALSE;
87 void UnregisterCxBroker (void) {
88 if (BrokerPort) {
89 struct Message *msg;
91 DeleteCxObjAll(Broker);
92 Broker = NULL;
94 while (msg = GetMsg(BrokerPort)) {
95 ReplyMsg(msg);
98 DeleteMsgPort(BrokerPort);
99 BrokerPort = NULL;
101 if (CxBase) {
102 CloseLibrary(CxBase);
103 CxBase = NULL;