2 Copyright © 2011, The AROS Development Team. All rights reserved.
11 #include <proto/dos.h>
12 #include <proto/intuition.h>
13 #include <proto/exec.h>
14 #include <proto/icon.h>
15 #include <proto/workbench.h>
16 #include <proto/arossupport.h>
18 #include "workbook_intern.h"
21 /* Allocate classes and run the main app */
22 static int WB_Main(struct WorkbookBase
*wb
)
26 wb
->wb_WBApp
= WBApp_MakeClass(wb
);
30 wb
->wb_WBWindow
= WBWindow_MakeClass(wb
);
34 wb
->wb_WBVirtual
= WBVirtual_MakeClass(wb
);
35 if (!wb
->wb_WBVirtual
)
38 wb
->wb_WBSet
= WBSet_MakeClass(wb
);
42 wb
->wb_WBIcon
= WBIcon_MakeClass(wb
);
46 wb
->wb_App
= NewObject(WBApp
, NULL
, TAG_END
);
48 DoMethod(wb
->wb_App
, WBAM_WORKBENCH
, 0);
49 DisposeObject(wb
->wb_App
);
55 FreeClass(wb
->wb_WBIcon
);
57 FreeClass(wb
->wb_WBSet
);
59 FreeClass(wb
->wb_WBVirtual
);
61 FreeClass(wb
->wb_WBWindow
);
63 FreeClass(wb
->wb_WBApp
);
71 /* This wrapper is needed, so that we can start
72 * workbench items from an Input handler
74 AROS_ENTRY(LONG
, wbOpener
,
75 AROS_UFHA(STRPTR
, argstr
, A0
),
76 AROS_UFHA(ULONG
, argsize
, D0
),
77 struct ExecBase
*, SysBase
)
81 APTR WorkbenchBase
= OpenLibrary("workbench.library", 0);
82 APTR DOSBase
= OpenLibrary("dos.library", 0);
84 if (WorkbenchBase
&& DOSBase
) {
85 /* 'argstr' is already an absolute path */
86 OpenWorkbenchObject(argstr
, TAG_END
);
89 CloseLibrary(DOSBase
);
90 CloseLibrary(WorkbenchBase
);
98 ULONG
WorkbookMain(void)
100 struct WorkbookBase
*wb
;
102 int rc
= RETURN_ERROR
;
106 wb
= AllocVec(sizeof(*wb
), MEMF_ANY
| MEMF_CLEAR
);
110 wb
->wb_DOSBase
= OpenLibrary("dos.library", 0);
111 if (wb
->wb_DOSBase
== NULL
)
114 DOSBase
= wb
->wb_DOSBase
;
116 wb
->wb_IntuitionBase
= OpenLibrary("intuition.library",0);
117 if (wb
->wb_IntuitionBase
== NULL
)
120 wb
->wb_UtilityBase
= OpenLibrary("utility.library",0);
121 if (wb
->wb_UtilityBase
== NULL
)
124 wb
->wb_GadToolsBase
= OpenLibrary("gadtools.library",0);
125 if (wb
->wb_GadToolsBase
== NULL
)
128 /* Version 44 or later for DrawIconStateA */
129 wb
->wb_IconBase
= OpenLibrary("icon.library",44);
130 if (wb
->wb_IconBase
== NULL
)
133 /* Version 44 or later for OpenWorkbenchObject */
134 wb
->wb_WorkbenchBase
= OpenLibrary("workbench.library",44);
135 if (wb
->wb_WorkbenchBase
== NULL
)
138 wb
->wb_GfxBase
= OpenLibrary("graphics.library",0);
139 if (wb
->wb_GfxBase
== NULL
)
142 wb
->wb_LayersBase
= OpenLibrary("layers.library", 0);
143 if (wb
->wb_LayersBase
== NULL
)
146 wb
->wb_OpenerSegList
= CreateSegList(wbOpener
);
147 if (wb
->wb_OpenerSegList
== BNULL
)
150 SetConsoleTask(NULL
);
153 UnLoadSeg(wb
->wb_OpenerSegList
);
157 if (wb
->wb_LayersBase
)
158 CloseLibrary(wb
->wb_LayersBase
);
161 CloseLibrary(wb
->wb_GfxBase
);
163 if (wb
->wb_WorkbenchBase
)
164 CloseLibrary(wb
->wb_WorkbenchBase
);
167 CloseLibrary(wb
->wb_IconBase
);
169 if (wb
->wb_GadToolsBase
)
170 CloseLibrary(wb
->wb_GadToolsBase
);
172 if (wb
->wb_IntuitionBase
)
173 CloseLibrary(wb
->wb_GadToolsBase
);
176 CloseLibrary(wb
->wb_DOSBase
);