summaryrefslogtreecommitdiff
path: root/amiga/libs.c
diff options
context:
space:
mode:
Diffstat (limited to 'amiga/libs.c')
-rw-r--r--amiga/libs.c94
1 files changed, 66 insertions, 28 deletions
diff --git a/amiga/libs.c b/amiga/libs.c
index cab02d265..9ac9589c3 100644
--- a/amiga/libs.c
+++ b/amiga/libs.c
@@ -16,6 +16,8 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
+#include "amiga/os3support.h"
+
#include "amiga/libs.h"
#include "amiga/misc.h"
#include "utils/utils.h"
@@ -24,6 +26,7 @@
#include <proto/exec.h>
#include <proto/utility.h>
+#ifdef __amigaos4__
#define AMINS_LIB_OPEN(LIB, LIBVER, PREFIX, INTERFACE, INTVER, FAIL) \
LOG(("Opening %s v%d", LIB, LIBVER)); \
if((PREFIX##Base = OpenLibrary(LIB, LIBVER))) { \
@@ -48,10 +51,35 @@
#define AMINS_LIB_STRUCT(PREFIX) \
struct Library *PREFIX##Base; \
struct PREFIX##IFace *I##PREFIX;
+#else
+#define AMINS_LIB_OPEN(LIB, LIBVER, PREFIX, INTERFACE, INTVER, FAIL) \
+ LOG(("Opening %s v%d", LIB, LIBVER)); \
+ if((PREFIX##Base = OpenLibrary(LIB, LIBVER))) { \
+ } else { \
+ LOG(("Failed to open %s v%d", LIB, LIBVER)); \
+ if(FAIL == true) { \
+ STRPTR error = ASPrintf("Unable to open %s v%d", LIB, LIBVER); \
+ ami_misc_fatal_error(error); \
+ FreeVec(error); \
+ return false; \
+ } \
+ }
+
+#define AMINS_LIB_CLOSE(PREFIX) \
+ if(PREFIX##Base) CloseLibrary(PREFIX##Base);
+
+#define AMINS_LIB_STRUCT(PREFIX) \
+ struct Library *PREFIX##Base;
+#endif
#define GraphicsBase GfxBase /* graphics.library is a bit weird */
+#ifdef __amigaos4__
AMINS_LIB_STRUCT(Application);
+AMINS_LIB_STRUCT(P96);
+#else
+struct UtilityBase *UtilityBase; /* AMINS_LIB_STRUCT(Utility) */
+#endif
AMINS_LIB_STRUCT(Asl);
AMINS_LIB_STRUCT(DataTypes);
AMINS_LIB_STRUCT(Diskfont);
@@ -63,7 +91,6 @@ AMINS_LIB_STRUCT(Intuition);
AMINS_LIB_STRUCT(Keymap);
AMINS_LIB_STRUCT(Layers);
AMINS_LIB_STRUCT(Locale);
-AMINS_LIB_STRUCT(P96);
AMINS_LIB_STRUCT(Workbench);
AMINS_LIB_STRUCT(ARexx);
@@ -90,19 +117,26 @@ AMINS_LIB_STRUCT(Window);
bool ami_libs_open(void)
{
+#ifdef __amigaos4__
+ /* Libraries only needed on OS4 */
AMINS_LIB_OPEN("application.library", 53, Application, "application", 2, false)
+ AMINS_LIB_OPEN("Picasso96API.library", 0, P96, "main", 1, true)
+#else
+ /* Libraries we get automatically on OS4 but not OS3 */
+ AMINS_LIB_OPEN("utility.library", 37, Utility, "main", 1, true)
+#endif
+ /* Standard libraries for both versions */
AMINS_LIB_OPEN("asl.library", 37, Asl, "main", 1, true)
AMINS_LIB_OPEN("datatypes.library", 37, DataTypes, "main", 1, true)
- AMINS_LIB_OPEN("diskfont.library", 50, Diskfont, "main", 1, true)
+ AMINS_LIB_OPEN("diskfont.library", 40, Diskfont, "main", 1, true)
AMINS_LIB_OPEN("gadtools.library", 37, GadTools, "main", 1, true)
- AMINS_LIB_OPEN("graphics.library", 50, Graphics, "main", 1, true)
- AMINS_LIB_OPEN("icon.library", 50, Icon, "main", 1, true)
+ AMINS_LIB_OPEN("graphics.library", 40, Graphics, "main", 1, true)
+ AMINS_LIB_OPEN("icon.library", 44, Icon, "main", 1, true)
AMINS_LIB_OPEN("iffparse.library", 37, IFFParse, "main", 1, true)
- AMINS_LIB_OPEN("intuition.library", 37, Intuition, "main", 1, true)
+ AMINS_LIB_OPEN("intuition.library", 40, Intuition, "main", 1, true)
AMINS_LIB_OPEN("keymap.library", 37, Keymap, "main", 1, true)
AMINS_LIB_OPEN("layers.library", 37, Layers, "main", 1, true)
AMINS_LIB_OPEN("locale.library", 37, Locale, "main", 1, true)
- AMINS_LIB_OPEN("Picasso96API.library", 0, P96, "main", 1, true)
AMINS_LIB_OPEN("workbench.library", 37, Workbench, "main", 1, true)
/* NB: timer.device is opened in schedule.c (ultimately by the scheduler process).
@@ -121,26 +155,26 @@ bool ami_libs_open(void)
* we may as well just open them normally for now.
*/
- AMINS_LIB_OPEN("classes/arexx.class", 50, ARexx, "main", 1, true)
- AMINS_LIB_OPEN("images/bevel.image", 50, Bevel, "main", 1, true)
- AMINS_LIB_OPEN("images/bitmap.image", 50, BitMap, "main", 1, true)
- AMINS_LIB_OPEN("gadgets/checkbox.gadget", 50, CheckBox, "main", 1, true)
- AMINS_LIB_OPEN("gadgets/chooser.gadget", 50, Chooser, "main", 1, true)
- AMINS_LIB_OPEN("gadgets/clicktab.gadget", 50, ClickTab, "main", 1, true)
- AMINS_LIB_OPEN("gadgets/fuelgauge.gadget", 50, FuelGauge, "main", 1, true)
- AMINS_LIB_OPEN("gadgets/getfile.gadget", 50, GetFile, "main", 1, true)
- AMINS_LIB_OPEN("gadgets/getfont.gadget", 50, GetFont, "main", 1, true)
- AMINS_LIB_OPEN("gadgets/getscreenmode.gadget", 50, GetScreenMode, "main", 1, true)
- AMINS_LIB_OPEN("gadgets/integer.gadget", 50, Integer, "main", 1, true)
- AMINS_LIB_OPEN("images/label.image", 50, Label, "main", 1, true)
- AMINS_LIB_OPEN("gadgets/layout.gadget", 50, Layout, "main", 1, true)
- AMINS_LIB_OPEN("gadgets/listbrowser.gadget", 50, ListBrowser, "main", 1, true)
- AMINS_LIB_OPEN("gadgets/radiobutton.gadget", 50, RadioButton, "main", 1, true)
- AMINS_LIB_OPEN("gadgets/scroller.gadget", 50, Scroller, "main", 1, true)
- AMINS_LIB_OPEN("gadgets/space.gadget", 50, Space, "main", 1, true)
- AMINS_LIB_OPEN("gadgets/speedbar.gadget", 50, SpeedBar, "main", 1, true)
- AMINS_LIB_OPEN("gadgets/string.gadget", 50, String, "main", 1, true)
- AMINS_LIB_OPEN("classes/window.class", 50, Window, "main", 1, true)
+ AMINS_LIB_OPEN("arexx.class", 44, ARexx, "main", 1, true)
+ AMINS_LIB_OPEN("images/bevel.image", 44, Bevel, "main", 1, true)
+ AMINS_LIB_OPEN("images/bitmap.image", 44, BitMap, "main", 1, true)
+ AMINS_LIB_OPEN("gadgets/checkbox.gadget", 44, CheckBox, "main", 1, true)
+ AMINS_LIB_OPEN("gadgets/chooser.gadget", 44, Chooser, "main", 1, true)
+ AMINS_LIB_OPEN("gadgets/clicktab.gadget", 44, ClickTab, "main", 1, true)
+ AMINS_LIB_OPEN("gadgets/fuelgauge.gadget", 44, FuelGauge, "main", 1, true)
+ AMINS_LIB_OPEN("gadgets/getfile.gadget", 44, GetFile, "main", 1, true)
+ AMINS_LIB_OPEN("gadgets/getfont.gadget", 44, GetFont, "main", 1, true)
+ AMINS_LIB_OPEN("gadgets/getscreenmode.gadget", 44, GetScreenMode, "main", 1, true)
+ AMINS_LIB_OPEN("gadgets/integer.gadget", 44, Integer, "main", 1, true)
+ AMINS_LIB_OPEN("images/label.image", 44, Label, "main", 1, true)
+ AMINS_LIB_OPEN("gadgets/layout.gadget", 44, Layout, "main", 1, true)
+ AMINS_LIB_OPEN("gadgets/listbrowser.gadget", 44, ListBrowser, "main", 1, true)
+ AMINS_LIB_OPEN("gadgets/radiobutton.gadget", 44, RadioButton, "main", 1, true)
+ AMINS_LIB_OPEN("gadgets/scroller.gadget", 44, Scroller, "main", 1, true)
+ AMINS_LIB_OPEN("gadgets/space.gadget", 44, Space, "main", 1, true)
+ AMINS_LIB_OPEN("gadgets/speedbar.gadget", 44, SpeedBar, "main", 1, true)
+ AMINS_LIB_OPEN("gadgets/string.gadget", 44, String, "main", 1, true)
+ AMINS_LIB_OPEN("window.class", 44, Window, "main", 1, true)
return true;
}
@@ -168,7 +202,6 @@ void ami_libs_close(void)
AMINS_LIB_CLOSE(String)
AMINS_LIB_CLOSE(Window)
- AMINS_LIB_CLOSE(Application)
AMINS_LIB_CLOSE(Asl)
AMINS_LIB_CLOSE(DataTypes)
AMINS_LIB_CLOSE(Diskfont)
@@ -180,7 +213,12 @@ void ami_libs_close(void)
AMINS_LIB_CLOSE(Keymap)
AMINS_LIB_CLOSE(Layers)
AMINS_LIB_CLOSE(Locale)
- AMINS_LIB_CLOSE(P96)
AMINS_LIB_CLOSE(Workbench)
+#ifdef __amigaos4__
+ AMINS_LIB_CLOSE(Application)
+ AMINS_LIB_CLOSE(P96)
+#else
+ AMINS_LIB_CLOSE(Utility)
+#endif
}