/* * CIN_LoadLibrary */ void CIN_LoadLibrary( bool verbose ) { static cin_import_t import; dllfunc_t funcs[2]; void *( *GetCinematicsAPI )(void *); assert( !cin_libhandle ); import.Print = &CL_CinModule_Print; import.Error = &CL_CinModule_Error; import.Cvar_Get = &Cvar_Get; import.Cvar_Set = &Cvar_Set; import.Cvar_SetValue = &Cvar_SetValue; import.Cvar_ForceSet = &Cvar_ForceSet; import.Cvar_String = &Cvar_String; import.Cvar_Value = &Cvar_Value; import.Cmd_Argc = &Cmd_Argc; import.Cmd_Argv = &Cmd_Argv; import.Cmd_Args = &Cmd_Args; import.Cmd_AddCommand = &Cmd_AddCommand; import.Cmd_RemoveCommand = &Cmd_RemoveCommand; import.Cmd_ExecuteText = &Cbuf_ExecuteText; import.Cmd_Execute = &Cbuf_Execute; import.Cmd_SetCompletionFunc = &Cmd_SetCompletionFunc; import.FS_FOpenFile = &FS_FOpenFile; import.FS_Read = &FS_Read; import.FS_Write = &FS_Write; import.FS_Print = &FS_Print; import.FS_Tell = &FS_Tell; import.FS_Seek = &FS_Seek; import.FS_Eof = &FS_Eof; import.FS_Flush = &FS_Flush; import.FS_FCloseFile = &FS_FCloseFile; import.FS_RemoveFile = &FS_RemoveFile; import.FS_GetFileList = &FS_GetFileList; import.FS_IsUrl = &FS_IsUrl; import.Milliseconds = &Sys_Milliseconds; import.Microseconds = &Sys_Microseconds; import.Mem_AllocPool = &CL_CinModule_MemAllocPool; import.Mem_Alloc = &CL_CinModule_MemAlloc; import.Mem_Free = &CL_CinModule_MemFree; import.Mem_FreePool = &CL_CinModule_MemFreePool; import.Mem_EmptyPool = &CL_CinModule_MemEmptyPool; // load dynamic library cin_export = NULL; if( verbose ) { Com_Printf( "Loading CIN module... " ); } funcs[0].name = "GetCinematicsAPI"; funcs[0].funcPointer = ( void ** ) &GetCinematicsAPI; funcs[1].name = NULL; cin_libhandle = Com_LoadLibrary( LIB_DIRECTORY "/" LIB_PREFIX "cin_" ARCH LIB_SUFFIX, funcs ); if( cin_libhandle ) { // load succeeded int api_version; cin_export = GetCinematicsAPI( &import ); cin_mempool = Mem_AllocPool( NULL, "CIN Module" ); api_version = cin_export->API(); if( api_version == CIN_API_VERSION ) { if( cin_export->Init( verbose ) ) { if( verbose ) { Com_Printf( "Success.\n" ); } } else { // initialization failed Mem_FreePool( &cin_mempool ); if( verbose ) { Com_Printf( "Initialization failed.\n" ); } CIN_UnloadLibrary( verbose ); } } else { // wrong version Mem_FreePool( &cin_mempool ); Com_Printf( "CIN_LoadLibrary: wrong version: %i, not %i.\n", api_version, CIN_API_VERSION ); CIN_UnloadLibrary( verbose ); } } else { if( verbose ) { Com_Printf( "Not found.\n" ); } } Mem_DebugCheckSentinelsGlobal(); }
static void Irc_LoadLibrary( void ) { static irc_import_t import; dllfunc_t funcs[2]; GetIrcAPI_t GetIrcAPI_f; assert( !irc_libhandle ); import.Printf = Irc_Print; import.CL_GetKeyDest = CL_GetKeyDest; import.CL_GetClientState = CL_GetClientState; import.Key_DelegatePush = Key_DelegatePush; import.Key_DelegatePop = Key_DelegatePop; import.SCR_RegisterFont = SCR_RegisterFont; import.SCR_DrawString = SCR_DrawString; import.SCR_DrawStringWidth = SCR_DrawStringWidth; import.SCR_DrawRawChar = SCR_DrawRawChar; import.SCR_strHeight = SCR_FontHeight; import.SCR_strWidth = SCR_strWidth; import.SCR_StrlenForWidth = SCR_StrlenForWidth; import.SCR_GetScreenWidth = SCR_GetScreenWidth; import.SCR_GetScreenHeight = SCR_GetScreenHeight; import.R_RegisterPic = SCR_RegisterPic; import.R_DrawStretchPic = SCR_DrawStretchPic; import.Sys_Milliseconds = Sys_Milliseconds; import.Sys_Microseconds = Sys_Microseconds; import.Mem_AllocPool = Irc_MemAllocPool; import.Mem_Alloc = Irc_MemAlloc; import.Mem_Free = Irc_MemFree; import.Mem_FreePool = Irc_MemFreePool; import.Mem_EmptyPool = Irc_MemEmptyPool; import.Dynvar_Create = Dynvar_Create; import.Dynvar_Destroy = Dynvar_Destroy; import.Dynvar_Lookup = Dynvar_Lookup; import.Dynvar_GetName = Dynvar_GetName; import.Dynvar_GetValue = Dynvar_GetValue; import.Dynvar_SetValue = Dynvar_SetValue; import.Dynvar_CallListeners = Dynvar_CallListeners; import.Dynvar_AddListener = Dynvar_AddListener; import.Dynvar_RemoveListener = Dynvar_RemoveListener; import.DYNVAR_WRITEONLY = DYNVAR_WRITEONLY; import.DYNVAR_READONLY = DYNVAR_READONLY; import.Cvar_Get = Cvar_Get; import.Cvar_Set = Cvar_Set; import.Cvar_SetValue = Cvar_SetValue; import.Cvar_ForceSet = Cvar_ForceSet; import.Cvar_Integer = Cvar_Integer; import.Cvar_Value = Cvar_Value; import.Cvar_String = Cvar_String; import.Cmd_Argc = Cmd_Argc; import.Cmd_Argv = Cmd_Argv; import.Cmd_Args = Cmd_Args; import.Cmd_AddCommand = Cmd_AddCommand; import.Cmd_RemoveCommand = Cmd_RemoveCommand; import.Cmd_ExecuteString = Cmd_ExecuteString; import.Com_BeginRedirect = Com_BeginRedirect; import.Com_EndRedirect = Com_EndRedirect; import.Cmd_SetCompletionFunc = Cmd_SetCompletionFunc; import.Cbuf_AddText = Cbuf_AddText; import.Trie_Create = Trie_Create; import.Trie_Destroy = Trie_Destroy; import.Trie_Clear = Trie_Clear; import.Trie_GetSize = Trie_GetSize; import.Trie_Insert = Trie_Insert; import.Trie_Remove = Trie_Remove; import.Trie_Replace = Trie_Replace; import.Trie_Find = Trie_Find; import.Trie_FindIf = Trie_FindIf; import.Trie_NoOfMatches = Trie_NoOfMatches; import.Trie_NoOfMatchesIf = Trie_NoOfMatchesIf; import.Trie_Dump = Trie_Dump; import.Trie_DumpIf = Trie_DumpIf; import.Trie_FreeDump = Trie_FreeDump; // load dynamic library Com_Printf( "Loading IRC module... " ); funcs[0].name = "GetIrcAPI"; funcs[0].funcPointer = (void **) &GetIrcAPI_f; funcs[1].name = NULL; irc_libhandle = Com_LoadLibrary( LIB_DIRECTORY "/" LIB_PREFIX "irc_" ARCH LIB_SUFFIX, funcs ); if( irc_libhandle ) { // load succeeded int api_version; irc_export = GetIrcAPI_f( &import ); irc_pool = Mem_AllocPool( NULL, "IRC Module" ); api_version = irc_export->API(); if( api_version == IRC_API_VERSION ) { if( irc_export->Init() ) { dynvar_t *const quit = Dynvar_Lookup( "quit" ); if( quit ) Dynvar_AddListener( quit, Irc_Quit_f ); irc_initialized = true; Cmd_AddCommand( "irc_unload", Irc_UnloadLibrary ); Com_Printf( "Success.\n" ); } else { // initialization failed Mem_FreePool( &irc_pool ); Com_Printf( "Initialization failed.\n" ); Irc_UnloadLibrary(); } } else { // wrong version Mem_FreePool( &irc_pool ); Com_Printf( "Wrong version: %i, not %i.\n", api_version, IRC_API_VERSION ); Irc_UnloadLibrary(); } } else { Com_Printf( "Not found.\n" ); } Mem_DebugCheckSentinelsGlobal(); }
/* * CL_SoundModule_Init */ void CL_SoundModule_Init( bool verbose ) { static const char *sound_modules[] = { "qf", "openal" }; static const int num_sound_modules = sizeof( sound_modules )/sizeof( sound_modules[0] ); sound_import_t import; if( !s_module ) s_module = Cvar_Get( "s_module", "1", CVAR_ARCHIVE|CVAR_LATCH_SOUND ); if( !s_module_fallback ) s_module_fallback = Cvar_Get( "s_module_fallback", "2", CVAR_LATCH_SOUND ); // unload anything we have now CL_SoundModule_Shutdown( verbose ); if( verbose ) Com_Printf( "------- sound initialization -------\n" ); Cvar_GetLatchedVars( CVAR_LATCH_SOUND ); if( s_module->integer < 0 || s_module->integer > num_sound_modules ) { Com_Printf( "Invalid value for s_module (%i), reseting to default\n", s_module->integer ); Cvar_ForceSet( "s_module", s_module->dvalue ); } if( s_module_fallback->integer < 0 || s_module_fallback->integer > num_sound_modules ) { Com_Printf( "Invalid value for s_module_fallback (%i), reseting to default\n", s_module_fallback->integer ); Cvar_ForceSet( "s_module_fallback", s_module_fallback->dvalue ); } if( !s_module->integer ) { if( verbose ) { Com_Printf( "Not loading a sound module\n" ); Com_Printf( "------------------------------------\n" ); } return; } cl_soundmodulepool = Mem_AllocPool( NULL, "Client Sound Module" ); import.Error = CL_SoundModule_Error; import.Print = CL_SoundModule_Print; import.Cvar_Get = Cvar_Get; import.Cvar_Set = Cvar_Set; import.Cvar_SetValue = Cvar_SetValue; import.Cvar_ForceSet = Cvar_ForceSet; import.Cvar_String = Cvar_String; import.Cvar_Value = Cvar_Value; import.Cmd_Argc = Cmd_Argc; import.Cmd_Argv = Cmd_Argv; import.Cmd_Args = Cmd_Args; import.Cmd_AddCommand = Cmd_AddCommand; import.Cmd_RemoveCommand = Cmd_RemoveCommand; import.Cmd_ExecuteText = Cbuf_ExecuteText; import.Cmd_Execute = Cbuf_Execute; import.Cmd_SetCompletionFunc = Cmd_SetCompletionFunc; import.FS_FOpenFile = FS_FOpenFile; import.FS_Read = FS_Read; import.FS_Write = FS_Write; import.FS_Print = FS_Print; import.FS_Tell = FS_Tell; import.FS_Seek = FS_Seek; import.FS_Eof = FS_Eof; import.FS_Flush = FS_Flush; import.FS_FCloseFile = FS_FCloseFile; import.FS_RemoveFile = FS_RemoveFile; import.FS_GetFileList = FS_GetFileList; import.FS_IsUrl = FS_IsUrl; import.Sys_Milliseconds = Sys_Milliseconds; import.Sys_Sleep = Sys_Sleep; import.Sys_LoadLibrary = Com_LoadSysLibrary; import.Sys_UnloadLibrary = Com_UnloadLibrary; import.Mem_Alloc = CL_SoundModule_MemAlloc; import.Mem_Free = CL_SoundModule_MemFree; import.Mem_AllocPool = CL_SoundModule_MemAllocPool; import.Mem_FreePool = CL_SoundModule_MemFreePool; import.Mem_EmptyPool = CL_SoundModule_MemEmptyPool; import.GetEntitySpatilization = CL_GameModule_GetEntitySpatilization; import.Thread_Create = QThread_Create; import.Thread_Join = QThread_Join; import.Thread_Yield = QThread_Yield; import.Mutex_Create = QMutex_Create; import.Mutex_Destroy = QMutex_Destroy; import.Mutex_Lock = QMutex_Lock; import.Mutex_Unlock = QMutex_Unlock; import.BufPipe_Create = QBufPipe_Create; import.BufPipe_Destroy = QBufPipe_Destroy; import.BufPipe_Finish = QBufPipe_Finish; import.BufPipe_WriteCmd = QBufPipe_WriteCmd; import.BufPipe_ReadCmds = QBufPipe_ReadCmds; import.BufPipe_Wait = QBufPipe_Wait; if( !CL_SoundModule_Load( sound_modules[s_module->integer-1], &import, verbose ) ) { if( s_module->integer == s_module_fallback->integer || !CL_SoundModule_Load( sound_modules[s_module_fallback->integer-1], &import, verbose ) ) { if( verbose ) { Com_Printf( "Couldn't load a sound module\n" ); Com_Printf( "------------------------------------\n" ); } Mem_FreePool( &cl_soundmodulepool ); se = NULL; return; } Cvar_ForceSet( "s_module", va( "%i", s_module_fallback->integer ) ); } CL_SoundModule_SetAttenuationModel(); // check memory integrity Mem_DebugCheckSentinelsGlobal(); if( verbose ) Com_Printf( "------------------------------------\n" ); }