void KprSoundSetup() { FskErr err = kFskErrNone; FskMediaPropertyValueRecord ambientAudio = {kFskMediaPropertyTypeInteger, {kFskAudioOutCategoryAmbient}}; #if FSK_EXTENSION_EMBED #else char* applicationPath = NULL; char* libraryPath = NULL; #if TARGET_OS_WIN32 char* libraryName = "mediareader.dll"; #else char* libraryName = "mediareader.so"; #endif FskLibrary library = NULL; #endif if (gSoundChannel) goto bail; #if FSK_EXTENSION_EMBED FskMediaReaderNewProc = FskMediaReaderNew; FskMediaReaderDisposeProc = FskMediaReaderDispose; FskMediaReaderExtractProc = FskMediaReaderExtract; FskMediaReaderGetPropertyProc = FskMediaReaderGetProperty; FskMediaReaderGetTrackProc = FskMediaReaderGetTrack; FskMediaReaderStartProc = FskMediaReaderStart; FskMediaReaderStopProc = FskMediaReaderStop; FskMediaReaderTrackGetPropertyProc = FskMediaReaderTrackGetProperty; #else applicationPath = FskGetApplicationPath(); bailIfNULL(applicationPath); bailIfError(FskMemPtrNewClear(FskStrLen(applicationPath) + FskStrLen(libraryName) + 1, &libraryPath)); FskStrCopy(libraryPath, applicationPath); FskStrCat(libraryPath, libraryName); bailIfError(FskLibraryLoad(&library, libraryPath)); bailIfError(FskLibraryGetSymbolAddress(library, "FskMediaReaderNew", &FskMediaReaderNewProc)); bailIfError(FskLibraryGetSymbolAddress(library, "FskMediaReaderDispose", &FskMediaReaderDisposeProc)); bailIfError(FskLibraryGetSymbolAddress(library, "FskMediaReaderExtract", &FskMediaReaderExtractProc)); bailIfError(FskLibraryGetSymbolAddress(library, "FskMediaReaderGetProperty", &FskMediaReaderGetPropertyProc)); bailIfError(FskLibraryGetSymbolAddress(library, "FskMediaReaderGetTrack", &FskMediaReaderGetTrackProc)); bailIfError(FskLibraryGetSymbolAddress(library, "FskMediaReaderStart", &FskMediaReaderStartProc)); bailIfError(FskLibraryGetSymbolAddress(library, "FskMediaReaderStop", &FskMediaReaderStopProc)); bailIfError(FskLibraryGetSymbolAddress(library, "FskMediaReaderTrackGetProperty", &FskMediaReaderTrackGetPropertyProc)); #endif bailIfError(FskSndChannelNew(&gSoundChannel, 0, kFskAudioFormatUndefined, 0)); FskTimeCallbackNew(&gSoundTimer); FskSndChannelSetProperty(gSoundChannel, kFskMediaPropertyAudioCategory, &ambientAudio); bail: #if FSK_EXTENSION_EMBED #else if (err) FskLibraryUnload(library); else FskMemPtrDispose(library); FskMemPtrDispose(libraryPath); FskMemPtrDispose(applicationPath); #endif return; }
void fxUnmapArchive(void* it) { txArchive* archive = it; if (archive) { if (archive->scripts) FskMemPtrDispose(archive->scripts); if (archive->symbols) FskMemPtrDispose(archive->symbols); if (archive->library) FskLibraryUnload(archive->library); FskFileDisposeMap(archive->map); FskMemPtrDispose(archive); } }
FskErr FskECMAScriptLoadLibrary(const char *name) { FskErr err = kFskErrBadData; FskLibraryLoadProc libLoad; char *extension = NULL, *symbolName = NULL, *dot, *slash, *fullPath = NULL, *temp = NULL; FskLibrary library = NULL; char* root = NULL; FskFileInfo itemInfo; FskDebugStr("FskECMAScriptLoadLibrary: %s", name); dot = FskStrRChr(name, '.'); slash = FskStrRChr(name, '/'); if ((NULL == dot) || (slash && (slash > dot))) { #if TARGET_OS_WIN32 extension = ".dll"; #elif TARGET_OS_MAC || TARGET_OS_LINUX extension = ".so"; #elif TARGET_OS_KPL extension = (char*)KplECMAScriptGetExtension(); #endif } if (extension) fullPath = FskStrDoCat(name, extension); else fullPath = FskStrDoCopy(name); if (kFskErrNone != FskFileGetFileInfo(fullPath, &itemInfo)) { #if TARGET_OS_ANDROID char *libDir; libDir = FskStrDoCat(gAndroidCallbacks->getStaticDataDirCB(), "../lib/lib"); temp = FskStrDoCat(libDir, fullPath); FskMemPtrDispose(libDir); #else root = FskGetApplicationPath(); temp = FskStrDoCat(root, fullPath); FskMemPtrDispose(root); #endif if (kFskErrNone != FskFileGetFileInfo(temp, &itemInfo)) { FskDebugStr(" - no file: %s", temp); goto bail; } FskMemPtrDispose(fullPath); fullPath = temp; temp = NULL; } err = FskLibraryLoad(&library, fullPath); FskDebugStr(" - try: %s -> %d", fullPath, err); if (err) goto bail; symbolName = FskStrDoCat(name, "_fskLoad"); if ((kFskErrNone == FskLibraryGetSymbolAddress(library, symbolName, &libLoad)) || (kFskErrNone == FskLibraryGetSymbolAddress(library, "fskLoad", &libLoad))) { err = (libLoad)(library); FskDebugStr(" - symbolName: %x -> %d", libLoad, err); if (err) goto bail; err = kFskErrNone; } bail: if (err) { FskLibraryUnload(library); } FskMemPtrDispose(symbolName); FskMemPtrDispose(fullPath); return err; }