diff options
Diffstat (limited to 'frontends/amiga/libs.c')
-rw-r--r-- | frontends/amiga/libs.c | 39 |
1 files changed, 24 insertions, 15 deletions
diff --git a/frontends/amiga/libs.c b/frontends/amiga/libs.c index 305818076..eb1f21617 100644 --- a/frontends/amiga/libs.c +++ b/frontends/amiga/libs.c @@ -1,5 +1,5 @@ /* - * Copyright 2014 Chris Young <chris@unsatisfactorysoftware.co.uk> + * Copyright 2014-2020 Chris Young <chris@unsatisfactorysoftware.co.uk> * * This file is part of NetSurf, http://www.netsurf-browser.org/ * @@ -59,6 +59,7 @@ #define AMINS_LIB_OPEN(LIB, LIBVER, PREFIX, INTERFACE, INTVER, FAIL) \ NSLOG(netsurf, INFO, "Opening %s v%d", LIB, LIBVER); \ if((PREFIX##Base = (struct PREFIX##Base *)OpenLibrary(LIB, LIBVER))) { \ + NSLOG(netsurf, INFO, " -> opened v%d.%d", ((struct Library *)PREFIX##Base)->lib_Version, ((struct Library *)PREFIX##Base)->lib_Revision); \ I##PREFIX = (struct PREFIX##IFace *)GetInterface((struct Library *)PREFIX##Base, INTERFACE, INTVER, NULL); \ if(I##PREFIX == NULL) { \ NSLOG(netsurf, INFO, "Failed to get %s interface v%d of %s", INTERFACE, INTVER, LIB); \ @@ -93,15 +94,17 @@ #define AMINS_CLASS_OPEN(CLASS, CLASSVER, PREFIX, CLASSGET, NEEDINTERFACE) \ NSLOG(netsurf, INFO, "Opening %s v%d", CLASS, CLASSVER); \ if((PREFIX##Base = OpenClass(CLASS, CLASSVER, &PREFIX##Class))) { \ + NSLOG(netsurf, INFO, " -> opened v%d.%d", ((struct Library *)PREFIX##Base)->lib_Version, ((struct Library *)PREFIX##Base)->lib_Revision); \ if(NEEDINTERFACE == true) { \ NSLOG(netsurf, INFO, " + interface"); \ I##PREFIX = (struct PREFIX##IFace *)GetInterface((struct Library *)PREFIX##Base, "main", 1, NULL); \ if(I##PREFIX == NULL) { \ - NSLOG(netsurf, INFO, "Failed to get main interface v1 of %s", CLASS); \ + NSLOG(netsurf, ERROR, "Failed to get main interface v1 of %s", CLASS); \ } \ } \ } \ if(PREFIX##Class == NULL) { \ + NSLOG(netsurf, INFO, "Failed to open %s v%d", CLASS, CLASSVER); \ STRPTR error = ASPrintf("Unable to open %s v%d (fatal error)", CLASS, CLASSVER); \ ami_misc_fatal_error(error); \ FreeVec(error); \ @@ -110,7 +113,9 @@ #define AMINS_CLASS_CLOSE(PREFIX) \ if(I##PREFIX) DropInterface((struct Interface *)I##PREFIX); \ - if(PREFIX##Base) CloseClass(PREFIX##Base); + if(PREFIX##Base) CloseClass(PREFIX##Base); \ + I##PREFIX = NULL; \ + PREFIX##Base = NULL; #define AMINS_CLASS_STRUCT(PREFIX) \ struct ClassLibrary *PREFIX##Base = NULL; \ @@ -121,6 +126,7 @@ #define AMINS_LIB_OPEN(LIB, LIBVER, PREFIX, INTERFACE, INTVER, FAIL) \ NSLOG(netsurf, INFO, "Opening %s v%d", LIB, LIBVER); \ if((PREFIX##Base = (struct PREFIX##Base *)OpenLibrary(LIB, LIBVER))) { \ + NSLOG(netsurf, INFO, " -> opened v%d.%d", ((struct Library *)PREFIX##Base)->lib_Version, ((struct Library *)PREFIX##Base)->lib_Revision); \ } else { \ NSLOG(netsurf, INFO, "Failed to open %s v%d", LIB, LIBVER); \ if(FAIL == true) { \ @@ -132,7 +138,8 @@ } #define AMINS_LIB_CLOSE(PREFIX) \ - if(PREFIX##Base) CloseLibrary((struct Library *)PREFIX##Base); + if(PREFIX##Base) CloseLibrary((struct Library *)PREFIX##Base); \ + PREFIX##Base = NULL; #define AMINS_LIB_STRUCT(PREFIX) \ struct PREFIX##Base *PREFIX##Base = NULL; @@ -140,9 +147,11 @@ #define AMINS_CLASS_OPEN(CLASS, CLASSVER, PREFIX, CLASSGET, NEEDINTERFACE) \ NSLOG(netsurf, INFO, "Opening %s v%d", CLASS, CLASSVER); \ if((PREFIX##Base = OpenLibrary(CLASS, CLASSVER))) { \ + NSLOG(netsurf, INFO, " -> opened v%d.%d", ((struct Library *)PREFIX##Base)->lib_Version, ((struct Library *)PREFIX##Base)->lib_Revision); \ PREFIX##Class = CLASSGET##_GetClass(); \ } \ if(PREFIX##Class == NULL) { \ + NSLOG(netsurf, INFO, "Failed to open %s v%d", CLASS, CLASSVER); \ STRPTR error = ASPrintf("Unable to open %s v%d (fatal error)", CLASS, CLASSVER); \ ami_misc_fatal_error(error); \ FreeVec(error); \ @@ -150,7 +159,8 @@ } #define AMINS_CLASS_CLOSE(PREFIX) \ - if(PREFIX##Base) CloseLibrary(PREFIX##Base); + if(PREFIX##Base) CloseLibrary(PREFIX##Base); \ + PREFIX##Base = NULL; #define AMINS_CLASS_STRUCT(PREFIX) \ struct Library *PREFIX##Base = NULL; \ @@ -179,6 +189,7 @@ AMINS_LIB_STRUCT(Locale); AMINS_LIB_STRUCT(P96); AMINS_LIB_STRUCT(Workbench); +AMINS_LIB_STRUCT(Codesets); AMINS_LIB_STRUCT(GuiGFX); AMINS_CLASS_STRUCT(ARexx); @@ -212,6 +223,7 @@ 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("dos.library", 37, DOS, "main", 1, true) #else /* Libraries we get automatically on OS4 but not OS3 */ AMINS_LIB_OPEN("utility.library", 37, Utility, "main", 1, true) @@ -220,7 +232,6 @@ bool ami_libs_open(void) AMINS_LIB_OPEN("asl.library", 37, Asl, "main", 1, true) AMINS_LIB_OPEN("datatypes.library", 39, DataTypes, "main", 1, true) AMINS_LIB_OPEN("diskfont.library", 40, Diskfont, "main", 1, true) - AMINS_LIB_OPEN("dos.library", 37, DOS, "main", 1, true) AMINS_LIB_OPEN("gadtools.library", 37, GadTools, "main", 1, true) AMINS_LIB_OPEN("graphics.library", 40, Graphics, "main", 1, true) AMINS_LIB_OPEN("icon.library", 44, Icon, "main", 1, true) @@ -238,7 +249,8 @@ bool ami_libs_open(void) AMINS_LIB_OPEN("Picasso96API.library", 0, P96, "main", 1, false) /* Non-OS provided libraries */ - AMINS_LIB_OPEN("guigfx.library", 9, GuiGFX, "main", 1, false) + AMINS_LIB_OPEN("codesets.library", 6, Codesets, "main", 1, false) + AMINS_LIB_OPEN("guigfx.library", 9, GuiGFX, "main", 1, false) /* NB: timer.device is opened in schedule.c (ultimately by the scheduler process). * The library base and interface are obtained there, rather than here, due to @@ -270,6 +282,7 @@ bool ami_libs_open(void) AMINS_CLASS_OPEN("gadgets/integer.gadget", 41, Integer, INTEGER, false) AMINS_CLASS_OPEN("images/label.image", 41, Label, LABEL, false) AMINS_CLASS_OPEN("gadgets/layout.gadget", 43, Layout, LAYOUT, true) + AMINS_CLASS_OPEN("gadgets/listbrowser.gadget", 41, ListBrowser, LISTBROWSER, true) AMINS_CLASS_OPEN("gadgets/radiobutton.gadget", 41, RadioButton, RADIOBUTTON, false) AMINS_CLASS_OPEN("gadgets/scroller.gadget", 42, Scroller, SCROLLER, false) AMINS_CLASS_OPEN("gadgets/space.gadget", 41, Space, SPACE, false) @@ -277,10 +290,7 @@ bool ami_libs_open(void) AMINS_CLASS_OPEN("gadgets/string.gadget", 41, String, STRING, false) AMINS_CLASS_OPEN("window.class", 42, Window, WINDOW, false) -#ifdef __amigaos4__ - /* BOOPSI classes only required on OS4 */ - AMINS_CLASS_OPEN("gadgets/listbrowser.gadget", 45, ListBrowser, LISTBROWSER, true) -#else +#ifndef __amigaos4__ /* BOOPSI classes only required prior to OS4 */ PageClass = PAGE_GetClass(); #endif @@ -307,23 +317,21 @@ void ami_libs_close(void) AMINS_CLASS_CLOSE(Integer) AMINS_CLASS_CLOSE(Label) AMINS_CLASS_CLOSE(Layout) + AMINS_CLASS_CLOSE(ListBrowser) AMINS_CLASS_CLOSE(RadioButton) AMINS_CLASS_CLOSE(Scroller) AMINS_CLASS_CLOSE(Space) AMINS_CLASS_CLOSE(SpeedBar) AMINS_CLASS_CLOSE(String) AMINS_CLASS_CLOSE(Window) -#ifdef __amigaos4__ - AMINS_CLASS_CLOSE(ListBrowser) -#endif /* Libraries */ + AMINS_LIB_CLOSE(Codesets) AMINS_LIB_CLOSE(GuiGFX) AMINS_LIB_CLOSE(Asl) AMINS_LIB_CLOSE(DataTypes) AMINS_LIB_CLOSE(Diskfont) - AMINS_LIB_CLOSE(DOS) AMINS_LIB_CLOSE(GadTools) AMINS_LIB_CLOSE(Graphics) AMINS_LIB_CLOSE(Icon) @@ -336,6 +344,7 @@ void ami_libs_close(void) AMINS_LIB_CLOSE(Workbench) #ifdef __amigaos4__ AMINS_LIB_CLOSE(Application) + AMINS_LIB_CLOSE(DOS) #else AMINS_LIB_CLOSE(Utility) #endif |