X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=Kernel%2Fmodules.c;h=c0c021615a329b0aa09f148d96448e0cdd5d3d0e;hb=6f4c456fc47a9f470417cdf647473e21fdd848e7;hp=b2923f7ca55a53f51ea0dd3fd4ce3b120b9539c5;hpb=9d85201216cb35e1b1e051b1d7cdc38eaa5befa4;p=tpg%2Facess2.git diff --git a/Kernel/modules.c b/Kernel/modules.c index b2923f7c..c0c02161 100644 --- a/Kernel/modules.c +++ b/Kernel/modules.c @@ -13,12 +13,14 @@ int Module_int_Initialise(tModule *Module, const char *ArgString); void Modules_int_GetBuiltinArray(void); void Modules_LoadBuiltins(void); -void Modules_SetBuiltinParams(char *Name, char *ArgString); +void Modules_SetBuiltinParams(const char *Name, char *ArgString); + int Modules_InitialiseBuiltin(const char *Name); // int Module_RegisterLoader(tModuleLoader *Loader); // int Module_LoadMem(void *Buffer, Uint Length, char *ArgString); // int Module_LoadFile(char *Path, char *ArgString); int Module_int_ResolveDeps(tModule *Info); int Module_IsLoaded(const char *Name); +// int Module_EnsureLoaded(const char *Name); // === EXPORTS === EXPORT(Module_RegisterLoader); @@ -28,8 +30,8 @@ EXPORT(Module_RegisterLoader); extern int UDI_LoadDriver(void *Base); #endif extern void StartupPrint(const char *Str); -extern void gKernelModules; -extern void gKernelModulesEnd; +extern tModule gKernelModules; +extern tModule gKernelModulesEnd; // === GLOBALS === int giNumBuiltinModules = 0; @@ -142,7 +144,7 @@ int Module_int_Initialise(tModule *Module, const char *ArgString) // All Dependencies OK? Initialise StartupPrint(Module->Name); - Log_Log("Module", "Initialising %p '%s' v%i.%i...", + Log_Log("Module", "Starting %p '%s' v%i.%i", Module, Module->Name, Module->Version >> 8, Module->Version & 0xFF ); @@ -283,7 +285,7 @@ int Modules_InitialiseBuiltin(const char *Name) /** * \brief Sets the parameters for a builtin module */ -void Modules_SetBuiltinParams(char *Name, char *ArgString) +void Modules_SetBuiltinParams(const char *Name, char *ArgString) { int i; @@ -429,3 +431,19 @@ int Module_IsLoaded(const char *Name) // not found - return false return 0; } + +/** + * \brief Load a module if needed + */ +int Module_EnsureLoaded(const char *Name) +{ + if( Module_IsLoaded(Name) ) + return 0; + + if( Modules_InitialiseBuiltin(Name) == 0 ) + return 0; + + // TODO: Load from a file? + + return -1; +}